@xopcai/xopc 0.0.424 → 0.0.426

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 (252) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{activity-store-AI081rxe.js → activity-store-D_DXNHba.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DupnTbL7.js → agent-avatar-dicebear-CjaQxFQt.js} +1 -1
  5. package/dist/gateway/static/root/assets/{agent-avatar-display-CmEj6Uqy.js → agent-avatar-display-6Z4m31Fz.js} +2 -2
  6. package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-IEV5yKuu.js → agent-defaults-settings-panel-Dne9A10p.js} +1 -1
  7. package/dist/gateway/static/root/assets/{agent-plugin-dialog-D_njOuFA.js → agent-plugin-dialog-BoHL-b1o.js} +1 -1
  8. package/dist/gateway/static/root/assets/{agents-B_yg9nA3.js → agents-CIiIlVBp.js} +3 -3
  9. package/dist/gateway/static/root/assets/{agents-admin-api-CUZUolwG.js → agents-admin-api-u5c3GREg.js} +1 -1
  10. package/dist/gateway/static/root/assets/{api-bpQ7yR10.js → api-C3Tp9MkF.js} +1 -1
  11. package/dist/gateway/static/root/assets/{api-CWWEVThO.js → api-CRT9ZyH0.js} +1 -1
  12. package/dist/gateway/static/root/assets/{app-management-settings-panel-C0_hxwgg.js → app-management-settings-panel-C8yc3yHG.js} +1 -1
  13. package/dist/gateway/static/root/assets/{appearance-settings-CLh-qnCC.js → appearance-settings-BELgtR3O.js} +1 -1
  14. package/dist/gateway/static/root/assets/{apps-page-Bjtm3Rgi.js → apps-page-vgS1CHDj.js} +1 -1
  15. package/dist/gateway/static/root/assets/{archive-plugin-dGnstkhB.js → archive-plugin-BCQnOkV8.js} +1 -1
  16. package/dist/gateway/static/root/assets/{automation-api-MB2xCoFF.js → automation-api-hRsGx-qe.js} +1 -1
  17. package/dist/gateway/static/root/assets/{automation-result-state-DJQflY78.js → automation-result-state-CMfVTv_i.js} +1 -1
  18. package/dist/gateway/static/root/assets/{automation-task-card-DXgBxVE2.js → automation-task-card-MnzgyTVA.js} +1 -1
  19. package/dist/gateway/static/root/assets/{automations-page-D3O7M2FH.js → automations-page-CdIPdwF0.js} +1 -1
  20. package/dist/gateway/static/root/assets/{automations-workspace-Dk3FVWoX.js → automations-workspace-C3xZLafX.js} +2 -2
  21. package/dist/gateway/static/root/assets/{binary-plugins-BrVJXmYf.js → binary-plugins-CIB5cbvQ.js} +1 -1
  22. package/dist/gateway/static/root/assets/{block-editor-Dok4sfT3.js → block-editor-BQtTLe6Q.js} +1 -1
  23. package/dist/gateway/static/root/assets/{browser-automation-inputs-PJbT3CxW.js → browser-automation-inputs-DeraGZ1y.js} +1 -1
  24. package/dist/gateway/static/root/assets/{browser-automations-page-kkpX1Q7K.js → browser-automations-page-SpPzRNqU.js} +1 -1
  25. package/dist/gateway/static/root/assets/{browser-control-api-Bg4wnkeA.js → browser-control-api-CbbPvhHR.js} +1 -1
  26. package/dist/gateway/static/root/assets/{browser-settings-page-BrgX_Yb2.js → browser-settings-page-BD1uF_Nb.js} +1 -1
  27. package/dist/gateway/static/root/assets/{capabilities-BMaJizw4.js → capabilities-BGE6hiUE.js} +1 -1
  28. package/dist/gateway/static/root/assets/{capabilities-Cs6Jt5Gl.js → capabilities-DLMuj21P.js} +1 -1
  29. package/dist/gateway/static/root/assets/{capabilities-page-D5hvAG6D.js → capabilities-page-Bda4mSdf.js} +2 -2
  30. package/dist/gateway/static/root/assets/{capabilities-settings-panel-BrEvm4IH.js → capabilities-settings-panel-B2B7no22.js} +2 -2
  31. package/dist/gateway/static/root/assets/{channels-1jQgGVc9.js → channels-NtsjZThx.js} +1 -1
  32. package/dist/gateway/static/root/assets/{chat-agents-api-BAOWaUJf.js → chat-agents-api-D8YS5amE.js} +1 -1
  33. package/dist/gateway/static/root/assets/{chat-chart-block-DeWrb9XR.js → chat-chart-block-DCzUECct.js} +1 -1
  34. package/dist/gateway/static/root/assets/chat-page-BnOCCAXG.js +72 -0
  35. package/dist/gateway/static/root/assets/{chat-terminal-dock-C544n0-R.js → chat-terminal-dock-Dl-OTkJI.js} +1 -1
  36. package/dist/gateway/static/root/assets/{command-palette-api-D9PXzY8b.js → command-palette-api-Dijix7V6.js} +1 -1
  37. package/dist/gateway/static/root/assets/{composer-payload-handoff-CYXfjpem.js → composer-payload-handoff-CQc-VTaL.js} +1 -1
  38. package/dist/gateway/static/root/assets/{computer-settings-page-DJmod8-w.js → computer-settings-page-B-lGMimW.js} +1 -1
  39. package/dist/gateway/static/root/assets/connected-providers-grid-CcXe9kz5.js +1 -0
  40. package/dist/gateway/static/root/assets/{connector-service-page-BqDbTOTp.js → connector-service-page-C8InhrMt.js} +1 -1
  41. package/dist/gateway/static/root/assets/{connectors-api-CwRuUnH4.js → connectors-api-DEJU8mgn.js} +1 -1
  42. package/dist/gateway/static/root/assets/{connectors-page-Mq9Bvoax.js → connectors-page-Ci0L2How.js} +1 -1
  43. package/dist/gateway/static/root/assets/{date-picker-DWaT0IC0.js → date-picker-kqic8j73.js} +1 -1
  44. package/dist/gateway/static/root/assets/{dependency-picker-DV9XAt6F.js → dependency-picker-cbC6-2Ya.js} +1 -1
  45. package/dist/gateway/static/root/assets/{desktop-pet-Dffq2NxL.js → desktop-pet-DFNehTtd.js} +1 -1
  46. package/dist/gateway/static/root/assets/{desktop-pet-narrative-CS8qJpNO.js → desktop-pet-narrative-ChwjpnsG.js} +1 -1
  47. package/dist/gateway/static/root/assets/{desktop-pet-settings-CrB1ICax.js → desktop-pet-settings-BDS7_tQ_.js} +1 -1
  48. package/dist/gateway/static/root/assets/{dev-view-store-liRgSkcT.js → dev-view-store-CeZZLOc6.js} +1 -1
  49. package/dist/gateway/static/root/assets/device-pairing-wizard-_3BJFWVQ.js +1 -0
  50. package/dist/gateway/static/root/assets/{directory-picker-path-field-EKqQLQrE.js → directory-picker-path-field-Di0h3ws4.js} +1 -1
  51. package/dist/gateway/static/root/assets/{discussion-annotation-sync-D-b1X6ro.js → discussion-annotation-sync-ClKEyXmN.js} +1 -1
  52. package/dist/gateway/static/root/assets/{extension-debug-page-wD97GeG0.js → extension-debug-page-DwB5KMGk.js} +1 -1
  53. package/dist/gateway/static/root/assets/{extension-iframe-host-B4Q1CjvW.js → extension-iframe-host-Cqg1K70e.js} +1 -1
  54. package/dist/gateway/static/root/assets/{extension-marketplace-api-ak1_K3u8.js → extension-marketplace-api-DRBszrCR.js} +1 -1
  55. package/dist/gateway/static/root/assets/{extension-page-DWFI4iIh.js → extension-page-DyrQtG82.js} +1 -1
  56. package/dist/gateway/static/root/assets/{extension-provider-BZwcaU5Y.js → extension-provider-C_uKqJxP.js} +1 -1
  57. package/dist/gateway/static/root/assets/{extension-settings-page-cn4KS42C.js → extension-settings-page-BAMQHzkX.js} +1 -1
  58. package/dist/gateway/static/root/assets/{file-preview-surface-c3gDD9sM.js → file-preview-surface-DfkXvFnc.js} +1 -1
  59. package/dist/gateway/static/root/assets/{gateway-config-swr-Dmt5JhZU.js → gateway-config-swr-BOCt_zOo.js} +1 -1
  60. package/dist/gateway/static/root/assets/{gateway-realtime-CJtDXQCt.js → gateway-realtime-BL_Cf0OQ.js} +1 -1
  61. package/dist/gateway/static/root/assets/gateway-realtime-store-BHBOPF_q.js +1 -0
  62. package/dist/gateway/static/root/assets/{gateway-restart-DInvvT5u.js → gateway-restart-CHf8qY7H.js} +1 -1
  63. package/dist/gateway/static/root/assets/{gateway-settings-BZXdv2FE.js → gateway-settings-uAboiElC.js} +1 -1
  64. package/dist/gateway/static/root/assets/{gateway-startup-retry-s2KcWekp.js → gateway-startup-retry-CvkJYurV.js} +1 -1
  65. package/dist/gateway/static/root/assets/{global-defaults-api-DtnmDd87.js → global-defaults-api-BWMbKu72.js} +1 -1
  66. package/dist/gateway/static/root/assets/{home-page-CAVjA5rO.js → home-page-D6pCBY1V.js} +2 -2
  67. package/dist/gateway/static/root/assets/{image-generation-api-RQQokgE9.js → image-generation-api-CQxZSTWA.js} +1 -1
  68. package/dist/gateway/static/root/assets/{imports-page-BP_4TubV.js → imports-page-C90644id.js} +1 -1
  69. package/dist/gateway/static/root/assets/index-Cc41XQid.css +1 -0
  70. package/dist/gateway/static/root/assets/index-CnOYR6jq.js +11 -0
  71. package/dist/gateway/static/root/assets/{install-connector-dialog-BNzNuXJ8.js → install-connector-dialog-BuNXON0P.js} +1 -1
  72. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DNRQFepg.js → keyboard-shortcuts-settings-CbeubKe1.js} +1 -1
  73. package/dist/gateway/static/root/assets/{local-app-workbench-page-CvY5XxbX.js → local-app-workbench-page-CP-BkbB6.js} +1 -1
  74. package/dist/gateway/static/root/assets/{local-apps-page-DfwEvd8G.js → local-apps-page-C6zFgwkr.js} +1 -1
  75. package/dist/gateway/static/root/assets/{local-session-drafts-CuDdIyxR.js → local-session-drafts-BJ1B1dQ7.js} +1 -1
  76. package/dist/gateway/static/root/assets/{locale-store-TQcz_Vjt.js → locale-store-Br7IfbXK.js} +1 -1
  77. package/dist/gateway/static/root/assets/{logs-page-eq49F1Rt.js → logs-page-CpVCvAWE.js} +1 -1
  78. package/dist/gateway/static/root/assets/{management-settings-BaYXDMOJ.js → management-settings-I-pXv4ML.js} +1 -1
  79. package/dist/gateway/static/root/assets/{markdown-view-D4nII6Zv.js → markdown-view-DrVAMlwc.js} +1 -1
  80. package/dist/gateway/static/root/assets/{media-plugins-MvlAY405.js → media-plugins-Ba6vUE4J.js} +1 -1
  81. package/dist/gateway/static/root/assets/messages-ByFlEbsu.js +3 -0
  82. package/dist/gateway/static/root/assets/{model-selector-nsoNHqif.js → model-selector-CXcxc30J.js} +1 -1
  83. package/dist/gateway/static/root/assets/{models-hub-cache-CFIazNIF.js → models-hub-cache-Bd-fYUrV.js} +1 -1
  84. package/dist/gateway/static/root/assets/{note-detail-panel-KPzbHiEW.js → note-detail-panel-CbpLXAVh.js} +3 -3
  85. package/dist/gateway/static/root/assets/note-image-lightbox-cLGiF8oU.js +1 -0
  86. package/dist/gateway/static/root/assets/{notes-api-HVxR5bRD.js → notes-api-CUlhTRv0.js} +1 -1
  87. package/dist/gateway/static/root/assets/{notes-page-yShJeR3i.js → notes-page-eoKX85K5.js} +1 -1
  88. package/dist/gateway/static/root/assets/{oauth-api-CfKjRVnb.js → oauth-api-DMMdeaNd.js} +1 -1
  89. package/dist/gateway/static/root/assets/{oauth-provider-connect-D4uqONWr.js → oauth-provider-connect-C8BXow79.js} +1 -1
  90. package/dist/gateway/static/root/assets/{page-context-capture-button-B98nlKTc.js → page-context-capture-button-CBFK41OS.js} +1 -1
  91. package/dist/gateway/static/root/assets/{page-context-draft-HcuK45iu.js → page-context-draft-LF33STHC.js} +1 -1
  92. package/dist/gateway/static/root/assets/page-header-store-Du44NIEJ.js +1 -0
  93. package/dist/gateway/static/root/assets/{personal-avatar-_d72UP_d.js → personal-avatar-D6CzIIfo.js} +1 -1
  94. package/dist/gateway/static/root/assets/{personal-page-B19h_3WQ.js → personal-page-CXR1Gy0x.js} +1 -1
  95. package/dist/gateway/static/root/assets/{personal-settings-panel-CfwtGyue.js → personal-settings-panel-DnYapLo7.js} +1 -1
  96. package/dist/gateway/static/root/assets/{phone-dependencies-card-D8bqsDk_.js → phone-dependencies-card-DBiKtzwz.js} +1 -1
  97. package/dist/gateway/static/root/assets/{phone-model-picker-CL_Zn6Xd.js → phone-model-picker-BmSxEr7M.js} +1 -1
  98. package/dist/gateway/static/root/assets/{phone-settings-page-C5Jia8eQ.js → phone-settings-page-vg65qilc.js} +1 -1
  99. package/dist/gateway/static/root/assets/{phone-workspace-store-FBfrfkYq.js → phone-workspace-store-SN7hfddU.js} +1 -1
  100. package/dist/gateway/static/root/assets/{plugin-details-dialog-gAq2KPzK.js → plugin-details-dialog-B3Hn2cbx.js} +1 -1
  101. package/dist/gateway/static/root/assets/{preference-select-fields-Ck8GAX_y.js → preference-select-fields-Cu_ZC9Up.js} +1 -1
  102. package/dist/gateway/static/root/assets/{product-automation-feedback-BJ9oTnNs.js → product-automation-feedback-Tn2dUJWM.js} +1 -1
  103. package/dist/gateway/static/root/assets/{product-open-page-Dw9hUdxP.js → product-open-page-Nf-Oqf1h.js} +1 -1
  104. package/dist/gateway/static/root/assets/{product-preview-content-C0iPzmSm.js → product-preview-content-D6NwUm3A.js} +1 -1
  105. package/dist/gateway/static/root/assets/{product-preview-modal-COFtHoh6.js → product-preview-modal-BfNcGgXA.js} +2 -2
  106. package/dist/gateway/static/root/assets/{project-detail-page-C5Amjah-.js → project-detail-page-Ch-ZMyTu.js} +1 -1
  107. package/dist/gateway/static/root/assets/{project-understanding-DpL9ADQU.js → project-understanding-B1BK7Ixi.js} +1 -1
  108. package/dist/gateway/static/root/assets/{projects-page-gGg9nM2t.js → projects-page-B7cetxao.js} +1 -1
  109. package/dist/gateway/static/root/assets/{providers-api-D6JJRlJb.js → providers-api-DOnNfkwQ.js} +1 -1
  110. package/dist/gateway/static/root/assets/{recording-upload-DxX1xKyt.js → recording-upload-RAhaLUcQ.js} +1 -1
  111. package/dist/gateway/static/root/assets/{registry-api-BfXzBR1D.js → registry-api-DFDvOTg4.js} +1 -1
  112. package/dist/gateway/static/root/assets/{remote-access-hub-BZA4StwC.js → remote-access-hub-DWsOWetc.js} +1 -1
  113. package/dist/gateway/static/root/assets/{resource-unavailable-X-SIrZYI.js → resource-unavailable-TQcRCpAg.js} +1 -1
  114. package/dist/gateway/static/root/assets/{route-preload-CWRb0UCt.js → route-preload-Zc5Z3fNv.js} +2 -2
  115. package/dist/gateway/static/root/assets/{runtime-tools-api-1DjsPyQ5.js → runtime-tools-api-9o3Wfji1.js} +1 -1
  116. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BnCtyORj.js → runtime-tools-settings-panel-BGiXeHF5.js} +1 -1
  117. package/dist/gateway/static/root/assets/{service-recommendation-list-ChSOfHHh.js → service-recommendation-list-BEnNx0u7.js} +1 -1
  118. package/dist/gateway/static/root/assets/{session-api-rvY5aWw8.js → session-api-Bs3r_d2_.js} +1 -1
  119. package/dist/gateway/static/root/assets/session-manager-ChUtTAoG.js +23 -0
  120. package/dist/gateway/static/root/assets/{sessions-page-DAS2IUGT.js → sessions-page-Bt52kBvJ.js} +1 -1
  121. package/dist/gateway/static/root/assets/settings-advanced-gate-BI4DMz4_.js +1 -0
  122. package/dist/gateway/static/root/assets/{settings-advanced-section-ZKRIuk7h.js → settings-advanced-section-CURRjsLK.js} +1 -1
  123. package/dist/gateway/static/root/assets/{settings-mode-store-CtJ8pEfm.js → settings-mode-store-CiRpsdTJ.js} +1 -1
  124. package/dist/gateway/static/root/assets/{settings-page-B3pUce-_.js → settings-page-GtsbT6as.js} +1 -1
  125. package/dist/gateway/static/root/assets/{settings-page-header-DuNCn8i-.js → settings-page-header-DBL0_u0Z.js} +1 -1
  126. package/dist/gateway/static/root/assets/{settings-page-layout-DeNC8YHJ.js → settings-page-layout-IAvpbz4A.js} +1 -1
  127. package/dist/gateway/static/root/assets/{setup-status-panel-Fc3vuz_h.js → setup-status-panel-A6uMpGRy.js} +1 -1
  128. package/dist/gateway/static/root/assets/{share-link-dialog-B3hwjVAx.js → share-link-dialog-D1otGSXD.js} +1 -1
  129. package/dist/gateway/static/root/assets/{share-preview-page-D_9oFzGS.js → share-preview-page-L9KYu8M7.js} +1 -1
  130. package/dist/gateway/static/root/assets/{shares-api-BoUpXmxq.js → shares-api-D8Q-m46d.js} +1 -1
  131. package/dist/gateway/static/root/assets/{shares-settings-Drfuvepz.js → shares-settings-Bmfadz8A.js} +1 -1
  132. package/dist/gateway/static/root/assets/{skill-api-By2HhJ9O.js → skill-api-uKU4sRiv.js} +1 -1
  133. package/dist/gateway/static/root/assets/{skill-list-api-TaUCzS8Y.js → skill-list-api-BzKzG-xG.js} +1 -1
  134. package/dist/gateway/static/root/assets/{skill-reload-api-CN2fpS1n.js → skill-reload-api-DkUXekcd.js} +1 -1
  135. package/dist/gateway/static/root/assets/{skills-page-LzGLique.js → skills-page-BZklXTX9.js} +1 -1
  136. package/dist/gateway/static/root/assets/{system-settings-panel-Cuyg8Ml3.js → system-settings-panel-CsvcFoaJ.js} +1 -1
  137. package/dist/gateway/static/root/assets/task-detail-page-SjZGW1Dx.js +2 -0
  138. package/dist/gateway/static/root/assets/{task-result-evidence-DDubAU_5.js → task-result-evidence-B8xUiwW3.js} +1 -1
  139. package/dist/gateway/static/root/assets/{terminal-panel-store-BNs75Wdr.js → terminal-panel-store-DJVC7HqA.js} +1 -1
  140. package/dist/gateway/static/root/assets/{theme-store-DB1ZfBUm.js → theme-store-Dlnmgryi.js} +1 -1
  141. package/dist/gateway/static/root/assets/tool-friendly-title-DcCc6g7o.js +1 -0
  142. package/dist/gateway/static/root/assets/{tracing-settings-page-TvtX4Goh.js → tracing-settings-page-MvG4SH64.js} +1 -1
  143. package/dist/gateway/static/root/assets/{tunnel-api-COoVEdV9.js → tunnel-api-BB7u79ID.js} +1 -1
  144. package/dist/gateway/static/root/assets/{understanding-activity-store-Dr_MLgYe.js → understanding-activity-store-C4bblRnQ.js} +1 -1
  145. package/dist/gateway/static/root/assets/{understanding-refresh-store-DGmLGEqw.js → understanding-refresh-store-BvCj9-Ue.js} +1 -1
  146. package/dist/gateway/static/root/assets/{usage-page-DP6eb6ed.js → usage-page-Cv4Je5XJ.js} +1 -1
  147. package/dist/gateway/static/root/assets/{use-autosave-itwjDYUb.js → use-autosave-YHxQ-UZg.js} +1 -1
  148. package/dist/gateway/static/root/assets/{use-composer-attachments-hjIGlI_2.js → use-composer-attachments-vDdxHtUb.js} +1 -1
  149. package/dist/gateway/static/root/assets/{use-file-preview-expanded-ClLa0g8D.js → use-file-preview-expanded-Ce2mgYme.js} +2 -2
  150. package/dist/gateway/static/root/assets/{use-personal-profile-vhWk6tTU.js → use-personal-profile-D2Un8G1L.js} +1 -1
  151. package/dist/gateway/static/root/assets/{use-workspace-tree-dfXXjA2-.js → use-workspace-tree-BQEiJzK7.js} +1 -1
  152. package/dist/gateway/static/root/assets/{user-model-page-D8dswPWd.js → user-model-page-DRSsn4EV.js} +1 -1
  153. package/dist/gateway/static/root/assets/{voice-api-key-field-BIfBySnN.js → voice-api-key-field-DCM69u8Y.js} +1 -1
  154. package/dist/gateway/static/root/assets/{voice-config-api-J4o59ICE.js → voice-config-api-CrULrSKC.js} +1 -1
  155. package/dist/gateway/static/root/assets/{voice-input-shortcut-events-B1mlpUdC.js → voice-input-shortcut-events-DFMNIyy4.js} +1 -1
  156. package/dist/gateway/static/root/assets/{voice-transcribe-api-xxaSOOmq.js → voice-transcribe-api-Bbyj0yGR.js} +1 -1
  157. package/dist/gateway/static/root/assets/{work-discovery-overlay-DqwT1E5u.js → work-discovery-overlay-CVe9UmFl.js} +1 -1
  158. package/dist/gateway/static/root/assets/{work-discovery-page-BzYQmPLT.js → work-discovery-page-CtqkRMN5.js} +1 -1
  159. package/dist/gateway/static/root/assets/{working-directory-picker-modal-D2Zf3GOG.js → working-directory-picker-modal-CDZ1xh3o.js} +1 -1
  160. package/dist/gateway/static/root/assets/{workspace-api-Bnx3eS2M.js → workspace-api-tbifz2zY.js} +2 -2
  161. package/dist/gateway/static/root/assets/workspace-editor-agent-store-4cZ26iaD.js +1 -0
  162. package/dist/gateway/static/root/assets/{workspace-file-preview-dialog-D13qHzVr.js → workspace-file-preview-dialog-BubQwQwU.js} +1 -1
  163. package/dist/gateway/static/root/assets/{workspace-open-location-menu-Cou-ig1H.js → workspace-open-location-menu-DZk3MBSa.js} +1 -1
  164. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-DQGPKxHA.js → xopc-cloud-account-card-CIavPUr3.js} +1 -1
  165. package/dist/gateway/static/root/index.html +81 -81
  166. package/dist/package.js +1 -1
  167. package/dist/packages/computer-control-contract/src/index.js +33 -3
  168. package/dist/src/agent/embedded/run-turn.js +64 -4
  169. package/dist/src/agent/tool-manuals/computer.d.ts +1 -1
  170. package/dist/src/agent/tool-manuals/computer.js +6 -0
  171. package/dist/src/agent/tools/computer-use-tool.js +18 -5
  172. package/dist/src/agent/tools/phone-use-tool.js +12 -2
  173. package/dist/src/computer/agent-context.d.ts +21 -0
  174. package/dist/src/computer/agent-context.js +107 -0
  175. package/dist/src/computer/broker.d.ts +4 -2
  176. package/dist/src/computer/broker.js +26 -11
  177. package/dist/src/computer/diagnostics.d.ts +60 -6
  178. package/dist/src/computer/diagnostics.js +45 -4
  179. package/dist/src/computer/errors.d.ts +1 -1
  180. package/dist/src/computer/errors.js +4 -0
  181. package/dist/src/computer/evaluation.d.ts +2 -2
  182. package/dist/src/computer/native-timing.d.ts +15 -0
  183. package/dist/src/computer/native-timing.js +49 -0
  184. package/dist/src/computer/program-runtime.d.ts +22 -0
  185. package/dist/src/computer/program-runtime.js +105 -0
  186. package/dist/src/computer/runtime.d.ts +36 -2
  187. package/dist/src/computer/runtime.js +269 -58
  188. package/dist/src/config/models-json.d.ts +12 -0
  189. package/dist/src/config/schema.d.ts +18 -0
  190. package/dist/src/gateway/hono/routes/phone-setup.js +12 -7
  191. package/dist/src/gateway/hono/routes/phone.js +2 -4
  192. package/dist/src/gateway/service/config-coordinator.d.ts +6 -0
  193. package/dist/src/gateway/service.js +4 -4
  194. package/dist/src/gateway/xopc-cloud-capability-setup.js +9 -1
  195. package/dist/src/home-intelligence/host.js +2 -2
  196. package/dist/src/phone/adb-driver.d.ts +15 -1
  197. package/dist/src/phone/adb-driver.js +104 -41
  198. package/dist/src/phone/autoglm-protocol.d.ts +36 -0
  199. package/dist/src/phone/autoglm-protocol.js +88 -0
  200. package/dist/src/phone/autoglm-upstream-prompt.d.ts +2 -0
  201. package/dist/src/phone/autoglm-upstream-prompt.js +5 -0
  202. package/dist/src/phone/autoglm-upstream.LICENSE +201 -0
  203. package/dist/src/phone/cloud-adb-connection.d.ts +3 -0
  204. package/dist/src/phone/cloud-adb-connection.js +105 -31
  205. package/dist/src/phone/cloud-adb.js +18 -6
  206. package/dist/src/phone/completion-recovery.d.ts +6 -0
  207. package/dist/src/phone/completion-recovery.js +30 -0
  208. package/dist/src/phone/contracts.d.ts +24 -0
  209. package/dist/src/phone/contracts.js +12 -1
  210. package/dist/src/phone/execution-trace.d.ts +51 -0
  211. package/dist/src/phone/execution-trace.js +78 -0
  212. package/dist/src/phone/gui-protocol.d.ts +7 -0
  213. package/dist/src/phone/gui-protocol.js +302 -0
  214. package/dist/src/phone/model-adapter.d.ts +10 -2
  215. package/dist/src/phone/model-adapter.js +136 -62
  216. package/dist/src/phone/model-response.d.ts +5 -0
  217. package/dist/src/phone/model-response.js +118 -0
  218. package/dist/src/phone/runtime.d.ts +4 -0
  219. package/dist/src/phone/runtime.js +154 -18
  220. package/dist/src/phone/text-session.d.ts +14 -0
  221. package/dist/src/phone/text-session.js +39 -0
  222. package/dist/src/phone/ui-dump-binary.d.ts +1 -1
  223. package/dist/src/phone/ui-dump-binary.js +1 -1
  224. package/dist/src/phone/ui-session.d.ts +24 -0
  225. package/dist/src/phone/ui-session.js +210 -0
  226. package/dist/src/process/phone-process.d.ts +1 -0
  227. package/dist/src/process/phone-process.js +11 -1
  228. package/dist/src/providers/env-keys.js +2 -0
  229. package/dist/src/providers/index.js +11 -0
  230. package/dist/src/providers/model-catalog-types.d.ts +1 -1
  231. package/dist/src/providers/model-supplements.d.ts +1 -1
  232. package/dist/src/providers/model-supplements.js +6 -3
  233. package/dist/src/providers/phone-models.d.ts +3 -0
  234. package/dist/src/providers/phone-models.js +33 -0
  235. package/dist/src/providers/presentation.js +0 -1
  236. package/dist/src/tui/tui.js +1 -1
  237. package/dist/src/voice/platform-catalog.d.ts +1 -1
  238. package/package.json +2 -1
  239. package/dist/gateway/static/root/assets/chat-page-CafkCKOj.js +0 -72
  240. package/dist/gateway/static/root/assets/connected-providers-grid-b46VH4uy.js +0 -1
  241. package/dist/gateway/static/root/assets/device-pairing-wizard-1du1hfi5.js +0 -1
  242. package/dist/gateway/static/root/assets/gateway-realtime-store-DcsZyYEa.js +0 -1
  243. package/dist/gateway/static/root/assets/index-BS9mjvSL.js +0 -11
  244. package/dist/gateway/static/root/assets/index-pT-m6l6b.css +0 -1
  245. package/dist/gateway/static/root/assets/messages-DaLmc4W1.js +0 -3
  246. package/dist/gateway/static/root/assets/note-image-lightbox-DticJxxh.js +0 -1
  247. package/dist/gateway/static/root/assets/page-header-store-D6SzJ9Ch.js +0 -1
  248. package/dist/gateway/static/root/assets/session-manager-D2rbRfX3.js +0 -23
  249. package/dist/gateway/static/root/assets/settings-advanced-gate-CYDQybNF.js +0 -1
  250. package/dist/gateway/static/root/assets/task-detail-page-6A9337pK.js +0 -2
  251. package/dist/gateway/static/root/assets/tool-friendly-title-DGmi7rCQ.js +0 -1
  252. package/dist/gateway/static/root/assets/workspace-editor-agent-store-COUVwj-p.js +0 -1
@@ -1,4 +1,4 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,t as n}from"./vendor-react-BOUWij0V.js";import{n as r}from"./locale-store-TQcz_Vjt.js";import{t as i}from"./messages-DaLmc4W1.js";import{t as a}from"./plus-Q2yW6OE7.js";import{t as o}from"./square-terminal-K87bylpZ.js";import{t as s}from"./x-B_N4OPjy.js";import{t as c}from"./button-CnRSIP6m.js";import{t as l}from"./skeleton-BI5TyibZ.js";import{t as u}from"./session-manager-D2rbRfX3.js";import{u as d}from"./session-api-rvY5aWw8.js";import{t as f}from"./sliding-tab-list-DuQyViqe.js";import{n as p,r as m,t as h}from"./terminal-panel-store-BNs75Wdr.js";var g=2,_=1,ee=class{activate(e){this._terminal=e}dispose(){}fit(){let e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;let t=this._terminal._core;(this._terminal.rows!==e.rows||this._terminal.cols!==e.cols)&&(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal||!this._terminal.element||!this._terminal.element.parentElement)return;let e=this._terminal._core._renderService.dimensions;if(e.css.cell.width===0||e.css.cell.height===0)return;let t=this._terminal.options.scrollback===0?0:this._terminal.options.overviewRuler?.width||14,n=window.getComputedStyle(this._terminal.element.parentElement),r=parseInt(n.getPropertyValue(`height`)),i=Math.max(0,parseInt(n.getPropertyValue(`width`))),a=window.getComputedStyle(this._terminal.element),o={top:parseInt(a.getPropertyValue(`padding-top`)),bottom:parseInt(a.getPropertyValue(`padding-bottom`)),right:parseInt(a.getPropertyValue(`padding-right`)),left:parseInt(a.getPropertyValue(`padding-left`))},s=o.top+o.bottom,c=o.right+o.left,l=r-s,u=i-c-t;return{cols:Math.max(g,Math.floor(u/e.css.cell.width)),rows:Math.max(_,Math.floor(l/e.css.cell.height))}}},te=Object.defineProperty,ne=Object.getOwnPropertyDescriptor,re=(e,t)=>{for(var n in t)te(e,n,{get:t[n],enumerable:!0})},v=(e,t,n,r)=>{for(var i=r>1?void 0:r?ne(t,n):t,a=e.length-1,o;a>=0;a--)(o=e[a])&&(i=(r?o(t,n,i):o(i))||i);return r&&i&&te(t,n,i),i},y=(e,t)=>(n,r)=>t(n,r,e),ie=`Terminal input`,ae={get:()=>ie,set:e=>ie=e},oe=`Too much output to announce, navigate to rows manually to read`,b={get:()=>oe,set:e=>oe=e};function se(e){return e.replace(/\r?\n/g,`\r`)}function x(e,t){return t?`\x1B[200~`+e+`\x1B[201~`:e}function ce(e,t){e.clipboardData&&e.clipboardData.setData(`text/plain`,t.selectionText),e.preventDefault()}function le(e,t,n,r){e.stopPropagation(),e.clipboardData&&ue(e.clipboardData.getData(`text/plain`),t,n,r)}function ue(e,t,n,r){e=se(e),e=x(e,n.decPrivateModes.bracketedPasteMode&&r.rawOptions.ignoreBracketedPasteMode!==!0),n.triggerDataEvent(e,!0),t.value=``}function S(e,t,n){let r=n.getBoundingClientRect(),i=e.clientX-r.left-10,a=e.clientY-r.top-10;t.style.width=`20px`,t.style.height=`20px`,t.style.left=`${i}px`,t.style.top=`${a}px`,t.style.zIndex=`1000`,t.focus()}function de(e,t,n,r,i){S(e,t,n),i&&r.rightClickSelect(e),t.value=r.selectionText,t.select()}function C(e){return e>65535?(e-=65536,String.fromCharCode((e>>10)+55296)+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)}function fe(e,t=0,n=e.length){let r=``;for(let i=t;i<n;++i){let t=e[i];t>65535?(t-=65536,r+=String.fromCharCode((t>>10)+55296)+String.fromCharCode(t%1024+56320)):r+=String.fromCharCode(t)}return r}var pe=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i=0;if(this._interim){let n=e.charCodeAt(i++);56320<=n&&n<=57343?t[r++]=(this._interim-55296)*1024+n-56320+65536:(t[r++]=this._interim,t[r++]=n),this._interim=0}for(let a=i;a<n;++a){let i=e.charCodeAt(a);if(55296<=i&&i<=56319){if(++a>=n)return this._interim=i,r;let o=e.charCodeAt(a);56320<=o&&o<=57343?t[r++]=(i-55296)*1024+o-56320+65536:(t[r++]=i,t[r++]=o);continue}i!==65279&&(t[r++]=i)}return r}},me=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i,a,o,s,c=0,l=0;if(this.interim[0]){let i=!1,a=this.interim[0];a&=(a&224)==192?31:(a&240)==224?15:7;let o=0,s;for(;(s=this.interim[++o]&63)&&o<4;)a<<=6,a|=s;let c=(this.interim[0]&224)==192?2:(this.interim[0]&240)==224?3:4,u=c-o;for(;l<u;){if(l>=n)return 0;if(s=e[l++],(s&192)!=128){l--,i=!0;break}else this.interim[o++]=s,a<<=6,a|=s&63}i||(c===2?a<128?l--:t[r++]=a:c===3?a<2048||a>=55296&&a<=57343||a===65279||(t[r++]=a):a<65536||a>1114111||(t[r++]=a)),this.interim.fill(0)}let u=n-4,d=l;for(;d<n;){for(;d<u&&!((i=e[d])&128)&&!((a=e[d+1])&128)&&!((o=e[d+2])&128)&&!((s=e[d+3])&128);)t[r++]=i,t[r++]=a,t[r++]=o,t[r++]=s,d+=4;if(i=e[d++],i<128)t[r++]=i;else if((i&224)==192){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(c=(i&31)<<6|a&63,c<128){d--;continue}t[r++]=c}else if((i&240)==224){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(c=(i&15)<<12|(a&63)<<6|o&63,c<2048||c>=55296&&c<=57343||c===65279)continue;t[r++]=c}else if((i&248)==240){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,this.interim[2]=o,r;if(s=e[d++],(s&192)!=128){d--;continue}if(c=(i&7)<<18|(a&63)<<12|(o&63)<<6|s&63,c<65536||c>1114111)continue;t[r++]=c}}return r}},w=``,he=` `,ge=class e{constructor(){this.fg=0,this.bg=0,this.extended=new _e}static toColorRGB(e){return[e>>>16&255,e>>>8&255,e&255]}static fromColorRGB(e){return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255}clone(){let t=new e;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)==50331648}isBgRGB(){return(this.bg&50331648)==50331648}isFgPalette(){return(this.fg&50331648)==16777216||(this.fg&50331648)==33554432}isBgPalette(){return(this.bg&50331648)==16777216||(this.bg&50331648)==33554432}isFgDefault(){return(this.fg&50331648)==0}isBgDefault(){return(this.bg&50331648)==0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==16777216||(this.extended.underlineColor&50331648)==33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},_e=class e{constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}clone(){return new e(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}},T=class e extends ge{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new _e,this.combinedData=``}static fromCharData(t){let n=new e;return n.setFromCharData(t),n}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?C(this.content&2097151):``}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(e){this.fg=e[0],this.bg=0;let t=!1;if(e[1].length>2)t=!0;else if(e[1].length===2){let n=e[1].charCodeAt(0);if(55296<=n&&n<=56319){let r=e[1].charCodeAt(1);56320<=r&&r<=57343?this.content=(n-55296)*1024+r-56320+65536|e[2]<<22:t=!0}else t=!0}else this.content=e[1].charCodeAt(0)|e[2]<<22;t&&(this.combinedData=e[1],this.content=2097152|e[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}},ve=`di$target`,ye=`di$dependencies`,be=new Map;function xe(e){return e[ye]||[]}function E(e){if(be.has(e))return be.get(e);let t=function(e,n,r){if(arguments.length!==3)throw Error(`@IServiceName-decorator can only be used to decorate a parameter`);Se(t,e,r)};return t._id=e,be.set(e,t),t}function Se(e,t,n){t[ve]===t?t[ye].push({id:e,index:n}):(t[ye]=[{id:e,index:n}],t[ve]=t)}var D=E(`BufferService`),Ce=E(`CoreMouseService`),we=E(`CoreService`),Te=E(`CharsetService`),Ee=E(`InstantiationService`),De=E(`LogService`),O=E(`OptionsService`),Oe=E(`OscLinkService`),ke=E(`UnicodeService`),Ae=E(`DecorationService`),je=class{constructor(e,t,n){this._bufferService=e,this._optionsService=t,this._oscLinkService=n}provideLinks(e,t){let n=this._bufferService.buffer.lines.get(e-1);if(!n){t(void 0);return}let r=[],i=this._optionsService.rawOptions.linkHandler,a=new T,o=n.getTrimmedLength(),s=-1,c=-1,l=!1;for(let t=0;t<o;t++)if(!(c===-1&&!n.hasContent(t))){if(n.loadCell(t,a),a.hasExtendedAttrs()&&a.extended.urlId)if(c===-1){c=t,s=a.extended.urlId;continue}else l=a.extended.urlId!==s;else c!==-1&&(l=!0);if(l||c!==-1&&t===o-1){let n=this._oscLinkService.getLinkData(s)?.uri;if(n){let a={start:{x:c+1,y:e},end:{x:t+ +(!l&&t===o-1),y:e}},s=!1;if(!i?.allowNonHttpProtocols)try{let e=new URL(n);[`http:`,`https:`].includes(e.protocol)||(s=!0)}catch{s=!0}s||r.push({text:n,range:a,activate:(e,t)=>i?i.activate(e,t,a):Me(e,t),hover:(e,t)=>i?.hover?.(e,t,a),leave:(e,t)=>i?.leave?.(e,t,a)})}l=!1,a.hasExtendedAttrs()&&a.extended.urlId?(c=t,s=a.extended.urlId):(c=-1,s=-1)}}t(r)}};je=v([y(0,D),y(1,O),y(2,Oe)],je);function Me(e,t){if(confirm(`Do you want to navigate to ${t}?
1
+ import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,t as n}from"./vendor-react-BOUWij0V.js";import{n as r}from"./locale-store-Br7IfbXK.js";import{t as i}from"./messages-ByFlEbsu.js";import{t as a}from"./plus-Q2yW6OE7.js";import{t as o}from"./square-terminal-K87bylpZ.js";import{t as s}from"./x-B_N4OPjy.js";import{t as c}from"./button-CnRSIP6m.js";import{t as l}from"./skeleton-BI5TyibZ.js";import{t as u}from"./session-manager-ChUtTAoG.js";import{u as d}from"./session-api-Bs3r_d2_.js";import{t as f}from"./sliding-tab-list-DuQyViqe.js";import{n as p,r as m,t as h}from"./terminal-panel-store-DJVC7HqA.js";var g=2,_=1,ee=class{activate(e){this._terminal=e}dispose(){}fit(){let e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;let t=this._terminal._core;(this._terminal.rows!==e.rows||this._terminal.cols!==e.cols)&&(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal||!this._terminal.element||!this._terminal.element.parentElement)return;let e=this._terminal._core._renderService.dimensions;if(e.css.cell.width===0||e.css.cell.height===0)return;let t=this._terminal.options.scrollback===0?0:this._terminal.options.overviewRuler?.width||14,n=window.getComputedStyle(this._terminal.element.parentElement),r=parseInt(n.getPropertyValue(`height`)),i=Math.max(0,parseInt(n.getPropertyValue(`width`))),a=window.getComputedStyle(this._terminal.element),o={top:parseInt(a.getPropertyValue(`padding-top`)),bottom:parseInt(a.getPropertyValue(`padding-bottom`)),right:parseInt(a.getPropertyValue(`padding-right`)),left:parseInt(a.getPropertyValue(`padding-left`))},s=o.top+o.bottom,c=o.right+o.left,l=r-s,u=i-c-t;return{cols:Math.max(g,Math.floor(u/e.css.cell.width)),rows:Math.max(_,Math.floor(l/e.css.cell.height))}}},te=Object.defineProperty,ne=Object.getOwnPropertyDescriptor,re=(e,t)=>{for(var n in t)te(e,n,{get:t[n],enumerable:!0})},v=(e,t,n,r)=>{for(var i=r>1?void 0:r?ne(t,n):t,a=e.length-1,o;a>=0;a--)(o=e[a])&&(i=(r?o(t,n,i):o(i))||i);return r&&i&&te(t,n,i),i},y=(e,t)=>(n,r)=>t(n,r,e),ie=`Terminal input`,ae={get:()=>ie,set:e=>ie=e},oe=`Too much output to announce, navigate to rows manually to read`,b={get:()=>oe,set:e=>oe=e};function se(e){return e.replace(/\r?\n/g,`\r`)}function x(e,t){return t?`\x1B[200~`+e+`\x1B[201~`:e}function ce(e,t){e.clipboardData&&e.clipboardData.setData(`text/plain`,t.selectionText),e.preventDefault()}function le(e,t,n,r){e.stopPropagation(),e.clipboardData&&ue(e.clipboardData.getData(`text/plain`),t,n,r)}function ue(e,t,n,r){e=se(e),e=x(e,n.decPrivateModes.bracketedPasteMode&&r.rawOptions.ignoreBracketedPasteMode!==!0),n.triggerDataEvent(e,!0),t.value=``}function S(e,t,n){let r=n.getBoundingClientRect(),i=e.clientX-r.left-10,a=e.clientY-r.top-10;t.style.width=`20px`,t.style.height=`20px`,t.style.left=`${i}px`,t.style.top=`${a}px`,t.style.zIndex=`1000`,t.focus()}function de(e,t,n,r,i){S(e,t,n),i&&r.rightClickSelect(e),t.value=r.selectionText,t.select()}function C(e){return e>65535?(e-=65536,String.fromCharCode((e>>10)+55296)+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)}function fe(e,t=0,n=e.length){let r=``;for(let i=t;i<n;++i){let t=e[i];t>65535?(t-=65536,r+=String.fromCharCode((t>>10)+55296)+String.fromCharCode(t%1024+56320)):r+=String.fromCharCode(t)}return r}var pe=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i=0;if(this._interim){let n=e.charCodeAt(i++);56320<=n&&n<=57343?t[r++]=(this._interim-55296)*1024+n-56320+65536:(t[r++]=this._interim,t[r++]=n),this._interim=0}for(let a=i;a<n;++a){let i=e.charCodeAt(a);if(55296<=i&&i<=56319){if(++a>=n)return this._interim=i,r;let o=e.charCodeAt(a);56320<=o&&o<=57343?t[r++]=(i-55296)*1024+o-56320+65536:(t[r++]=i,t[r++]=o);continue}i!==65279&&(t[r++]=i)}return r}},me=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i,a,o,s,c=0,l=0;if(this.interim[0]){let i=!1,a=this.interim[0];a&=(a&224)==192?31:(a&240)==224?15:7;let o=0,s;for(;(s=this.interim[++o]&63)&&o<4;)a<<=6,a|=s;let c=(this.interim[0]&224)==192?2:(this.interim[0]&240)==224?3:4,u=c-o;for(;l<u;){if(l>=n)return 0;if(s=e[l++],(s&192)!=128){l--,i=!0;break}else this.interim[o++]=s,a<<=6,a|=s&63}i||(c===2?a<128?l--:t[r++]=a:c===3?a<2048||a>=55296&&a<=57343||a===65279||(t[r++]=a):a<65536||a>1114111||(t[r++]=a)),this.interim.fill(0)}let u=n-4,d=l;for(;d<n;){for(;d<u&&!((i=e[d])&128)&&!((a=e[d+1])&128)&&!((o=e[d+2])&128)&&!((s=e[d+3])&128);)t[r++]=i,t[r++]=a,t[r++]=o,t[r++]=s,d+=4;if(i=e[d++],i<128)t[r++]=i;else if((i&224)==192){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(c=(i&31)<<6|a&63,c<128){d--;continue}t[r++]=c}else if((i&240)==224){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(c=(i&15)<<12|(a&63)<<6|o&63,c<2048||c>=55296&&c<=57343||c===65279)continue;t[r++]=c}else if((i&248)==240){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,this.interim[2]=o,r;if(s=e[d++],(s&192)!=128){d--;continue}if(c=(i&7)<<18|(a&63)<<12|(o&63)<<6|s&63,c<65536||c>1114111)continue;t[r++]=c}}return r}},w=``,he=` `,ge=class e{constructor(){this.fg=0,this.bg=0,this.extended=new _e}static toColorRGB(e){return[e>>>16&255,e>>>8&255,e&255]}static fromColorRGB(e){return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255}clone(){let t=new e;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)==50331648}isBgRGB(){return(this.bg&50331648)==50331648}isFgPalette(){return(this.fg&50331648)==16777216||(this.fg&50331648)==33554432}isBgPalette(){return(this.bg&50331648)==16777216||(this.bg&50331648)==33554432}isFgDefault(){return(this.fg&50331648)==0}isBgDefault(){return(this.bg&50331648)==0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==16777216||(this.extended.underlineColor&50331648)==33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},_e=class e{constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}clone(){return new e(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}},T=class e extends ge{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new _e,this.combinedData=``}static fromCharData(t){let n=new e;return n.setFromCharData(t),n}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?C(this.content&2097151):``}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(e){this.fg=e[0],this.bg=0;let t=!1;if(e[1].length>2)t=!0;else if(e[1].length===2){let n=e[1].charCodeAt(0);if(55296<=n&&n<=56319){let r=e[1].charCodeAt(1);56320<=r&&r<=57343?this.content=(n-55296)*1024+r-56320+65536|e[2]<<22:t=!0}else t=!0}else this.content=e[1].charCodeAt(0)|e[2]<<22;t&&(this.combinedData=e[1],this.content=2097152|e[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}},ve=`di$target`,ye=`di$dependencies`,be=new Map;function xe(e){return e[ye]||[]}function E(e){if(be.has(e))return be.get(e);let t=function(e,n,r){if(arguments.length!==3)throw Error(`@IServiceName-decorator can only be used to decorate a parameter`);Se(t,e,r)};return t._id=e,be.set(e,t),t}function Se(e,t,n){t[ve]===t?t[ye].push({id:e,index:n}):(t[ye]=[{id:e,index:n}],t[ve]=t)}var D=E(`BufferService`),Ce=E(`CoreMouseService`),we=E(`CoreService`),Te=E(`CharsetService`),Ee=E(`InstantiationService`),De=E(`LogService`),O=E(`OptionsService`),Oe=E(`OscLinkService`),ke=E(`UnicodeService`),Ae=E(`DecorationService`),je=class{constructor(e,t,n){this._bufferService=e,this._optionsService=t,this._oscLinkService=n}provideLinks(e,t){let n=this._bufferService.buffer.lines.get(e-1);if(!n){t(void 0);return}let r=[],i=this._optionsService.rawOptions.linkHandler,a=new T,o=n.getTrimmedLength(),s=-1,c=-1,l=!1;for(let t=0;t<o;t++)if(!(c===-1&&!n.hasContent(t))){if(n.loadCell(t,a),a.hasExtendedAttrs()&&a.extended.urlId)if(c===-1){c=t,s=a.extended.urlId;continue}else l=a.extended.urlId!==s;else c!==-1&&(l=!0);if(l||c!==-1&&t===o-1){let n=this._oscLinkService.getLinkData(s)?.uri;if(n){let a={start:{x:c+1,y:e},end:{x:t+ +(!l&&t===o-1),y:e}},s=!1;if(!i?.allowNonHttpProtocols)try{let e=new URL(n);[`http:`,`https:`].includes(e.protocol)||(s=!0)}catch{s=!0}s||r.push({text:n,range:a,activate:(e,t)=>i?i.activate(e,t,a):Me(e,t),hover:(e,t)=>i?.hover?.(e,t,a),leave:(e,t)=>i?.leave?.(e,t,a)})}l=!1,a.hasExtendedAttrs()&&a.extended.urlId?(c=t,s=a.extended.urlId):(c=-1,s=-1)}}t(r)}};je=v([y(0,D),y(1,O),y(2,Oe)],je);function Me(e,t){if(confirm(`Do you want to navigate to ${t}?
2
2
 
3
3
  WARNING: This link could potentially be dangerous`)){let e=window.open();if(e){try{e.opener=null}catch{}e.location.href=t}else console.warn(`Opening link blocked as opener could not be cleared`)}}var Ne=E(`CharSizeService`),Pe=E(`CoreBrowserService`),Fe=E(`MouseService`),Ie=E(`RenderService`),Le=E(`SelectionService`),Re=E(`CharacterJoinerService`),ze=E(`ThemeService`),Be=E(`LinkProviderService`),Ve=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout(()=>{throw e.stack?qe.isErrorNoTelemetry(e)?new qe(e.message+`
4
4
 
@@ -1 +1 @@
1
- import{a as e,i as t,l as n}from"./locale-store-TQcz_Vjt.js";import{a as r}from"./local-session-drafts-CuDdIyxR.js";import{t as i}from"./skill-wire-pattern-BPpeIcCi.js";import{t as a}from"./skill-list-api-TaUCzS8Y.js";var o=RegExp(`^\\/skill:(${i})`),s=[],c=new Map;function l(e){let t=new Set;for(let n of e??[]){n?.name&&t.add(n.name);for(let e of n.aliases??[])typeof e==`string`&&e.length>0&&t.add(e)}s=Array.from(t).toSorted((e,t)=>t.length-e.length).map(e=>({key:e})),c.clear()}function u(e,t){if(t>=e.length)return!0;let n=e[t];return!/[a-zA-Z0-9_-]/.test(n)}function d(e,t){return!(e[t]!==`/`||t>0&&!/\s/.test(e[t-1]))}function f(e,t){if(!d(e,t)||s.length===0)return null;let n=e.slice(t);if(n.startsWith(`/skill:`))return null;for(let{key:e}of s){let t=`/${e}`;if(n.startsWith(t)&&u(n,t.length))return{len:t.length,matchedKey:e}}return null}function p(e){let t=[],n=0;for(;n<e.length;){if(e[n]!==`/`){n+=1;continue}let r=e.slice(n).match(o);if(r?.[0]){n+=r[0].length;continue}let i=f(e,n);i?(t.push({start:n,end:n+i.len}),n+=i.len):n+=1}return t}function m(e){for(let t=e.length-1;t>=0;--t){if(e[t]!==`/`||e.startsWith(`/skill:`,t))continue;let n=f(e,t);if(n&&t+n.len===e.length)return!0}return!1}function h(e){if(!e.startsWith(`/`)||s.length===0||e.startsWith(`/skill:`))return!1;let t=f(e,0);return t?e.length===t.len||!/[a-zA-Z0-9_-]/.test(e[t.len]):!1}function g(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function _(e){let t=c.get(e);return t||(t=RegExp(`(${g(e)})([ \\t\\f\\v]*)$`),c.set(e,t)),t}function v(e){for(let{key:t}of s){let n=`/${t}`;if(!e.endsWith(n))continue;let r=e.length-n.length;if(f(e,r))return{tokenStart:r}}return null}function y(e){for(let{key:t}of s){let n=`/${t}`,r=e.match(_(n));if(!r)continue;let i=e.length-r[0].length;if(f(e,i))return{tokenStart:i}}return null}function b(e,t){let n=t.toLowerCase().startsWith(`zh`)?`zh-CN`:`en`,r=e.localizations?.[n]??e.localizations?.en,i=r?.displayName.trim()||e.name,a=r?.description.trim()||e.description,o=new Set([e.name]),s=new Set([e.description]);for(let t of Object.values(e.localizations??{}))t?.displayName.trim()&&o.add(t.displayName.trim()),t?.description.trim()&&s.add(t.description.trim());return o.delete(i),s.delete(a),{displayName:i,description:a,aliases:[...o],searchTerms:[...s]}}async function x(e){let t=await e.json().catch(()=>({}));if(typeof t.error==`string`)return t.error;if(t.error&&typeof t.error==`object`&&`message`in t.error){let e=t.error.message;if(typeof e==`string`)return e}return`HTTP ${e.status}`}async function S(){let n=await e(t(`/api/commands`));if(!n.ok)throw Error(await x(n));return(await n.json()).payload?.commands??[]}var C=6e4,w=null,T=0,E=null,D=null,O=0,k=null,A=0,j=new Map,M=new Map,N=0;function P(e,t){let r=n.getState();return`${e?.trim()||`main`}\u0000${JSON.stringify([r.baseUrl,r.conversationId,t?.trim()||``])}`}async function F(e=!1){return!e&&w&&Date.now()<T?(l(w),w):E||(E=S().then(e=>(w=e,T=Date.now()+C,l(e),e)).catch(e=>{throw l([]),e}).finally(()=>{E=null}),E)}async function I(i,a,o=!1){let s=n.getState().conversationId,c=a?await r(a):void 0;if(s!==n.getState().conversationId)throw Error(`Active Gateway changed`);c&&(i=c.creation.agentId,a=void 0);let l=P(i,a),u=Date.now(),d=j.get(l);if(!o&&d&&u<d.expiry)return d.payload;let f=M.get(l);if(f)return f;let p=N,m=new URLSearchParams({agentId:i?.trim()||`main`});a?.trim()&&m.set(`conversationId`,a.trim());let h=e(t(`/api/chat/skills?${m.toString()}`)).then(async e=>{if(e.status===404&&a)return I(i,void 0,o);if(!e.ok)throw Error(await x(e));let t=await e.json();if(!t.payload||!Array.isArray(t.payload.skills))throw Error(`Invalid /api/chat/skills response`);return p===N&&j.set(l,{payload:t.payload,expiry:Date.now()+C}),t.payload}).finally(()=>{M.delete(l)});return M.set(l,h),h}async function L(n,r,i){let a=n?.trim()||`main`,o=await I(a,i,!0),s=new Set(o.effectiveAllowlist??o.agentAllowlist??[]);s.add(r);let c=await e(t(`/api/agents/${encodeURIComponent(a)}`),{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({skills:[...s].sort((e,t)=>e.localeCompare(t))})});if(!c.ok)throw Error(await x(c));R(a)}function R(e){if(N+=1,e){let t=`${e.trim()}\u0000`;for(let e of j.keys())e.startsWith(t)&&j.delete(e);for(let e of M.keys())e.startsWith(t)&&M.delete(e);return}j.clear(),M.clear()}async function z(n){let r=await e(t(`/api/chat/workspace-trust?${new URLSearchParams({conversationId:n}).toString()}`));if(!r.ok)throw Error(await x(r));let i=await r.json();if(!i.payload)throw Error(`Invalid /api/chat/workspace-trust response`);return i.payload}async function B(n,r){let i=await e(t(`/api/chat/workspace-trust`),{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({conversationId:n,trusted:r})});if(!i.ok)throw Error(await x(i));let a=await i.json();if(!a.payload)throw Error(`Invalid /api/chat/workspace-trust response`);return V(),a.payload}function V(e){R(e),e||(A+=1,D=null,O=0,k=null)}async function H(e=!1){if(!e&&D&&Date.now()<O)return D;if(k)return k;let t=A;return k=a().then(e=>(t===A&&(D=e,O=Date.now()+C),e)).finally(()=>{k=null}),k}export{I as a,B as c,h as d,y as f,m as h,F as i,b as l,f as m,R as n,H as o,v as p,V as r,z as s,L as t,p as u};
1
+ import{a as e,i as t,l as n}from"./locale-store-Br7IfbXK.js";import{a as r}from"./local-session-drafts-BJ1B1dQ7.js";import{t as i}from"./skill-wire-pattern-BPpeIcCi.js";import{t as a}from"./skill-list-api-BzKzG-xG.js";var o=RegExp(`^\\/skill:(${i})`),s=[],c=new Map;function l(e){let t=new Set;for(let n of e??[]){n?.name&&t.add(n.name);for(let e of n.aliases??[])typeof e==`string`&&e.length>0&&t.add(e)}s=Array.from(t).toSorted((e,t)=>t.length-e.length).map(e=>({key:e})),c.clear()}function u(e,t){if(t>=e.length)return!0;let n=e[t];return!/[a-zA-Z0-9_-]/.test(n)}function d(e,t){return!(e[t]!==`/`||t>0&&!/\s/.test(e[t-1]))}function f(e,t){if(!d(e,t)||s.length===0)return null;let n=e.slice(t);if(n.startsWith(`/skill:`))return null;for(let{key:e}of s){let t=`/${e}`;if(n.startsWith(t)&&u(n,t.length))return{len:t.length,matchedKey:e}}return null}function p(e){let t=[],n=0;for(;n<e.length;){if(e[n]!==`/`){n+=1;continue}let r=e.slice(n).match(o);if(r?.[0]){n+=r[0].length;continue}let i=f(e,n);i?(t.push({start:n,end:n+i.len}),n+=i.len):n+=1}return t}function m(e){for(let t=e.length-1;t>=0;--t){if(e[t]!==`/`||e.startsWith(`/skill:`,t))continue;let n=f(e,t);if(n&&t+n.len===e.length)return!0}return!1}function h(e){if(!e.startsWith(`/`)||s.length===0||e.startsWith(`/skill:`))return!1;let t=f(e,0);return t?e.length===t.len||!/[a-zA-Z0-9_-]/.test(e[t.len]):!1}function g(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function _(e){let t=c.get(e);return t||(t=RegExp(`(${g(e)})([ \\t\\f\\v]*)$`),c.set(e,t)),t}function v(e){for(let{key:t}of s){let n=`/${t}`;if(!e.endsWith(n))continue;let r=e.length-n.length;if(f(e,r))return{tokenStart:r}}return null}function y(e){for(let{key:t}of s){let n=`/${t}`,r=e.match(_(n));if(!r)continue;let i=e.length-r[0].length;if(f(e,i))return{tokenStart:i}}return null}function b(e,t){let n=t.toLowerCase().startsWith(`zh`)?`zh-CN`:`en`,r=e.localizations?.[n]??e.localizations?.en,i=r?.displayName.trim()||e.name,a=r?.description.trim()||e.description,o=new Set([e.name]),s=new Set([e.description]);for(let t of Object.values(e.localizations??{}))t?.displayName.trim()&&o.add(t.displayName.trim()),t?.description.trim()&&s.add(t.description.trim());return o.delete(i),s.delete(a),{displayName:i,description:a,aliases:[...o],searchTerms:[...s]}}async function x(e){let t=await e.json().catch(()=>({}));if(typeof t.error==`string`)return t.error;if(t.error&&typeof t.error==`object`&&`message`in t.error){let e=t.error.message;if(typeof e==`string`)return e}return`HTTP ${e.status}`}async function S(){let n=await e(t(`/api/commands`));if(!n.ok)throw Error(await x(n));return(await n.json()).payload?.commands??[]}var C=6e4,w=null,T=0,E=null,D=null,O=0,k=null,A=0,j=new Map,M=new Map,N=0;function P(e,t){let r=n.getState();return`${e?.trim()||`main`}\u0000${JSON.stringify([r.baseUrl,r.conversationId,t?.trim()||``])}`}async function F(e=!1){return!e&&w&&Date.now()<T?(l(w),w):E||(E=S().then(e=>(w=e,T=Date.now()+C,l(e),e)).catch(e=>{throw l([]),e}).finally(()=>{E=null}),E)}async function I(i,a,o=!1){let s=n.getState().conversationId,c=a?await r(a):void 0;if(s!==n.getState().conversationId)throw Error(`Active Gateway changed`);c&&(i=c.creation.agentId,a=void 0);let l=P(i,a),u=Date.now(),d=j.get(l);if(!o&&d&&u<d.expiry)return d.payload;let f=M.get(l);if(f)return f;let p=N,m=new URLSearchParams({agentId:i?.trim()||`main`});a?.trim()&&m.set(`conversationId`,a.trim());let h=e(t(`/api/chat/skills?${m.toString()}`)).then(async e=>{if(e.status===404&&a)return I(i,void 0,o);if(!e.ok)throw Error(await x(e));let t=await e.json();if(!t.payload||!Array.isArray(t.payload.skills))throw Error(`Invalid /api/chat/skills response`);return p===N&&j.set(l,{payload:t.payload,expiry:Date.now()+C}),t.payload}).finally(()=>{M.delete(l)});return M.set(l,h),h}async function L(n,r,i){let a=n?.trim()||`main`,o=await I(a,i,!0),s=new Set(o.effectiveAllowlist??o.agentAllowlist??[]);s.add(r);let c=await e(t(`/api/agents/${encodeURIComponent(a)}`),{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({skills:[...s].sort((e,t)=>e.localeCompare(t))})});if(!c.ok)throw Error(await x(c));R(a)}function R(e){if(N+=1,e){let t=`${e.trim()}\u0000`;for(let e of j.keys())e.startsWith(t)&&j.delete(e);for(let e of M.keys())e.startsWith(t)&&M.delete(e);return}j.clear(),M.clear()}async function z(n){let r=await e(t(`/api/chat/workspace-trust?${new URLSearchParams({conversationId:n}).toString()}`));if(!r.ok)throw Error(await x(r));let i=await r.json();if(!i.payload)throw Error(`Invalid /api/chat/workspace-trust response`);return i.payload}async function B(n,r){let i=await e(t(`/api/chat/workspace-trust`),{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({conversationId:n,trusted:r})});if(!i.ok)throw Error(await x(i));let a=await i.json();if(!a.payload)throw Error(`Invalid /api/chat/workspace-trust response`);return V(),a.payload}function V(e){R(e),e||(A+=1,D=null,O=0,k=null)}async function H(e=!1){if(!e&&D&&Date.now()<O)return D;if(k)return k;let t=A;return k=a().then(e=>(t===A&&(D=e,O=Date.now()+C),e)).finally(()=>{k=null}),k}export{I as a,B as c,h as d,y as f,m as h,F as i,b as l,f as m,R as n,H as o,v as p,V as r,z as s,L as t,p as u};
@@ -1 +1 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{i,o as a,p as o,r as s}from"./locale-store-TQcz_Vjt.js";import{t as c}from"./check-DUBLcKHA.js";import{t as l}from"./circle-alert-BEjgurr2.js";import{x as u}from"./use-file-preview-expanded-ClLa0g8D.js";import{t as ee}from"./mic-CuUb7zc-.js";import{t as d}from"./rotate-ccw-JM1TBLpp.js";import{t as f}from"./settings-2-D-csvaET.js";import{t as te}from"./x-B_N4OPjy.js";import{t as p}from"./cn-0WouolD0.js";import{t as ne}from"./skeleton-BI5TyibZ.js";import{s as m}from"./file-preview-surface-c3gDD9sM.js";import{a as h,f as re,i as ie,l as ae,n as g,r as oe,t as se,u as ce}from"./voice-transcribe-api-xxaSOOmq.js";import{t as _}from"./open-capability-settings-Cvb65hQB.js";import{d as v}from"./tasks-DRmd6sWt.js";import{n as y}from"./interaction-BdhHBbYa.js";import{t as b}from"./workspace-editor-agent-store-COUVwj-p.js";import{l as x,p as S}from"./voice-input-shortcut-events-B1mlpUdC.js";function C(e){let t=e.task.contract?.acceptanceCriteria??[],n=new Map(e.runs.map(e=>[e.id,e])),r=e.receipts.filter(t=>n.get(t.runId)?.contractVersion===e.task.latestContractVersion).sort((e,t)=>t.finalizedAt-e.finalizedAt);return t.map((t,n)=>{let i=e.criterionReviews.find(r=>r.criterionIndex===n&&r.contractVersion===e.task.latestContractVersion&&r.criterionText===t),a={text:t,status:`unverified`,evidence:[]};for(let e of r){let n=e.verification.checks.find(e=>e.criterion===t);if(!n)continue;let r=e.evidence.filter(e=>n.evidenceTitles.includes(e.title)),i=n.status===`passed`&&v(e).has(t)?`passed`:n.status===`failed`?`failed`:`unverified`;a={text:t,status:i,evidence:r,runId:e.runId,verificationStatus:i,method:n.method,note:n.note};break}return i&&e.task.contract?.acceptancePolicy!==`verified_auto`?{...a,status:i.status,review:i}:e.task.contract?.acceptancePolicy===`manual`?{...a,status:`unverified`}:a})}function w(e){let t=new Set(e.runs.filter(t=>t.contractVersion===e.task.latestContractVersion).map(e=>e.id));return e.receipts.filter(e=>t.has(e.runId)).sort((e,t)=>t.finalizedAt-e.finalizedAt)[0]}function T(e){let t=w(e),n=C(e);return{receipt:t,verified:n.filter(e=>e.status===`passed`).length,criteria:n.length,deliverables:e.context.filter(e=>e.role===`deliverable`).length}}function E(e){return e.task.phase===`closed`?e.task.resolution===`done`?`completed`:`ended`:e.waits.some(e=>e.kind===`paused`)?`paused`:e.attention.some(e=>e.kind===`input_required`||e.kind===`approval_required`)?`needsUser`:e.operationalState===`idle`?e.task.phase===`backlog`?`captured`:e.task.phase===`ready`?`ready`:e.task.phase===`review`?`review`:`ready`:e.operationalState}function D(e){return e===`failed`?`bg-danger/10 text-danger`:e===`needsUser`||e===`blocked`?`bg-warning/10 text-warning`:e===`completed`?`bg-success-soft text-success`:e===`running`||e===`verifying`||e===`review`?`bg-accent-soft text-accent-fg`:`bg-surface-hover text-fg-muted`}function O(e){return e===`zh`?{newWork:`交给 xopc`,dialogTitle:`现在想完成什么?`,dialogDescription:`发送后会进入新对话。xopc 会直接回答或开始处理;需要持续推进时,再转为任务。`,intentLabel:`告诉 xopc 你要做什么`,intentPlaceholder:`例如:整理这周的会议记录,提炼待办并给出下周优先级`,intentSuggestion:`整理这周的会议记录,提炼待办并给出下周优先级`,submit:`进入对话并开始`,projectLabel:`归属项目`,monitoringLabel:`跟进策略`,monitoringModes:{observe:`仅观察`,ask_before_action:`行动前询问`,auto_low_risk:`自动执行低风险操作`},existingProject:`已有项目`,newProject:`新项目`,needsAttention:`需要你处理`,waitingStatus:`当前等待`,runAttention:`运行异常`,running:`xopc 正在处理`,continue:`继续推进`,recent:`最近对话`,evidenceCount:`项证据`,remainingCount:`项待继续`,projects:`长期项目`,emptyRunning:`当前没有正在处理的对话`,emptyContinue:`还没有需要继续推进的事项`,openChat:`打开对话`,whyNow:`为什么现在`,impact:`影响`,workDone:`AI 已完成`,recommendation:`建议`,policyReason:`处理依据`,proposedAction:`拟执行动作`,actionStates:{not_authorized:`仅建议,未获自动执行授权`,approval_required:`等待你批准`,pending:`等待执行`,executing:`正在执行`,completed:`已自动执行`,rejected:`已拒绝`,failed:`执行失败`},judgmentReasons:`判断依据`,rejectedAlternatives:`未选方案`,uncertainty:`不确定性`,snooze:`明天再看`,dismiss:`忽略`,feedbackPlaceholder:`告诉 AI:以后遇到这类情况应该怎样判断…`,applyFeedback:`调整后续判断`,evidence:`证据引用`,useful:`有帮助`,notUseful:`没帮助`,taskStatuses:{pending:`待推进`,planning:`正在明确完成标准`,waiting_dependency:`等待前置任务`,running:`正在推进`,verifying:`正在验证`,needs_user:`需要你`,blocked:`已阻塞`,paused:`已暂停`,completed:`已完成`,cancelled:`已结束`},taskProgress:{title:`xopc 已接手`,open:`查看结果`,decide:`查看并决定`,evidence:`项已验证依据`,statuses:{pending:`待推进`,planning:`正在明确完成标准`,waiting_dependency:`等待前置任务`,running:`正在推进`,verifying:`正在验证`,needs_user:`需要你`,blocked:`已阻塞`,paused:`已暂停`,completed:`已完成`,cancelled:`已结束`}},detailStatuses:{allocating:`正在分配执行者`,captured:`尚未安排`,ready:`等待开始`,queued:`已进入队列`,running:`正在执行`,verifying:`正在验证`,waiting:`等待条件`,blocked:`被阻塞`,failed:`执行失败`,cancelled:`执行已取消`,needsUser:`需要你处理`,review:`等待验收`,completed:`已完成`,ended:`已结束`,paused:`已暂停`},detailStatusDescriptions:{allocating:`任务已提交,正在后台选择合适的执行者。`,captured:`任务已记录,但尚未进入执行队列。安排后,xopc 会开始推进。`,ready:`任务已经准备好,可以交给 xopc 开始执行。`,queued:`任务已进入执行队列,xopc 将在资源可用时开始。`,running:`xopc 正在推进这个任务。`,verifying:`xopc 正在根据完成标准核验结果。`,waiting:`任务正在等待外部条件满足。`,blocked:`当前存在阻塞条件,解除后才能继续。`,failed:`最近一次执行失败;查看运行记录后可以重试。`,cancelled:`最近一次执行已取消;任务仍可重新开始。`,needsUser:`xopc 需要你的输入或批准后才能继续。`,review:`执行结果已经准备好,等待你验收。`,completed:`任务已经完成并关闭。`,ended:`任务已经结束,不会继续执行。`,paused:`已暂停自动推进和催办。恢复后仍需满足其他等待条件。`},statusSummary:`当前状态`,taskLabel:`任务`,taskDescription:`任务描述与目标`,editTaskField:`编辑`,saveTaskField:`保存`,cancelTaskField:`取消`,noTaskDescription:`添加任务背景、范围和交付要求。`,taskProperties:`任务属性`,taskPhase:`阶段`,priority:`优先级`,dueDate:`截止日期`,executorLabel:`执行 Agent`,priorityLabels:{low:`低优先级`,normal:`普通优先级`,high:`高优先级`,critical:`紧急`},unassigned:`未指定执行者`,noDueDate:`无截止时间`,updatedAt:`更新于 {{date}}`,successDefinition:`怎样才算完成`,taskDefinition:`任务定义`,criteriaProgress:`{{verified}}/{{total}} 已验证`,taskRelations:`任务关系`,dependencies:`前置任务`,dependents:`后续任务`,noDependencies:`没有前置任务`,noDependents:`没有后续任务`,editDependencies:`编辑前置任务`,saveDependencies:`保存关系`,cancelDependencyEdit:`取消`,dependenciesDescription:`所选任务全部完成后,xopc 才会开始推进当前任务。`,linkDependencies:`关联前置任务`,linkedDependencies:`已关联 {{count}} 个前置任务`,dependencySearchPlaceholder:`搜索任务名称`,noDependencyMatches:`没有匹配的任务`,noDependencyCandidates:`没有可选的其他任务`,removeDependency:`移除前置任务:{{task}}`,dependencyUpdateFailed:`前置任务更新失败,请刷新后重试。`,expectedOutputs:`预期输出`,constraints:`约束与边界`,approvalRequired:`需要你批准`,latestResult:`最新结果`,remainingWork:`还差什么`,nextAction:`下一步`,yourDecision:`只需你决定`,noRemainingWork:`已覆盖全部完成标准。`,noDecisionNeeded:`暂时不需要你做任何事,xopc 会继续推进。`,contextUsed:`本次使用的上下文`,contextSources:`信息来源`,contextAssumptions:`当前假设`,contextRisks:`风险`,contextRoleLabels:{input:`输入`,reference:`参考`,constraint:`约束`,deliverable:`交付物`,evidence:`证据`},contextKindLabels:{document:`文档`,file:`文件`,url:`链接`,session:`对话`,memory:`记忆`,task:`任务`,artifact:`产物`,source:`来源`},currentTask:`当前任务`,executionHistory:`历史执行记录({{count}})`,receiptStatuses:{succeeded:`执行成功`,failed:`执行失败`,cancelled:`已取消`},unresolvedCriteria:`待验证标准`,resultFeedback:`这件事做好了吗?`,doneWell:`结果有帮助`,needsFix:`结果没帮助`,correctionPlaceholder:`告诉 xopc 哪里不对、你真正想要的结果是什么`,submitCorrection:`修正并继续`,feedbackThanks:`收到,我会据此继续改进。`,correctionStarted:`收到,已重新打开并开始修正。`,noDefinition:`系统正在进一步明确完成标准。未明确前不会把事情误判为已完成。`,backToWork:`返回任务列表`,openTaskConversation:`进入对话`,taskNotFound:`没有找到这个任务`,runTask:`开始推进`,scheduleTask:`安排执行`,scheduleRecurringTask:`定时执行`,approveTask:`确认完成`,reopenTask:`重新打开`,moreActions:`更多操作`,pauseTask:`暂停推进`,resumeTask:`继续推进`,cancelTask:`结束事项`,cancelActiveRun:`取消当前执行`,deleteTask:`永久删除任务`,deleteTaskTitle:`永久删除这个任务?`,deleteTaskDescription:`将永久删除“{{title}}”及其执行记录、上下文和回执。关联对话、工作区文件和外部产物不会被删除。`,confirmDeleteTask:`永久删除`,keepTask:`保留任务`,deleteActiveTaskBlocked:`请先结束当前执行,再永久删除任务。`,actionFailed:`操作失败,请重试。`,verificationStatuses:{passed:`已验证`,failed:`验证未通过`,unverified:`待验证`}}:{newWork:`Ask xopc`,dialogTitle:`What do you want to get done?`,dialogDescription:`This opens a new conversation. xopc will answer or start working, and create a task only when the work needs ongoing progress.`,intentLabel:`Tell xopc what you need`,intentPlaceholder:`For example: summarize this week’s meeting notes and suggest next week’s priorities`,intentSuggestion:`Summarize this week’s meeting notes and suggest next week’s priorities`,submit:`Open conversation and start`,projectLabel:`Project`,monitoringLabel:`Follow-up policy`,monitoringModes:{observe:`Observe only`,ask_before_action:`Ask before acting`,auto_low_risk:`Auto-run low-risk actions`},existingProject:`Existing project`,newProject:`New project`,needsAttention:`Needs your attention`,waitingStatus:`Current status`,runAttention:`Run issues`,running:`xopc is working`,continue:`Continue`,recent:`Recent conversations`,evidenceCount:`evidence items`,remainingCount:`remaining`,projects:`Long-term projects`,emptyRunning:`No conversations are running`,emptyContinue:`No ongoing items yet`,openChat:`Open conversation`,whyNow:`Why now`,impact:`Impact`,workDone:`AI checked`,recommendation:`Recommendation`,policyReason:`Policy decision`,proposedAction:`Proposed action`,actionStates:{not_authorized:`Suggested only; not authorized for auto-run`,approval_required:`Waiting for your approval`,pending:`Queued to run`,executing:`Running`,completed:`Auto-run completed`,rejected:`Rejected`,failed:`Execution failed`},judgmentReasons:`Why this is recommended`,rejectedAlternatives:`Alternatives not chosen`,uncertainty:`Uncertainty`,snooze:`Tomorrow`,dismiss:`Dismiss`,feedbackPlaceholder:`Tell AI how to judge this kind of event next time…`,applyFeedback:`Update future judgments`,evidence:`Evidence references`,useful:`Useful`,notUseful:`Not useful`,taskStatuses:{pending:`Pending`,planning:`Defining done`,waiting_dependency:`Waiting on dependencies`,running:`In progress`,verifying:`Verifying`,needs_user:`Needs you`,blocked:`Blocked`,paused:`Paused`,completed:`Completed`,cancelled:`Ended`},taskProgress:{title:`xopc owns this task`,open:`View task`,decide:`Review and decide`,evidence:`verified evidence`,statuses:{pending:`Pending`,planning:`Defining done`,waiting_dependency:`Waiting on dependencies`,running:`In progress`,verifying:`Verifying`,needs_user:`Needs you`,blocked:`Needs you`,paused:`Paused`,completed:`Completed`,cancelled:`Ended`}},detailStatuses:{allocating:`Assigning an executor`,captured:`Not scheduled`,ready:`Ready to start`,queued:`Queued`,running:`In progress`,verifying:`Verifying`,waiting:`Waiting`,blocked:`Blocked`,failed:`Execution failed`,cancelled:`Execution cancelled`,needsUser:`Needs your attention`,review:`Ready for review`,completed:`Completed`,ended:`Ended`,paused:`Paused`},detailStatusDescriptions:{allocating:`The task is submitted and a suitable executor is being selected in the background.`,captured:`This task is captured but has not entered the work queue. Schedule it when you are ready.`,ready:`This task is ready for xopc to start.`,queued:`This task is queued and will start when resources are available.`,running:`xopc is currently working on this task.`,verifying:`xopc is checking the result against the completion criteria.`,waiting:`This task is waiting for an external condition.`,blocked:`A blocking condition must be resolved before work can continue.`,failed:`The latest run failed. Review its result before retrying.`,cancelled:`The latest run was cancelled. This task can be started again.`,needsUser:`xopc needs your input or approval before continuing.`,review:`The result is ready for your review.`,completed:`This task is complete and closed.`,ended:`This task has ended and will not continue.`,paused:`Automatic progress and reminders are paused. Other waiting conditions still apply after resuming.`},statusSummary:`Current status`,taskLabel:`Task`,taskDescription:`Description and objective`,editTaskField:`Edit`,saveTaskField:`Save`,cancelTaskField:`Cancel`,noTaskDescription:`Add background, scope, and delivery requirements.`,taskProperties:`Task properties`,taskPhase:`Phase`,priority:`Priority`,dueDate:`Due date`,executorLabel:`Agent`,priorityLabels:{low:`Low priority`,normal:`Normal priority`,high:`High priority`,critical:`Critical`},unassigned:`No assignee`,noDueDate:`No due date`,updatedAt:`Updated {{date}}`,successDefinition:`Definition of done`,taskDefinition:`Task definition`,criteriaProgress:`{{verified}}/{{total}} verified`,taskRelations:`Task relationships`,dependencies:`Dependencies`,dependents:`Dependent tasks`,noDependencies:`No dependencies`,noDependents:`No dependent tasks`,editDependencies:`Edit dependencies`,saveDependencies:`Save relationships`,cancelDependencyEdit:`Cancel`,dependenciesDescription:`xopc starts this task after every selected task is complete.`,linkDependencies:`Link dependencies`,linkedDependencies:`Linked dependencies: {{count}}`,dependencySearchPlaceholder:`Search tasks`,noDependencyMatches:`No matching tasks`,noDependencyCandidates:`There are no other tasks to select`,removeDependency:`Remove dependency: {{task}}`,dependencyUpdateFailed:`Dependencies could not be updated. Refresh and try again.`,expectedOutputs:`Expected outputs`,constraints:`Constraints and boundaries`,approvalRequired:`Your approval is required`,latestResult:`Latest result`,remainingWork:`What remains`,nextAction:`Next action`,yourDecision:`Your one decision`,noRemainingWork:`All completion criteria are covered.`,noDecisionNeeded:`Nothing is needed from you. xopc will keep moving this forward.`,contextUsed:`Context used for this task`,contextSources:`Sources`,contextAssumptions:`Current assumptions`,contextRisks:`Risks`,contextRoleLabels:{input:`Input`,reference:`Reference`,constraint:`Constraint`,deliverable:`Deliverable`,evidence:`Evidence`},contextKindLabels:{document:`Document`,file:`File`,url:`Link`,session:`Conversation`,memory:`Memory`,task:`Task`,artifact:`Artifact`,source:`Source`},currentTask:`Current task`,executionHistory:`Execution history ({{count}})`,receiptStatuses:{succeeded:`Succeeded`,failed:`Failed`,cancelled:`Cancelled`},unresolvedCriteria:`Criteria still to verify`,resultFeedback:`Was this done well?`,doneWell:`Helpful result`,needsFix:`Unhelpful result`,correctionPlaceholder:`Tell xopc what is wrong and what the right task should be`,submitCorrection:`Fix and continue`,feedbackThanks:`Got it. I will use this to improve future work.`,correctionStarted:`Got it. This was reopened and correction has started.`,noDefinition:`xopc is still clarifying the completion criteria. It will not mark this done before they are explicit.`,backToWork:`Back to tasks`,openTaskConversation:`Open conversation`,taskNotFound:`This task was not found`,runTask:`Start working`,scheduleTask:`Schedule work`,scheduleRecurringTask:`Schedule`,approveTask:`Mark complete`,reopenTask:`Reopen`,moreActions:`More actions`,pauseTask:`Pause`,resumeTask:`Continue`,cancelTask:`End task`,cancelActiveRun:`Cancel active run`,deleteTask:`Delete task permanently`,deleteTaskTitle:`Delete this task permanently?`,deleteTaskDescription:`This permanently deletes “{{title}}” and its execution records, context, and receipts. Linked conversations, workspace files, and external artifacts are kept.`,confirmDeleteTask:`Delete permanently`,keepTask:`Keep task`,deleteActiveTaskBlocked:`End the active run before deleting this task permanently.`,actionFailed:`The action failed. Please try again.`,verificationStatuses:{passed:`Verified`,failed:`Verification failed`,unverified:`Not verified`}}}function k(e,t,n,r){return new Promise((i,a)=>{let o=!1,s=(e,n)=>{o||(o=!0,clearTimeout(l),t.removeEventListener(`abort`,c),e===void 0?i(n):a(e))},c=()=>s(t.reason??new DOMException(`Cancelled`,`AbortError`)),l=setTimeout(()=>s(new DOMException(`Voice startup timed out`,`TimeoutError`)),n);e.then(e=>{o?r?.(e):s(void 0,e)},e=>s(e)),t.addEventListener(`abort`,c,{once:!0}),t.aborted&&c()})}function A(e,t,n,r){let i=e.get(t);if(i&&(n<i.revision||i.final&&!r||n===i.revision&&(i.final||!r)))return!1;if(!e.has(t)&&e.size>=256){let t=e.keys().next().value;t!==void 0&&e.delete(t)}return e.set(t,{revision:n,final:r}),!0}var j=e(t(),1),M=null;function le(e){return M&&M!==e?!1:(M=e,!0)}function ue(e){M===e&&(M=null)}function de(e){if(!(e instanceof Error))return!1;let t=e.body,n=typeof t?.error==`object`?t.error.code:void 0;return n===`VOICE_DISABLED`||n===`PROVIDER_UNAVAILABLE`}function fe(e){if(!Number.isFinite(e)||e<0)return`0:00`;let t=Math.floor(e%60);return`${Math.floor(e/60)}:${t.toString().padStart(2,`0`)}`}function pe(e){return e===`requesting`||e===`connecting`||e===`starting`}async function me(){if(!navigator.permissions?.query)return null;try{return(await navigator.permissions.query({name:`microphone`})).state}catch{return null}}function he(e){return e instanceof DOMException||e instanceof Error?e.name:``}function ge(e,t){if(e===`permission`)return`permission`;if(e===`recorder`)return`recorder`;if(e===`session`)return`session`;let n=he(t);return n===`NotAllowedError`||n===`SecurityError`?`permission`:`device`}function _e(e){let{disabled:t,chat:n,onTranscript:r}=e,[o,c]=(0,j.useState)(`idle`),[l,ee]=(0,j.useState)(!1),d=(0,j.useRef)(null),f=(0,j.useRef)(null),te=(0,j.useRef)(void 0),[p,ne]=(0,j.useState)(0),[m,_]=(0,j.useState)(0),[v,y]=(0,j.useState)(``),[b,x]=(0,j.useState)(``),[S,C]=(0,j.useState)(``),[w,T]=(0,j.useState)([]),[E,D]=(0,j.useState)(null),[O,M]=(0,j.useState)(`idle`),[_e,ve]=(0,j.useState)(null),[ye,be]=(0,j.useState)(!1),N=(0,j.useRef)(!1),[P,F]=(0,j.useState)(null),[xe,Se]=(0,j.useState)(null),[Ce,we]=(0,j.useState)(!1),[Te,Ee]=(0,j.useState)(null),I=(0,j.useRef)(void 0),L=(0,j.useRef)(null),[De,Oe]=(0,j.useState)(`dictation`),ke=(0,j.useRef)(Symbol(`voice-capture`)),R=(0,j.useRef)(`idle`),z=(0,j.useRef)(0),B=(0,j.useRef)(null),Ae=(0,j.useRef)(null),V=(0,j.useRef)(null),je=(0,j.useRef)(void 0),Me=(0,j.useRef)(void 0),H=(0,j.useRef)(null),Ne=(0,j.useRef)(null),Pe=(0,j.useRef)(null),U=(0,j.useRef)(new Map),W=(0,j.useRef)(!1),Fe=(0,j.useRef)(()=>{}),Ie=(0,j.useRef)(new Map),G=(0,j.useRef)(null),Le=(0,j.useRef)(null),Re=(0,j.useRef)(!1),ze=(0,j.useRef)(null),Be=(0,j.useRef)(!1),Ve=(0,j.useRef)(0),He=(0,j.useRef)(6e5),Ue=(0,j.useRef)(null),K=(0,j.useRef)(null),We=(0,j.useRef)(r);We.current=r;let q=(0,j.useCallback)(e=>{R.current=e,c(e)},[]),J=(0,j.useCallback)(()=>{Ue.current!=null&&(clearInterval(Ue.current),Ue.current=null)},[]),Y=(0,j.useCallback)(()=>{Ne.current?.getTracks().forEach(e=>e.stop()),Ne.current=null},[]),X=(0,j.useCallback)(()=>{ue(ke.current),z.current+=1,L.current?.abort(),L.current=null,J(),K.current!==null&&clearTimeout(K.current),K.current=null,H.current?.stopRingback(),Y(),d.current?.cancel(),d.current=null,f.current=null,te.current=void 0,ee(!1),B.current?.cancel(),B.current=null,Ae.current=null,V.current=null;let e=H.current;H.current=null,e?.close(),Pe.current=null,ne(0),_(0),y(``),x(``),C(``),M(`idle`),ve(null),T([]),D(null),ze.current=null,N.current=!1,be(!1),we(!1),Ie.current.clear(),U.current.clear(),W.current=!1,G.current=null,Le.current=null},[Y,J]),Z=(0,j.useCallback)(()=>{X(),q(`idle`)},[X,q]),Ge=(0,j.useCallback)(()=>{V.current?.stop(`user_finished`),Z(),F(null),Se(null),Ee(null)},[Z]),Q=(0,j.useCallback)(async e=>{if(W.current)return;W.current=!0;let t=z.current,r=e??[...U.current.values()].join(` `).trim();if(Y(),J(),B.current?.cancel(),B.current=null,q(`transcribing`),!r){u(`warning`,n.voiceTranscribeEmpty),Z();return}let o=r;try{let e=await a(i(`/api/voice/transcriptions/refine`),{method:`POST`,body:JSON.stringify({text:r}),signal:AbortSignal.any([L.current.signal,AbortSignal.timeout(15e3)])});e.payload.text.trim()&&(o=e.payload.text)}catch{if(t!==z.current)return;u(`warning`,n.voiceRefinementFailed)}t===z.current&&(We.current(o),Z())},[Z,n.voiceRefinementFailed,n.voiceTranscribeEmpty,Y,J,q]),Ke=(0,j.useCallback)(async()=>{if(W.current)return;W.current=!0;let e=z.current;J(),q(`transcribing`);try{let t=d.current;if(!f.current&&t){let n=await t.stop();if(e!==z.current)return;f.current=n}if(d.current=null,Y(),e!==z.current)return;let r=f.current;if(!r)throw Error(n.voiceTranscribeEmpty);let i=await g(r,r.type,AbortSignal.any([L.current.signal,AbortSignal.timeout(9e4)]),te.current);if(e!==z.current)return;W.current=!1,await Q(i.text.trim())}catch(t){if(e!==z.current)return;Y(),W.current=!1,F(t instanceof Error?t.message:n.voiceTranscribeFailed),Se(`session`),q(`error`)}},[Q,n.voiceTranscribeEmpty,n.voiceTranscribeFailed,Y,J,q]),qe=(0,j.useCallback)(e=>{Ee(e);let t=R.current;if(!(t===`idle`||t===`error`||W.current)){if(!I.current){if(t===`transcribing`&&e===`input_committed`){Q();return}J(),Y(),B.current?.cancel(),B.current=null,V.current=null,F(n.voiceTranscribeFailed),q(`error`);return}Z()}},[Q,Z,n.voiceTranscribeFailed,Y,J,q]),Je=(0,j.useCallback)(()=>{J(),Ue.current=setInterval(()=>{let e=Pe.current;if(e===null)return;let t=performance.now()-e;if(ne(Math.max(0,t/1e3)),t>=He.current&&R.current===`recording`){if(!I.current){Fe.current();return}Ee(`session_limit`),V.current?.stop(`user_finished`),Z()}},200)},[Z,J]),$=(0,j.useCallback)(async(e,r,i,a=!1)=>{if(t||R.current!==`idle`||e===`conversation`&&!i)return;if(!le(ke.current)){F(n.callCaptureBusy),e===`dictation`&&u(`error`,n.callCaptureBusy);return}I.current=i;let o=new AbortController;L.current=o,F(null),Se(null),Ee(null);let c=++z.current,l=()=>c===z.current;Oe(e),ve(e===`conversation`?`preparing`:null),(!a||!je.current)&&(je.current=crypto.randomUUID()),Me.current=r,C(``),q(`connecting`);let f=performance.now(),p=(e,t,n)=>k(e,o.signal,t,n),m=`permission`;try{if(e===`conversation`){m=`recorder`;let e=new ae;if(H.current=e,await p(e.start(),1e4),!l()){e.close();return}}m=`session`;let t=e===`dictation`?await p(se(o.signal),2e4):null;if(!l())return;if(t?.mode===`unavailable`){let e=Error(n.voiceSttNotConfigured);throw Object.assign(e,{body:{error:{code:`PROVIDER_UNAVAILABLE`}}}),e}let c=t?.mode===`recorded`,f=c?[]:await p(ce.preflight({purpose:e,...e===`conversation`?{mode:r,conversationId:i}:{},signal:o.signal}),2e4);if(!l())return;m=`permission`;let g=window.electronAPI?.system,v=await p(me(),5e3);if(!l()||!pe(R.current))return;if(g&&v!==`granted`){q(`requesting`);let e=await p(g.requestMicrophone(),6e4);if(!l())return;let t=window.electronAPI?.platform===`darwin`&&e.status!==`granted`;if(e.status===`denied`||t)throw Error(`Microphone permission denied`)}else!g&&v!==`granted`&&q(`requesting`);if(!l()||!pe(R.current))return;q(`starting`),window.dispatchEvent(new Event(`xopc-voice-recording-start`)),m=`media`;let b=await p(navigator.mediaDevices.getUserMedia({audio:re()}),15e3,e=>e.getTracks().forEach(e=>e.stop()));if(!l()||!pe(R.current)){b.getTracks().forEach(e=>e.stop());return}if(Ne.current=b,c){m=`recorder`;let e=await p(h.start(b,{onAudioLevel:({level:e})=>{l()&&_(Math.min(1,e*8))}}),15e3,e=>e.cancel());if(!l()){e.cancel();return}d.current=e,te.current=t.provider,ee(!0),He.current=6e5,Pe.current=performance.now(),ne(0),q(`recording`),Je();return}e===`conversation`&&(ve(`dialing`),H.current?.startRingback(),K.current=setTimeout(()=>{l()&&(H.current?.stopRingback(),ve(`slow`),K.current=null)},12e3)),m=`session`,q(`connecting`),U.current.clear();let S=await p(ce.connect({timingMetrics:f,logicalCallId:je.current,recovery:a,language:s(),purpose:e,signal:o.signal,...e===`conversation`?{mode:r,conversationId:i}:{},onEvent:t=>{if(l()&&!((t.type===`input.transcript.delta`||t.type===`input.transcript.final`)&&!A(Ie.current,t.payload.utteranceId,t.payload.revision,t.type===`input.transcript.final`))){if(t.type===`input.transcript.delta`&&y(t.payload.text),t.type===`input.transcript.final`){let n=t.payload.text.trim();y(``),x(n),n&&e===`dictation`&&(U.current.set(t.payload.utteranceId,n),[...U.current.values()].join(` `).length>=2e4&&R.current===`recording`&&Fe.current(),x([...U.current.values()].join(` `)))}if(t.type===`input.speech_stopped`&&(ze.current=performance.now()),t.type===`response.created`){if(G.current){G.current!==t.payload.responseId&&V.current?.cancelResponse(t.payload.responseId);return}G.current=t.payload.responseId,Re.current=!1,Be.current=!1,Ve.current=0,C(``),T([]),D(null),M(`thinking`)}if(t.type===`task.created`&&G.current===t.payload.responseId&&(Le.current=t.payload.taskId),t.type===`task.activity`&&Le.current===t.payload.taskId){let e={toolCallId:t.payload.toolCallId,toolName:t.payload.toolName,status:t.payload.status};T(t=>[...t.filter(t=>t.toolCallId!==e.toolCallId),e].slice(-8))}if(t.type===`task.done`&&Le.current===t.payload.taskId&&(Le.current=null,T([])),t.type===`response.clarification`&&G.current===t.payload.responseId&&D(t.payload),t.type===`response.text.delta`&&G.current===t.payload.responseId&&(M(`speaking`),C(e=>e+t.payload.delta)),t.type===`response.audio.started`&&G.current===t.payload.responseId&&M(`speaking`),t.type===`response.done`&&G.current===t.payload.responseId&&(Re.current=!0,H.current?.hasPendingAudio||(G.current=null,M(`idle`))),t.type===`response.cancelled`&&G.current===t.payload.responseId&&(G.current=null,M(`idle`),H.current?.clear()),t.type===`session.error`&&t.payload.recoverable&&t.payload.code===`RESPONSE_FAILED`&&u(`warning`,n.voiceResponseFailed),t.type===`session.error`&&t.payload.recoverable&&t.payload.code===`INPUT_DROPPED`&&u(`warning`,n.voiceInputDropped),t.type===`session.error`&&!t.payload.recoverable){let r=t.payload.code===`PROVIDER_UNAVAILABLE`,i=t.payload.code===`CONTEXT_CHANGED`?n.voiceContextChanged:r?n.voiceSttNotConfigured:t.payload.message;F(i),Se(`session`),we(r),e===`dictation`&&u(`error`,i,void 0,r?{href:`/settings/capabilities/models?configure=transcription`}:void 0),V.current?.stop(`surface_closed`),e===`conversation`?X():(J(),Y(),B.current?.cancel(),B.current=null,V.current=null),q(`error`)}}},onAudio:(e,t)=>{if(!l())return;let n=G.current;if(!n||t!==n)return;let r=!Be.current,i=ze.current;r&&(Be.current=!0,ze.current!==null&&V.current?.reportMetric(n,`speech_end_to_audio_received`,performance.now()-ze.current),ze.current=null);let a=H.current?.enqueue(e,()=>{G.current===n&&(Ve.current+=e.byteLength,V.current?.acknowledgeAudio(n,Ve.current),Re.current&&!H.current?.hasPendingAudio&&(G.current=null,M(`idle`)))});r&&i!==null&&a!==void 0&&V.current?.reportMetric(n,`speech_end_to_audio_scheduled`,performance.now()-i+a)},onClose:e=>{l()&&qe(e)}}),2e4,e=>e.stop(`surface_closed`));if(!l()){S.stop(`surface_closed`);return}H.current?.stopRingback(),K.current!==null&&clearTimeout(K.current),K.current=null,V.current=S,He.current=S.session.limits.maxSessionMs,m=`recorder`,q(`starting`);let w,E=[],O=await p(oe.start(b,{onSamples:e=>{if(!l()||N.current)return;if(!w){E.push(e);return}let t=(Ae.current??w).push(e);t&&S.sendAudio(t)},onAudioLevel:({level:e})=>{l()&&(N.current||_(Math.min(1,e*8)))}}),15e3,e=>e.cancel());if(!l()||!pe(R.current)){O.cancel(),S.stop(`surface_closed`),b.getTracks().forEach(e=>e.stop());return}if(B.current=O,e===`conversation`&&(await p(H.current.start(),1e4),!l()))return;S.outputReady(),w=new ie(O.sampleRate,S.session.inputFormat.sampleRate),Ae.current=w;for(let e of E)S.sendAudio(w.push(e));Pe.current=performance.now(),ne(0),q(`recording`),ve(null),Je()}catch(t){if(!l())return;let r=ge(m,t);console.error(`[chat:voice] realtime capture start failed`,{stage:m,durationMs:Math.round(performance.now()-f),kind:r,errorName:he(t),errorMessage:t instanceof Error?t.message:String(t)}),V.current?.stop(`surface_closed`),X(),q(r===`session`?`error`:`idle`);let i=r===`session`&&de(t),a=he(t)===`TimeoutError`?m===`session`?n.voiceConnectionTimeout:n.voiceMicrophoneTimeout:r===`permission`?n.voiceMicDenied:r===`device`?n.voiceMicUnavailable:r===`recorder`?n.voiceRecorderFailed:i?n.voiceSttNotConfigured:t instanceof Error?t.message:n.voiceSttNotConfigured;F(a),Se(r),we(i),e===`dictation`&&u(`error`,a,void 0,i?{href:`/settings/capabilities/models?configure=transcription`}:void 0)}},[t,qe,n,X,Je,Y,J,q]),Ye=(0,j.useCallback)(()=>{if(I.current)return;if(d.current||f.current){Ke();return}if(R.current===`error`&&U.current.size){Q();return}if(R.current!==`recording`)return;q(`transcribing`),J(),Y();let e=B.current,t=z.current;B.current=null,e?.stop().then(()=>{if(t!==z.current)return;let e=Ae.current?.flush();e&&V.current?.sendAudio(e),V.current?.commit()}).catch(()=>{t===z.current&&(u(`error`,n.voiceTranscribeFailed),V.current?.stop(`surface_closed`),X(),q(`error`))})},[Q,Ke,n.voiceTranscribeFailed,X,Y,J,q]);Fe.current=Ye,(0,j.useEffect)(()=>()=>{ue(ke.current),z.current+=1,L.current?.abort(),d.current?.cancel(),f.current=null,B.current?.cancel(),V.current?.stop(`surface_closed`),H.current?.close(),K.current!==null&&clearTimeout(K.current),Y(),J()},[Y,J]);let Xe=(0,j.useCallback)(()=>{if(R.current===`error`){if(f.current){Ke();return}X(),q(`idle`),$(De,Me.current,I.current,!0)}},[$,Ke,De,X,q]),Ze=(0,j.useCallback)(()=>$(`dictation`),[$]),Qe=(0,j.useCallback)((e,t)=>$(`conversation`,t,e),[$]),$e=(0,j.useCallback)(()=>{let e=performance.now(),t=G.current;H.current?.clear(),G.current=null,M(`idle`),t&&(V.current?.reportMetric(t,`local_stop`,performance.now()-e),V.current?.cancelResponse(t))},[]),et=(0,j.useCallback)(()=>{let e=!N.current;N.current=e,Ne.current?.getAudioTracks().forEach(t=>{t.enabled=!e});let t=B.current,n=V.current;t&&n&&(Ae.current=new ie(t.sampleRate,n.session.inputFormat.sampleRate)),n?.setInputMuted(e),y(``),_(0),H.current?.duck(!1),be(e)},[]);return{phase:o,voiceActive:o!==`idle`,recordedDictation:l,elapsedLabel:fe(p),audioLevel:m,partialTranscript:v,finalTranscript:b,responseText:S,activities:w,clarification:E,dismissClarification:e=>D(t=>t?.requestId===e?null:t),responsePhase:O,callConnectionStage:_e,muted:ye,error:P,failureKind:xe,settingsRequired:Ce,endedReason:Te,mode:De,startVoiceInput:Ze,startVoiceConversation:Qe,interruptResponse:$e,toggleMute:et,cancelVoiceInput:Ge,confirmVoiceInput:Ye,retryVoiceInput:Xe}}var ve=o(e=>({path:null,line:null,projectId:null,conversationId:null,setPath:(t,n,r,i,a)=>{if(t){let e=m.getState().scope;m.getState().openFile({path:t,line:n,projectId:r||void 0,conversationId:i||(e===`new`?void 0:e),agentId:b.getState().agentId||void 0,resultRevision:a})}e({path:t,resultRevision:t?a:void 0,line:t&&typeof n==`number`&&Number.isFinite(n)&&n>0?Math.floor(n):null,projectId:t&&r?.trim()||null,conversationId:t&&i?.trim()||null})}}));function ye(e){return`${e.name}\0${e.size}`}function be(e){if(!e)return[];let t=new Set,n=[],r=e=>{if(!e||e.size===0)return;let r=ye(e);t.has(r)||(t.add(r),n.push(e))},{files:i}=e;if(i?.length)for(let e=0;e<i.length;e++)r(i.item(e));for(let t of Array.from(e.items??[]))t.kind===`file`&&r(t.getAsFile());return n}var N=n(),P=r();function F(e){let t=(0,N.c)(10),{disabled:n,chat:r,onStart:i}=e,a=x(xe),o=r.voiceInput,s;t[0]===a?s=t[1]:(s=S(a).join(`+`),t[0]=a,t[1]=s);let c=`${o} (${s})`,l;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(l=p(`relative inline-flex size-11 sm:size-8 shrink-0 items-center justify-center rounded-lg border border-transparent text-fg-subtle hover:bg-surface-hover hover:text-fg`,y.transition,y.press,y.focusRingPanel,`disabled:cursor-not-allowed disabled:opacity-50`),t[2]=l):l=t[2];let u;t[3]===i?u=t[4]:(u=()=>void i(),t[3]=i,t[4]=u);let d;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,P.jsx)(ee,{className:`size-4 stroke-[1.75]`}),t[5]=d):d=t[5];let f;return t[6]!==n||t[7]!==u||t[8]!==c?(f=(0,P.jsx)(`button`,{type:`button`,className:l,disabled:n,title:c,"aria-label":c,onClick:u,children:d}),t[6]=n,t[7]=u,t[8]=c,t[9]=f):f=t[9],f}function xe(e){return e.shortcut}function Se(e,t){let n=t.trim();if(!n)return e;let r=e.trim();return r?`${r} ${n}`:n}var Ce=p(`inline-flex min-h-11 min-w-11 shrink-0 gap-2 px-3 items-center justify-center rounded-lg text-fg-muted`,`hover:bg-surface-hover hover:text-fg`,y.transition,y.press,y.focusRingPanel,`disabled:cursor-not-allowed disabled:opacity-50`),we=(0,j.memo)(function(e){let t=(0,N.c)(47),{phase:n,elapsedLabel:r,recordedDictation:i,audioLevel:a,partialTranscript:o,finalTranscript:s,error:u,settingsRequired:ee,disabled:m,chat:h,onCancel:re,onConfirm:ie,onRetry:ae}=e,g=n===`transcribing`,oe=n===`requesting`,se=n===`connecting`,ce=n===`starting`,_=n===`error`,v=_?u||h.voiceTranscribeFailed:oe?h.voiceRequestingMicrophone:se?h.voiceConnectingService:ce?h.voiceStartingMicrophone:g?h.voiceTranscribing:i?h.voiceRecordedDictationStatus:h.voiceRecordingStatus,y;t[0]!==s||t[1]!==o?(y=[s,o].filter(Boolean),t[0]=s,t[1]=o,t[2]=y):y=t[2];let b=y.join(` `),x=oe||se||ce||g,S;t[3]!==a||t[4]!==_||t[5]!==n?(S=n===`recording`?(0,P.jsx)(`div`,{className:`flex h-5 shrink-0 items-center gap-0.5`,"aria-hidden":!0,children:Array.from({length:9},(e,t)=>{let n=.35+(t%4+1)*.16;return(0,P.jsx)(`span`,{className:`w-0.5 rounded-full bg-fg-muted motion-safe:transition-[height] motion-safe:duration-75`,style:{height:Math.max(3,Math.round(18*Math.min(1,a*n+.08)))}},t)})}):_?(0,P.jsx)(l,{className:`size-4 shrink-0 text-danger`,"aria-hidden":!0}):(0,P.jsx)(ne,{className:`h-4 w-8`}),t[3]=a,t[4]=_,t[5]=n,t[6]=S):S=t[6];let C=_?`alert`:`status`,w;t[7]!==v||t[8]!==C?(w=(0,P.jsx)(`p`,{className:`min-w-0 flex-1 break-words text-sm text-fg-muted`,role:C,children:v}),t[7]=v,t[8]=C,t[9]=w):w=t[9];let T;t[10]!==r||t[11]!==n?(T=n===`recording`?(0,P.jsx)(`span`,{className:`shrink-0 text-sm tabular-nums text-fg-muted`,children:r}):null,t[10]=r,t[11]=n,t[12]=T):T=t[12];let E;t[13]!==S||t[14]!==w||t[15]!==T?(E=(0,P.jsxs)(`div`,{className:`flex items-center gap-3 px-1`,children:[S,w,T]}),t[13]=S,t[14]=w,t[15]=T,t[16]=E):E=t[16];let D;t[17]===b?D=t[18]:(D=b?(0,P.jsx)(`p`,{className:`max-h-28 overflow-y-auto overscroll-contain whitespace-pre-wrap break-words px-1 text-base text-fg`,children:b}):null,t[17]=b,t[18]=D);let O;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,P.jsx)(te,{className:`size-4`,"aria-hidden":!0}),t[19]=O):O=t[19];let k;t[20]!==h.voiceInputCancel||t[21]!==re?(k=(0,P.jsxs)(`button`,{type:`button`,className:Ce,title:h.voiceInputCancel,"aria-label":h.voiceInputCancel,onClick:re,children:[O,h.voiceInputCancel]}),t[20]=h.voiceInputCancel,t[21]=re,t[22]=k):k=t[22];let A;t[23]!==m||t[24]!==_||t[25]!==h.voiceOpenSettings||t[26]!==h.voiceRetry||t[27]!==ae||t[28]!==ee?(A=_&&ee?(0,P.jsxs)(`a`,{onClick:Te,href:`#/settings/capabilities/models?configure=transcription`,className:p(Ce,`text-accent-fg`),children:[(0,P.jsx)(f,{className:`size-4`,"aria-hidden":!0}),h.voiceOpenSettings]}):_?(0,P.jsxs)(`button`,{type:`button`,className:Ce,disabled:m,"aria-label":h.voiceRetry,onClick:ae,children:[(0,P.jsx)(d,{className:`size-4`,"aria-hidden":!0}),h.voiceRetry]}):null,t[23]=m,t[24]=_,t[25]=h.voiceOpenSettings,t[26]=h.voiceRetry,t[27]=ae,t[28]=ee,t[29]=A):A=t[29];let j;t[30]!==m||t[31]!==_||t[32]!==s||t[33]!==h.voiceInputConfirm||t[34]!==ie||t[35]!==n?(j=n===`recording`||_&&s?(0,P.jsxs)(`button`,{type:`button`,className:p(Ce,`rounded-full bg-accent text-on-accent hover:bg-accent-hover hover:text-on-accent`),disabled:m,"aria-label":h.voiceInputConfirm,onClick:ie,children:[(0,P.jsx)(c,{className:`size-4`,"aria-hidden":!0}),h.voiceInputConfirm]}):null,t[30]=m,t[31]=_,t[32]=s,t[33]=h.voiceInputConfirm,t[34]=ie,t[35]=n,t[36]=j):j=t[36];let M;t[37]!==k||t[38]!==A||t[39]!==j?(M=(0,P.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[k,A,j]}),t[37]=k,t[38]=A,t[39]=j,t[40]=M):M=t[40];let le;return t[41]!==h.voiceInput||t[42]!==M||t[43]!==x||t[44]!==E||t[45]!==D?(le=(0,P.jsxs)(`section`,{className:`w-full space-y-3 py-3`,"aria-label":h.voiceInput,"aria-busy":x,children:[E,D,M]}),t[41]=h.voiceInput,t[42]=M,t[43]=x,t[44]=E,t[45]=D,t[46]=le):le=t[46],le});function Te(e){!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&e.button===0&&(e.preventDefault(),_(`transcription`))}var Ee=120*1e3,I=new Map;function L(){return typeof globalThis.crypto?.randomUUID==`function`?globalThis.crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function De(e){for(let[t,n]of I)n.expiresAt<=e&&I.delete(t)}function Oe(e,t=Date.now()){De(t);let n=L();return I.set(n,{attachments:e.map(e=>({...e})),expiresAt:t+Ee}),n}function ke(e,t=Date.now()){let n=I.get(e);if(!n)return null;if(n.expiresAt<=t)return I.delete(e),null;if(!n.attachments)return null;let r=n.attachments;return n.attachments=null,r}export{F as a,_e as c,O as d,w as f,T as g,C as h,Se as i,le as l,D as m,ke as n,be as o,E as p,we as r,ve as s,Oe as t,ue as u};
1
+ import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{i,o as a,p as o,r as s}from"./locale-store-Br7IfbXK.js";import{t as c}from"./check-DUBLcKHA.js";import{t as l}from"./circle-alert-BEjgurr2.js";import{x as u}from"./use-file-preview-expanded-Ce2mgYme.js";import{t as ee}from"./mic-CuUb7zc-.js";import{t as d}from"./rotate-ccw-JM1TBLpp.js";import{t as f}from"./settings-2-D-csvaET.js";import{t as te}from"./x-B_N4OPjy.js";import{t as p}from"./cn-0WouolD0.js";import{t as ne}from"./skeleton-BI5TyibZ.js";import{s as m}from"./file-preview-surface-DfkXvFnc.js";import{a as h,f as re,i as ie,l as ae,n as g,r as oe,t as se,u as ce}from"./voice-transcribe-api-Bbyj0yGR.js";import{t as _}from"./open-capability-settings-Cvb65hQB.js";import{d as v}from"./tasks-DRmd6sWt.js";import{n as y}from"./interaction-BdhHBbYa.js";import{t as b}from"./workspace-editor-agent-store-4cZ26iaD.js";import{l as x,p as S}from"./voice-input-shortcut-events-DFMNIyy4.js";function C(e){let t=e.task.contract?.acceptanceCriteria??[],n=new Map(e.runs.map(e=>[e.id,e])),r=e.receipts.filter(t=>n.get(t.runId)?.contractVersion===e.task.latestContractVersion).sort((e,t)=>t.finalizedAt-e.finalizedAt);return t.map((t,n)=>{let i=e.criterionReviews.find(r=>r.criterionIndex===n&&r.contractVersion===e.task.latestContractVersion&&r.criterionText===t),a={text:t,status:`unverified`,evidence:[]};for(let e of r){let n=e.verification.checks.find(e=>e.criterion===t);if(!n)continue;let r=e.evidence.filter(e=>n.evidenceTitles.includes(e.title)),i=n.status===`passed`&&v(e).has(t)?`passed`:n.status===`failed`?`failed`:`unverified`;a={text:t,status:i,evidence:r,runId:e.runId,verificationStatus:i,method:n.method,note:n.note};break}return i&&e.task.contract?.acceptancePolicy!==`verified_auto`?{...a,status:i.status,review:i}:e.task.contract?.acceptancePolicy===`manual`?{...a,status:`unverified`}:a})}function w(e){let t=new Set(e.runs.filter(t=>t.contractVersion===e.task.latestContractVersion).map(e=>e.id));return e.receipts.filter(e=>t.has(e.runId)).sort((e,t)=>t.finalizedAt-e.finalizedAt)[0]}function T(e){let t=w(e),n=C(e);return{receipt:t,verified:n.filter(e=>e.status===`passed`).length,criteria:n.length,deliverables:e.context.filter(e=>e.role===`deliverable`).length}}function E(e){return e.task.phase===`closed`?e.task.resolution===`done`?`completed`:`ended`:e.waits.some(e=>e.kind===`paused`)?`paused`:e.attention.some(e=>e.kind===`input_required`||e.kind===`approval_required`)?`needsUser`:e.operationalState===`idle`?e.task.phase===`backlog`?`captured`:e.task.phase===`ready`?`ready`:e.task.phase===`review`?`review`:`ready`:e.operationalState}function D(e){return e===`failed`?`bg-danger/10 text-danger`:e===`needsUser`||e===`blocked`?`bg-warning/10 text-warning`:e===`completed`?`bg-success-soft text-success`:e===`running`||e===`verifying`||e===`review`?`bg-accent-soft text-accent-fg`:`bg-surface-hover text-fg-muted`}function O(e){return e===`zh`?{newWork:`交给 xopc`,dialogTitle:`现在想完成什么?`,dialogDescription:`发送后会进入新对话。xopc 会直接回答或开始处理;需要持续推进时,再转为任务。`,intentLabel:`告诉 xopc 你要做什么`,intentPlaceholder:`例如:整理这周的会议记录,提炼待办并给出下周优先级`,intentSuggestion:`整理这周的会议记录,提炼待办并给出下周优先级`,submit:`进入对话并开始`,projectLabel:`归属项目`,monitoringLabel:`跟进策略`,monitoringModes:{observe:`仅观察`,ask_before_action:`行动前询问`,auto_low_risk:`自动执行低风险操作`},existingProject:`已有项目`,newProject:`新项目`,needsAttention:`需要你处理`,waitingStatus:`当前等待`,runAttention:`运行异常`,running:`xopc 正在处理`,continue:`继续推进`,recent:`最近对话`,evidenceCount:`项证据`,remainingCount:`项待继续`,projects:`长期项目`,emptyRunning:`当前没有正在处理的对话`,emptyContinue:`还没有需要继续推进的事项`,openChat:`打开对话`,whyNow:`为什么现在`,impact:`影响`,workDone:`AI 已完成`,recommendation:`建议`,policyReason:`处理依据`,proposedAction:`拟执行动作`,actionStates:{not_authorized:`仅建议,未获自动执行授权`,approval_required:`等待你批准`,pending:`等待执行`,executing:`正在执行`,completed:`已自动执行`,rejected:`已拒绝`,failed:`执行失败`},judgmentReasons:`判断依据`,rejectedAlternatives:`未选方案`,uncertainty:`不确定性`,snooze:`明天再看`,dismiss:`忽略`,feedbackPlaceholder:`告诉 AI:以后遇到这类情况应该怎样判断…`,applyFeedback:`调整后续判断`,evidence:`证据引用`,useful:`有帮助`,notUseful:`没帮助`,taskStatuses:{pending:`待推进`,planning:`正在明确完成标准`,waiting_dependency:`等待前置任务`,running:`正在推进`,verifying:`正在验证`,needs_user:`需要你`,blocked:`已阻塞`,paused:`已暂停`,completed:`已完成`,cancelled:`已结束`},taskProgress:{title:`xopc 已接手`,open:`查看结果`,decide:`查看并决定`,evidence:`项已验证依据`,statuses:{pending:`待推进`,planning:`正在明确完成标准`,waiting_dependency:`等待前置任务`,running:`正在推进`,verifying:`正在验证`,needs_user:`需要你`,blocked:`已阻塞`,paused:`已暂停`,completed:`已完成`,cancelled:`已结束`}},detailStatuses:{allocating:`正在分配执行者`,captured:`尚未安排`,ready:`等待开始`,queued:`已进入队列`,running:`正在执行`,verifying:`正在验证`,waiting:`等待条件`,blocked:`被阻塞`,failed:`执行失败`,cancelled:`执行已取消`,needsUser:`需要你处理`,review:`等待验收`,completed:`已完成`,ended:`已结束`,paused:`已暂停`},detailStatusDescriptions:{allocating:`任务已提交,正在后台选择合适的执行者。`,captured:`任务已记录,但尚未进入执行队列。安排后,xopc 会开始推进。`,ready:`任务已经准备好,可以交给 xopc 开始执行。`,queued:`任务已进入执行队列,xopc 将在资源可用时开始。`,running:`xopc 正在推进这个任务。`,verifying:`xopc 正在根据完成标准核验结果。`,waiting:`任务正在等待外部条件满足。`,blocked:`当前存在阻塞条件,解除后才能继续。`,failed:`最近一次执行失败;查看运行记录后可以重试。`,cancelled:`最近一次执行已取消;任务仍可重新开始。`,needsUser:`xopc 需要你的输入或批准后才能继续。`,review:`执行结果已经准备好,等待你验收。`,completed:`任务已经完成并关闭。`,ended:`任务已经结束,不会继续执行。`,paused:`已暂停自动推进和催办。恢复后仍需满足其他等待条件。`},statusSummary:`当前状态`,taskLabel:`任务`,taskDescription:`任务描述与目标`,editTaskField:`编辑`,saveTaskField:`保存`,cancelTaskField:`取消`,noTaskDescription:`添加任务背景、范围和交付要求。`,taskProperties:`任务属性`,taskPhase:`阶段`,priority:`优先级`,dueDate:`截止日期`,executorLabel:`执行 Agent`,priorityLabels:{low:`低优先级`,normal:`普通优先级`,high:`高优先级`,critical:`紧急`},unassigned:`未指定执行者`,noDueDate:`无截止时间`,updatedAt:`更新于 {{date}}`,successDefinition:`怎样才算完成`,taskDefinition:`任务定义`,criteriaProgress:`{{verified}}/{{total}} 已验证`,taskRelations:`任务关系`,dependencies:`前置任务`,dependents:`后续任务`,noDependencies:`没有前置任务`,noDependents:`没有后续任务`,editDependencies:`编辑前置任务`,saveDependencies:`保存关系`,cancelDependencyEdit:`取消`,dependenciesDescription:`所选任务全部完成后,xopc 才会开始推进当前任务。`,linkDependencies:`关联前置任务`,linkedDependencies:`已关联 {{count}} 个前置任务`,dependencySearchPlaceholder:`搜索任务名称`,noDependencyMatches:`没有匹配的任务`,noDependencyCandidates:`没有可选的其他任务`,removeDependency:`移除前置任务:{{task}}`,dependencyUpdateFailed:`前置任务更新失败,请刷新后重试。`,expectedOutputs:`预期输出`,constraints:`约束与边界`,approvalRequired:`需要你批准`,latestResult:`最新结果`,remainingWork:`还差什么`,nextAction:`下一步`,yourDecision:`只需你决定`,noRemainingWork:`已覆盖全部完成标准。`,noDecisionNeeded:`暂时不需要你做任何事,xopc 会继续推进。`,contextUsed:`本次使用的上下文`,contextSources:`信息来源`,contextAssumptions:`当前假设`,contextRisks:`风险`,contextRoleLabels:{input:`输入`,reference:`参考`,constraint:`约束`,deliverable:`交付物`,evidence:`证据`},contextKindLabels:{document:`文档`,file:`文件`,url:`链接`,session:`对话`,memory:`记忆`,task:`任务`,artifact:`产物`,source:`来源`},currentTask:`当前任务`,executionHistory:`历史执行记录({{count}})`,receiptStatuses:{succeeded:`执行成功`,failed:`执行失败`,cancelled:`已取消`},unresolvedCriteria:`待验证标准`,resultFeedback:`这件事做好了吗?`,doneWell:`结果有帮助`,needsFix:`结果没帮助`,correctionPlaceholder:`告诉 xopc 哪里不对、你真正想要的结果是什么`,submitCorrection:`修正并继续`,feedbackThanks:`收到,我会据此继续改进。`,correctionStarted:`收到,已重新打开并开始修正。`,noDefinition:`系统正在进一步明确完成标准。未明确前不会把事情误判为已完成。`,backToWork:`返回任务列表`,openTaskConversation:`进入对话`,taskNotFound:`没有找到这个任务`,runTask:`开始推进`,scheduleTask:`安排执行`,scheduleRecurringTask:`定时执行`,approveTask:`确认完成`,reopenTask:`重新打开`,moreActions:`更多操作`,pauseTask:`暂停推进`,resumeTask:`继续推进`,cancelTask:`结束事项`,cancelActiveRun:`取消当前执行`,deleteTask:`永久删除任务`,deleteTaskTitle:`永久删除这个任务?`,deleteTaskDescription:`将永久删除“{{title}}”及其执行记录、上下文和回执。关联对话、工作区文件和外部产物不会被删除。`,confirmDeleteTask:`永久删除`,keepTask:`保留任务`,deleteActiveTaskBlocked:`请先结束当前执行,再永久删除任务。`,actionFailed:`操作失败,请重试。`,verificationStatuses:{passed:`已验证`,failed:`验证未通过`,unverified:`待验证`}}:{newWork:`Ask xopc`,dialogTitle:`What do you want to get done?`,dialogDescription:`This opens a new conversation. xopc will answer or start working, and create a task only when the work needs ongoing progress.`,intentLabel:`Tell xopc what you need`,intentPlaceholder:`For example: summarize this week’s meeting notes and suggest next week’s priorities`,intentSuggestion:`Summarize this week’s meeting notes and suggest next week’s priorities`,submit:`Open conversation and start`,projectLabel:`Project`,monitoringLabel:`Follow-up policy`,monitoringModes:{observe:`Observe only`,ask_before_action:`Ask before acting`,auto_low_risk:`Auto-run low-risk actions`},existingProject:`Existing project`,newProject:`New project`,needsAttention:`Needs your attention`,waitingStatus:`Current status`,runAttention:`Run issues`,running:`xopc is working`,continue:`Continue`,recent:`Recent conversations`,evidenceCount:`evidence items`,remainingCount:`remaining`,projects:`Long-term projects`,emptyRunning:`No conversations are running`,emptyContinue:`No ongoing items yet`,openChat:`Open conversation`,whyNow:`Why now`,impact:`Impact`,workDone:`AI checked`,recommendation:`Recommendation`,policyReason:`Policy decision`,proposedAction:`Proposed action`,actionStates:{not_authorized:`Suggested only; not authorized for auto-run`,approval_required:`Waiting for your approval`,pending:`Queued to run`,executing:`Running`,completed:`Auto-run completed`,rejected:`Rejected`,failed:`Execution failed`},judgmentReasons:`Why this is recommended`,rejectedAlternatives:`Alternatives not chosen`,uncertainty:`Uncertainty`,snooze:`Tomorrow`,dismiss:`Dismiss`,feedbackPlaceholder:`Tell AI how to judge this kind of event next time…`,applyFeedback:`Update future judgments`,evidence:`Evidence references`,useful:`Useful`,notUseful:`Not useful`,taskStatuses:{pending:`Pending`,planning:`Defining done`,waiting_dependency:`Waiting on dependencies`,running:`In progress`,verifying:`Verifying`,needs_user:`Needs you`,blocked:`Blocked`,paused:`Paused`,completed:`Completed`,cancelled:`Ended`},taskProgress:{title:`xopc owns this task`,open:`View task`,decide:`Review and decide`,evidence:`verified evidence`,statuses:{pending:`Pending`,planning:`Defining done`,waiting_dependency:`Waiting on dependencies`,running:`In progress`,verifying:`Verifying`,needs_user:`Needs you`,blocked:`Needs you`,paused:`Paused`,completed:`Completed`,cancelled:`Ended`}},detailStatuses:{allocating:`Assigning an executor`,captured:`Not scheduled`,ready:`Ready to start`,queued:`Queued`,running:`In progress`,verifying:`Verifying`,waiting:`Waiting`,blocked:`Blocked`,failed:`Execution failed`,cancelled:`Execution cancelled`,needsUser:`Needs your attention`,review:`Ready for review`,completed:`Completed`,ended:`Ended`,paused:`Paused`},detailStatusDescriptions:{allocating:`The task is submitted and a suitable executor is being selected in the background.`,captured:`This task is captured but has not entered the work queue. Schedule it when you are ready.`,ready:`This task is ready for xopc to start.`,queued:`This task is queued and will start when resources are available.`,running:`xopc is currently working on this task.`,verifying:`xopc is checking the result against the completion criteria.`,waiting:`This task is waiting for an external condition.`,blocked:`A blocking condition must be resolved before work can continue.`,failed:`The latest run failed. Review its result before retrying.`,cancelled:`The latest run was cancelled. This task can be started again.`,needsUser:`xopc needs your input or approval before continuing.`,review:`The result is ready for your review.`,completed:`This task is complete and closed.`,ended:`This task has ended and will not continue.`,paused:`Automatic progress and reminders are paused. Other waiting conditions still apply after resuming.`},statusSummary:`Current status`,taskLabel:`Task`,taskDescription:`Description and objective`,editTaskField:`Edit`,saveTaskField:`Save`,cancelTaskField:`Cancel`,noTaskDescription:`Add background, scope, and delivery requirements.`,taskProperties:`Task properties`,taskPhase:`Phase`,priority:`Priority`,dueDate:`Due date`,executorLabel:`Agent`,priorityLabels:{low:`Low priority`,normal:`Normal priority`,high:`High priority`,critical:`Critical`},unassigned:`No assignee`,noDueDate:`No due date`,updatedAt:`Updated {{date}}`,successDefinition:`Definition of done`,taskDefinition:`Task definition`,criteriaProgress:`{{verified}}/{{total}} verified`,taskRelations:`Task relationships`,dependencies:`Dependencies`,dependents:`Dependent tasks`,noDependencies:`No dependencies`,noDependents:`No dependent tasks`,editDependencies:`Edit dependencies`,saveDependencies:`Save relationships`,cancelDependencyEdit:`Cancel`,dependenciesDescription:`xopc starts this task after every selected task is complete.`,linkDependencies:`Link dependencies`,linkedDependencies:`Linked dependencies: {{count}}`,dependencySearchPlaceholder:`Search tasks`,noDependencyMatches:`No matching tasks`,noDependencyCandidates:`There are no other tasks to select`,removeDependency:`Remove dependency: {{task}}`,dependencyUpdateFailed:`Dependencies could not be updated. Refresh and try again.`,expectedOutputs:`Expected outputs`,constraints:`Constraints and boundaries`,approvalRequired:`Your approval is required`,latestResult:`Latest result`,remainingWork:`What remains`,nextAction:`Next action`,yourDecision:`Your one decision`,noRemainingWork:`All completion criteria are covered.`,noDecisionNeeded:`Nothing is needed from you. xopc will keep moving this forward.`,contextUsed:`Context used for this task`,contextSources:`Sources`,contextAssumptions:`Current assumptions`,contextRisks:`Risks`,contextRoleLabels:{input:`Input`,reference:`Reference`,constraint:`Constraint`,deliverable:`Deliverable`,evidence:`Evidence`},contextKindLabels:{document:`Document`,file:`File`,url:`Link`,session:`Conversation`,memory:`Memory`,task:`Task`,artifact:`Artifact`,source:`Source`},currentTask:`Current task`,executionHistory:`Execution history ({{count}})`,receiptStatuses:{succeeded:`Succeeded`,failed:`Failed`,cancelled:`Cancelled`},unresolvedCriteria:`Criteria still to verify`,resultFeedback:`Was this done well?`,doneWell:`Helpful result`,needsFix:`Unhelpful result`,correctionPlaceholder:`Tell xopc what is wrong and what the right task should be`,submitCorrection:`Fix and continue`,feedbackThanks:`Got it. I will use this to improve future work.`,correctionStarted:`Got it. This was reopened and correction has started.`,noDefinition:`xopc is still clarifying the completion criteria. It will not mark this done before they are explicit.`,backToWork:`Back to tasks`,openTaskConversation:`Open conversation`,taskNotFound:`This task was not found`,runTask:`Start working`,scheduleTask:`Schedule work`,scheduleRecurringTask:`Schedule`,approveTask:`Mark complete`,reopenTask:`Reopen`,moreActions:`More actions`,pauseTask:`Pause`,resumeTask:`Continue`,cancelTask:`End task`,cancelActiveRun:`Cancel active run`,deleteTask:`Delete task permanently`,deleteTaskTitle:`Delete this task permanently?`,deleteTaskDescription:`This permanently deletes “{{title}}” and its execution records, context, and receipts. Linked conversations, workspace files, and external artifacts are kept.`,confirmDeleteTask:`Delete permanently`,keepTask:`Keep task`,deleteActiveTaskBlocked:`End the active run before deleting this task permanently.`,actionFailed:`The action failed. Please try again.`,verificationStatuses:{passed:`Verified`,failed:`Verification failed`,unverified:`Not verified`}}}function k(e,t,n,r){return new Promise((i,a)=>{let o=!1,s=(e,n)=>{o||(o=!0,clearTimeout(l),t.removeEventListener(`abort`,c),e===void 0?i(n):a(e))},c=()=>s(t.reason??new DOMException(`Cancelled`,`AbortError`)),l=setTimeout(()=>s(new DOMException(`Voice startup timed out`,`TimeoutError`)),n);e.then(e=>{o?r?.(e):s(void 0,e)},e=>s(e)),t.addEventListener(`abort`,c,{once:!0}),t.aborted&&c()})}function A(e,t,n,r){let i=e.get(t);if(i&&(n<i.revision||i.final&&!r||n===i.revision&&(i.final||!r)))return!1;if(!e.has(t)&&e.size>=256){let t=e.keys().next().value;t!==void 0&&e.delete(t)}return e.set(t,{revision:n,final:r}),!0}var j=e(t(),1),M=null;function le(e){return M&&M!==e?!1:(M=e,!0)}function ue(e){M===e&&(M=null)}function de(e){if(!(e instanceof Error))return!1;let t=e.body,n=typeof t?.error==`object`?t.error.code:void 0;return n===`VOICE_DISABLED`||n===`PROVIDER_UNAVAILABLE`}function fe(e){if(!Number.isFinite(e)||e<0)return`0:00`;let t=Math.floor(e%60);return`${Math.floor(e/60)}:${t.toString().padStart(2,`0`)}`}function pe(e){return e===`requesting`||e===`connecting`||e===`starting`}async function me(){if(!navigator.permissions?.query)return null;try{return(await navigator.permissions.query({name:`microphone`})).state}catch{return null}}function he(e){return e instanceof DOMException||e instanceof Error?e.name:``}function ge(e,t){if(e===`permission`)return`permission`;if(e===`recorder`)return`recorder`;if(e===`session`)return`session`;let n=he(t);return n===`NotAllowedError`||n===`SecurityError`?`permission`:`device`}function _e(e){let{disabled:t,chat:n,onTranscript:r}=e,[o,c]=(0,j.useState)(`idle`),[l,ee]=(0,j.useState)(!1),d=(0,j.useRef)(null),f=(0,j.useRef)(null),te=(0,j.useRef)(void 0),[p,ne]=(0,j.useState)(0),[m,_]=(0,j.useState)(0),[v,y]=(0,j.useState)(``),[b,x]=(0,j.useState)(``),[S,C]=(0,j.useState)(``),[w,T]=(0,j.useState)([]),[E,D]=(0,j.useState)(null),[O,M]=(0,j.useState)(`idle`),[_e,ve]=(0,j.useState)(null),[ye,be]=(0,j.useState)(!1),N=(0,j.useRef)(!1),[P,F]=(0,j.useState)(null),[xe,Se]=(0,j.useState)(null),[Ce,we]=(0,j.useState)(!1),[Te,Ee]=(0,j.useState)(null),I=(0,j.useRef)(void 0),L=(0,j.useRef)(null),[De,Oe]=(0,j.useState)(`dictation`),ke=(0,j.useRef)(Symbol(`voice-capture`)),R=(0,j.useRef)(`idle`),z=(0,j.useRef)(0),B=(0,j.useRef)(null),Ae=(0,j.useRef)(null),V=(0,j.useRef)(null),je=(0,j.useRef)(void 0),Me=(0,j.useRef)(void 0),H=(0,j.useRef)(null),Ne=(0,j.useRef)(null),Pe=(0,j.useRef)(null),U=(0,j.useRef)(new Map),W=(0,j.useRef)(!1),Fe=(0,j.useRef)(()=>{}),Ie=(0,j.useRef)(new Map),G=(0,j.useRef)(null),Le=(0,j.useRef)(null),Re=(0,j.useRef)(!1),ze=(0,j.useRef)(null),Be=(0,j.useRef)(!1),Ve=(0,j.useRef)(0),He=(0,j.useRef)(6e5),Ue=(0,j.useRef)(null),K=(0,j.useRef)(null),We=(0,j.useRef)(r);We.current=r;let q=(0,j.useCallback)(e=>{R.current=e,c(e)},[]),J=(0,j.useCallback)(()=>{Ue.current!=null&&(clearInterval(Ue.current),Ue.current=null)},[]),Y=(0,j.useCallback)(()=>{Ne.current?.getTracks().forEach(e=>e.stop()),Ne.current=null},[]),X=(0,j.useCallback)(()=>{ue(ke.current),z.current+=1,L.current?.abort(),L.current=null,J(),K.current!==null&&clearTimeout(K.current),K.current=null,H.current?.stopRingback(),Y(),d.current?.cancel(),d.current=null,f.current=null,te.current=void 0,ee(!1),B.current?.cancel(),B.current=null,Ae.current=null,V.current=null;let e=H.current;H.current=null,e?.close(),Pe.current=null,ne(0),_(0),y(``),x(``),C(``),M(`idle`),ve(null),T([]),D(null),ze.current=null,N.current=!1,be(!1),we(!1),Ie.current.clear(),U.current.clear(),W.current=!1,G.current=null,Le.current=null},[Y,J]),Z=(0,j.useCallback)(()=>{X(),q(`idle`)},[X,q]),Ge=(0,j.useCallback)(()=>{V.current?.stop(`user_finished`),Z(),F(null),Se(null),Ee(null)},[Z]),Q=(0,j.useCallback)(async e=>{if(W.current)return;W.current=!0;let t=z.current,r=e??[...U.current.values()].join(` `).trim();if(Y(),J(),B.current?.cancel(),B.current=null,q(`transcribing`),!r){u(`warning`,n.voiceTranscribeEmpty),Z();return}let o=r;try{let e=await a(i(`/api/voice/transcriptions/refine`),{method:`POST`,body:JSON.stringify({text:r}),signal:AbortSignal.any([L.current.signal,AbortSignal.timeout(15e3)])});e.payload.text.trim()&&(o=e.payload.text)}catch{if(t!==z.current)return;u(`warning`,n.voiceRefinementFailed)}t===z.current&&(We.current(o),Z())},[Z,n.voiceRefinementFailed,n.voiceTranscribeEmpty,Y,J,q]),Ke=(0,j.useCallback)(async()=>{if(W.current)return;W.current=!0;let e=z.current;J(),q(`transcribing`);try{let t=d.current;if(!f.current&&t){let n=await t.stop();if(e!==z.current)return;f.current=n}if(d.current=null,Y(),e!==z.current)return;let r=f.current;if(!r)throw Error(n.voiceTranscribeEmpty);let i=await g(r,r.type,AbortSignal.any([L.current.signal,AbortSignal.timeout(9e4)]),te.current);if(e!==z.current)return;W.current=!1,await Q(i.text.trim())}catch(t){if(e!==z.current)return;Y(),W.current=!1,F(t instanceof Error?t.message:n.voiceTranscribeFailed),Se(`session`),q(`error`)}},[Q,n.voiceTranscribeEmpty,n.voiceTranscribeFailed,Y,J,q]),qe=(0,j.useCallback)(e=>{Ee(e);let t=R.current;if(!(t===`idle`||t===`error`||W.current)){if(!I.current){if(t===`transcribing`&&e===`input_committed`){Q();return}J(),Y(),B.current?.cancel(),B.current=null,V.current=null,F(n.voiceTranscribeFailed),q(`error`);return}Z()}},[Q,Z,n.voiceTranscribeFailed,Y,J,q]),Je=(0,j.useCallback)(()=>{J(),Ue.current=setInterval(()=>{let e=Pe.current;if(e===null)return;let t=performance.now()-e;if(ne(Math.max(0,t/1e3)),t>=He.current&&R.current===`recording`){if(!I.current){Fe.current();return}Ee(`session_limit`),V.current?.stop(`user_finished`),Z()}},200)},[Z,J]),$=(0,j.useCallback)(async(e,r,i,a=!1)=>{if(t||R.current!==`idle`||e===`conversation`&&!i)return;if(!le(ke.current)){F(n.callCaptureBusy),e===`dictation`&&u(`error`,n.callCaptureBusy);return}I.current=i;let o=new AbortController;L.current=o,F(null),Se(null),Ee(null);let c=++z.current,l=()=>c===z.current;Oe(e),ve(e===`conversation`?`preparing`:null),(!a||!je.current)&&(je.current=crypto.randomUUID()),Me.current=r,C(``),q(`connecting`);let f=performance.now(),p=(e,t,n)=>k(e,o.signal,t,n),m=`permission`;try{if(e===`conversation`){m=`recorder`;let e=new ae;if(H.current=e,await p(e.start(),1e4),!l()){e.close();return}}m=`session`;let t=e===`dictation`?await p(se(o.signal),2e4):null;if(!l())return;if(t?.mode===`unavailable`){let e=Error(n.voiceSttNotConfigured);throw Object.assign(e,{body:{error:{code:`PROVIDER_UNAVAILABLE`}}}),e}let c=t?.mode===`recorded`,f=c?[]:await p(ce.preflight({purpose:e,...e===`conversation`?{mode:r,conversationId:i}:{},signal:o.signal}),2e4);if(!l())return;m=`permission`;let g=window.electronAPI?.system,v=await p(me(),5e3);if(!l()||!pe(R.current))return;if(g&&v!==`granted`){q(`requesting`);let e=await p(g.requestMicrophone(),6e4);if(!l())return;let t=window.electronAPI?.platform===`darwin`&&e.status!==`granted`;if(e.status===`denied`||t)throw Error(`Microphone permission denied`)}else!g&&v!==`granted`&&q(`requesting`);if(!l()||!pe(R.current))return;q(`starting`),window.dispatchEvent(new Event(`xopc-voice-recording-start`)),m=`media`;let b=await p(navigator.mediaDevices.getUserMedia({audio:re()}),15e3,e=>e.getTracks().forEach(e=>e.stop()));if(!l()||!pe(R.current)){b.getTracks().forEach(e=>e.stop());return}if(Ne.current=b,c){m=`recorder`;let e=await p(h.start(b,{onAudioLevel:({level:e})=>{l()&&_(Math.min(1,e*8))}}),15e3,e=>e.cancel());if(!l()){e.cancel();return}d.current=e,te.current=t.provider,ee(!0),He.current=6e5,Pe.current=performance.now(),ne(0),q(`recording`),Je();return}e===`conversation`&&(ve(`dialing`),H.current?.startRingback(),K.current=setTimeout(()=>{l()&&(H.current?.stopRingback(),ve(`slow`),K.current=null)},12e3)),m=`session`,q(`connecting`),U.current.clear();let S=await p(ce.connect({timingMetrics:f,logicalCallId:je.current,recovery:a,language:s(),purpose:e,signal:o.signal,...e===`conversation`?{mode:r,conversationId:i}:{},onEvent:t=>{if(l()&&!((t.type===`input.transcript.delta`||t.type===`input.transcript.final`)&&!A(Ie.current,t.payload.utteranceId,t.payload.revision,t.type===`input.transcript.final`))){if(t.type===`input.transcript.delta`&&y(t.payload.text),t.type===`input.transcript.final`){let n=t.payload.text.trim();y(``),x(n),n&&e===`dictation`&&(U.current.set(t.payload.utteranceId,n),[...U.current.values()].join(` `).length>=2e4&&R.current===`recording`&&Fe.current(),x([...U.current.values()].join(` `)))}if(t.type===`input.speech_stopped`&&(ze.current=performance.now()),t.type===`response.created`){if(G.current){G.current!==t.payload.responseId&&V.current?.cancelResponse(t.payload.responseId);return}G.current=t.payload.responseId,Re.current=!1,Be.current=!1,Ve.current=0,C(``),T([]),D(null),M(`thinking`)}if(t.type===`task.created`&&G.current===t.payload.responseId&&(Le.current=t.payload.taskId),t.type===`task.activity`&&Le.current===t.payload.taskId){let e={toolCallId:t.payload.toolCallId,toolName:t.payload.toolName,status:t.payload.status};T(t=>[...t.filter(t=>t.toolCallId!==e.toolCallId),e].slice(-8))}if(t.type===`task.done`&&Le.current===t.payload.taskId&&(Le.current=null,T([])),t.type===`response.clarification`&&G.current===t.payload.responseId&&D(t.payload),t.type===`response.text.delta`&&G.current===t.payload.responseId&&(M(`speaking`),C(e=>e+t.payload.delta)),t.type===`response.audio.started`&&G.current===t.payload.responseId&&M(`speaking`),t.type===`response.done`&&G.current===t.payload.responseId&&(Re.current=!0,H.current?.hasPendingAudio||(G.current=null,M(`idle`))),t.type===`response.cancelled`&&G.current===t.payload.responseId&&(G.current=null,M(`idle`),H.current?.clear()),t.type===`session.error`&&t.payload.recoverable&&t.payload.code===`RESPONSE_FAILED`&&u(`warning`,n.voiceResponseFailed),t.type===`session.error`&&t.payload.recoverable&&t.payload.code===`INPUT_DROPPED`&&u(`warning`,n.voiceInputDropped),t.type===`session.error`&&!t.payload.recoverable){let r=t.payload.code===`PROVIDER_UNAVAILABLE`,i=t.payload.code===`CONTEXT_CHANGED`?n.voiceContextChanged:r?n.voiceSttNotConfigured:t.payload.message;F(i),Se(`session`),we(r),e===`dictation`&&u(`error`,i,void 0,r?{href:`/settings/capabilities/models?configure=transcription`}:void 0),V.current?.stop(`surface_closed`),e===`conversation`?X():(J(),Y(),B.current?.cancel(),B.current=null,V.current=null),q(`error`)}}},onAudio:(e,t)=>{if(!l())return;let n=G.current;if(!n||t!==n)return;let r=!Be.current,i=ze.current;r&&(Be.current=!0,ze.current!==null&&V.current?.reportMetric(n,`speech_end_to_audio_received`,performance.now()-ze.current),ze.current=null);let a=H.current?.enqueue(e,()=>{G.current===n&&(Ve.current+=e.byteLength,V.current?.acknowledgeAudio(n,Ve.current),Re.current&&!H.current?.hasPendingAudio&&(G.current=null,M(`idle`)))});r&&i!==null&&a!==void 0&&V.current?.reportMetric(n,`speech_end_to_audio_scheduled`,performance.now()-i+a)},onClose:e=>{l()&&qe(e)}}),2e4,e=>e.stop(`surface_closed`));if(!l()){S.stop(`surface_closed`);return}H.current?.stopRingback(),K.current!==null&&clearTimeout(K.current),K.current=null,V.current=S,He.current=S.session.limits.maxSessionMs,m=`recorder`,q(`starting`);let w,E=[],O=await p(oe.start(b,{onSamples:e=>{if(!l()||N.current)return;if(!w){E.push(e);return}let t=(Ae.current??w).push(e);t&&S.sendAudio(t)},onAudioLevel:({level:e})=>{l()&&(N.current||_(Math.min(1,e*8)))}}),15e3,e=>e.cancel());if(!l()||!pe(R.current)){O.cancel(),S.stop(`surface_closed`),b.getTracks().forEach(e=>e.stop());return}if(B.current=O,e===`conversation`&&(await p(H.current.start(),1e4),!l()))return;S.outputReady(),w=new ie(O.sampleRate,S.session.inputFormat.sampleRate),Ae.current=w;for(let e of E)S.sendAudio(w.push(e));Pe.current=performance.now(),ne(0),q(`recording`),ve(null),Je()}catch(t){if(!l())return;let r=ge(m,t);console.error(`[chat:voice] realtime capture start failed`,{stage:m,durationMs:Math.round(performance.now()-f),kind:r,errorName:he(t),errorMessage:t instanceof Error?t.message:String(t)}),V.current?.stop(`surface_closed`),X(),q(r===`session`?`error`:`idle`);let i=r===`session`&&de(t),a=he(t)===`TimeoutError`?m===`session`?n.voiceConnectionTimeout:n.voiceMicrophoneTimeout:r===`permission`?n.voiceMicDenied:r===`device`?n.voiceMicUnavailable:r===`recorder`?n.voiceRecorderFailed:i?n.voiceSttNotConfigured:t instanceof Error?t.message:n.voiceSttNotConfigured;F(a),Se(r),we(i),e===`dictation`&&u(`error`,a,void 0,i?{href:`/settings/capabilities/models?configure=transcription`}:void 0)}},[t,qe,n,X,Je,Y,J,q]),Ye=(0,j.useCallback)(()=>{if(I.current)return;if(d.current||f.current){Ke();return}if(R.current===`error`&&U.current.size){Q();return}if(R.current!==`recording`)return;q(`transcribing`),J(),Y();let e=B.current,t=z.current;B.current=null,e?.stop().then(()=>{if(t!==z.current)return;let e=Ae.current?.flush();e&&V.current?.sendAudio(e),V.current?.commit()}).catch(()=>{t===z.current&&(u(`error`,n.voiceTranscribeFailed),V.current?.stop(`surface_closed`),X(),q(`error`))})},[Q,Ke,n.voiceTranscribeFailed,X,Y,J,q]);Fe.current=Ye,(0,j.useEffect)(()=>()=>{ue(ke.current),z.current+=1,L.current?.abort(),d.current?.cancel(),f.current=null,B.current?.cancel(),V.current?.stop(`surface_closed`),H.current?.close(),K.current!==null&&clearTimeout(K.current),Y(),J()},[Y,J]);let Xe=(0,j.useCallback)(()=>{if(R.current===`error`){if(f.current){Ke();return}X(),q(`idle`),$(De,Me.current,I.current,!0)}},[$,Ke,De,X,q]),Ze=(0,j.useCallback)(()=>$(`dictation`),[$]),Qe=(0,j.useCallback)((e,t)=>$(`conversation`,t,e),[$]),$e=(0,j.useCallback)(()=>{let e=performance.now(),t=G.current;H.current?.clear(),G.current=null,M(`idle`),t&&(V.current?.reportMetric(t,`local_stop`,performance.now()-e),V.current?.cancelResponse(t))},[]),et=(0,j.useCallback)(()=>{let e=!N.current;N.current=e,Ne.current?.getAudioTracks().forEach(t=>{t.enabled=!e});let t=B.current,n=V.current;t&&n&&(Ae.current=new ie(t.sampleRate,n.session.inputFormat.sampleRate)),n?.setInputMuted(e),y(``),_(0),H.current?.duck(!1),be(e)},[]);return{phase:o,voiceActive:o!==`idle`,recordedDictation:l,elapsedLabel:fe(p),audioLevel:m,partialTranscript:v,finalTranscript:b,responseText:S,activities:w,clarification:E,dismissClarification:e=>D(t=>t?.requestId===e?null:t),responsePhase:O,callConnectionStage:_e,muted:ye,error:P,failureKind:xe,settingsRequired:Ce,endedReason:Te,mode:De,startVoiceInput:Ze,startVoiceConversation:Qe,interruptResponse:$e,toggleMute:et,cancelVoiceInput:Ge,confirmVoiceInput:Ye,retryVoiceInput:Xe}}var ve=o(e=>({path:null,line:null,projectId:null,conversationId:null,setPath:(t,n,r,i,a)=>{if(t){let e=m.getState().scope;m.getState().openFile({path:t,line:n,projectId:r||void 0,conversationId:i||(e===`new`?void 0:e),agentId:b.getState().agentId||void 0,resultRevision:a})}e({path:t,resultRevision:t?a:void 0,line:t&&typeof n==`number`&&Number.isFinite(n)&&n>0?Math.floor(n):null,projectId:t&&r?.trim()||null,conversationId:t&&i?.trim()||null})}}));function ye(e){return`${e.name}\0${e.size}`}function be(e){if(!e)return[];let t=new Set,n=[],r=e=>{if(!e||e.size===0)return;let r=ye(e);t.has(r)||(t.add(r),n.push(e))},{files:i}=e;if(i?.length)for(let e=0;e<i.length;e++)r(i.item(e));for(let t of Array.from(e.items??[]))t.kind===`file`&&r(t.getAsFile());return n}var N=n(),P=r();function F(e){let t=(0,N.c)(10),{disabled:n,chat:r,onStart:i}=e,a=x(xe),o=r.voiceInput,s;t[0]===a?s=t[1]:(s=S(a).join(`+`),t[0]=a,t[1]=s);let c=`${o} (${s})`,l;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(l=p(`relative inline-flex size-11 sm:size-8 shrink-0 items-center justify-center rounded-lg border border-transparent text-fg-subtle hover:bg-surface-hover hover:text-fg`,y.transition,y.press,y.focusRingPanel,`disabled:cursor-not-allowed disabled:opacity-50`),t[2]=l):l=t[2];let u;t[3]===i?u=t[4]:(u=()=>void i(),t[3]=i,t[4]=u);let d;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,P.jsx)(ee,{className:`size-4 stroke-[1.75]`}),t[5]=d):d=t[5];let f;return t[6]!==n||t[7]!==u||t[8]!==c?(f=(0,P.jsx)(`button`,{type:`button`,className:l,disabled:n,title:c,"aria-label":c,onClick:u,children:d}),t[6]=n,t[7]=u,t[8]=c,t[9]=f):f=t[9],f}function xe(e){return e.shortcut}function Se(e,t){let n=t.trim();if(!n)return e;let r=e.trim();return r?`${r} ${n}`:n}var Ce=p(`inline-flex min-h-11 min-w-11 shrink-0 gap-2 px-3 items-center justify-center rounded-lg text-fg-muted`,`hover:bg-surface-hover hover:text-fg`,y.transition,y.press,y.focusRingPanel,`disabled:cursor-not-allowed disabled:opacity-50`),we=(0,j.memo)(function(e){let t=(0,N.c)(47),{phase:n,elapsedLabel:r,recordedDictation:i,audioLevel:a,partialTranscript:o,finalTranscript:s,error:u,settingsRequired:ee,disabled:m,chat:h,onCancel:re,onConfirm:ie,onRetry:ae}=e,g=n===`transcribing`,oe=n===`requesting`,se=n===`connecting`,ce=n===`starting`,_=n===`error`,v=_?u||h.voiceTranscribeFailed:oe?h.voiceRequestingMicrophone:se?h.voiceConnectingService:ce?h.voiceStartingMicrophone:g?h.voiceTranscribing:i?h.voiceRecordedDictationStatus:h.voiceRecordingStatus,y;t[0]!==s||t[1]!==o?(y=[s,o].filter(Boolean),t[0]=s,t[1]=o,t[2]=y):y=t[2];let b=y.join(` `),x=oe||se||ce||g,S;t[3]!==a||t[4]!==_||t[5]!==n?(S=n===`recording`?(0,P.jsx)(`div`,{className:`flex h-5 shrink-0 items-center gap-0.5`,"aria-hidden":!0,children:Array.from({length:9},(e,t)=>{let n=.35+(t%4+1)*.16;return(0,P.jsx)(`span`,{className:`w-0.5 rounded-full bg-fg-muted motion-safe:transition-[height] motion-safe:duration-75`,style:{height:Math.max(3,Math.round(18*Math.min(1,a*n+.08)))}},t)})}):_?(0,P.jsx)(l,{className:`size-4 shrink-0 text-danger`,"aria-hidden":!0}):(0,P.jsx)(ne,{className:`h-4 w-8`}),t[3]=a,t[4]=_,t[5]=n,t[6]=S):S=t[6];let C=_?`alert`:`status`,w;t[7]!==v||t[8]!==C?(w=(0,P.jsx)(`p`,{className:`min-w-0 flex-1 break-words text-sm text-fg-muted`,role:C,children:v}),t[7]=v,t[8]=C,t[9]=w):w=t[9];let T;t[10]!==r||t[11]!==n?(T=n===`recording`?(0,P.jsx)(`span`,{className:`shrink-0 text-sm tabular-nums text-fg-muted`,children:r}):null,t[10]=r,t[11]=n,t[12]=T):T=t[12];let E;t[13]!==S||t[14]!==w||t[15]!==T?(E=(0,P.jsxs)(`div`,{className:`flex items-center gap-3 px-1`,children:[S,w,T]}),t[13]=S,t[14]=w,t[15]=T,t[16]=E):E=t[16];let D;t[17]===b?D=t[18]:(D=b?(0,P.jsx)(`p`,{className:`max-h-28 overflow-y-auto overscroll-contain whitespace-pre-wrap break-words px-1 text-base text-fg`,children:b}):null,t[17]=b,t[18]=D);let O;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(O=(0,P.jsx)(te,{className:`size-4`,"aria-hidden":!0}),t[19]=O):O=t[19];let k;t[20]!==h.voiceInputCancel||t[21]!==re?(k=(0,P.jsxs)(`button`,{type:`button`,className:Ce,title:h.voiceInputCancel,"aria-label":h.voiceInputCancel,onClick:re,children:[O,h.voiceInputCancel]}),t[20]=h.voiceInputCancel,t[21]=re,t[22]=k):k=t[22];let A;t[23]!==m||t[24]!==_||t[25]!==h.voiceOpenSettings||t[26]!==h.voiceRetry||t[27]!==ae||t[28]!==ee?(A=_&&ee?(0,P.jsxs)(`a`,{onClick:Te,href:`#/settings/capabilities/models?configure=transcription`,className:p(Ce,`text-accent-fg`),children:[(0,P.jsx)(f,{className:`size-4`,"aria-hidden":!0}),h.voiceOpenSettings]}):_?(0,P.jsxs)(`button`,{type:`button`,className:Ce,disabled:m,"aria-label":h.voiceRetry,onClick:ae,children:[(0,P.jsx)(d,{className:`size-4`,"aria-hidden":!0}),h.voiceRetry]}):null,t[23]=m,t[24]=_,t[25]=h.voiceOpenSettings,t[26]=h.voiceRetry,t[27]=ae,t[28]=ee,t[29]=A):A=t[29];let j;t[30]!==m||t[31]!==_||t[32]!==s||t[33]!==h.voiceInputConfirm||t[34]!==ie||t[35]!==n?(j=n===`recording`||_&&s?(0,P.jsxs)(`button`,{type:`button`,className:p(Ce,`rounded-full bg-accent text-on-accent hover:bg-accent-hover hover:text-on-accent`),disabled:m,"aria-label":h.voiceInputConfirm,onClick:ie,children:[(0,P.jsx)(c,{className:`size-4`,"aria-hidden":!0}),h.voiceInputConfirm]}):null,t[30]=m,t[31]=_,t[32]=s,t[33]=h.voiceInputConfirm,t[34]=ie,t[35]=n,t[36]=j):j=t[36];let M;t[37]!==k||t[38]!==A||t[39]!==j?(M=(0,P.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[k,A,j]}),t[37]=k,t[38]=A,t[39]=j,t[40]=M):M=t[40];let le;return t[41]!==h.voiceInput||t[42]!==M||t[43]!==x||t[44]!==E||t[45]!==D?(le=(0,P.jsxs)(`section`,{className:`w-full space-y-3 py-3`,"aria-label":h.voiceInput,"aria-busy":x,children:[E,D,M]}),t[41]=h.voiceInput,t[42]=M,t[43]=x,t[44]=E,t[45]=D,t[46]=le):le=t[46],le});function Te(e){!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&e.button===0&&(e.preventDefault(),_(`transcription`))}var Ee=120*1e3,I=new Map;function L(){return typeof globalThis.crypto?.randomUUID==`function`?globalThis.crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function De(e){for(let[t,n]of I)n.expiresAt<=e&&I.delete(t)}function Oe(e,t=Date.now()){De(t);let n=L();return I.set(n,{attachments:e.map(e=>({...e})),expiresAt:t+Ee}),n}function ke(e,t=Date.now()){let n=I.get(e);if(!n)return null;if(n.expiresAt<=t)return I.delete(e),null;if(!n.attachments)return null;let r=n.attachments;return n.attachments=null,r}export{F as a,_e as c,O as d,w as f,T as g,C as h,Se as i,le as l,D as m,ke as n,be as o,E as p,we as r,ve as s,Oe as t,ue as u};
@@ -1 +1 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{t as i}from"./chunk-KS7C4IRE-CiwuuyV8.js";import{i as a,n as o,o as s}from"./locale-store-TQcz_Vjt.js";import{t as c}from"./messages-DaLmc4W1.js";import{t as l}from"./check-DUBLcKHA.js";import{t as u}from"./globe-DSSGFWFn.js";import{t as d}from"./monitor-Af5eAvF7.js";import{t as f}from"./mouse-pointer-2-DZ51Onvj.js";import{t as p}from"./plus-Q2yW6OE7.js";import{t as m}from"./shield-check-BU58siTV.js";import{t as h}from"./square-DMK_fB-3.js";import{t as g}from"./button-CnRSIP6m.js";import{t as _}from"./skeleton-BI5TyibZ.js";import{i as v}from"./vendor-swr-CdRzEUwF.js";import{r as y}from"./gateway-config-swr-Dmt5JhZU.js";import{n as b,t as x}from"./registry-api-BfXzBR1D.js";import{t as S}from"./electron-env-DHOGevH3.js";import{n as C}from"./model-selector-nsoNHqif.js";import{n as w,t as T}from"./global-defaults-api-DtnmDd87.js";import{n as ee,t as te}from"./settings-page-header-DuNCn8i-.js";import"./settings-page-layout-DeNC8YHJ.js";var E=n(),D=e(t(),1),O=r();function ne({zh:e}){let t=c(e?`zh`:`en`).computerSettings,n=v(`settings-agent-defaults`,T),r=v(x,b),a=n.data?.defaults.models.computerUse?.primary??``,[o,s]=(0,D.useState)(a),[l,u]=(0,D.useState)(!1),[d,f]=(0,D.useState)(``),[p,m]=(0,D.useState)(!1);(0,D.useEffect)(()=>{s(a)},[a]);let h=!o||r.data?.some(e=>e.id===o&&e.computerUse),y=async()=>{u(!0),f(``),m(!1);try{if(!h)throw Error(t.modelUnavailable);let e=await T(),r={...e.defaults.models};o?r.computerUse={primary:o,fallbacks:[]}:delete r.computerUse;let i=await w({...e.defaults,models:r});await n.mutate(i,!1),m(!0)}catch(e){f(e instanceof Error?e.message:String(e))}finally{u(!1)}};return(0,O.jsxs)(`section`,{"aria-label":t.model,className:`space-y-3`,children:[(0,O.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:t.model}),!n.data&&!n.error?(0,O.jsx)(_,{className:`h-52 w-full rounded-xl`}):n.error?(0,O.jsxs)(`div`,{role:`alert`,className:`text-sm text-danger`,children:[String(n.error),(0,O.jsx)(g,{onClick:()=>{n.mutate().catch(()=>{})},children:t.retry})]}):(0,O.jsxs)(`div`,{className:`rounded-2xl border border-edge bg-surface-panel p-4 sm:p-5`,children:[(0,O.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:items-center`,children:[(0,O.jsx)(`div`,{className:`min-w-0 flex-1`,children:r.isLoading?(0,O.jsx)(_,{className:`h-11 w-full rounded-lg`}):(0,O.jsx)(C,{value:o,onChange:e=>{s(e),m(!1)},disabled:l,capabilitiesFilter:`computer-use`,models:r.data??[],modelsError:r.error,placeholder:t.selectModel,searchPlaceholder:t.searchModel,noMatches:t.noModels,registryEmptyHint:t.noModels,allowEmpty:!0,emptyLabel:t.noModel,ariaLabel:t.modelLabel,className:`w-full`,contentAlign:`start`})}),(0,O.jsx)(g,{variant:`primary`,disabled:l||o===a||!h||!!r.error||r.isLoading,onClick:()=>{y()},children:t.saveModel})]}),(0,O.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-x-4 gap-y-2 text-xs text-fg-muted`,children:[(0,O.jsx)(`span`,{children:t.modelDataUse}),(0,O.jsx)(g,{asChild:!0,variant:`ghost`,className:`h-auto p-0 text-xs`,children:(0,O.jsx)(i,{to:`/settings/capabilities/models?add=1`,children:t.manageModels})}),p&&(0,O.jsx)(`span`,{role:`status`,children:t.modelSaved})]}),!h&&!r.isLoading&&!r.error&&(0,O.jsx)(`p`,{role:`status`,className:`mt-3 text-sm text-warning`,children:t.modelUnavailable}),r.error&&(0,O.jsxs)(`p`,{role:`alert`,className:`mt-3 text-sm text-danger`,children:[String(r.error),(0,O.jsx)(g,{onClick:()=>{r.mutate().catch(()=>{})},children:t.retry})]}),d&&(0,O.jsx)(`p`,{role:`alert`,className:`mt-3 text-sm text-danger`,children:d})]})]})}function k(e){let t=(0,E.c)(15),{icon:n,title:r,description:i,children:a}=e,o;t[0]===n?o=t[1]:(o=n&&(0,O.jsx)(`div`,{className:`flex size-6 shrink-0 items-center justify-center text-fg-muted`,"aria-hidden":!0,children:n}),t[0]=n,t[1]=o);let s;t[2]===r?s=t[3]:(s=(0,O.jsx)(`h3`,{className:`text-sm font-medium text-fg`,children:r}),t[2]=r,t[3]=s);let c;t[4]===i?c=t[5]:(c=i&&(0,O.jsx)(`div`,{className:`mt-0.5 text-xs text-fg-muted`,children:i}),t[4]=i,t[5]=c);let l;t[6]!==s||t[7]!==c?(l=(0,O.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[s,c]}),t[6]=s,t[7]=c,t[8]=l):l=t[8];let u;t[9]===a?u=t[10]:(u=a&&(0,O.jsx)(`div`,{className:`flex shrink-0 items-center gap-3`,children:a}),t[9]=a,t[10]=u);let d;return t[11]!==o||t[12]!==l||t[13]!==u?(d=(0,O.jsxs)(`div`,{className:`flex min-h-16 flex-wrap items-center gap-3 px-4 py-3 sm:flex-nowrap sm:px-5`,children:[o,l,u]}),t[11]=o,t[12]=l,t[13]=u,t[14]=d):d=t[14],d}function A(){let e=(0,E.c)(2),t=o(j)===`zh`,n;return e[0]===t?n=e[1]:(n=(0,O.jsx)(M,{zh:t}),e[0]=t,e[1]=n),n}function j(e){return e.language}function M({zh:e}){let t=c(e?`zh`:`en`).computerSettings,{data:n,mutate:r,error:o}=y(!0),v=n?.payload?.config,[b,x]=(0,D.useState)(!1),[C,w]=(0,D.useState)(``),[T,E]=(0,D.useState)(!1),[A,j]=(0,D.useState)(null),[M,N]=(0,D.useState)(!1),[P,F]=(0,D.useState)(null),[re,I]=(0,D.useState)(!1),[L,R]=(0,D.useState)(``),[z,B]=(0,D.useState)(!1),[ie,V]=(0,D.useState)(!1),H=window.electronAPI?.platform===`win32`,U=S()?window.electronAPI?.computer:void 0,W=window.electronAPI?.platform===`darwin`?window.electronAPI.system:void 0;(0,D.useEffect)(()=>{if(!U)return;let e=!1,t=!1,n=async()=>{if(!t){t=!0;try{let t=await U.status();e||(j(t),N(!1))}catch{e||(j(null),N(!0))}finally{t=!1}}};n();let r=window.setInterval(()=>{n()},2e3);return()=>{e=!0,window.clearInterval(r)}},[U]),(0,D.useEffect)(()=>{if(!U?.access)return;let e=!1;return U.access().then(t=>{e||(F(t),I(!1))}).catch(()=>{e||I(!0)}),()=>{e=!0}},[U]);let G=async e=>{x(!0),w(``);try{await e()}catch(e){w(e instanceof Error?e.message:String(e))}finally{x(!1)}},ae=e=>G(async()=>{S()&&(await s(a(`/api/config`),{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({computer:{enabled:e}})}),await r())}),oe=async()=>{w(``),E(!1);try{await U?.stop(),E(!0),U&&j(await U.status())}catch(e){w(e instanceof Error?e.message:String(e))}},K=A?.session?.status??`idle`,q=t.states[K]??K,J=S()&&v?.computer?.enabled===!0,se=A?.controlPaused?t.pausedNotice:J?A?.connected?`${t.connected} · ${q}`:A?t.disconnected:t.checking:t.disabled,Y=!U||M||A?.reenrollmentRequired===!0||!!(A?.error||A?.session?.errorCode)||A!=null&&!H&&(!A.permissions.accessibility||A.permissions.screenRecording!==`granted`),X=(H?A?.connected===!0:A?.permissions.accessibility===!0&&A.permissions.screenRecording===`granted`)&&!A?.reenrollmentRequired,Z=P?.apps.filter(e=>P.authorizedAppIds.includes(e.appId))??[],Q=P?.apps.filter(e=>!P.authorizedAppIds.includes(e.appId)&&`${e.name} ${e.appId}`.toLocaleLowerCase().includes(L.toLocaleLowerCase()))??[],$=(0,O.jsxs)(`section`,{"aria-labelledby":`computer-permissions-title`,className:`space-y-3`,children:[(0,O.jsx)(`h2`,{id:`computer-permissions-title`,className:`text-sm font-semibold text-fg`,children:t.permissions}),U?M?(0,O.jsx)(`p`,{role:`alert`,className:`rounded-xl bg-danger-soft p-5 text-sm text-danger`,children:t.nativeError}):A?X&&!ie?(0,O.jsx)(`div`,{className:`overflow-hidden rounded-2xl border border-edge bg-surface-panel`,children:(0,O.jsx)(k,{icon:(0,O.jsx)(m,{className:`size-5`}),title:H?t.windowsAccess:t.systemPermissions,description:H?t.windowsAccessDescription:t.granted,children:(0,O.jsx)(g,{onClick:()=>V(!0),children:t.viewDetails})})}):(0,O.jsxs)(`div`,{className:`divide-y divide-edge-subtle overflow-hidden rounded-2xl border border-edge bg-surface-panel`,children:[(0,O.jsx)(k,{icon:(0,O.jsx)(d,{className:`size-5`}),title:t.device,description:(0,O.jsxs)(`span`,{"aria-live":`polite`,children:[A.connected?t.connected:t.disconnected,` · `,q]}),children:A.reenrollmentRequired&&(0,O.jsx)(g,{disabled:b,onClick:()=>{G(async()=>{j(await U.reenroll())})},children:t.reenroll})}),H&&(0,O.jsx)(k,{icon:(0,O.jsx)(m,{className:`size-5`}),title:t.windowsAccess,description:t.windowsAccessDescription}),W&&(0,O.jsxs)(O.Fragment,{children:[(0,O.jsxs)(k,{icon:(0,O.jsx)(m,{className:`size-5`}),title:t.accessibility,children:[(0,O.jsx)(`span`,{className:`text-xs text-fg-muted`,children:A.permissions.accessibility?t.granted:t.notGranted}),!A.permissions.accessibility&&(0,O.jsx)(g,{disabled:b,"aria-label":`${t.openSettings}: ${t.accessibility}`,onClick:()=>{G(()=>W.requestAccessibility())},children:t.openSettings})]}),(0,O.jsxs)(k,{icon:(0,O.jsx)(d,{className:`size-5`}),title:t.screen,children:[(0,O.jsx)(`span`,{className:`text-xs text-fg-muted`,children:A.permissions.screenRecording===`granted`?t.granted:t.notGranted}),A.permissions.screenRecording!==`granted`&&(0,O.jsx)(g,{disabled:b,"aria-label":`${t.openSettings}: ${t.screen}`,onClick:()=>{G(()=>W.requestScreen())},children:t.openSettings})]})]}),X&&(0,O.jsx)(`div`,{className:`flex justify-end px-4 py-2 sm:px-5`,children:(0,O.jsx)(g,{variant:`ghost`,onClick:()=>V(!1),children:t.hideDetails})})]}):(0,O.jsx)(`div`,{"aria-label":t.checking,children:(0,O.jsx)(_,{className:`h-20 w-full rounded-xl`})}):(0,O.jsx)(`p`,{className:`rounded-xl bg-surface-hover/20 p-5 text-sm leading-relaxed text-fg-muted`,children:window.electronAPI?t.unsupportedPlatform:t.desktopRequired}),(A?.error||A?.session?.errorCode)&&(0,O.jsx)(`p`,{role:`alert`,className:`break-words text-sm text-red-600`,children:A.error||A.session?.errorCode})]});return(0,O.jsxs)(ee,{gap:`gap-7`,children:[(0,O.jsx)(te,{title:t.title,subtitle:t.subtitle,meta:(0,O.jsx)(`span`,{className:`mt-3 inline-flex rounded-md border border-edge px-2 py-1 text-xs text-fg-muted`,children:t.preview}),actions:U&&(0,O.jsxs)(g,{onClick:()=>{oe()},children:[(0,O.jsx)(h,{className:`size-3.5`}),t.stop]})}),H&&(0,O.jsx)(`p`,{className:`text-sm leading-relaxed text-fg-muted`,children:t.windowsAccessDescription}),C&&(0,O.jsx)(`p`,{role:`alert`,className:`text-sm text-red-600`,children:C}),T&&(0,O.jsx)(`p`,{role:`status`,className:`text-sm text-fg-muted`,children:t.stoppedNotice}),(0,O.jsxs)(`section`,{"aria-labelledby":`computer-control-title`,className:`space-y-3`,children:[(0,O.jsx)(`h2`,{id:`computer-control-title`,className:`text-sm font-semibold text-fg`,children:t.control}),!v&&!o?(0,O.jsx)(_,{className:`h-32 w-full rounded-xl`}):o?(0,O.jsxs)(`div`,{role:`alert`,className:`text-sm text-fg-muted`,children:[String(o),` `,(0,O.jsx)(g,{onClick:()=>{G(()=>r())},children:t.retry})]}):(0,O.jsxs)(`div`,{className:`divide-y divide-edge-subtle overflow-hidden rounded-2xl border border-edge bg-surface-panel`,children:[(0,O.jsx)(k,{icon:(0,O.jsx)(f,{className:`size-5`}),title:t.desktop,description:(0,O.jsx)(`span`,{"aria-live":`polite`,children:se}),children:(0,O.jsx)(`button`,{type:`button`,role:`switch`,"aria-label":t.desktop,"aria-checked":J,disabled:b||!S()||A?.capabilities?.supported===!1,onClick:()=>{ae(v?.computer?.enabled!==!0)},className:`touch-target flex items-center rounded-lg px-1 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent disabled:opacity-50`,children:(0,O.jsx)(`span`,{className:`flex h-6 w-11 items-center rounded-full p-0.5 transition-colors ${J?`bg-accent`:`bg-fg-muted/30`}`,children:(0,O.jsx)(`span`,{className:`size-5 rounded-full bg-white transition-transform ${J?`translate-x-5`:`translate-x-0`}`})})})}),A?.controlPaused&&(0,O.jsx)(`div`,{className:`flex justify-end border-t border-edge-subtle px-4 py-3 sm:px-5`,children:(0,O.jsx)(g,{disabled:b,onClick:()=>{G(async()=>{U&&j(await U.resume()),E(!1)})},children:t.resume})})]})]}),Y&&$,U?.access&&(0,O.jsxs)(`section`,{"aria-labelledby":`computer-app-access-title`,className:`space-y-3`,children:[(0,O.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,O.jsx)(`h2`,{id:`computer-app-access-title`,className:`text-sm font-semibold text-fg`,children:t.appAccess}),!P?.allowAllApps&&(0,O.jsxs)(g,{disabled:b,"aria-expanded":z,"aria-controls":z?`computer-app-picker`:void 0,onClick:()=>{B(e=>!e),R(``)},children:[z?(0,O.jsx)(l,{className:`size-4`,"aria-hidden":!0}):(0,O.jsx)(p,{className:`size-4`,"aria-hidden":!0}),z?t.doneAdding:t.addApp]})]}),P?(0,O.jsxs)(`div`,{className:`overflow-hidden rounded-2xl border border-edge bg-surface-panel`,children:[(0,O.jsx)(k,{icon:(0,O.jsx)(f,{className:`size-5`}),title:t.anyApp,description:t.anyAppDescription,children:(0,O.jsx)(`button`,{type:`button`,role:`switch`,"aria-label":t.anyApp,"aria-checked":P.allowAllApps===!0,disabled:b,onClick:()=>{G(async()=>{F(await U.setAllAppAccess(!P.allowAllApps)),B(!1)})},className:`touch-target flex items-center rounded-lg px-1 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent disabled:opacity-50`,children:(0,O.jsx)(`span`,{className:`flex h-6 w-11 items-center rounded-full p-0.5 transition-colors ${P.allowAllApps?`bg-accent`:`bg-fg-muted/30`}`,children:(0,O.jsx)(`span`,{className:`size-5 rounded-full bg-white transition-transform ${P.allowAllApps?`translate-x-5`:`translate-x-0`}`})})})}),!P.allowAllApps&&(0,O.jsx)(`div`,{className:`border-t border-edge-subtle`,children:Z.length?Z.map(e=>(0,O.jsxs)(`div`,{className:`flex min-h-16 items-center justify-between gap-3 border-b border-edge-subtle px-4 py-3 last:border-b-0 sm:px-5`,children:[(0,O.jsxs)(`div`,{className:`min-w-0`,children:[(0,O.jsx)(`p`,{className:`truncate text-sm font-medium text-fg`,children:e.name}),(0,O.jsx)(`p`,{className:`truncate text-xs text-fg-muted`,children:e.appId})]}),(0,O.jsx)(g,{disabled:b,variant:`ghost`,onClick:()=>{G(async()=>{let t=await U.setAppAccess(e.appId,!1);F(e=>e&&{...e,authorizedAppIds:t.authorizedAppIds})})},children:t.revokeApp})]},e.appId)):(0,O.jsx)(`p`,{className:`px-5 py-6 text-center text-sm text-fg-muted`,children:t.noAuthorizedApps})})]}):re?(0,O.jsx)(`p`,{role:`alert`,className:`text-sm text-danger`,children:t.appListError}):(0,O.jsx)(_,{className:`h-20 w-full rounded-xl`}),z&&!P?.allowAllApps&&(0,O.jsxs)(`div`,{id:`computer-app-picker`,className:`space-y-3 rounded-2xl border border-edge bg-surface-panel p-4`,children:[(0,O.jsxs)(`div`,{className:`flex gap-2`,children:[(0,O.jsx)(`input`,{"aria-label":t.searchApps,value:L,onChange:e=>R(e.target.value),placeholder:t.searchApps,className:`min-w-0 flex-1 rounded-lg border border-edge bg-surface-base px-3 py-2 text-sm text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`}),(0,O.jsx)(g,{disabled:b,onClick:()=>{G(async()=>{F(await U.access()),I(!1)})},children:t.refreshApps})]}),P&&(0,O.jsx)(`div`,{className:`max-h-64 overflow-y-auto rounded-xl border border-edge`,children:Q.length?Q.map(e=>(0,O.jsxs)(`div`,{className:`flex min-h-14 items-center justify-between gap-3 border-b border-edge-subtle px-3 py-2 last:border-b-0`,children:[(0,O.jsxs)(`div`,{className:`min-w-0`,children:[(0,O.jsx)(`p`,{className:`truncate text-sm font-medium text-fg`,children:e.name}),(0,O.jsx)(`p`,{className:`truncate text-xs text-fg-muted`,children:e.appId})]}),(0,O.jsx)(g,{disabled:b,variant:`secondary`,onClick:()=>{G(async()=>{let t=await U.setAppAccess(e.appId,!0);F(e=>e&&{...e,authorizedAppIds:t.authorizedAppIds})})},children:t.authorizeApp})]},e.appId)):(0,O.jsx)(`p`,{className:`px-3 py-5 text-center text-sm text-fg-muted`,children:P.appsBusy?t.appsBusy:P.appsUnavailable?t.appListError:t.noMatchingApps})})]})]}),(0,O.jsx)(ne,{zh:e}),!Y&&$,(0,O.jsxs)(`section`,{"aria-labelledby":`computer-browser-title`,className:`space-y-3`,children:[(0,O.jsx)(`h2`,{id:`computer-browser-title`,className:`text-sm font-semibold text-fg`,children:t.otherControl}),(0,O.jsx)(`div`,{className:`overflow-hidden rounded-2xl border border-edge bg-surface-panel`,children:(0,O.jsx)(k,{icon:(0,O.jsx)(u,{className:`size-5`}),title:t.browser,description:v?v.browser?.enabled?t.browserEnabled:t.browserDisabled:t.checking,children:(0,O.jsx)(g,{asChild:!0,children:(0,O.jsx)(i,{to:`/settings/agent-browser`,children:t.manage})})})})]}),(0,O.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.previewFootnote})]})}export{A as ComputerSettingsPage,M as ComputerSettingsPanel};
1
+ import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{t as i}from"./chunk-KS7C4IRE-CiwuuyV8.js";import{i as a,n as o,o as s}from"./locale-store-Br7IfbXK.js";import{t as c}from"./messages-ByFlEbsu.js";import{t as l}from"./check-DUBLcKHA.js";import{t as u}from"./globe-DSSGFWFn.js";import{t as d}from"./monitor-Af5eAvF7.js";import{t as f}from"./mouse-pointer-2-DZ51Onvj.js";import{t as p}from"./plus-Q2yW6OE7.js";import{t as m}from"./shield-check-BU58siTV.js";import{t as h}from"./square-DMK_fB-3.js";import{t as g}from"./button-CnRSIP6m.js";import{t as _}from"./skeleton-BI5TyibZ.js";import{i as v}from"./vendor-swr-CdRzEUwF.js";import{r as y}from"./gateway-config-swr-BOCt_zOo.js";import{n as b,t as x}from"./registry-api-DFDvOTg4.js";import{t as S}from"./electron-env-DHOGevH3.js";import{n as C}from"./model-selector-CXcxc30J.js";import{n as w,t as T}from"./global-defaults-api-BWMbKu72.js";import{n as ee,t as te}from"./settings-page-header-DBL0_u0Z.js";import"./settings-page-layout-IAvpbz4A.js";var E=n(),D=e(t(),1),O=r();function ne({zh:e}){let t=c(e?`zh`:`en`).computerSettings,n=v(`settings-agent-defaults`,T),r=v(x,b),a=n.data?.defaults.models.computerUse?.primary??``,[o,s]=(0,D.useState)(a),[l,u]=(0,D.useState)(!1),[d,f]=(0,D.useState)(``),[p,m]=(0,D.useState)(!1);(0,D.useEffect)(()=>{s(a)},[a]);let h=!o||r.data?.some(e=>e.id===o&&e.computerUse),y=async()=>{u(!0),f(``),m(!1);try{if(!h)throw Error(t.modelUnavailable);let e=await T(),r={...e.defaults.models};o?r.computerUse={primary:o,fallbacks:[]}:delete r.computerUse;let i=await w({...e.defaults,models:r});await n.mutate(i,!1),m(!0)}catch(e){f(e instanceof Error?e.message:String(e))}finally{u(!1)}};return(0,O.jsxs)(`section`,{"aria-label":t.model,className:`space-y-3`,children:[(0,O.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:t.model}),!n.data&&!n.error?(0,O.jsx)(_,{className:`h-52 w-full rounded-xl`}):n.error?(0,O.jsxs)(`div`,{role:`alert`,className:`text-sm text-danger`,children:[String(n.error),(0,O.jsx)(g,{onClick:()=>{n.mutate().catch(()=>{})},children:t.retry})]}):(0,O.jsxs)(`div`,{className:`rounded-2xl border border-edge bg-surface-panel p-4 sm:p-5`,children:[(0,O.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:items-center`,children:[(0,O.jsx)(`div`,{className:`min-w-0 flex-1`,children:r.isLoading?(0,O.jsx)(_,{className:`h-11 w-full rounded-lg`}):(0,O.jsx)(C,{value:o,onChange:e=>{s(e),m(!1)},disabled:l,capabilitiesFilter:`computer-use`,models:r.data??[],modelsError:r.error,placeholder:t.selectModel,searchPlaceholder:t.searchModel,noMatches:t.noModels,registryEmptyHint:t.noModels,allowEmpty:!0,emptyLabel:t.noModel,ariaLabel:t.modelLabel,className:`w-full`,contentAlign:`start`})}),(0,O.jsx)(g,{variant:`primary`,disabled:l||o===a||!h||!!r.error||r.isLoading,onClick:()=>{y()},children:t.saveModel})]}),(0,O.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-x-4 gap-y-2 text-xs text-fg-muted`,children:[(0,O.jsx)(`span`,{children:t.modelDataUse}),(0,O.jsx)(g,{asChild:!0,variant:`ghost`,className:`h-auto p-0 text-xs`,children:(0,O.jsx)(i,{to:`/settings/capabilities/models?add=1`,children:t.manageModels})}),p&&(0,O.jsx)(`span`,{role:`status`,children:t.modelSaved})]}),!h&&!r.isLoading&&!r.error&&(0,O.jsx)(`p`,{role:`status`,className:`mt-3 text-sm text-warning`,children:t.modelUnavailable}),r.error&&(0,O.jsxs)(`p`,{role:`alert`,className:`mt-3 text-sm text-danger`,children:[String(r.error),(0,O.jsx)(g,{onClick:()=>{r.mutate().catch(()=>{})},children:t.retry})]}),d&&(0,O.jsx)(`p`,{role:`alert`,className:`mt-3 text-sm text-danger`,children:d})]})]})}function k(e){let t=(0,E.c)(15),{icon:n,title:r,description:i,children:a}=e,o;t[0]===n?o=t[1]:(o=n&&(0,O.jsx)(`div`,{className:`flex size-6 shrink-0 items-center justify-center text-fg-muted`,"aria-hidden":!0,children:n}),t[0]=n,t[1]=o);let s;t[2]===r?s=t[3]:(s=(0,O.jsx)(`h3`,{className:`text-sm font-medium text-fg`,children:r}),t[2]=r,t[3]=s);let c;t[4]===i?c=t[5]:(c=i&&(0,O.jsx)(`div`,{className:`mt-0.5 text-xs text-fg-muted`,children:i}),t[4]=i,t[5]=c);let l;t[6]!==s||t[7]!==c?(l=(0,O.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[s,c]}),t[6]=s,t[7]=c,t[8]=l):l=t[8];let u;t[9]===a?u=t[10]:(u=a&&(0,O.jsx)(`div`,{className:`flex shrink-0 items-center gap-3`,children:a}),t[9]=a,t[10]=u);let d;return t[11]!==o||t[12]!==l||t[13]!==u?(d=(0,O.jsxs)(`div`,{className:`flex min-h-16 flex-wrap items-center gap-3 px-4 py-3 sm:flex-nowrap sm:px-5`,children:[o,l,u]}),t[11]=o,t[12]=l,t[13]=u,t[14]=d):d=t[14],d}function A(){let e=(0,E.c)(2),t=o(j)===`zh`,n;return e[0]===t?n=e[1]:(n=(0,O.jsx)(M,{zh:t}),e[0]=t,e[1]=n),n}function j(e){return e.language}function M({zh:e}){let t=c(e?`zh`:`en`).computerSettings,{data:n,mutate:r,error:o}=y(!0),v=n?.payload?.config,[b,x]=(0,D.useState)(!1),[C,w]=(0,D.useState)(``),[T,E]=(0,D.useState)(!1),[A,j]=(0,D.useState)(null),[M,N]=(0,D.useState)(!1),[P,F]=(0,D.useState)(null),[re,I]=(0,D.useState)(!1),[L,R]=(0,D.useState)(``),[z,B]=(0,D.useState)(!1),[ie,V]=(0,D.useState)(!1),H=window.electronAPI?.platform===`win32`,U=S()?window.electronAPI?.computer:void 0,W=window.electronAPI?.platform===`darwin`?window.electronAPI.system:void 0;(0,D.useEffect)(()=>{if(!U)return;let e=!1,t=!1,n=async()=>{if(!t){t=!0;try{let t=await U.status();e||(j(t),N(!1))}catch{e||(j(null),N(!0))}finally{t=!1}}};n();let r=window.setInterval(()=>{n()},2e3);return()=>{e=!0,window.clearInterval(r)}},[U]),(0,D.useEffect)(()=>{if(!U?.access)return;let e=!1;return U.access().then(t=>{e||(F(t),I(!1))}).catch(()=>{e||I(!0)}),()=>{e=!0}},[U]);let G=async e=>{x(!0),w(``);try{await e()}catch(e){w(e instanceof Error?e.message:String(e))}finally{x(!1)}},ae=e=>G(async()=>{S()&&(await s(a(`/api/config`),{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({computer:{enabled:e}})}),await r())}),oe=async()=>{w(``),E(!1);try{await U?.stop(),E(!0),U&&j(await U.status())}catch(e){w(e instanceof Error?e.message:String(e))}},K=A?.session?.status??`idle`,q=t.states[K]??K,J=S()&&v?.computer?.enabled===!0,se=A?.controlPaused?t.pausedNotice:J?A?.connected?`${t.connected} · ${q}`:A?t.disconnected:t.checking:t.disabled,Y=!U||M||A?.reenrollmentRequired===!0||!!(A?.error||A?.session?.errorCode)||A!=null&&!H&&(!A.permissions.accessibility||A.permissions.screenRecording!==`granted`),X=(H?A?.connected===!0:A?.permissions.accessibility===!0&&A.permissions.screenRecording===`granted`)&&!A?.reenrollmentRequired,Z=P?.apps.filter(e=>P.authorizedAppIds.includes(e.appId))??[],Q=P?.apps.filter(e=>!P.authorizedAppIds.includes(e.appId)&&`${e.name} ${e.appId}`.toLocaleLowerCase().includes(L.toLocaleLowerCase()))??[],$=(0,O.jsxs)(`section`,{"aria-labelledby":`computer-permissions-title`,className:`space-y-3`,children:[(0,O.jsx)(`h2`,{id:`computer-permissions-title`,className:`text-sm font-semibold text-fg`,children:t.permissions}),U?M?(0,O.jsx)(`p`,{role:`alert`,className:`rounded-xl bg-danger-soft p-5 text-sm text-danger`,children:t.nativeError}):A?X&&!ie?(0,O.jsx)(`div`,{className:`overflow-hidden rounded-2xl border border-edge bg-surface-panel`,children:(0,O.jsx)(k,{icon:(0,O.jsx)(m,{className:`size-5`}),title:H?t.windowsAccess:t.systemPermissions,description:H?t.windowsAccessDescription:t.granted,children:(0,O.jsx)(g,{onClick:()=>V(!0),children:t.viewDetails})})}):(0,O.jsxs)(`div`,{className:`divide-y divide-edge-subtle overflow-hidden rounded-2xl border border-edge bg-surface-panel`,children:[(0,O.jsx)(k,{icon:(0,O.jsx)(d,{className:`size-5`}),title:t.device,description:(0,O.jsxs)(`span`,{"aria-live":`polite`,children:[A.connected?t.connected:t.disconnected,` · `,q]}),children:A.reenrollmentRequired&&(0,O.jsx)(g,{disabled:b,onClick:()=>{G(async()=>{j(await U.reenroll())})},children:t.reenroll})}),H&&(0,O.jsx)(k,{icon:(0,O.jsx)(m,{className:`size-5`}),title:t.windowsAccess,description:t.windowsAccessDescription}),W&&(0,O.jsxs)(O.Fragment,{children:[(0,O.jsxs)(k,{icon:(0,O.jsx)(m,{className:`size-5`}),title:t.accessibility,children:[(0,O.jsx)(`span`,{className:`text-xs text-fg-muted`,children:A.permissions.accessibility?t.granted:t.notGranted}),!A.permissions.accessibility&&(0,O.jsx)(g,{disabled:b,"aria-label":`${t.openSettings}: ${t.accessibility}`,onClick:()=>{G(()=>W.requestAccessibility())},children:t.openSettings})]}),(0,O.jsxs)(k,{icon:(0,O.jsx)(d,{className:`size-5`}),title:t.screen,children:[(0,O.jsx)(`span`,{className:`text-xs text-fg-muted`,children:A.permissions.screenRecording===`granted`?t.granted:t.notGranted}),A.permissions.screenRecording!==`granted`&&(0,O.jsx)(g,{disabled:b,"aria-label":`${t.openSettings}: ${t.screen}`,onClick:()=>{G(()=>W.requestScreen())},children:t.openSettings})]})]}),X&&(0,O.jsx)(`div`,{className:`flex justify-end px-4 py-2 sm:px-5`,children:(0,O.jsx)(g,{variant:`ghost`,onClick:()=>V(!1),children:t.hideDetails})})]}):(0,O.jsx)(`div`,{"aria-label":t.checking,children:(0,O.jsx)(_,{className:`h-20 w-full rounded-xl`})}):(0,O.jsx)(`p`,{className:`rounded-xl bg-surface-hover/20 p-5 text-sm leading-relaxed text-fg-muted`,children:window.electronAPI?t.unsupportedPlatform:t.desktopRequired}),(A?.error||A?.session?.errorCode)&&(0,O.jsx)(`p`,{role:`alert`,className:`break-words text-sm text-red-600`,children:A.error||A.session?.errorCode})]});return(0,O.jsxs)(ee,{gap:`gap-7`,children:[(0,O.jsx)(te,{title:t.title,subtitle:t.subtitle,meta:(0,O.jsx)(`span`,{className:`mt-3 inline-flex rounded-md border border-edge px-2 py-1 text-xs text-fg-muted`,children:t.preview}),actions:U&&(0,O.jsxs)(g,{onClick:()=>{oe()},children:[(0,O.jsx)(h,{className:`size-3.5`}),t.stop]})}),H&&(0,O.jsx)(`p`,{className:`text-sm leading-relaxed text-fg-muted`,children:t.windowsAccessDescription}),C&&(0,O.jsx)(`p`,{role:`alert`,className:`text-sm text-red-600`,children:C}),T&&(0,O.jsx)(`p`,{role:`status`,className:`text-sm text-fg-muted`,children:t.stoppedNotice}),(0,O.jsxs)(`section`,{"aria-labelledby":`computer-control-title`,className:`space-y-3`,children:[(0,O.jsx)(`h2`,{id:`computer-control-title`,className:`text-sm font-semibold text-fg`,children:t.control}),!v&&!o?(0,O.jsx)(_,{className:`h-32 w-full rounded-xl`}):o?(0,O.jsxs)(`div`,{role:`alert`,className:`text-sm text-fg-muted`,children:[String(o),` `,(0,O.jsx)(g,{onClick:()=>{G(()=>r())},children:t.retry})]}):(0,O.jsxs)(`div`,{className:`divide-y divide-edge-subtle overflow-hidden rounded-2xl border border-edge bg-surface-panel`,children:[(0,O.jsx)(k,{icon:(0,O.jsx)(f,{className:`size-5`}),title:t.desktop,description:(0,O.jsx)(`span`,{"aria-live":`polite`,children:se}),children:(0,O.jsx)(`button`,{type:`button`,role:`switch`,"aria-label":t.desktop,"aria-checked":J,disabled:b||!S()||A?.capabilities?.supported===!1,onClick:()=>{ae(v?.computer?.enabled!==!0)},className:`touch-target flex items-center rounded-lg px-1 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent disabled:opacity-50`,children:(0,O.jsx)(`span`,{className:`flex h-6 w-11 items-center rounded-full p-0.5 transition-colors ${J?`bg-accent`:`bg-fg-muted/30`}`,children:(0,O.jsx)(`span`,{className:`size-5 rounded-full bg-white transition-transform ${J?`translate-x-5`:`translate-x-0`}`})})})}),A?.controlPaused&&(0,O.jsx)(`div`,{className:`flex justify-end border-t border-edge-subtle px-4 py-3 sm:px-5`,children:(0,O.jsx)(g,{disabled:b,onClick:()=>{G(async()=>{U&&j(await U.resume()),E(!1)})},children:t.resume})})]})]}),Y&&$,U?.access&&(0,O.jsxs)(`section`,{"aria-labelledby":`computer-app-access-title`,className:`space-y-3`,children:[(0,O.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,O.jsx)(`h2`,{id:`computer-app-access-title`,className:`text-sm font-semibold text-fg`,children:t.appAccess}),!P?.allowAllApps&&(0,O.jsxs)(g,{disabled:b,"aria-expanded":z,"aria-controls":z?`computer-app-picker`:void 0,onClick:()=>{B(e=>!e),R(``)},children:[z?(0,O.jsx)(l,{className:`size-4`,"aria-hidden":!0}):(0,O.jsx)(p,{className:`size-4`,"aria-hidden":!0}),z?t.doneAdding:t.addApp]})]}),P?(0,O.jsxs)(`div`,{className:`overflow-hidden rounded-2xl border border-edge bg-surface-panel`,children:[(0,O.jsx)(k,{icon:(0,O.jsx)(f,{className:`size-5`}),title:t.anyApp,description:t.anyAppDescription,children:(0,O.jsx)(`button`,{type:`button`,role:`switch`,"aria-label":t.anyApp,"aria-checked":P.allowAllApps===!0,disabled:b,onClick:()=>{G(async()=>{F(await U.setAllAppAccess(!P.allowAllApps)),B(!1)})},className:`touch-target flex items-center rounded-lg px-1 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent disabled:opacity-50`,children:(0,O.jsx)(`span`,{className:`flex h-6 w-11 items-center rounded-full p-0.5 transition-colors ${P.allowAllApps?`bg-accent`:`bg-fg-muted/30`}`,children:(0,O.jsx)(`span`,{className:`size-5 rounded-full bg-white transition-transform ${P.allowAllApps?`translate-x-5`:`translate-x-0`}`})})})}),!P.allowAllApps&&(0,O.jsx)(`div`,{className:`border-t border-edge-subtle`,children:Z.length?Z.map(e=>(0,O.jsxs)(`div`,{className:`flex min-h-16 items-center justify-between gap-3 border-b border-edge-subtle px-4 py-3 last:border-b-0 sm:px-5`,children:[(0,O.jsxs)(`div`,{className:`min-w-0`,children:[(0,O.jsx)(`p`,{className:`truncate text-sm font-medium text-fg`,children:e.name}),(0,O.jsx)(`p`,{className:`truncate text-xs text-fg-muted`,children:e.appId})]}),(0,O.jsx)(g,{disabled:b,variant:`ghost`,onClick:()=>{G(async()=>{let t=await U.setAppAccess(e.appId,!1);F(e=>e&&{...e,authorizedAppIds:t.authorizedAppIds})})},children:t.revokeApp})]},e.appId)):(0,O.jsx)(`p`,{className:`px-5 py-6 text-center text-sm text-fg-muted`,children:t.noAuthorizedApps})})]}):re?(0,O.jsx)(`p`,{role:`alert`,className:`text-sm text-danger`,children:t.appListError}):(0,O.jsx)(_,{className:`h-20 w-full rounded-xl`}),z&&!P?.allowAllApps&&(0,O.jsxs)(`div`,{id:`computer-app-picker`,className:`space-y-3 rounded-2xl border border-edge bg-surface-panel p-4`,children:[(0,O.jsxs)(`div`,{className:`flex gap-2`,children:[(0,O.jsx)(`input`,{"aria-label":t.searchApps,value:L,onChange:e=>R(e.target.value),placeholder:t.searchApps,className:`min-w-0 flex-1 rounded-lg border border-edge bg-surface-base px-3 py-2 text-sm text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`}),(0,O.jsx)(g,{disabled:b,onClick:()=>{G(async()=>{F(await U.access()),I(!1)})},children:t.refreshApps})]}),P&&(0,O.jsx)(`div`,{className:`max-h-64 overflow-y-auto rounded-xl border border-edge`,children:Q.length?Q.map(e=>(0,O.jsxs)(`div`,{className:`flex min-h-14 items-center justify-between gap-3 border-b border-edge-subtle px-3 py-2 last:border-b-0`,children:[(0,O.jsxs)(`div`,{className:`min-w-0`,children:[(0,O.jsx)(`p`,{className:`truncate text-sm font-medium text-fg`,children:e.name}),(0,O.jsx)(`p`,{className:`truncate text-xs text-fg-muted`,children:e.appId})]}),(0,O.jsx)(g,{disabled:b,variant:`secondary`,onClick:()=>{G(async()=>{let t=await U.setAppAccess(e.appId,!0);F(e=>e&&{...e,authorizedAppIds:t.authorizedAppIds})})},children:t.authorizeApp})]},e.appId)):(0,O.jsx)(`p`,{className:`px-3 py-5 text-center text-sm text-fg-muted`,children:P.appsBusy?t.appsBusy:P.appsUnavailable?t.appListError:t.noMatchingApps})})]})]}),(0,O.jsx)(ne,{zh:e}),!Y&&$,(0,O.jsxs)(`section`,{"aria-labelledby":`computer-browser-title`,className:`space-y-3`,children:[(0,O.jsx)(`h2`,{id:`computer-browser-title`,className:`text-sm font-semibold text-fg`,children:t.otherControl}),(0,O.jsx)(`div`,{className:`overflow-hidden rounded-2xl border border-edge bg-surface-panel`,children:(0,O.jsx)(k,{icon:(0,O.jsx)(u,{className:`size-5`}),title:t.browser,description:v?v.browser?.enabled?t.browserEnabled:t.browserDisabled:t.checking,children:(0,O.jsx)(g,{asChild:!0,children:(0,O.jsx)(i,{to:`/settings/agent-browser`,children:t.manage})})})})]}),(0,O.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.previewFootnote})]})}export{A as ComputerSettingsPage,M as ComputerSettingsPanel};
@@ -0,0 +1 @@
1
+ import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{a as i,i as a,l as o,o as s}from"./locale-store-Br7IfbXK.js";import{t as c}from"./messages-ByFlEbsu.js";import{t as l}from"./createLucideIcon-DPHK1VkS.js";import{t as u}from"./chevron-left-DqFhpbvK.js";import{t as d}from"./chevron-right-BweFrslA.js";import{n as f,r as p}from"./popover-select-DD8fmrxH.js";import{t as m}from"./circle-check-C23XjkUj.js";import{t as h}from"./secret-input-BQvFXqzz.js";import{t as g}from"./globe-DSSGFWFn.js";import{t as _}from"./loader-circle-CifKLtgG.js";import{t as v}from"./plus-Q2yW6OE7.js";import{t as y}from"./search-DA7gz22f.js";import{t as b}from"./settings-2-D-csvaET.js";import{t as x}from"./x-B_N4OPjy.js";import{t as S}from"./cn-0WouolD0.js";import{t as C}from"./button-CnRSIP6m.js";import{t as w}from"./skeleton-BI5TyibZ.js";import{a as T,i as E,n as D,o as O,r as k,s as A,t as j}from"./dist-DfWfZ9iu.js";import{i as M,o as N}from"./settings-shell-dialog-layer-BU3UuiJr.js";import{i as P}from"./vendor-swr-CdRzEUwF.js";import{n as F}from"./interaction-BdhHBbYa.js";import{r as I}from"./gateway-config-swr-BOCt_zOo.js";import{n as L,t as R}from"./registry-api-DFDvOTg4.js";import{a as z,o as B,s as V}from"./form-field-width-DJw_jULe.js";import{n as ee}from"./secret-input-labels-B5Jl5HqK.js";import{t as te}from"./sliding-tab-list-DuQyViqe.js";import{i as H,n as U}from"./models-hub-cache-Bd-fYUrV.js";import{a as ne,i as W,o as G}from"./providers-api-DOnNfkwQ.js";import{t as re}from"./oauth-provider-connect-C8BXow79.js";var ie=l(`circle-dashed`,[[`path`,{d:`M10.1 2.182a10 10 0 0 1 3.8 0`,key:`5ilxe3`}],[`path`,{d:`M13.9 21.818a10 10 0 0 1-3.8 0`,key:`11zvb9`}],[`path`,{d:`M17.609 3.721a10 10 0 0 1 2.69 2.7`,key:`1iw5b2`}],[`path`,{d:`M2.182 13.9a10 10 0 0 1 0-3.8`,key:`c0bmvh`}],[`path`,{d:`M20.279 17.609a10 10 0 0 1-2.7 2.69`,key:`1ruxm7`}],[`path`,{d:`M21.818 10.1a10 10 0 0 1 0 3.8`,key:`qkgqxc`}],[`path`,{d:`M3.721 6.391a10 10 0 0 1 2.7-2.69`,key:`1mcia2`}],[`path`,{d:`M6.391 20.279a10 10 0 0 1-2.69-2.7`,key:`1fvljs`}]]),ae=l(`log-in`,[[`path`,{d:`m10 17 5-5-5-5`,key:`1bsop3`}],[`path`,{d:`M15 12H3`,key:`6jk70r`}],[`path`,{d:`M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4`,key:`u53s6r`}]]),K=e(t(),1),q=n(),J=[{label:[`文本`,`Text`],uses:[`chat`]},{label:[`图片`,`Images`],uses:[`vision`,`image`]},{label:[`语音`,`Voice`],uses:[`transcription`,`speech`,`conversation`]},{label:[`后台`,`Background`],uses:[`background`]}],oe={chat:[`对话与任务`,`Chat and tasks`],vision:[`看图`,`Image understanding`],image:[`生成图片`,`Image generation`],transcription:[`录音与听写`,`Recording and dictation`],speech:[`文字转语音`,`Text to speech`],conversation:[`实时语音对话`,`Realtime conversation`],background:[`自动与后台任务`,`Background tasks`]};function se(e){return e&&Object.hasOwn(oe,e)?e:void 0}function ce(e){return e&&!/[\\\r\n]/.test(e)&&(e.startsWith(`/chat/`)||e===`/personal`||e===`/settings/phone-use`||e.startsWith(`/automations`))?e:void 0}function le(e,t){let[n,r]=e.split(`?`),i=new URLSearchParams(r),a=ce(t.get(`returnTo`));return a&&i.set(`returnTo`,a),`${n}${i.size?`?${i}`:``}`}async function Y(e){return(await s(a(`/api/models/setup/${encodeURIComponent(e)}`))).payload}async function ue(e,t={}){return(await s(a(`/api/models/setup/${encodeURIComponent(e)}/preview`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)})).payload}async function de(e,t,n){await s(a(`/api/models/setup/${encodeURIComponent(e)}/apply`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({...t,revision:n})}),await H()}function fe(e,t){return e===`single`?t.getApiKey:e===`intl`?t.getApiKeyIntl:t.getApiKeyCn}var X={"qwen-token-plan-cn":{apiKeyUrl:`https://bailian.console.aliyun.com/cn-beijing/subscription/overview`,docsUrl:`https://help.aliyun.cn/zh/model-studio/token-plan-personal-quick-start`,description:`Alibaba Bailian subscription. Configure chat, vision and image generation with one key.`,descriptionZh:`阿里云百炼订阅,一份 Key 配置对话、视觉和图片生成。`,bestFor:[`general`,`coding`,`vision`],aliases:[`阿里云订阅`,`百炼订阅`,`aliyun`,`bailian`,`qwen`,`token plan`,`通义`,`千问`],envVars:[`QWEN_TOKEN_PLAN_CN_API_KEY`]},openai:{apiKeyUrl:`https://platform.openai.com/api-keys`,pricingUrl:`https://openai.com/pricing`,docsUrl:`https://platform.openai.com/docs`,description:`The most widely used LLM provider. Powers ChatGPT.`,descriptionZh:`最广泛使用的 LLM 服务商,ChatGPT 背后的技术。`,bestFor:[`general`,`coding`,`vision`],freeTier:!1,freeTierNote:`Pay-as-you-go; new accounts may receive trial credits.`,aliases:[`chatgpt`,`gpt`,`gpt-4`,`gpt4`,`gpt-4o`,`gpt4o`],envVars:[`OPENAI_API_KEY`]},anthropic:{apiKeyUrl:`https://console.anthropic.com/settings/keys`,pricingUrl:`https://www.anthropic.com/pricing`,docsUrl:`https://docs.anthropic.com`,description:`Anthropic model access. Available models are loaded from the gateway catalog.`,descriptionZh:`Anthropic 模型服务。可用模型由网关目录动态加载。`,bestFor:[`long context`,`coding`,`reasoning`],freeTier:!1,aliases:[`claude`,`claude 3`,`claude sonnet`,`claude opus`,`claude haiku`],envVars:[`ANTHROPIC_OAUTH_TOKEN`,`ANTHROPIC_API_KEY`]},google:{apiKeyUrl:`https://aistudio.google.com/app/apikey`,pricingUrl:`https://ai.google.dev/pricing`,docsUrl:`https://ai.google.dev/docs`,description:`Google AI model access. Available models are loaded from the gateway catalog.`,descriptionZh:`Google AI 模型服务。可用模型由网关目录动态加载。`,bestFor:[`multimodal`,`long context`,`general`],freeTier:!0,freeTierNote:`Free tier available via Google AI Studio.`,aliases:[`gemini`,`google gemini`,`bard`,`google ai`],envVars:[`GEMINI_API_KEY`,`GOOGLE_API_KEY`]},"google-vertex":{apiKeyUrl:`https://console.cloud.google.com/apis/credentials`,pricingUrl:`https://cloud.google.com/vertex-ai/pricing`,docsUrl:`https://cloud.google.com/vertex-ai/docs`,description:`Google Vertex AI — enterprise-grade model hosting on GCP.`,descriptionZh:`Google Vertex AI,企业级 GCP 托管模型服务。`,bestFor:[`enterprise`,`multimodal`,`compliance`],freeTier:!1,aliases:[`vertex`,`vertex ai`,`gcp`,`google cloud`],envVars:[`GOOGLE_CLOUD_API_KEY`,`GOOGLE_CLOUD_PROJECT`,`GOOGLE_CLOUD_LOCATION`]},"google-gemini-cli":{apiKeyUrl:`https://aistudio.google.com/app/apikey`,pricingUrl:`https://ai.google.dev/pricing`,docsUrl:`https://ai.google.dev/docs`,description:`Gemini via CLI token — for users authenticated with the Gemini CLI tool.`,descriptionZh:`通过 Gemini CLI 令牌访问 Gemini,适合已安装 CLI 工具的用户。`,bestFor:[`general`,`multimodal`],freeTier:!0,freeTierNote:`Uses your existing Gemini CLI authentication.`,aliases:[`gemini cli`,`gemini-cli`],envVars:[`GEMINI_CLI_TOKEN`,`GOOGLE_TOKEN`]},"google-antigravity":{apiKeyUrl:`https://console.cloud.google.com/apis/credentials`,pricingUrl:`https://cloud.google.com/pricing`,docsUrl:`https://cloud.google.com/docs`,description:`Google Antigravity — internal/experimental Google AI endpoint.`,descriptionZh:`Google Antigravity,Google 内部/实验性 AI 端点。`,bestFor:[`experimental`],freeTier:!1,aliases:[`antigravity`,`google antigravity`],envVars:[`ANTIGRAVITY_API_KEY`]},groq:{apiKeyUrl:`https://console.groq.com/keys`,pricingUrl:`https://groq.com/pricing/`,docsUrl:`https://console.groq.com/docs`,description:`Extremely fast inference — ideal for latency-sensitive applications.`,descriptionZh:`推理速度极快,适合对延迟敏感的场景。`,bestFor:[`speed`,`cheap`],freeTier:!0,freeTierNote:`Generous free tier with rate limits.`,aliases:[`groq`,`llama on groq`,`mixtral on groq`],envVars:[`GROQ_API_KEY`]},deepseek:{apiKeyUrl:`https://platform.deepseek.com/api_keys`,pricingUrl:`https://api-docs.deepseek.com/quick_start/pricing/`,docsUrl:`https://platform.deepseek.com/api-docs/`,description:`DeepSeek model access through an OpenAI-compatible API.`,descriptionZh:`通过 OpenAI 兼容 API 访问 DeepSeek 模型。`,bestFor:[`reasoning`,`cheap`,`coding`],freeTier:!0,freeTierNote:`Free credits may be available for new accounts.`,aliases:[`deepseek`,`deep seek`,`deepseek v4`,`deepseek-v4`,`r1`],envVars:[`DEEPSEEK_API_KEY`]},"volcengine-ark":{apiKeyUrl:`https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey`,pricingUrl:`https://www.volcengine.com/docs/82379/1099320`,docsUrl:`https://www.volcengine.com/docs/82379/1302008`,description:`Volcengine Ark — OpenAI-compatible access to Doubao and custom Ark endpoints.`,descriptionZh:`火山方舟,通过 OpenAI 兼容接口访问豆包与自定义方舟 endpoint。`,bestFor:[`chinese`,`general`,`enterprise`],aliases:[`volcengine`,`ark`,`doubao`,`volces`,`火山方舟`,`豆包`],envVars:[`ARK_API_KEY`,`VOLCENGINE_API_KEY`]},"volcengine-plan":{apiKeyUrl:`https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey`,pricingUrl:`https://www.volcengine.com/docs/82379/1099320`,docsUrl:`https://www.volcengine.com/docs/82379/1302008`,description:`Volcengine Doubao Coding Plan — Ark coding endpoint.`,descriptionZh:`火山方舟豆包 Coding Plan,使用 Ark coding endpoint。`,bestFor:[`coding`,`chinese`],aliases:[`volcengine plan`,`ark coding`,`doubao coding`,`火山方舟 coding`],envVars:[`ARK_API_KEY`,`VOLCENGINE_API_KEY`]},"byteplus-plan":{apiKeyUrl:`https://console.byteplus.com/ark/region:ark+ap-southeast-1/apiKey`,pricingUrl:`https://docs.byteplus.com/en/docs/ModelArk`,docsUrl:`https://docs.byteplus.com/en/docs/ModelArk/OpenAI`,description:`BytePlus Doubao Coding Plan — international Ark coding endpoint.`,descriptionZh:`BytePlus 豆包 Coding Plan,国际区 Ark coding endpoint。`,bestFor:[`coding`,`chinese`],aliases:[`byteplus`,`byteplus plan`,`doubao coding international`],envVars:[`BYTEPLUS_API_KEY`,`ARK_API_KEY`]},xai:{apiKeyUrl:`https://console.x.ai/`,pricingUrl:`https://x.ai/api`,docsUrl:`https://docs.x.ai/`,description:`xAI model access. Available models are loaded from the gateway catalog.`,descriptionZh:`xAI 模型服务。可用模型由网关目录动态加载。`,bestFor:[`reasoning`,`real-time`],freeTier:!1,aliases:[`grok`,`xai`,`x.ai`],envVars:[`XAI_API_KEY`]},cerebras:{apiKeyUrl:`https://cloud.cerebras.ai/platform/`,pricingUrl:`https://cloud.cerebras.ai/platform/`,docsUrl:`https://inference-docs.cerebras.ai/`,description:`Ultra-fast inference on custom AI chips. Fastest Llama inference available.`,descriptionZh:`基于专用 AI 芯片的超快推理,Llama 推理速度业界最快。`,bestFor:[`speed`],freeTier:!0,freeTierNote:`Free tier available.`,aliases:[`cerebras`],envVars:[`CEREBRAS_API_KEY`]},mistral:{apiKeyUrl:`https://console.mistral.ai/api-keys/`,pricingUrl:`https://mistral.ai/technology/#pricing`,docsUrl:`https://docs.mistral.ai/`,description:`European open-weight models. Good balance of quality and cost.`,descriptionZh:`欧洲开源模型,质量与成本平衡好。`,bestFor:[`general`,`cheap`,`coding`],freeTier:!1,aliases:[`mistral`,`mixtral`,`codestral`],envVars:[`MISTRAL_API_KEY`]},openrouter:{apiKeyUrl:`https://openrouter.ai/keys`,pricingUrl:`https://openrouter.ai/models`,docsUrl:`https://openrouter.ai/docs`,description:`API gateway to 100+ models from many providers with a single key.`,descriptionZh:`统一 API 网关,一个 Key 访问 100+ 模型。`,bestFor:[`general`,`flexibility`],freeTier:!0,freeTierNote:`Some models are free; pay-per-use for others.`,aliases:[`openrouter`,`open router`],envVars:[`OPENROUTER_API_KEY`]},azure:{apiKeyUrl:`https://portal.azure.com/#view/Microsoft_Azure_ProjectOxford/CognitiveServicesHub/~/OpenAI`,pricingUrl:`https://azure.microsoft.com/en-us/pricing/details/cognitive-services/openai-service/`,docsUrl:`https://learn.microsoft.com/en-us/azure/ai-services/openai/`,description:`OpenAI models hosted on Azure. Enterprise SLA and data residency.`,descriptionZh:`Azure 托管的 OpenAI 模型,企业级 SLA 和数据合规。`,bestFor:[`enterprise`,`compliance`,`coding`],freeTier:!1,aliases:[`azure`,`azure openai`,`aoai`],envVars:[`AZURE_OPENAI_API_KEY`,`AZURE_OPENAI_BASE_URL`]},"amazon-bedrock":{apiKeyUrl:`https://console.aws.amazon.com/iam/home#/security_credentials`,pricingUrl:`https://aws.amazon.com/bedrock/pricing/`,docsUrl:`https://docs.aws.amazon.com/bedrock/`,description:`AWS Bedrock hosted model access with enterprise controls.`,descriptionZh:`AWS Bedrock 托管模型服务,提供企业级控制能力。`,bestFor:[`enterprise`,`compliance`],freeTier:!1,aliases:[`bedrock`,`aws`,`amazon`],envVars:[`AWS_ACCESS_KEY_ID`,`AWS_SECRET_ACCESS_KEY`,`AWS_REGION`]},minimax:{apiKeyUrl:`https://platform.minimax.io/user-center/basic-information/interface-key`,pricingUrl:`https://platform.minimax.io/docs/guides/models-intro`,docsUrl:`https://platform.minimax.io/docs/guides/quickstart-preparation`,description:`MiniMax — Chinese multimodal model with strong text and audio capabilities.`,descriptionZh:`MiniMax,国产多模态模型,文本和音频能力强。`,bestFor:[`multimodal`,`chinese`],freeTier:!0,freeTierNote:`注册赠送免费额度。`,aliases:[`minimax`,`mini max`,`abab`],envVars:[`MINIMAX_API_KEY`]},"minimax-cn":{apiKeyUrl:`https://platform.minimaxi.com/user-center/basic-information/interface-key`,pricingUrl:`https://platform.minimaxi.com/document/Price`,docsUrl:`https://platform.minimaxi.com/document/Announcement`,description:`MiniMax (China endpoint) — domestic access for Chinese users.`,descriptionZh:`MiniMax 国内端点,国内用户直连访问。`,bestFor:[`multimodal`,`chinese`],freeTier:!0,freeTierNote:`注册赠送免费额度。`,aliases:[`minimax cn`,`minimax china`,`abab`],envVars:[`MINIMAX_CN_API_KEY`,`MINIMAX_API_KEY`]},stepfun:{apiKeyUrl:`https://platform.stepfun.com/interface-key`,pricingUrl:`https://platform.stepfun.com/docs/pricing`,docsUrl:`https://platform.stepfun.com/docs`,description:`StepFun OpenAI-compatible endpoint.`,descriptionZh:`阶跃星辰 StepFun OpenAI 兼容端点。`,bestFor:[`chinese`,`reasoning`,`general`],aliases:[`stepfun`,`step`,`阶跃星辰`],envVars:[`STEPFUN_API_KEY`]},"stepfun-cn":{apiKeyUrl:`https://platform.stepfun.com/interface-key`,pricingUrl:`https://platform.stepfun.com/docs/pricing`,docsUrl:`https://platform.stepfun.com/docs`,description:`StepFun China — OpenAI-compatible chat endpoint.`,descriptionZh:`阶跃星辰 StepFun 中国区 OpenAI 兼容对话端点。`,bestFor:[`chinese`,`reasoning`,`general`],aliases:[`stepfun cn`,`step cn`,`阶跃星辰`],envVars:[`STEPFUN_API_KEY`]},"stepfun-intl":{apiKeyUrl:`https://platform.stepfun.com/interface-key`,pricingUrl:`https://platform.stepfun.com/docs/pricing`,docsUrl:`https://platform.stepfun.com/docs`,description:`StepFun International — OpenAI-compatible chat endpoint.`,descriptionZh:`阶跃星辰 StepFun 国际区 OpenAI 兼容对话端点。`,bestFor:[`chinese`,`reasoning`,`general`],aliases:[`stepfun intl`,`step international`],envVars:[`STEPFUN_API_KEY`]},"stepfun-plan":{apiKeyUrl:`https://platform.stepfun.com/interface-key`,pricingUrl:`https://platform.stepfun.com/docs/pricing`,docsUrl:`https://platform.stepfun.com/docs`,description:`StepFun Step Plan coding/planning endpoint.`,descriptionZh:`阶跃星辰 Step Plan coding/planning 专用端点。`,bestFor:[`coding`,`reasoning`,`chinese`],aliases:[`stepfun plan`,`step plan`,`阶跃 plan`],envVars:[`STEPFUN_API_KEY`]},"stepfun-plan-cn":{apiKeyUrl:`https://platform.stepfun.com/interface-key`,pricingUrl:`https://platform.stepfun.com/docs/pricing`,docsUrl:`https://platform.stepfun.com/docs`,description:`StepFun Step Plan China — coding/planning endpoint.`,descriptionZh:`阶跃星辰 Step Plan 中国区 coding/planning 专用端点。`,bestFor:[`coding`,`reasoning`,`chinese`],aliases:[`stepfun plan cn`,`step plan cn`,`阶跃 plan`],envVars:[`STEPFUN_API_KEY`]},"stepfun-plan-intl":{apiKeyUrl:`https://platform.stepfun.com/interface-key`,pricingUrl:`https://platform.stepfun.com/docs/pricing`,docsUrl:`https://platform.stepfun.com/docs`,description:`StepFun Step Plan International — coding/planning endpoint.`,descriptionZh:`阶跃星辰 Step Plan 国际区 coding/planning 专用端点。`,bestFor:[`coding`,`reasoning`,`chinese`],aliases:[`stepfun plan intl`,`step plan international`],envVars:[`STEPFUN_API_KEY`]},"kimi-coding":{apiKeyUrl:`https://platform.kimi.com/console/api-keys`,pricingUrl:`https://platform.kimi.com/docs/pricing/chat`,docsUrl:`https://platform.kimi.com/docs`,description:`Kimi Coding — dedicated Anthropic-compatible coding endpoint.`,descriptionZh:`Kimi Coding,Anthropic 兼容的专用 coding 端点。`,bestFor:[`coding`,`chinese`,`vision`],freeTier:!0,freeTierNote:`注册赠送免费额度。`,aliases:[`kimi coding`,`moonshot coding`,`kimi code`],envVars:[`KIMI_API_KEY`,`MOONSHOT_API_KEY`]},moonshotai:{apiKeyUrl:`https://platform.moonshot.ai/console/api-keys`,pricingUrl:`https://platform.moonshot.ai/docs/pricing`,docsUrl:`https://platform.moonshot.ai/docs`,description:`Moonshot Kimi — international API (api.moonshot.ai).`,descriptionZh:`月之暗面 Kimi 国际版 API(api.moonshot.ai)。`,bestFor:[`coding`,`chinese`,`long context`],freeTier:!0,aliases:[`moonshot`,`kimi`,`moonshot ai`],envVars:[`MOONSHOT_API_KEY`]},"moonshotai-cn":{apiKeyUrl:`https://platform.moonshot.cn/console/api-keys`,pricingUrl:`https://platform.moonshot.cn/docs/pricing/chat`,docsUrl:`https://platform.moonshot.cn/docs`,description:`Moonshot Kimi — China region endpoint.`,descriptionZh:`月之暗面 Kimi 中国区域端点。`,bestFor:[`coding`,`chinese`,`long context`],freeTier:!0,aliases:[`moonshot cn`,`kimi cn`],envVars:[`MOONSHOT_API_KEY`]},fal:{apiKeyUrl:`https://fal.ai/dashboard/keys`,pricingUrl:`https://fal.ai/pricing`,docsUrl:`https://fal.ai/docs`,description:`fal — serverless image and media generation APIs.`,descriptionZh:`fal:无服务器图像与媒体生成 API。`,bestFor:[`image`,`video`],freeTier:!0,aliases:[`fal ai`,`fal.ai`],envVars:[`FAL_KEY`,`FAL_API_KEY`]},fireworks:{apiKeyUrl:`https://fireworks.ai/account/api-keys`,pricingUrl:`https://fireworks.ai/pricing`,docsUrl:`https://docs.fireworks.ai`,description:`Fireworks AI — fast inference for open and proprietary models.`,descriptionZh:`Fireworks AI,多种开源与商业模型的高速推理服务。`,bestFor:[`speed`,`coding`,`open weights`],freeTier:!0,aliases:[`fireworks ai`,`fireworks`],envVars:[`FIREWORKS_API_KEY`]},together:{apiKeyUrl:`https://api.together.xyz/settings/api-keys`,pricingUrl:`https://www.together.ai/pricing`,docsUrl:`https://docs.together.ai`,description:`Together AI — hosted Llama, Qwen, DeepSeek, and more.`,descriptionZh:`Together AI,托管 Llama、Qwen、DeepSeek 等模型。`,bestFor:[`open source`,`flexibility`],freeTier:!0,aliases:[`together ai`,`together.xyz`],envVars:[`TOGETHER_API_KEY`]},"cloudflare-workers-ai":{apiKeyUrl:`https://dash.cloudflare.com/?to=/:account/ai/workers-ai`,pricingUrl:`https://developers.cloudflare.com/workers-ai/platform/pricing/`,docsUrl:`https://developers.cloudflare.com/workers-ai/`,description:`Cloudflare Workers AI — models at the edge via Cloudflare API.`,descriptionZh:`Cloudflare Workers AI,通过 Cloudflare API 在边缘运行模型。`,bestFor:[`edge`,`latency`],freeTier:!0,aliases:[`workers ai`,`cf workers ai`],envVars:[`CLOUDFLARE_API_KEY`]},"cloudflare-ai-gateway":{apiKeyUrl:`https://dash.cloudflare.com/?to=/:account/ai/ai-gateway`,pricingUrl:`https://developers.cloudflare.com/ai-gateway/pricing/`,docsUrl:`https://developers.cloudflare.com/ai-gateway/`,description:`Cloudflare AI Gateway — unified OpenAI/Anthropic-compatible routing.`,descriptionZh:`Cloudflare AI Gateway,统一 OpenAI/Anthropic 兼容路由。`,bestFor:[`routing`,`observability`,`enterprise`],freeTier:!0,aliases:[`cf ai gateway`,`cloudflare gateway`],envVars:[`CLOUDFLARE_API_KEY`]},xiaomi:{apiKeyUrl:`https://platform.xiaomimimo.com/#/console/api-keys`,pricingUrl:`https://mimo.mi.com/`,docsUrl:`https://platform.xiaomimimo.com/`,description:`Xiaomi MiMo — API billing through the MiMo open platform; endpoint api.xiaomimimo.com.`,descriptionZh:`小米 MiMo 按量计费线路,在开放平台创建密钥;接口域名为 api.xiaomimimo.com。`,bestFor:[`general`,`coding`],freeTier:!1,aliases:[`xiaomi`,`mimo`,`小米`,`xiaomimimo`],envVars:[`XIAOMI_API_KEY`]},"xiaomi-token-plan-cn":{apiKeyUrl:`https://platform.xiaomimimo.com/#/console/api-keys`,pricingUrl:`https://mimo.mi.com/`,docsUrl:`https://platform.xiaomimimo.com/`,description:`Xiaomi MiMo Token Plan — China region (token-plan-cn.xiaomimimo.com).`,descriptionZh:`小米 MiMo Token 套餐 · 中国区(token-plan-cn.xiaomimimo.com)。`,bestFor:[`general`,`coding`],freeTier:!1,aliases:[`xiaomi token cn`,`mimo token cn`],envVars:[`XIAOMI_TOKEN_PLAN_CN_API_KEY`,`XIAOMI_TOKEN_PLAN_API_KEY`]},"xiaomi-token-plan-ams":{apiKeyUrl:`https://platform.xiaomimimo.com/#/console/api-keys`,pricingUrl:`https://mimo.mi.com/`,docsUrl:`https://platform.xiaomimimo.com/`,description:`Xiaomi MiMo Token Plan — Amsterdam region (token-plan-ams.xiaomimimo.com).`,descriptionZh:`小米 MiMo Token 套餐 · 阿姆斯特丹(token-plan-ams.xiaomimimo.com)。`,bestFor:[`general`,`coding`],freeTier:!1,aliases:[`xiaomi token ams`,`mimo token ams`],envVars:[`XIAOMI_TOKEN_PLAN_AMS_API_KEY`,`XIAOMI_TOKEN_PLAN_API_KEY`]},"xiaomi-token-plan-sgp":{apiKeyUrl:`https://platform.xiaomimimo.com/#/console/api-keys`,pricingUrl:`https://mimo.mi.com/`,docsUrl:`https://platform.xiaomimimo.com/`,description:`Xiaomi MiMo Token Plan — Singapore region (token-plan-sgp.xiaomimimo.com).`,descriptionZh:`小米 MiMo Token 套餐 · 新加坡(token-plan-sgp.xiaomimimo.com)。`,bestFor:[`general`,`coding`],freeTier:!1,aliases:[`xiaomi token sgp`,`mimo token sgp`],envVars:[`XIAOMI_TOKEN_PLAN_SGP_API_KEY`,`XIAOMI_TOKEN_PLAN_API_KEY`]},"ant-ling":{apiKeyUrl:`https://ling.tbox.cn/`,docsUrl:`https://ling.tbox.cn/`,description:`Ant Ling — domestic OpenAI-compatible access to Ling and Ring models.`,descriptionZh:`蚂蚁 Ling,国内 OpenAI 兼容服务,提供 Ling 与 Ring 系列模型。`,bestFor:[`chinese`,`reasoning`,`coding`],aliases:[`ant ling`,`ling`,`ring`,`蚂蚁 ling`,`蚂蚁灵`],envVars:[`ANT_LING_API_KEY`,`LING_API_KEY`]},"zai-coding-global":{apiKeyUrl:`https://z.ai/manage-apikey/apikey-list`,pricingUrl:`https://z.ai/manage-apikey/billing`,docsUrl:`https://docs.z.ai/guides/overview/quick-start`,description:`Zhipu GLM Coding Plan — international z.ai endpoint.`,descriptionZh:`智谱 GLM Coding Plan 国际区 z.ai 端点。`,bestFor:[`coding`,`reasoning`,`chinese`],aliases:[`zai coding`,`zhipu coding global`,`glm coding global`],envVars:[`ZAI_API_KEY`,`Z_AI_API_KEY`]},"zai-coding-cn":{apiKeyUrl:`https://bigmodel.cn/usercenter/proj-mgmt/apikeys`,pricingUrl:`https://bigmodel.cn/pricing`,docsUrl:`https://docs.bigmodel.cn/cn/guide/start/model-overview`,description:`Zhipu GLM Coding Plan — China endpoint from the pi-ai provider catalog.`,descriptionZh:`智谱 GLM Coding Plan 中国区,来自 pi-ai 内置 provider 目录。`,bestFor:[`coding`,`reasoning`,`chinese`],aliases:[`zai coding cn`,`zhipu coding cn`,`glm coding cn`,`智谱 coding`],envVars:[`ZHIPU_API_KEY`,`BIGMODEL_API_KEY`,`ZAI_API_KEY`]},"zhipu-coding-cn":{apiKeyUrl:`https://bigmodel.cn/usercenter/proj-mgmt/apikeys`,pricingUrl:`https://bigmodel.cn/pricing`,docsUrl:`https://docs.bigmodel.cn/cn/guide/start/model-overview`,description:`Zhipu GLM Coding Plan — China BigModel endpoint.`,descriptionZh:`智谱 GLM Coding Plan 中国区 BigModel 端点。`,bestFor:[`coding`,`reasoning`,`chinese`],aliases:[`zhipu coding`,`glm coding cn`,`智谱 coding`],envVars:[`ZHIPU_API_KEY`,`BIGMODEL_API_KEY`,`ZAI_API_KEY`]},"zhipu-cn":{apiKeyUrl:`https://bigmodel.cn/usercenter/proj-mgmt/apikeys`,pricingUrl:`https://bigmodel.cn/pricing`,docsUrl:`https://docs.bigmodel.cn/cn/guide/start/model-overview`,description:`Zhipu GLM China — BigModel OpenAI-compatible endpoint.`,descriptionZh:`智谱 GLM 中国区,通过 BigModel OpenAI 兼容接口访问。`,bestFor:[`chinese`,`reasoning`,`general`],freeTier:!0,aliases:[`zhipu`,`glm`,`bigmodel`,`智谱`,`z.ai cn`],envVars:[`ZHIPU_API_KEY`,`BIGMODEL_API_KEY`]},huggingface:{apiKeyUrl:`https://huggingface.co/settings/tokens`,pricingUrl:`https://huggingface.co/pricing`,docsUrl:`https://huggingface.co/docs/api-inference/`,description:`Access thousands of open-source models via Hugging Face Inference API.`,descriptionZh:`通过 Hugging Face 访问数千个开源模型。`,bestFor:[`open source`,`flexibility`],freeTier:!0,freeTierNote:`Free tier with rate limits.`,aliases:[`huggingface`,`hugging face`,`hf`],envVars:[`HF_TOKEN`,`HUGGINGFACE_TOKEN`]},opencode:{apiKeyUrl:`https://opencode.ai/auth`,pricingUrl:`https://opencode.ai/docs`,docsUrl:`https://opencode.ai/docs/providers/`,description:`OpenCode — AI coding assistant provider.`,descriptionZh:`OpenCode,AI 代码助手服务商。`,bestFor:[`coding`],freeTier:!1,aliases:[`opencode`,`open code`],envVars:[`OPENCODE_API_KEY`]},"opencode-go":{apiKeyUrl:`https://opencode.ai/auth`,pricingUrl:`https://opencode.ai/docs`,docsUrl:`https://opencode.ai/docs/providers/`,description:`OpenCode Go — AI coding assistant provider (Go variant).`,descriptionZh:`OpenCode Go,AI 代码助手服务商(Go 版本)。`,bestFor:[`coding`],freeTier:!1,aliases:[`opencode go`,`opencode-go`],envVars:[`OPENCODE_API_KEY`]},zai:{apiKeyUrl:`https://z.ai/manage-apikey/apikey-list`,pricingUrl:`https://z.ai/manage-apikey/billing`,docsUrl:`https://docs.z.ai/guides/overview/quick-start`,description:`Zhipu GLM International — z.ai OpenAI-compatible endpoint.`,descriptionZh:`智谱 GLM 国际区,通过 z.ai OpenAI 兼容接口访问。`,bestFor:[`general`,`reasoning`,`chinese`],freeTier:!1,aliases:[`zai`,`z.ai`,`zhipu global`,`glm global`,`智谱`],envVars:[`ZAI_API_KEY`,`Z_AI_API_KEY`]},dashscope:{apiKeyUrl:`https://dashscope.console.aliyun.com/apiKey`,pricingUrl:`https://help.aliyun.com/zh/dashscope/developer-reference/tongyi-thousand-questions-metering-and-billing`,docsUrl:`https://help.aliyun.com/zh/model-studio/developer-reference/compatibility-of-openai-with-dashscope`,description:`Alibaba Bailian / DashScope service provider.`,descriptionZh:`阿里百炼 / DashScope 服务 provider。`,bestFor:[`chinese`,`coding`,`image`,`speech`],freeTier:!0,aliases:[`dash scope`,`alibaba dashscope`,`qwen`,`tongyi`,`阿里百炼`,`通义千问`],envVars:[`DASHSCOPE_API_KEY`,`QWEN_API_KEY`]},"dashscope-cn":{apiKeyUrl:`https://dashscope.console.aliyun.com/apiKey`,pricingUrl:`https://help.aliyun.com/zh/dashscope/developer-reference/tongyi-thousand-questions-metering-and-billing`,docsUrl:`https://help.aliyun.com/zh/model-studio/developer-reference/compatibility-of-openai-with-dashscope`,description:`Alibaba Bailian / DashScope China — Qwen LLMs through the China endpoint.`,descriptionZh:`阿里百炼 / DashScope 中国区:通过国内端点访问通义千问 LLM。`,bestFor:[`chinese`,`coding`,`image`],freeTier:!0,aliases:[`dash scope cn`,`alibaba dashscope cn`,`qwen cn`,`tongyi cn`,`阿里百炼`,`通义千问`],envVars:[`DASHSCOPE_API_KEY`,`QWEN_API_KEY`]},"dashscope-intl":{apiKeyUrl:`https://modelstudio.console.alibabacloud.com/`,pricingUrl:`https://www.alibabacloud.com/help/en/model-studio/billing-for-tongyi-qianwen`,docsUrl:`https://www.alibabacloud.com/help/en/model-studio/compatibility-of-openai-with-dashscope`,description:`Alibaba Bailian / DashScope International — Qwen LLMs through the international endpoint.`,descriptionZh:`阿里百炼 / DashScope 国际区:通过国际端点访问通义千问 LLM。`,bestFor:[`chinese`,`coding`,`image`],freeTier:!0,aliases:[`dash scope intl`,`alibaba cloud dashscope`,`qwen intl`,`tongyi intl`],envVars:[`DASHSCOPE_API_KEY`,`QWEN_API_KEY`]},"vercel-ai-gateway":{apiKeyUrl:`https://vercel.com/account/tokens`,pricingUrl:`https://vercel.com/pricing`,docsUrl:`https://vercel.com/docs/ai/ai-gateway`,description:`Vercel AI Gateway — route requests to multiple LLM providers via Vercel.`,descriptionZh:`Vercel AI Gateway,通过 Vercel 路由请求到多个 LLM 服务商。`,bestFor:[`flexibility`,`enterprise`],freeTier:!1,aliases:[`vercel gateway`,`vercel ai gateway`],envVars:[`AI_GATEWAY_API_KEY`,`VERCEL_AI_GATEWAY_API_KEY`]},"github-copilot":{apiKeyUrl:`https://github.com/settings/tokens`,pricingUrl:`https://github.com/features/copilot#pricing`,docsUrl:`https://docs.github.com/en/copilot`,description:`GitHub Copilot — use your GitHub token to access Copilot models.`,descriptionZh:`使用 GitHub 令牌访问 Copilot 模型。`,bestFor:[`coding`],freeTier:!0,freeTierNote:`Free for verified students and open-source maintainers.`,aliases:[`github copilot`,`copilot`,`github`],envVars:[`COPILOT_GITHUB_TOKEN`,`GH_TOKEN`,`GITHUB_TOKEN`,`GITHUB_COPILOT_TOKEN`]}};function pe(e,t){let n=X[e];return n&&n.apiKeyUrl?[{href:n.apiKeyUrl,kind:`single`}]:[]}var me=[`common`,`domestic`,`specialty`,`enterprise`,`oauth`,`extension`];function he(e){let t=new Map;for(let e of me)t.set(e,[]);for(let n of e){let e=n.category||`specialty`,r=t.get(e)??[];r.push(n),t.set(e,r)}return t}var ge=[{value:`openai-completions`,label:`OpenAI Completions`},{value:`openai-responses`,label:`OpenAI Responses`},{value:`anthropic-messages`,label:`Anthropic Messages`},{value:`google-generative-ai`,label:`Google Generative AI`},{value:`azure-openai-responses`,label:`Azure OpenAI`},{value:`bedrock-converse-stream`,label:`AWS Bedrock`},{value:`google-gemini-cli`,label:`Google Gemini CLI`},{value:`google-vertex`,label:`Google Vertex AI`}];function _e(e){if(!e||typeof e!=`object`)return;let t=e;if(typeof t.error==`string`)return t.error;if(t.error&&typeof t.error==`object`&&`message`in t.error){let e=t.error.message;return typeof e==`string`?e:void 0}}function ve(e){if(!e||typeof e!=`object`)return{providers:{}};let t=e,n=t.providers;return n&&typeof n==`object`&&!Array.isArray(n)?e:{...t,providers:{}}}async function ye(){let e=await i(a(`/api/models-json`)),t=await e.json().catch(()=>({}));if(!e.ok||!t.ok||!t.payload)throw Error(_e(t)||`HTTP ${e.status}`);return{...t.payload,config:ve(t.payload.config)}}async function be(e){let t=await i(a(`/api/models-json`),{method:`PATCH`,body:JSON.stringify({config:e})}),n=await t.json().catch(()=>({}));if(!t.ok||!n.ok||!n.payload)throw Error(_e(n)||`HTTP ${t.status}`);return await H(),n.payload}async function xe(e){let t=await i(a(`/api/models-json/discover-models`),{method:`POST`,body:JSON.stringify(e)}),n=await t.json().catch(()=>({}));if(!t.ok||!n.ok||!n.payload)throw Error(_e(n)||`HTTP ${t.status}`);return n.payload.models}function Se(e,t,n){return{id:e,name:t||e,input:[`text`],contextWindow:128e3,maxTokens:16384,cost:{input:0,output:0,cacheRead:0,cacheWrite:0},...n}}var Z={ollama:{label:`Ollama`,providerId:`ollama`,config:{baseUrl:`http://localhost:11434/v1`,api:`openai-completions`,apiKey:`ollama`}},lmstudio:{label:`LM Studio`,providerId:`lmstudio`,config:{baseUrl:`http://localhost:1234/v1`,api:`openai-completions`,apiKey:`lmstudio`}},openrouter:{label:`OpenRouter`,providerId:`openrouter`,config:{baseUrl:`https://openrouter.ai/api/v1`,api:`openai-completions`,apiKey:``}},zhipuCn:{label:`Zhipu GLM China`,providerId:`zhipu-cn`,config:{baseUrl:`https://open.bigmodel.cn/api/paas/v4`,api:`openai-completions`,apiKey:`ZHIPU_API_KEY`,models:[{id:`glm-5.2`,name:`GLM 5.2`,contextWindow:1e6,maxTokens:65536,reasoning:!0,input:[`text`]}]}},zaiGeneral:{label:`Zhipu GLM International`,providerId:`zai`,config:{baseUrl:`https://api.z.ai/api/paas/v4`,api:`openai-completions`,apiKey:`ZAI_API_KEY`,models:[{id:`glm-5.2`,name:`GLM 5.2`,contextWindow:1e6,maxTokens:65536,reasoning:!0,input:[`text`]}]}},dashscopeCn:{label:`Alibaba Bailian / DashScope China`,providerId:`dashscope-cn`,description:`China OpenAI-compatible Qwen endpoint`,config:{baseUrl:`https://dashscope.aliyuncs.com/compatible-mode/v1`,api:`openai-completions`,apiKey:`DASHSCOPE_API_KEY`,models:[{id:`qwen3.7-max`,name:`Qwen3.7 Max`,contextWindow:1e6,input:[`text`,`image`]},{id:`qwen3.7-plus`,name:`Qwen3.7 Plus`,contextWindow:1e6,input:[`text`,`image`]},{id:`qwen3.6-flash`,name:`Qwen3.6 Flash`,contextWindow:1e6,input:[`text`]}]}},dashscopeIntl:{label:`Alibaba Bailian / DashScope International`,providerId:`dashscope-intl`,description:`International OpenAI-compatible Qwen endpoint`,config:{baseUrl:`https://dashscope-intl.aliyuncs.com/compatible-mode/v1`,api:`openai-completions`,apiKey:`DASHSCOPE_API_KEY`,models:[{id:`qwen3.7-max`,name:`Qwen3.7 Max`,contextWindow:1e6,input:[`text`,`image`]},{id:`qwen3.7-plus`,name:`Qwen3.7 Plus`,contextWindow:1e6,input:[`text`,`image`]},{id:`qwen3.6-flash`,name:`Qwen3.6 Flash`,contextWindow:1e6,input:[`text`]}]}},dashscopePhone:{label:`Alibaba Bailian · Phone Use`,providerId:`dashscope-phone`,description:`Beijing GUI-Plus API, the official GUI-Owl hosted entry; requires a Beijing Bailian key`,config:{baseUrl:`https://dashscope.aliyuncs.com/compatible-mode/v1`,api:`openai-completions`,apiKey:`DASHSCOPE_API_KEY`,models:[{id:`gui-plus-2026-02-26`,name:`Bailian GUI-Plus · Phone`,input:[`text`,`image`],contextWindow:262144,maxTokens:4096,phoneUse:{profile:`gui-owl-phone-v1`}}]}},modelscope:{label:`ModelScope`,providerId:`modelscope`,description:`General inference; select a model currently offered by ModelScope`,config:{baseUrl:`https://api-inference.modelscope.cn/v1`,api:`openai-completions`,apiKey:`MODELSCOPE_TOKEN`,models:[{id:`Qwen/Qwen3.5-35B-A3B`,name:`Qwen3.5 35B A3B`,input:[`text`],maxTokens:4096}]}},volcengineArk:{label:`Volcengine Ark`,providerId:`volcengine-ark`,description:`Doubao Seed GUI; use the activated model ID or your Ark endpoint ID`,config:{baseUrl:`https://ark.cn-beijing.volces.com/api/v3`,api:`openai-completions`,apiKey:`ARK_API_KEY`,models:[{id:`doubao-seed-2-1-pro-260915`,name:`Doubao Seed 2.1 Pro`,contextWindow:1024e3,maxTokens:4096,input:[`text`,`image`],phoneUse:{profile:`doubao-seed-phone-v1`}}]}},volcenginePlan:{label:`Volcengine Doubao Coding Plan`,providerId:`volcengine-plan`,description:`Doubao coding-plan endpoint on Volcengine Ark`,config:{baseUrl:`https://ark.cn-beijing.volces.com/api/coding/v3`,api:`openai-completions`,apiKey:`ARK_API_KEY`,models:[{id:`ark-code-latest`,name:`Ark Coding Plan`,contextWindow:256e3,maxTokens:4096,input:[`text`]},{id:`doubao-seed-2.0-code`,name:`Doubao Seed 2.0 Code`,contextWindow:256e3,maxTokens:4096,input:[`text`]},{id:`doubao-seed-2.0-pro`,name:`Doubao Seed 2.0 Pro`,contextWindow:256e3,maxTokens:4096,input:[`text`]},{id:`doubao-seed-2.0-lite`,name:`Doubao Seed 2.0 Lite`,contextWindow:256e3,maxTokens:4096,input:[`text`]}]}},byteplusPlan:{label:`BytePlus Doubao Coding Plan`,providerId:`byteplus-plan`,description:`Doubao coding-plan endpoint on BytePlus`,config:{baseUrl:`https://ark.ap-southeast.bytepluses.com/api/coding/v3`,api:`openai-completions`,apiKey:`BYTEPLUS_API_KEY`,models:[{id:`ark-code-latest`,name:`Ark Coding Plan`,contextWindow:256e3,maxTokens:4096,input:[`text`]},{id:`doubao-seed-2.0-code`,name:`Doubao Seed 2.0 Code`,contextWindow:256e3,maxTokens:4096,input:[`text`]},{id:`doubao-seed-2.0-pro`,name:`Doubao Seed 2.0 Pro`,contextWindow:256e3,maxTokens:4096,input:[`text`]},{id:`doubao-seed-2.0-lite`,name:`Doubao Seed 2.0 Lite`,contextWindow:256e3,maxTokens:4096,input:[`text`]}]}},deepseek:{label:`DeepSeek`,providerId:`deepseek`,config:{baseUrl:`https://api.deepseek.com`,api:`openai-completions`,apiKey:`DEEPSEEK_API_KEY`,models:[{id:`deepseek-v4-pro`,name:`DeepSeek V4 Pro`,contextWindow:1e6,maxTokens:393216,reasoning:!0,input:[`text`]},{id:`deepseek-v4-flash`,name:`DeepSeek V4 Flash`,contextWindow:1e6,maxTokens:393216,reasoning:!0,input:[`text`]}]}},moonshotCn:{label:`Kimi / Moonshot China`,providerId:`moonshotai-cn`,config:{baseUrl:`https://api.moonshot.cn/v1`,api:`openai-completions`,apiKey:`MOONSHOT_API_KEY`,models:[{id:`kimi-k2.7-code`,name:`Kimi K2.7 Code`,contextWindow:262144,maxTokens:32768,reasoning:!0,input:[`text`,`image`]},{id:`kimi-k2.6`,name:`Kimi K2.6`,contextWindow:128e3,input:[`text`]}]}},moonshotIntl:{label:`Kimi / Moonshot International`,providerId:`moonshotai`,config:{baseUrl:`https://api.moonshot.ai/v1`,api:`openai-completions`,apiKey:`MOONSHOT_API_KEY`,models:[{id:`kimi-k2.7-code`,name:`Kimi K2.7 Code`,contextWindow:262144,maxTokens:32768,reasoning:!0,input:[`text`,`image`]},{id:`kimi-k2.6`,name:`Kimi K2.6`,contextWindow:128e3,input:[`text`]}]}},kimiCoding:{label:`Kimi Coding`,providerId:`kimi-coding`,description:`Dedicated Kimi coding endpoint`,config:{baseUrl:`https://api.kimi.com/coding`,api:`anthropic-messages`,apiKey:`KIMI_API_KEY`,headers:{"User-Agent":`KimiCLI/1.5`},models:[{id:`k2p7`,name:`Kimi K2.7 Code`,contextWindow:262144,maxTokens:32768,reasoning:!0,input:[`text`,`image`]},{id:`kimi-for-coding`,name:`Kimi For Coding`,contextWindow:262144,maxTokens:32768,reasoning:!0,input:[`text`,`image`]}]}},stepfunIntl:{label:`StepFun International`,providerId:`stepfun-intl`,config:{baseUrl:`https://api.stepfun.ai/v1`,api:`openai-completions`,apiKey:`STEPFUN_API_KEY`,models:[{id:`step-3.7-flash`,name:`Step 3.7 Flash`,contextWindow:1e6,reasoning:!0,input:[`text`,`image`]},{id:`step-3.5-flash-2603`,name:`Step 3.5 Flash 2603`,contextWindow:1e6,reasoning:!0,input:[`text`,`image`]},{id:`step-3.5-flash`,name:`Step 3.5 Flash`,contextWindow:1e6,reasoning:!0,input:[`text`]}]}},stepfunCn:{label:`StepFun China`,providerId:`stepfun-cn`,config:{baseUrl:`https://api.stepfun.com/v1`,api:`openai-completions`,apiKey:`STEPFUN_API_KEY`,models:[{id:`step-3.7-flash`,name:`Step 3.7 Flash`,contextWindow:1e6,reasoning:!0,input:[`text`,`image`]},{id:`step-3.5-flash-2603`,name:`Step 3.5 Flash 2603`,contextWindow:1e6,reasoning:!0,input:[`text`,`image`]},{id:`step-3.5-flash`,name:`Step 3.5 Flash`,contextWindow:1e6,reasoning:!0,input:[`text`]}]}},stepfunPlanIntl:{label:`StepFun Step Plan International`,providerId:`stepfun-plan-intl`,config:{baseUrl:`https://api.stepfun.ai/step_plan/v1`,api:`openai-completions`,apiKey:`STEPFUN_API_KEY`,models:[{id:`step-3.7-flash`,name:`Step 3.7 Flash`,contextWindow:1e6,reasoning:!0,input:[`text`,`image`]},{id:`step-3.5-flash-2603`,name:`Step 3.5 Flash 2603`,contextWindow:1e6,reasoning:!0,input:[`text`,`image`]},{id:`step-3.5-flash`,name:`Step 3.5 Flash`,contextWindow:1e6,reasoning:!0,input:[`text`]}]}},stepfunPlanCn:{label:`StepFun Step Plan China`,providerId:`stepfun-plan-cn`,config:{baseUrl:`https://api.stepfun.com/step_plan/v1`,api:`openai-completions`,apiKey:`STEPFUN_API_KEY`,models:[{id:`step-3.7-flash`,name:`Step 3.7 Flash`,contextWindow:1e6,reasoning:!0,input:[`text`,`image`]},{id:`step-3.5-flash-2603`,name:`Step 3.5 Flash 2603`,contextWindow:1e6,reasoning:!0,input:[`text`,`image`]},{id:`step-3.5-flash`,name:`Step 3.5 Flash`,contextWindow:1e6,reasoning:!0,input:[`text`]}]}},xiaomi:{label:`Xiaomi MiMo`,providerId:`xiaomi`,config:{baseUrl:`https://api.xiaomimimo.com/v1`,api:`openai-completions`,apiKey:`XIAOMI_API_KEY`,models:[{id:`mimo-v2.5-pro`,name:`MiMo V2.5 Pro`,contextWindow:1e6,reasoning:!0,input:[`text`]},{id:`mimo-v2.5-pro-ultraspeed`,name:`MiMo V2.5 Pro UltraSpeed`,contextWindow:1e6,reasoning:!0,input:[`text`]},{id:`mimo-v2.5`,name:`MiMo V2.5`,contextWindow:1e6,reasoning:!0,input:[`text`,`image`]}]}},xiaomiTokenPlanCn:{label:`Xiaomi MiMo Token Plan China`,providerId:`xiaomi-token-plan-cn`,config:{baseUrl:`https://token-plan-cn.xiaomimimo.com/v1`,api:`openai-completions`,apiKey:`XIAOMI_TOKEN_PLAN_CN_API_KEY`,models:[{id:`mimo-v2.5-pro`,name:`MiMo V2.5 Pro`,contextWindow:1e6,reasoning:!0,input:[`text`]},{id:`mimo-v2.5-pro-ultraspeed`,name:`MiMo V2.5 Pro UltraSpeed`,contextWindow:1e6,reasoning:!0,input:[`text`]},{id:`mimo-v2.5`,name:`MiMo V2.5`,contextWindow:1e6,reasoning:!0,input:[`text`,`image`]}]}},xiaomiTokenPlanAms:{label:`Xiaomi MiMo Token Plan Amsterdam`,providerId:`xiaomi-token-plan-ams`,config:{baseUrl:`https://token-plan-ams.xiaomimimo.com/v1`,api:`openai-completions`,apiKey:`XIAOMI_TOKEN_PLAN_AMS_API_KEY`,models:[{id:`mimo-v2.5-pro`,name:`MiMo V2.5 Pro`,contextWindow:1e6,reasoning:!0,input:[`text`]},{id:`mimo-v2.5-pro-ultraspeed`,name:`MiMo V2.5 Pro UltraSpeed`,contextWindow:1e6,reasoning:!0,input:[`text`]},{id:`mimo-v2.5`,name:`MiMo V2.5`,contextWindow:1e6,reasoning:!0,input:[`text`,`image`]}]}},xiaomiTokenPlanSgp:{label:`Xiaomi MiMo Token Plan Singapore`,providerId:`xiaomi-token-plan-sgp`,config:{baseUrl:`https://token-plan-sgp.xiaomimimo.com/v1`,api:`openai-completions`,apiKey:`XIAOMI_TOKEN_PLAN_SGP_API_KEY`,models:[{id:`mimo-v2.5-pro`,name:`MiMo V2.5 Pro`,contextWindow:1e6,reasoning:!0,input:[`text`]},{id:`mimo-v2.5-pro-ultraspeed`,name:`MiMo V2.5 Pro UltraSpeed`,contextWindow:1e6,reasoning:!0,input:[`text`]},{id:`mimo-v2.5`,name:`MiMo V2.5`,contextWindow:1e6,reasoning:!0,input:[`text`,`image`]}]}},minimax:{label:`MiniMax`,providerId:`minimax`,description:`Anthropic-compatible endpoint preferred for agent workflows`,config:{baseUrl:`https://api.minimax.io/anthropic`,api:`anthropic-messages`,apiKey:`MINIMAX_API_KEY`,authHeader:!0,models:[{id:`MiniMax-M3`,name:`MiniMax M3`,contextWindow:1e6,reasoning:!0,input:[`text`,`image`]},{id:`MiniMax-M2.7-highspeed`,name:`MiniMax M2.7 Highspeed`,contextWindow:204800,input:[`text`]},{id:`MiniMax-M2.7`,name:`MiniMax M2.7`,contextWindow:204800,input:[`text`]}]}},zhipuCodingCn:{label:`Zhipu GLM Coding Plan China`,providerId:`zhipu-coding-cn`,config:{baseUrl:`https://open.bigmodel.cn/api/coding/paas/v4`,api:`openai-completions`,apiKey:`ZHIPU_API_KEY`,models:[{id:`glm-5.2`,name:`GLM 5.2`,contextWindow:1e6,maxTokens:65536,reasoning:!0,input:[`text`]}]}},zaiCodingGlobal:{label:`Zhipu GLM Coding Plan International`,providerId:`zai-coding-global`,config:{baseUrl:`https://api.z.ai/api/coding/paas/v4`,api:`openai-completions`,apiKey:`ZAI_API_KEY`,models:[{id:`glm-5.2`,name:`GLM 5.2`,contextWindow:1e6,maxTokens:65536,reasoning:!0,input:[`text`]}]}},minimaxCn:{label:`MiniMax China`,providerId:`minimax-cn`,config:{baseUrl:`https://api.minimaxi.com/anthropic`,api:`anthropic-messages`,apiKey:`MINIMAX_CN_API_KEY`,authHeader:!0,models:[{id:`MiniMax-M3`,name:`MiniMax M3`,contextWindow:1e6,reasoning:!0,input:[`text`,`image`]},{id:`MiniMax-M2.7-highspeed`,name:`MiniMax M2.7 Highspeed`,contextWindow:204800,input:[`text`]},{id:`MiniMax-M2.7`,name:`MiniMax M2.7`,contextWindow:204800,input:[`text`]}]}}},Ce=Object.entries(Z).map(([e,t])=>({key:e,...t}));function we(e){return Z[e]?.providerId??e}function Te(e){return Ce.find(t=>t.providerId===e)?.key}var Ee=new Set([`modelscope`,`dashscope-phone`,`dashscope-cn`,`dashscope-intl`,`volcengine-ark`,`volcengine-plan`,`byteplus-plan`,`stepfun-cn`,`stepfun-intl`,`stepfun-plan-cn`,`stepfun-plan-intl`,`zhipu-cn`,`zai-coding-global`,`zhipu-coding-cn`]);function De(e){if(Ee.has(e))return Te(e)}var Oe=[{value:`text`,labelKey:`inputTextOnly`},{value:`text,image`,labelKey:`inputTextVision`}];function ke(){return S(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,V,`dark:border-edge`)}function Ae(){return S(B,z)}function je(e){return(e.input||[`text`]).includes(`image`)?`text,image`:`text`}function Me(e){return e===`text,image`?[`text`,`image`]:[`text`]}var Ne={chat:[`日常对话与交办任务`,`Everyday conversations and tasks`],vision:[`理解照片、截图和图片内容`,`Understand photos, screenshots and images`],image:[`根据描述生成图片`,`Create images from a description`],transcription:[`聊天听写与笔记录音转文字`,`Dictate messages and transcribe recorded notes`],speech:[`朗读消息,选择喜欢的音色`,`Read messages aloud in your preferred voice`],conversation:[`实时通话、音色与音频设备`,`Live calls, voices and audio devices`],background:[`自动化、定时和无人值守任务`,`Automations, schedules and unattended tasks`]};function Pe(e,t,n){return n?{"qwen-token-plan-cn":`阿里云百炼订阅 · 北京`,"qwen-token-plan":`阿里云百炼订阅 · 国际`,"dashscope-cn":`阿里云百炼 · 中国区`,"dashscope-intl":`阿里云百炼 · 国际区`,"xiaomi-token-plan-cn":`小米 MiMo 订阅 · 中国区`}[e]??t:t}var Q=r(),$={chat:[`对话与任务`,`Chat and tasks`],vision:[`看图`,`Image understanding`],image:[`画图`,`Image generation`],background:[`后台任务`,`Background tasks`],speech:[`语音合成`,`Speech synthesis`],transcription:[`录音识别`,`Recorded audio recognition`],conversation:[`实时语音对话`,`Realtime conversation`]};function Fe({providerId:e,row:t,modelIds:n,existingConnection:r=!1,targetUse:i,connectOnly:a=!1,language:o,alternatives:s=[],onChooseProvider:l,onBack:d,onDone:g,onApplied:v,inline:y=!1,onPendingChange:b}){let S=o===`zh`,T=(0,K.useRef)(!1),[D,O]=(0,K.useState)(null),[k,j]=(0,K.useState)({mode:i?`replace`:`fill`,modelIds:n}),[M,N]=(0,K.useState)(``),[P,F]=(0,K.useState)(!1),[I,L]=(0,K.useState)(!1),[R,z]=(0,K.useState)(r||!!t?.configured),[B,V]=(0,K.useState)(!1),H=(0,K.useRef)(!1),[U,W]=(0,K.useState)(``),[G,ie]=(0,K.useState)(!1),[ae,q]=(0,K.useState)(0);(0,K.useEffect)(()=>{let t=!0;return ue(e,{modelIds:n,...a?{selected:[]}:{},...i&&!a?{mode:`replace`,selected:[i]}:{}}).then(e=>{t&&(O(e),z(e.configured),T.current||(T.current=!0,j({mode:i?`replace`:`fill`,modelIds:n,selected:a?[]:e.uses.filter(e=>e.selected).map(e=>e.id)})),W(``))}).catch(e=>{t&&W(e instanceof Error?e.message:String(e))}),()=>{t=!1}},[e,n,i,a,ae]),(0,K.useEffect)(()=>(b?.(B),()=>b?.(!1)),[B,b]);let J=k.selected??[],se=e=>{j({...k,mode:e,selected:D?.uses.filter(t=>t.recommended&&t.choices.length&&(e===`replace`||t.selected)).map(e=>e.id)??[]})},ce=async()=>{if(!D||H.current)return;H.current=!0,V(!0),W(``),L(!1);let t=!1;try{M.trim()&&(await ne({[e]:M.trim()}),t=!0,L(!0),z(!0),F(!1),N(``));let n=await ue(e,k);if(z(n.configured),a){if(!n.configured)throw Error(S?`请先连接此服务。`:`Connect this service first.`);O(n),ie(!0),v?.();return}let r=D.uses.filter(e=>J.includes(e.id)).map(e=>k.overrides?.[e.id]??e.recommended),i=n.uses.filter(e=>J.includes(e.id)).map(e=>k.overrides?.[e.id]??e.recommended);if(D.revision!==n.revision||JSON.stringify(r)!==JSON.stringify(i))throw O(n),j({...k,selected:n.uses.filter(e=>e.selected).map(e=>e.id)}),Error(S?`目录或当前配置已更新,请核对后再次应用。`:`The catalog or settings changed. Review the updated choices and apply again.`);if(!n.configured)throw Error(S?`请先连接此服务。`:`Connect this service first.`);await de(e,k,n.revision),O(n),ie(!0),v?.()}catch(e){let n=e instanceof Error?e.message:String(e);W((!y&&t?S?`服务已保存,用途配置未完成。`:`Connection saved; model setup is incomplete. `:``)+n)}finally{H.current=!1,V(!1)}},le=D?.profile.name??t?.name??e,Y=D?.profile.apiKeyUrl??X[e]?.apiKeyUrl;if(y){let n=D?.uses.find(e=>e.id===i),r=i?k.overrides?.[i]??n?.recommended:void 0,a=Pe(e,le,S);return(0,Q.jsxs)(`div`,{className:`space-y-6 p-4 sm:p-5`,children:[(0,Q.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`h3`,{className:`text-base font-semibold text-fg`,children:a}),(0,Q.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:i?`${S?`用于`:`For `}${oe[i][+!S]}`:``})]}),(0,Q.jsx)(C,{variant:`ghost`,disabled:B,onClick:g,children:S?`更换服务`:`Change service`})]}),!D&&!U?(0,Q.jsx)(w,{className:`h-48 w-full rounded-xl`}):null,D?(0,Q.jsxs)(Q.Fragment,{children:[D.profile.credential===`oauth`&&!R?(0,Q.jsx)(re,{providerId:e,displayName:a,connected:R,onConnected:()=>{z(!0),q(e=>e+1)}}):null,D.profile.credential===`oauth`&&R&&!t?.supportsApiKey?(0,Q.jsxs)(`p`,{className:`flex items-center gap-2 rounded-xl bg-surface-inset px-4 py-3 text-sm text-fg`,children:[(0,Q.jsx)(m,{className:`size-4 text-fg-muted`,"aria-hidden":!0}),S?`使用已有连接`:`Using the existing connection`]}):null,D.profile.credential===`api-key`||D.profile.credential===`oauth`&&t?.supportsApiKey?(0,Q.jsx)(`div`,{className:`space-y-3`,children:R&&!P?(0,Q.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-xl bg-surface-inset px-4 py-3`,children:[(0,Q.jsxs)(`p`,{className:`flex items-center gap-2 text-sm text-fg`,children:[(0,Q.jsx)(m,{className:`size-4 text-fg-muted`,"aria-hidden":!0}),S?`使用已有连接`:`Using the existing connection`]}),(0,Q.jsx)(C,{variant:`ghost`,disabled:B,onClick:()=>F(!0),children:S?`更换`:`Change`})]}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,Q.jsx)(`label`,{htmlFor:`provider-setup-key`,className:`text-sm font-medium text-fg`,children:D.profile.access===`subscription`?S?`订阅 API Key`:`Subscription API key`:`API Key`}),R?(0,Q.jsx)(C,{variant:`ghost`,disabled:B,onClick:()=>{F(!1),N(``)},children:S?`保留原 Key`:`Keep saved key`}):null]}),(0,Q.jsx)(h,{id:`provider-setup-key`,disabled:B,value:M,onChange:N,placeholder:R?S?`输入新的 API Key`:`Enter a new API key`:S?`粘贴 API Key`:`Paste your API key`,labels:ee(c(o).providersSettings)}),R?(0,Q.jsx)(`p`,{className:`text-xs leading-relaxed text-fg-muted`,children:S?`此服务的其他已配置模型也会使用新的 Key。`:`Other models configured with this service will also use the new key.`}):null,Y?(0,Q.jsx)(`a`,{className:`inline-flex min-h-10 items-center text-sm text-accent-fg hover:underline`,href:Y,target:`_blank`,rel:`noopener noreferrer`,children:S?`获取 API Key`:`Get an API key`}):null]})}):null,n?(0,Q.jsxs)(`div`,{className:`space-y-2`,children:[(0,Q.jsx)(`label`,{className:`block text-sm font-medium text-fg`,children:S?`选择模型`:`Model`}),(0,Q.jsx)(f,{value:r??``,disabled:B||!n.choices.length,"aria-label":S?`选择模型`:`Model`,onChange:e=>j({...k,selected:[n.id],overrides:{...k.overrides,[n.id]:e.target.value}}),children:n.choices.map(e=>(0,Q.jsx)(p,{value:e.id,children:e.name},e.id))})]}):null,(0,Q.jsxs)(`p`,{className:`text-sm leading-relaxed text-fg-muted`,children:[S?`只更改当前能力使用的模型。`:`Changes the model for this capability only.`,D.profile.interactiveOnly?S?` 后台任务继续使用原服务。`:` Background tasks keep their current service.`:``]})]}):null,U?(0,Q.jsxs)(`div`,{role:`alert`,className:`space-y-2 rounded-xl border border-edge p-3`,children:[(0,Q.jsx)(`p`,{className:`text-sm text-danger`,children:I?S?`连接信息已保存,模型尚未切换。请重试。`:`Connection saved. The model has not switched; please retry.`:S?`未能应用配置,请重试。`:`Could not apply settings. Please retry.`}),(0,Q.jsxs)(`details`,{className:`text-xs text-fg-muted`,children:[(0,Q.jsx)(`summary`,{className:`cursor-pointer`,children:S?`查看详情`:`Show details`}),(0,Q.jsx)(`p`,{className:`mt-2 break-words`,children:U})]})]}):null,(0,Q.jsx)(`div`,{className:`flex items-center justify-end gap-3 border-t border-edge-subtle pt-4`,children:(0,Q.jsxs)(C,{variant:`primary`,disabled:B||!D&&!U||!!D&&(!R&&!M.trim()||!r||!n?.choices.some(e=>e.id===r)),onClick:()=>{D?ce():q(e=>e+1)},children:[B?(0,Q.jsx)(_,{className:`size-4 animate-spin`,"aria-hidden":!0}):null,B?S?`正在应用…`:`Applying…`:!D&&U?S?`重新加载`:`Reload`:U?S?`重试`:`Retry`:R&&!M.trim()?S?`使用此模型`:`Use this model`:S?`连接并使用`:`Connect and use`]})})]})}let fe=y?`h3`:A,pe=y?`p`:E;return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:`flex shrink-0 items-start gap-3 px-5 py-5`,children:[d&&!B&&!G?(0,Q.jsx)(C,{variant:`ghost`,className:`shrink-0 p-1.5`,"aria-label":S?`返回`:`Back`,onClick:d,children:(0,Q.jsx)(u,{className:`size-4`})}):null,(0,Q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Q.jsx)(fe,{className:`text-base font-semibold text-fg`,children:i?`${S?`连接服务 · `:`Connect service · `}${$[i][+!S]}`:S?`连接模型服务`:`Connect model service`}),(0,Q.jsx)(pe,{className:`mt-2 text-sm text-fg-muted`,children:le})]}),(0,Q.jsx)(C,{variant:`ghost`,className:`shrink-0 p-1.5`,disabled:B,"aria-label":S?`关闭`:`Close`,onClick:g,children:(0,Q.jsx)(x,{className:`size-4`})})]}),(0,Q.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-y-auto px-5 pb-5`,children:[!D&&!U?(0,Q.jsx)(w,{className:`h-64 w-full rounded-xl`}):null,D?(0,Q.jsxs)(Q.Fragment,{children:[!G&&s.length>1&&l?(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`label`,{className:`mb-2 block text-xs text-fg-muted`,children:S?`接入方式 / 地域`:`Access method / region`}),(0,Q.jsx)(f,{value:e,disabled:B,"aria-label":S?`接入方式 / 地域`:`Access method / region`,onChange:e=>l(e.target.value),children:s.map(e=>(0,Q.jsx)(p,{value:e.id,children:e.setupProfile?.name??e.name},e.id))})]}):null,G?(0,Q.jsxs)(`p`,{role:`status`,className:`flex items-center gap-2 text-sm text-fg`,children:[(0,Q.jsx)(m,{className:`size-4`}),a?S?`服务连接已保存`:`Connection saved`:S?`所选用途配置已保存`:`Selected model uses saved`]}):(0,Q.jsxs)(Q.Fragment,{children:[D.profile.credential===`oauth`&&!R?(0,Q.jsx)(re,{providerId:e,displayName:le,connected:R,onConnected:()=>{z(!0),q(e=>e+1)}}):null,(D.profile.credential===`api-key`||D.profile.credential===`oauth`&&t?.supportsApiKey)&&!r?(0,Q.jsxs)(`div`,{className:`space-y-2`,children:[(0,Q.jsx)(`label`,{htmlFor:`provider-setup-key`,className:`text-sm font-medium text-fg`,children:D.profile.access===`subscription`?S?`套餐 API Key`:`Plan API key`:`API Key`}),(0,Q.jsx)(h,{id:`provider-setup-key`,disabled:B,value:M,onChange:N,placeholder:R?S?`留空使用已保存的凭据`:`Leave empty to use saved credentials`:`API Key`,labels:ee(c(o).providersSettings)}),Y?(0,Q.jsx)(`a`,{className:`inline-flex min-h-8 items-center text-sm text-accent-fg hover:underline`,href:Y,target:`_blank`,rel:`noopener noreferrer`,children:S?`获取对应接入方式的 Key`:`Get a key for this access method`}):null]}):null,!a&&!y?(0,Q.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,Q.jsx)(`span`,{className:`text-sm font-medium text-fg`,children:S?`模型用途`:`Model uses`}),(0,Q.jsx)(te,{className:`flex gap-2`,indicatorClassName:`rounded-lg bg-surface-active`,children:[`fill`,`replace`].map(e=>(0,Q.jsx)(C,{variant:k.mode===e?`secondary`:`ghost`,disabled:B,"aria-pressed":k.mode===e,onClick:()=>se(e),children:e===`fill`?S?`补齐未配置`:`Fill missing`:S?`改用此服务`:`Switch to this service`},e))})]}):(0,Q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:y?S?`仅更新当前能力,其他模型和参数保持原设置。`:`Only this capability changes; other settings are preserved.`:S?`保存连接后返回能力设置,再选择要使用的模型。`:`Save the connection, then choose a model in capability settings.`})]}),a?(0,Q.jsxs)(`p`,{className:`text-xs text-fg-muted`,children:[S?`支持用途:`:`Supported uses: `,D.uses.filter(e=>e.choices.length&&(!i||e.id===i)).map(e=>$[e.id][+!S]).join(`、`)]}):null,a?null:(0,Q.jsx)(`div`,{className:`divide-y divide-edge rounded-xl border border-edge bg-surface-inset px-4`,children:D.uses.filter(e=>!y||!i||e.id===i).map(e=>{let t=k.overrides?.[e.id]??e.recommended,n=e.choices.find(e=>e.id===t);return(0,Q.jsxs)(`div`,{className:`space-y-2 py-3`,children:[(0,Q.jsxs)(`label`,{className:`flex min-h-10 items-start gap-3`,children:[(0,Q.jsx)(`input`,{hidden:y,type:`checkbox`,className:`ui-checkbox mt-1`,checked:J.includes(e.id),disabled:y||B||G||!t||!e.choices.length,onChange:t=>j({...k,selected:t.target.checked?[...J,e.id]:J.filter(t=>t!==e.id)})}),(0,Q.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,Q.jsx)(`span`,{className:`block text-sm font-medium text-fg`,children:$[e.id][+!S]}),(0,Q.jsx)(`span`,{className:`mt-1 block break-all text-xs text-fg-muted`,children:J.includes(e.id)?`${e.current?`${e.current} → `:``}${n?.name??t??``}`:e.current?`${S?`保留:`:`Keep: `}${e.current}`:e.reason===`interactive_only`?S?`此套餐不用于后台任务`:`This plan is not used for background tasks`:n?.name??(S?`暂无可自动配置的模型`:`No automatic model selection available`)})]})]}),!G&&e.choices.length>1?(0,Q.jsxs)(`details`,{open:y||void 0,className:`pl-7`,children:[(0,Q.jsx)(`summary`,{className:`text-xs text-accent-fg`,children:S?`选择具体模型`:`Choose a model`}),(0,Q.jsx)(f,{value:t??``,disabled:B,"aria-label":$[e.id][+!S],onChange:t=>j({...k,selected:[...new Set([...J,e.id])],overrides:{...k.overrides,[e.id]:t.target.value}}),children:e.choices.map(e=>(0,Q.jsx)(p,{value:e.id,children:e.name},e.id))})]}):null]},e.id)})}),G?null:(0,Q.jsx)(C,{variant:`ghost`,disabled:B,onClick:()=>q(e=>e+1),children:S?`刷新目录`:`Refresh catalog`}),!a&&!y?(0,Q.jsxs)(`details`,{children:[(0,Q.jsx)(`summary`,{className:`text-xs text-accent-fg`,children:S?`任务模型与其他用途`:`Task models and other uses`}),(0,Q.jsxs)(`div`,{className:`mt-2 space-y-1 text-xs text-fg-muted`,children:[Object.entries(D.taskModels).map(([e,t])=>(0,Q.jsxs)(`p`,{children:[e,`: `,t]},e)),(0,Q.jsx)(`p`,{children:S?`未选用途与电脑操作保留当前配置;所选用途清除跨服务回退。`:`Unselected uses and Computer Use keep their settings. Selected uses clear cross-service fallbacks.`})]})]}):null,(0,Q.jsx)(`p`,{className:`text-xs leading-5 text-fg-muted`,children:D.profile.interactiveOnly?S?`此套餐仅用于交互任务。后台调用会检查使用范围,不会自动切换到其他收费来源。`:`This plan is for interactive tasks. Background calls check usage scope and do not automatically switch billing sources.`:S?`仅更新勾选的全局用途,智能体和会话的独立设置继续生效。`:`Only selected global uses change. Agent and session overrides remain effective.`}),(0,Q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:S?`配置保存与模型真实调用验证分别显示;此操作不会发送测试请求。`:`Saving settings does not perform a model test request.`})]}):null,U?(0,Q.jsx)(`p`,{role:`alert`,className:`text-sm text-danger`,children:U}):null]}),(0,Q.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-3 border-t border-edge px-5 py-4`,children:[(0,Q.jsx)(`span`,{className:`text-xs text-fg-muted`,children:D&&!G&&!a?S?`将配置 ${J.length} 项`:`${J.length} uses selected`:``}),G?(0,Q.jsx)(C,{onClick:g,children:S?`完成`:`Done`}):!D&&U?(0,Q.jsx)(C,{onClick:()=>q(e=>e+1),children:S?`重试`:`Retry`}):(0,Q.jsxs)(C,{onClick:()=>void ce(),disabled:B||!D||!R&&!M.trim()||y&&!J.some(e=>k.overrides?.[e]||D.uses.find(t=>t.id===e)?.recommended),children:[B?(0,Q.jsx)(_,{className:`mr-2 size-4 animate-spin`,"aria-hidden":!0}):null,B?S?`正在应用…`:`Applying…`:J.length?y&&i?`${S?`连接并用于`:`Connect and use for `}${$[i][+!S]}`:S?`连接并应用`:`Connect and apply`:S?`仅连接`:`Connect only`]})]})]})}function Ie(e){let t=(0,q.c)(7),{target:n,targetUse:r,zh:i,onDone:a,onApplied:o}=e,s=i?`zh`:`en`,c;return t[0]!==o||t[1]!==a||t[2]!==s||t[3]!==n.modelIds||t[4]!==n.providerId||t[5]!==r?(c=(0,Q.jsx)(Fe,{providerId:n.providerId,modelIds:n.modelIds,targetUse:r,language:s,existingConnection:!0,onDone:a,onApplied:o},n.providerId),t[0]=o,t[1]=a,t[2]=s,t[3]=n.modelIds,t[4]=n.providerId,t[5]=r,t[6]=c):c=t[6],c}function Le(e){let t=(0,q.c)(38),{open:n,initialProviderId:r,initialUse:i,connectOnly:a,onOpenChange:o,builtinRows:s,customConfig:c,labels:l,language:u,onSaved:d}=e,f=a!==void 0&&a,p;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(p={type:`pick`},t[0]=p):p=t[0];let[m,h]=(0,K.useState)(p),[g,_]=(0,K.useState)(``),v;t[1]!==r||t[2]!==m?(v=m.type===`pick`&&r?{type:`builtin`,providerId:r}:m,t[1]=r,t[2]=m,t[3]=v):v=t[3];let y=v,b=(0,K.useRef)(0),x;t[4]!==y.providerId||t[5]!==y.type||t[6]!==s?(x=y.type===`builtin`?s.find(e=>e.id===y.providerId)?.setupProfile?.brand:void 0,t[4]=y.providerId,t[5]=y.type,t[6]=s,t[7]=x):x=t[7];let C=x,w;t[8]===o?w=t[9]:(w=e=>{e||window.setTimeout(()=>{h({type:`pick`}),_(``),b.current=0},200),o(e)},t[8]=o,t[9]=w);let E=w,D;t[10]!==s||t[11]!==f||t[12]!==E||t[13]!==d?(D=(e,t)=>{let n=s.some(t=>t.id===e&&t.configured);f||t?.length===0||t===void 0&&n?(d(e),E(!1)):h({type:`success`,target:{providerId:e,modelIds:t}})},t[10]=s,t[11]=f,t[12]=E,t[13]=d,t[14]=D):D=t[14];let A=D,P;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,Q.jsx)(T,{className:S(`xopc-dialog-overlay fixed inset-0 bg-scrim`,N)}),t[15]=P):P=t[15];let F;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(F=S(`xopc-dialog-content fixed left-1/2 top-1/2 flex h-[min(40rem,calc(100vh-3rem))] w-[min(40rem,calc(100vw-2rem))] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-2xl border border-edge bg-surface-overlay`,M),t[16]=F):F=t[16];let I;t[17]!==y.presetKey||t[18]!==y.providerId||t[19]!==y.target||t[20]!==y.type||t[21]!==s||t[22]!==f||t[23]!==c||t[24]!==E||t[25]!==A||t[26]!==r||t[27]!==i||t[28]!==l||t[29]!==u||t[30]!==d||t[31]!==g||t[32]!==C?(I=(0,Q.jsxs)(O,{children:[P,(0,Q.jsx)(k,{className:F,children:y.type===`success`?(0,Q.jsx)(Ie,{target:y.target,targetUse:i,zh:u===`zh`,onApplied:()=>d(y.target.providerId),onDone:()=>E(!1)}):y.type===`pick`?(0,Q.jsx)(ze,{builtinRows:s,searchQuery:g,onSearchChange:_,labels:l,language:u,scrollTopRef:b,onPickBuiltin:e=>{let t=De(e);h(t?{type:`custom`,presetKey:t}:{type:`builtin`,providerId:e})},onPickCustom:()=>h({type:`custom`})}):y.type===`builtin`?(0,Q.jsx)(Fe,{providerId:y.providerId,targetUse:i,connectOnly:f,row:s.find(e=>e.id===y.providerId),language:u,alternatives:C?s.filter(e=>e.setupProfile?.brand===C):[],onChooseProvider:e=>{let t=De(e);h(t?{type:`custom`,presetKey:t}:{type:`builtin`,providerId:e})},onBack:r?void 0:()=>h({type:`pick`}),onApplied:()=>{d(y.providerId),f&&E(!1)},onDone:()=>E(!1)},y.providerId):(0,Q.jsx)(Ge,{initialPresetKey:y.presetKey,customConfig:c,labels:l,language:u,onBack:()=>h({type:`pick`}),onSaved:A})})]}),t[17]=y.presetKey,t[18]=y.providerId,t[19]=y.target,t[20]=y.type,t[21]=s,t[22]=f,t[23]=c,t[24]=E,t[25]=A,t[26]=r,t[27]=i,t[28]=l,t[29]=u,t[30]=d,t[31]=g,t[32]=C,t[33]=I):I=t[33];let L;return t[34]!==E||t[35]!==n||t[36]!==I?(L=(0,Q.jsx)(j,{open:n,onOpenChange:E,children:I}),t[34]=E,t[35]=n,t[36]=I,t[37]=L):L=t[37],L}function Re(e){let t=(0,q.c)(4),{label:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=S(`rounded-lg p-1.5 text-fg-muted hover:bg-surface-hover hover:text-fg`,F.press),t[0]=r):r=t[0];let i;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,Q.jsx)(x,{className:`size-4`,"aria-hidden":!0}),t[1]=i):i=t[1];let a;return t[2]===n?a=t[3]:(a=(0,Q.jsx)(D,{asChild:!0,children:(0,Q.jsx)(`button`,{type:`button`,className:r,"aria-label":n,children:i})}),t[2]=n,t[3]=a),a}function ze({builtinRows:e,searchQuery:t,onSearchChange:n,labels:r,language:i,scrollTopRef:a,onPickBuiltin:o,onPickCustom:s}){let c=t.trim().toLowerCase(),l=(0,K.useRef)(null);(0,K.useLayoutEffect)(()=>{let e=l.current;e&&a.current>0&&(e.scrollTop=a.current)},[a]);let u=(0,K.useMemo)(()=>c?e.filter(e=>{let t=X[e.id]?.aliases??[];return e.id.toLowerCase().includes(c)||e.name.toLowerCase().includes(c)||t.some(e=>e.toLowerCase().includes(c))}):e,[e,c]),f=(0,K.useMemo)(()=>{let e=new Set;return u.filter(t=>{let n=t.setupProfile?.brand??t.id;return e.has(n)?!1:(e.add(n),!0)})},[u]),p=f.filter(e=>e.onboardingFeatured&&[`subscription`,`account`].includes(e.setupProfile?.access??``)).slice(0,6),m=p.map(e=>e.id),h=f.filter(e=>e.configured&&!m.includes(e.id)),_=(0,K.useMemo)(()=>he(f.filter(e=>!m.includes(e.id)&&!e.configured)),[f,m]),v=e=>{let t=X[e.id];return i===`zh`?t?.descriptionZh??t?.description:t?.description};return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:`flex items-start justify-between gap-4 px-5 pb-3 pt-5`,children:[(0,Q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Q.jsx)(A,{className:`text-base font-semibold text-fg`,children:r.step1Title}),(0,Q.jsx)(E,{className:`mt-1 text-sm text-fg-muted`,children:r.step1Subtitle})]}),(0,Q.jsx)(Re,{label:r.close})]}),(0,Q.jsx)(`div`,{className:`px-5 pb-3`,children:(0,Q.jsxs)(`div`,{className:`relative`,children:[(0,Q.jsx)(y,{className:`pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-fg-subtle`,strokeWidth:1.75,"aria-hidden":!0}),(0,Q.jsx)(`input`,{type:`search`,value:t,onChange:e=>n(e.target.value),placeholder:r.searchPlaceholder,autoComplete:`off`,className:S(`h-10 w-full rounded-xl border border-edge bg-surface-base py-2 pl-10 pr-3 text-sm text-fg placeholder:text-fg-subtle`,V)})]})}),(0,Q.jsx)(`div`,{ref:l,onScroll:e=>{a.current=e.currentTarget.scrollTop},className:`min-h-0 flex-1 overscroll-contain overflow-y-auto px-5 pb-5`,children:c&&f.length===0?(0,Q.jsx)(`p`,{className:`py-6 text-center text-sm text-fg-muted`,children:r.noResults}):c?(0,Q.jsx)(Be,{title:r.searchResults,children:f.map(e=>(0,Q.jsx)(Ve,{row:e,description:v(e),labels:r,onPick:o},e.id))}):(0,Q.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[p.length>0?(0,Q.jsx)(Be,{title:r.quickStart,children:p.map(e=>(0,Q.jsx)(Ve,{row:e,description:v(e),labels:r,prominent:!0,onPick:o},e.id))}):null,h.length>0?(0,Q.jsx)(Be,{title:r.connectedSection,children:h.map(e=>(0,Q.jsx)(Ve,{row:e,description:v(e),labels:r,onPick:o},e.id))}):null,me.map(e=>{let t=_.get(e)??[];return t.length===0?null:(0,Q.jsx)(Be,{title:r.categories[e]??e,children:t.map(e=>(0,Q.jsx)(Ve,{row:e,description:v(e),labels:r,onPick:o},e.id))},e)}),(0,Q.jsxs)(`button`,{type:`button`,onClick:s,className:S(`flex w-full items-center gap-3 rounded-xl bg-surface-hover/25 px-4 py-3 text-left transition-colors`,`hover:bg-surface-hover/55 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`),children:[(0,Q.jsx)(`span`,{className:`flex size-9 shrink-0 items-center justify-center rounded-lg bg-surface-base/60 text-fg-muted`,children:(0,Q.jsx)(g,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0})}),(0,Q.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,Q.jsx)(`span`,{className:`block text-sm font-medium text-fg`,children:r.addCustom}),(0,Q.jsx)(`span`,{className:`mt-0.5 block text-xs text-fg-muted`,children:r.customDescription})]}),(0,Q.jsx)(d,{className:`size-4 shrink-0 text-fg-subtle`,"aria-hidden":!0})]})]})})]})}function Be(e){let t=(0,q.c)(7),{title:n,children:r}=e,i;t[0]===n?i=t[1]:(i=(0,Q.jsx)(`h3`,{className:`mb-1.5 px-1 text-xs font-semibold text-fg-muted`,children:n}),t[0]=n,t[1]=i);let a;t[2]===r?a=t[3]:(a=(0,Q.jsx)(`div`,{className:`flex flex-col gap-1 rounded-xl bg-surface-hover/20 p-1`,children:r}),t[2]=r,t[3]=a);let o;return t[4]!==i||t[5]!==a?(o=(0,Q.jsxs)(`section`,{children:[i,a]}),t[4]=i,t[5]=a,t[6]=o):o=t[6],o}function Ve(e){let t=(0,q.c)(27),{row:n,description:r,labels:i,prominent:a,onPick:o}=e,s=a!==void 0&&a,c;t[0]!==o||t[1]!==n.id?(c=()=>o(n.id),t[0]=o,t[1]=n.id,t[2]=c):c=t[2];let l=s&&`bg-surface-base/80`,u;t[3]===l?u=t[4]:(u=S(`flex min-h-12 w-full items-center gap-3 rounded-lg bg-surface-base/55 px-3 py-2.5 text-left transition-colors`,`hover:bg-surface-base focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,l),t[3]=l,t[4]=u);let f;t[5]===n.name?f=t[6]:(f=(0,Q.jsx)(`span`,{className:`truncate text-sm font-medium text-fg`,children:n.name}),t[5]=n.name,t[6]=f);let p;t[7]!==i||t[8]!==s?(p=s?(0,Q.jsx)(`span`,{className:`shrink-0 rounded-full bg-accent-soft px-2 py-0.5 text-[11px] font-medium text-accent-fg`,children:i.recommended}):null,t[7]=i,t[8]=s,t[9]=p):p=t[9];let h;t[10]!==f||t[11]!==p?(h=(0,Q.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[f,p]}),t[10]=f,t[11]=p,t[12]=h):h=t[12];let g;t[13]===r?g=t[14]:(g=r?(0,Q.jsx)(`span`,{className:`mt-0.5 block truncate text-xs text-fg-muted`,children:r}):null,t[13]=r,t[14]=g);let _;t[15]!==h||t[16]!==g?(_=(0,Q.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[h,g]}),t[15]=h,t[16]=g,t[17]=_):_=t[17];let v;t[18]!==i||t[19]!==n.configured?(v=n.configured?(0,Q.jsxs)(`span`,{className:`inline-flex shrink-0 items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-1 text-[11px] font-medium text-emerald-700 dark:text-emerald-300`,children:[(0,Q.jsx)(m,{className:`size-3.5`,"aria-hidden":!0}),i.connected]}):null,t[18]=i,t[19]=n.configured,t[20]=v):v=t[20];let y;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,Q.jsx)(d,{className:`size-4 shrink-0 text-fg-subtle`,"aria-hidden":!0}),t[21]=y):y=t[21];let b;return t[22]!==v||t[23]!==c||t[24]!==u||t[25]!==_?(b=(0,Q.jsxs)(`button`,{type:`button`,onClick:c,className:u,children:[_,v,y]}),t[22]=v,t[23]=c,t[24]=u,t[25]=_,t[26]=b):b=t[26],b}function He(e){return{clientKey:crypto.randomUUID(),value:e}}function Ue(e=`custom`){if(e!==`custom`&&Z[e]){let t=Z[e].config;return{preset:e,providerId:we(e),baseUrl:t.baseUrl??``,api:t.api??`openai-completions`,apiKey:t.apiKey??``,modelSlots:(t.models?.map(e=>e.id)??[``]).map(He),error:null}}return{preset:`custom`,providerId:``,baseUrl:``,api:`openai-completions`,apiKey:``,modelSlots:[He(``)],error:null}}function We(e,t){switch(t.type){case`applyPreset`:return t.key===`custom`?{...e,preset:`custom`,error:null}:Z[t.key]?Ue(t.key):e;case`setProviderId`:return{...e,providerId:t.value};case`setBaseUrl`:return{...e,baseUrl:t.value};case`setApi`:return{...e,api:t.value};case`setApiKey`:return{...e,apiKey:t.value};case`addModelSlot`:return{...e,modelSlots:[...e.modelSlots,He(``)]};case`updateModelId`:return{...e,modelSlots:e.modelSlots.map((e,n)=>n===t.index?{...e,value:t.value}:e)};case`setModelIds`:return{...e,modelSlots:(t.values.length>0?t.values:[``]).map(He)};case`removeModelSlot`:return{...e,modelSlots:e.modelSlots.filter((e,n)=>n!==t.index)};case`setError`:return{...e,error:t.value}}}function Ge({initialPresetKey:e,customConfig:t,labels:n,language:r,onBack:i,onSaved:a}){let[o,s]=(0,K.useReducer)(We,void 0,()=>Ue(e)),[l,u]=(0,K.useState)(!1),[m,g]=(0,K.useState)(!1),b=ee(c(r).providersSettings),{preset:w,providerId:T,baseUrl:E,api:D,apiKey:O,modelSlots:k,error:j}=o,M=k.map(e=>e.value),N=async()=>{let e=T.trim(),r=E.trim();if(!e){s({type:`setError`,value:n.providerIdRequired});return}if(!r){s({type:`setError`,value:n.baseUrlRequired});return}let i=M.map(e=>e.trim()).filter(Boolean);u(!0),s({type:`setError`,value:null});try{let n=t?.providers??{},o=w===`custom`?void 0:Z[w]?.config,s={...o??{},baseUrl:r,api:D,apiKey:O.trim()||void 0,models:i.map(e=>o?.models?.find(t=>t.id===e)??{id:e})};await be({providers:{...n,[e]:s}});let c=new Set(n[e]?.models?.map(e=>e.id)??[]);a(e,s.models?.filter(e=>!c.has(e.id)&&!e.computerUse).map(e=>e.id)??[])}catch(e){s({type:`setError`,value:e instanceof Error?e.message:n.saveError})}finally{u(!1)}},P=async()=>{let e=T.trim()||we(w)||`custom`,t=E.trim();if(!t){s({type:`setError`,value:n.baseUrlRequired});return}g(!0),s({type:`setError`,value:null});try{let r=w===`custom`?void 0:Z[w]?.config,i=(await xe({providerId:e,baseUrl:t,apiKey:O.trim()||void 0,api:D,headers:r?.headers})).map(e=>e.id).filter(e=>e&&!e.includes(`/`));s({type:`setModelIds`,values:i}),i.length===0&&s({type:`setError`,value:n.discoverModelsHint})}catch(e){s({type:`setError`,value:e instanceof Error?e.message:n.discoverModelsHint})}finally{g(!1)}},I=T.trim()&&E.trim(),L=(D===`openai-completions`||D===`openai-responses`)&&E.trim();return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-2 px-5 pb-3 pt-5`,children:[(0,Q.jsx)(`button`,{type:`button`,onClick:i,className:S(`rounded-lg p-1.5 text-fg-muted hover:bg-surface-hover hover:text-fg`,F.press),"aria-label":n.back,children:(0,Q.jsx)(d,{className:`size-4 rotate-180`,"aria-hidden":!0})}),(0,Q.jsx)(A,{className:`min-w-0 flex-1 text-base font-semibold text-fg`,children:n.step2CustomTitle}),(0,Q.jsx)(Re,{label:n.close})]}),(0,Q.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-5 pb-4`,children:(0,Q.jsxs)(`div`,{className:`flex flex-col gap-4 rounded-xl bg-surface-hover/20 p-4`,children:[(0,Q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.customDescription}),(0,Q.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Q.jsx)(`label`,{htmlFor:`custom-preset`,className:`text-sm font-medium text-fg`,children:n.presetLabel}),(0,Q.jsxs)(f,{id:`custom-preset`,value:w,onChange:e=>s({type:`applyPreset`,key:e.target.value}),className:Ae(),children:[(0,Q.jsx)(p,{value:`custom`,children:n.presetCustom}),Ce.map(e=>(0,Q.jsx)(p,{value:e.key,children:e.label},e.key))]})]}),(0,Q.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Q.jsx)(`label`,{htmlFor:`custom-provider-id`,className:`text-sm font-medium text-fg`,children:n.providerIdLabel}),(0,Q.jsx)(`input`,{id:`custom-provider-id`,type:`text`,autoComplete:`off`,value:T,onChange:e=>s({type:`setProviderId`,value:e.target.value}),placeholder:n.providerIdPlaceholder,className:S(`rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg placeholder:text-fg-subtle`,V)})]}),(0,Q.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Q.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Q.jsx)(`label`,{htmlFor:`custom-base-url`,className:`text-sm font-medium text-fg`,children:n.baseUrlLabel}),(0,Q.jsx)(`input`,{id:`custom-base-url`,type:`url`,autoComplete:`off`,value:E,onChange:e=>s({type:`setBaseUrl`,value:e.target.value}),placeholder:n.baseUrlPlaceholder,className:S(`rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg placeholder:text-fg-subtle`,V)})]}),(0,Q.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Q.jsx)(`label`,{htmlFor:`custom-api-type`,className:`text-sm font-medium text-fg`,children:n.apiTypeLabel}),(0,Q.jsx)(f,{id:`custom-api-type`,value:D,onChange:e=>s({type:`setApi`,value:e.target.value}),className:Ae(),children:ge.map(e=>(0,Q.jsx)(p,{value:e.value,children:e.label},e.value))})]})]}),(0,Q.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Q.jsx)(`label`,{htmlFor:`custom-api-key`,className:`text-sm font-medium text-fg`,children:n.apiKeyLabel}),(0,Q.jsx)(h,{id:`custom-api-key`,value:O,onChange:e=>s({type:`setApiKey`,value:e}),placeholder:n.apiKeyPlaceholder,labels:b})]}),(0,Q.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Q.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,Q.jsx)(`span`,{className:`text-sm font-medium text-fg`,children:n.modelIdLabel}),(0,Q.jsxs)(C,{type:`button`,variant:`secondary`,className:`gap-1.5`,disabled:!L||m,onClick:()=>void P(),children:[m?(0,Q.jsx)(_,{className:`size-3.5 animate-spin`,"aria-hidden":!0}):(0,Q.jsx)(y,{className:`size-3.5`,"aria-hidden":!0}),m?n.discoveringModels:n.discoverModels]})]}),M.map((e,t)=>(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(`input`,{type:`text`,autoComplete:`off`,value:e,onChange:e=>s({type:`updateModelId`,index:t,value:e.target.value}),placeholder:n.modelIdPlaceholder,className:S(`flex-1 rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg placeholder:text-fg-subtle`,V)}),M.length>1?(0,Q.jsx)(`button`,{type:`button`,onClick:()=>s({type:`removeModelSlot`,index:t}),className:S(`rounded-lg p-1.5 text-fg-subtle hover:bg-surface-hover hover:text-fg`,F.press),children:(0,Q.jsx)(x,{className:`size-3.5`,"aria-hidden":!0})}):null]},k[t].clientKey)),(0,Q.jsxs)(C,{type:`button`,variant:`ghost`,className:`w-fit gap-1.5 text-fg-muted`,onClick:()=>s({type:`addModelSlot`}),children:[(0,Q.jsx)(v,{className:`size-3.5`,"aria-hidden":!0}),n.addModel]})]}),j?(0,Q.jsx)(`p`,{className:`text-sm text-red-600 dark:text-red-400`,children:j}):null]})}),(0,Q.jsxs)(`div`,{className:`flex items-center justify-end gap-2 bg-surface-hover/15 px-5 py-3`,children:[(0,Q.jsx)(C,{type:`button`,variant:`secondary`,onClick:i,children:n.cancel}),(0,Q.jsx)(C,{type:`button`,variant:`primary`,disabled:!I||l,onClick:()=>void N(),children:l?(0,Q.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,Q.jsx)(_,{className:`size-3.5 animate-spin`,"aria-hidden":!0}),n.saving]}):n.save})]})]})}function Ke(){let e=(0,q.c)(29),t=!!o(Qe),{data:n,isLoading:r}=I(t),i;e[0]===t?i=e[1]:(i=t?a(`/api/providers/meta`):null,e[0]=t,e[1]=i);let s;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(s={revalidateOnFocus:!1},e[2]=s):s=e[2];let{data:c,isLoading:l}=P(i,Ze,s),u;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(u={revalidateOnFocus:!1},e[3]=u):u=e[3];let{data:d,isLoading:f}=P(t?R:null,Xe,u),p;e[4]===d?p=e[5]:(p=d===void 0?[]:d,e[4]=d,e[5]=p);let m=p,h;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(h={revalidateOnFocus:!1},e[6]=h):h=e[6];let{data:g}=P(t?U:null,Ye,h),_;bb0:{if(!c||n===void 0){let t;e[7]===Symbol.for(`react.memo_cache_sentinel`)?(t=[],e[7]=t):t=e[7],_=t;break bb0}let t;e[8]!==n?.payload?.config||e[9]!==c||e[10]!==m?(t=W(c,G(n?.payload?.config),m),e[8]=n?.payload?.config,e[9]=c,e[10]=m,e[11]=t):t=e[11],_=t}let v=_,y;bb1:{if(!g){y=null;break bb1}let t;e[12]===g.config?t=e[13]:(t=ve(g.config),e[12]=g.config,e[13]=t),y=t}let b=y,x;if(e[14]!==v||e[15]!==b||e[16]!==c||e[17]!==m){x=[];let t=new Set((c??[]).filter(Je).map(qe)),n;e[19]===b?n=e[20]:(n=new Set(b?Object.keys(b.providers):[]),e[19]=b,e[20]=n);let r=n;for(let e of v){if(!t.has(e.id))continue;let n=r.has(e.id),i=n?b.providers[e.id]?.models?.length??0:m.filter(t=>t.provider===e.id).length;x.push({id:e.id,name:e.name,configured:!0,isCustom:n,modelCount:i})}if(b){let t;e[21]===b.providers?t=e[22]:(t=Object.entries(b.providers),e[21]=b.providers,e[22]=t);for(let[e,n]of t)x.some(t=>t.id===e)||x.push({id:e,name:e,configured:!0,isCustom:!0,modelCount:n.models?.length??0})}e[14]=v,e[15]=b,e[16]=c,e[17]=m,e[18]=x}else x=e[18];let S=x,C=r||l||f,w;return e[23]!==v||e[24]!==S||e[25]!==b||e[26]!==C||e[27]!==m?(w={cards:S,loading:C,builtinRows:v,customConfig:b,allModels:m},e[23]=v,e[24]=S,e[25]=b,e[26]=C,e[27]=m,e[28]=w):w=e[28],w}function qe(e){return e.id}function Je(e){return e.configured}function Ye(){return ye()}function Xe(){return L()}async function Ze(e){let{payload:t}=await(await fetch(e,{credentials:`same-origin`,redirect:`error`})).json();return t?.providers??[]}function Qe(e){return e.conversationId}function $e(e){let t=(0,q.c)(12),{labels:n,data:r,onAdd:i,onManage:a}=e,{cards:o,loading:s}=r;if(s){let e;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,Q.jsx)(w,{className:`h-6 w-48 max-w-full`}),t[0]=e):e=t[0];let n;return t[1]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,Q.jsxs)(`div`,{className:`flex flex-col gap-3`,"aria-busy":`true`,children:[e,(0,Q.jsx)(`div`,{className:`flex flex-col gap-1`,children:[1,2,3].map(tt)})]}),t[1]=n):n=t[1],n}let c;if(t[2]!==o||t[3]!==n||t[4]!==i||t[5]!==a){let e=o.filter(et),r=e.length>0?n.titleCount.replace(`{{count}}`,String(e.length)):n.title,s;t[7]===r?s=t[8]:(s=(0,Q.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:r}),t[7]=r,t[8]=s);let l=e.length>0?(0,Q.jsxs)(C,{type:`button`,variant:`primary`,className:`gap-1.5`,onClick:i,children:[(0,Q.jsx)(v,{className:`size-3.5`,strokeWidth:2,"aria-hidden":!0}),n.addProvider]}):null,u;t[9]!==s||t[10]!==l?(u=(0,Q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[s,l]}),t[9]=s,t[10]=l,t[11]=u):u=t[11],c=(0,Q.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[u,e.length===0?(0,Q.jsxs)(`div`,{className:`rounded-xl bg-surface-hover/25 px-6 py-10 text-center`,children:[(0,Q.jsx)(`p`,{className:`text-sm font-medium text-fg`,children:n.empty}),(0,Q.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:n.emptyHint}),(0,Q.jsxs)(C,{type:`button`,variant:`primary`,className:`mt-4 gap-1.5`,onClick:i,children:[(0,Q.jsx)(v,{className:`size-3.5`,strokeWidth:2,"aria-hidden":!0}),n.addProvider]})]}):(0,Q.jsx)(`div`,{className:`flex flex-col gap-1 rounded-xl bg-surface-hover/20 p-1`,children:e.map(e=>(0,Q.jsx)(nt,{card:e,labels:n,onManage:()=>a(e.id,e.isCustom)},e.id))})]}),t[2]=o,t[3]=n,t[4]=i,t[5]=a,t[6]=c}else c=t[6];return c}function et(e){return e.configured}function tt(e){return(0,Q.jsx)(w,{className:`h-16 rounded-lg`},e)}function nt(e){let t=(0,q.c)(26),{card:n,labels:r,onManage:i}=e,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=S(`group relative flex min-h-16 w-full flex-col justify-center gap-2 rounded-lg bg-surface-base/45 px-3 py-3 text-left transition-colors sm:flex-row sm:items-center sm:gap-4`,`hover:bg-surface-hover/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,F.pressCard),t[0]=a):a=t[0];let o;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,Q.jsx)(m,{className:`size-4 shrink-0 text-emerald-600 dark:text-emerald-400`,"aria-hidden":!0}),t[1]=o):o=t[1];let s;t[2]===n.name?s=t[3]:(s=(0,Q.jsx)(`span`,{className:`min-w-0 text-sm font-semibold leading-snug text-fg`,children:n.name}),t[2]=n.name,t[3]=s);let c;t[4]!==n.isCustom||t[5]!==r.custom?(c=n.isCustom?(0,Q.jsx)(`span`,{className:`shrink-0 rounded bg-surface-hover px-1.5 py-0.5 text-[10px] font-medium text-fg-subtle`,children:r.custom}):null,t[4]=n.isCustom,t[5]=r.custom,t[6]=c):c=t[6];let l;t[7]!==s||t[8]!==c?(l=(0,Q.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-2`,children:[o,s,c]}),t[7]=s,t[8]=c,t[9]=l):l=t[9];let u;t[10]!==n.modelCount||t[11]!==r.modelsCount||t[12]!==r.noModels?(u=n.modelCount>0?r.modelsCount.replace(`{{count}}`,String(n.modelCount)):r.noModels,t[10]=n.modelCount,t[11]=r.modelsCount,t[12]=r.noModels,t[13]=u):u=t[13];let d;t[14]===u?d=t[15]:(d=(0,Q.jsx)(`span`,{className:`whitespace-nowrap text-xs text-fg-subtle`,children:u}),t[14]=u,t[15]=d);let f;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,Q.jsx)(b,{className:`size-3`,"aria-hidden":!0}),t[16]=f):f=t[16];let p;t[17]===r.manage?p=t[18]:(p=(0,Q.jsxs)(`span`,{className:`flex items-center gap-1 text-xs font-medium text-accent-fg`,children:[f,r.manage]}),t[17]=r.manage,t[18]=p);let h;t[19]!==d||t[20]!==p?(h=(0,Q.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-4 pl-6 sm:justify-end sm:pl-0`,children:[d,p]}),t[19]=d,t[20]=p,t[21]=h):h=t[21];let g;return t[22]!==i||t[23]!==h||t[24]!==l?(g=(0,Q.jsxs)(`button`,{type:`button`,onClick:i,className:a,children:[l,h]}),t[22]=i,t[23]=h,t[24]=l,t[25]=g):g=t[25],g}export{oe as C,ae as D,le as E,ie as O,J as S,se as T,pe as _,Fe as a,Y as b,Oe as c,De as d,je as f,X as g,be as h,Ie as i,ke as l,Se as m,Ke as n,Ne as o,Ae as p,Le as r,Pe as s,$e as t,Me as u,fe as v,ce as w,ue as x,de as y};