@xopcai/xopc 0.0.420 → 0.0.421

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 (324) 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-DnqOM8GN.js → activity-store-CKrylgib.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-1UABT2KS.js → agent-avatar-dicebear-Dv5Rda4y.js} +1 -1
  5. package/dist/gateway/static/root/assets/agent-avatar-display-B1ycycx2.js +2 -0
  6. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-D285zy0S.js +1 -0
  7. package/dist/gateway/static/root/assets/agent-plugin-dialog-D3yCqVan.js +1 -0
  8. package/dist/gateway/static/root/assets/{agents-O7mago-m.js → agents-DyAuR3rG.js} +5 -5
  9. package/dist/gateway/static/root/assets/{agents-admin-api-CyjykMEh.js → agents-admin-api-CASGzvkW.js} +1 -1
  10. package/dist/gateway/static/root/assets/{api-C1dxxDZx.js → api-C4LxuNzq.js} +1 -1
  11. package/dist/gateway/static/root/assets/{api-Ddrs70xV.js → api-Uk05lF9i.js} +1 -1
  12. package/dist/gateway/static/root/assets/app-management-settings-panel-CDnZNKHt.js +1 -0
  13. package/dist/gateway/static/root/assets/appearance-settings-CmCF7PZ5.js +1 -0
  14. package/dist/gateway/static/root/assets/apps-page-BR9qoA2P.js +1 -0
  15. package/dist/gateway/static/root/assets/{archive-plugin-n5lPr79c.js → archive-plugin-nuHYYVty.js} +1 -1
  16. package/dist/gateway/static/root/assets/automation-api-DtJfd1QM.js +1 -0
  17. package/dist/gateway/static/root/assets/automation-display-BlGt8MAC.js +2 -0
  18. package/dist/gateway/static/root/assets/automation-task-card-Cp3RIw5d.js +2 -0
  19. package/dist/gateway/static/root/assets/{automations-page-oLsNzu_6.js → automations-page-DM4IdUJh.js} +1 -1
  20. package/dist/gateway/static/root/assets/automations-workspace-CXLu04I-.js +9 -0
  21. package/dist/gateway/static/root/assets/{binary-plugins-D9VW7dWP.js → binary-plugins-CHCAr8jt.js} +1 -1
  22. package/dist/gateway/static/root/assets/{block-editor-C477bTtO.js → block-editor-B0v8KxsO.js} +4 -4
  23. package/dist/gateway/static/root/assets/{browser-automation-inputs-CCiYXxmh.js → browser-automation-inputs-DjUW7PEB.js} +1 -1
  24. package/dist/gateway/static/root/assets/browser-automations-page-Cf8AoQz1.js +3 -0
  25. package/dist/gateway/static/root/assets/{browser-control-api-Y3fvmeBk.js → browser-control-api-C6NZgaA1.js} +1 -1
  26. package/dist/gateway/static/root/assets/{browser-settings-page-DjkGahlz.js → browser-settings-page-DV2FNEDf.js} +2 -2
  27. package/dist/gateway/static/root/assets/{capabilities-DAyA681v.js → capabilities-CwdjWz2r.js} +1 -1
  28. package/dist/gateway/static/root/assets/{capabilities-DRVXLssH.js → capabilities-D0-HCZ5J.js} +1 -1
  29. package/dist/gateway/static/root/assets/capabilities-page-DwDkritH.js +2 -0
  30. package/dist/gateway/static/root/assets/capabilities-settings-panel-mme16Fbp.js +8 -0
  31. package/dist/gateway/static/root/assets/channels-lKFLu8p-.js +1 -0
  32. package/dist/gateway/static/root/assets/{chat-agents-api-D5nR_JVe.js → chat-agents-api-l80cvSac.js} +1 -1
  33. package/dist/gateway/static/root/assets/{chat-chart-block-K2t333qv.js → chat-chart-block-BwP5QXEk.js} +1 -1
  34. package/dist/gateway/static/root/assets/chat-page-CT3K7lFT.js +71 -0
  35. package/dist/gateway/static/root/assets/{chat-terminal-dock-CkFG6mA3.js → chat-terminal-dock-D2bV9YUL.js} +2 -2
  36. package/dist/gateway/static/root/assets/{list-filter-COkzTdOz.js → clipboard-copy-DuJk5WD6.js} +1 -1
  37. package/dist/gateway/static/root/assets/{command-palette-api-Do_66X1B.js → command-palette-api-CtapG8ck.js} +1 -1
  38. package/dist/gateway/static/root/assets/composer-payload-handoff-DYuhKZRC.js +1 -0
  39. package/dist/gateway/static/root/assets/{computer-settings-page-DBxOcMko.js → computer-settings-page-DZtMuihL.js} +1 -1
  40. package/dist/gateway/static/root/assets/connected-providers-grid-BQH5k3iC.js +1 -0
  41. package/dist/gateway/static/root/assets/{connector-service-page-rWpnchb3.js → connector-service-page-DrvFdP3G.js} +1 -1
  42. package/dist/gateway/static/root/assets/{connectors-api-DIBG72k4.js → connectors-api-BzkgVBYC.js} +1 -1
  43. package/dist/gateway/static/root/assets/connectors-page-BtRNVCFy.js +1 -0
  44. package/dist/gateway/static/root/assets/{date-picker-CE-cZFCU.js → date-picker-ByTasrfl.js} +1 -1
  45. package/dist/gateway/static/root/assets/{dependency-picker-7SpSfDSg.js → dependency-picker-Dh8hPmsT.js} +1 -1
  46. package/dist/gateway/static/root/assets/desktop-pet-CFz8bqyI.js +1 -0
  47. package/dist/gateway/static/root/assets/desktop-pet-settings-COaboNn1.js +1 -0
  48. package/dist/gateway/static/root/assets/{dev-view-store-57HgVuZ6.js → dev-view-store-D8XYHVqG.js} +1 -1
  49. package/dist/gateway/static/root/assets/device-pairing-wizard-BKMpLdIA.js +1 -0
  50. package/dist/gateway/static/root/assets/{directory-picker-path-field-D4jMhpka.js → directory-picker-path-field-Cjv7rdo3.js} +1 -1
  51. package/dist/gateway/static/root/assets/discussion-annotation-sync-YvlVw17j.js +1 -0
  52. package/dist/gateway/static/root/assets/{dist-DNCdG_qB.js → dist-D3lWNSe7.js} +1 -1
  53. package/dist/gateway/static/root/assets/{extension-debug-page-BsK2LMXQ.js → extension-debug-page-CXx3m5-B.js} +1 -1
  54. package/dist/gateway/static/root/assets/extension-iframe-host-CnOdNwbo.js +1 -0
  55. package/dist/gateway/static/root/assets/{extension-marketplace-api-CVJPqJOB.js → extension-marketplace-api-BABmUY2s.js} +1 -1
  56. package/dist/gateway/static/root/assets/extension-page-C1nGr4DD.js +1 -0
  57. package/dist/gateway/static/root/assets/{extension-provider-Byrd8Sor.js → extension-provider-BA0Y2Rvs.js} +1 -1
  58. package/dist/gateway/static/root/assets/extension-settings-page-QIPI8e7k.js +1 -0
  59. package/dist/gateway/static/root/assets/{file-preview-surface-BlprUrIs.js → file-preview-surface-BsB7bnFH.js} +1 -1
  60. package/dist/gateway/static/root/assets/{gateway-config-swr-BAmUhiP1.js → gateway-config-swr-Bt8w0Iio.js} +1 -1
  61. package/dist/gateway/static/root/assets/{gateway-realtime-CsykKL4l.js → gateway-realtime-CyCCNUxm.js} +1 -1
  62. package/dist/gateway/static/root/assets/gateway-realtime-store-0gmDfPeP.js +1 -0
  63. package/dist/gateway/static/root/assets/gateway-restart-Ty4AzDxa.js +1 -0
  64. package/dist/gateway/static/root/assets/{gateway-settings-BA5-Uuwx.js → gateway-settings-BvKq7vuz.js} +1 -1
  65. package/dist/gateway/static/root/assets/{gateway-startup-retry-CtUB3g6N.js → gateway-startup-retry-N3k-C7c2.js} +1 -1
  66. package/dist/gateway/static/root/assets/{global-defaults-api-CINf-C6a.js → global-defaults-api-D8EB2vfY.js} +1 -1
  67. package/dist/gateway/static/root/assets/home-page-eRuAzi58.js +2 -0
  68. package/dist/gateway/static/root/assets/image-generation-api-C99Fsofm.js +1 -0
  69. package/dist/gateway/static/root/assets/{imports-page-BWShtGRQ.js → imports-page-Cp9RquVb.js} +1 -1
  70. package/dist/gateway/static/root/assets/index-6vVrWfwM.js +11 -0
  71. package/dist/gateway/static/root/assets/index-DDGK6klk.css +1 -0
  72. package/dist/gateway/static/root/assets/install-connector-dialog-CsoAidXp.js +1 -0
  73. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CdM4BQwp.js → keyboard-shortcuts-settings-DFhOP2aD.js} +1 -1
  74. package/dist/gateway/static/root/assets/list-filter-CIPvpfLA.js +1 -0
  75. package/dist/gateway/static/root/assets/local-app-workbench-page-DbtU_A-l.js +1 -0
  76. package/dist/gateway/static/root/assets/{local-apps-page-CxyRVfjD.js → local-apps-page-rjhHfLpe.js} +1 -1
  77. package/dist/gateway/static/root/assets/{local-session-drafts-B9ZPwotC.js → local-session-drafts-DHM4vWDO.js} +1 -1
  78. package/dist/gateway/static/root/assets/{locale-store-lIXD1FMw.js → locale-store-5Hf8J8-_.js} +1 -1
  79. package/dist/gateway/static/root/assets/logs-page-Dx_JIOpF.js +2 -0
  80. package/dist/gateway/static/root/assets/management-settings-CuSzixOw.js +1 -0
  81. package/dist/gateway/static/root/assets/{markdown-view-CJt-i2Dp.js → markdown-view-pzSRu7av.js} +3 -3
  82. package/dist/gateway/static/root/assets/{media-plugins-D_bR23mA.js → media-plugins-3cJuHbO7.js} +1 -1
  83. package/dist/gateway/static/root/assets/messages-uXxg5p54.js +3 -0
  84. package/dist/gateway/static/root/assets/model-selector-ksLo-5B_.js +1 -0
  85. package/dist/gateway/static/root/assets/{models-hub-cache-za2fWJLg.js → models-hub-cache-DhZng2nF.js} +1 -1
  86. package/dist/gateway/static/root/assets/navigation-D62kPsA9.js +1 -0
  87. package/dist/gateway/static/root/assets/note-detail-panel-B6RbjwJq.js +5 -0
  88. package/dist/gateway/static/root/assets/note-image-lightbox-BCjvBqwy.js +1 -0
  89. package/dist/gateway/static/root/assets/{notes-api-C_458rv5.js → notes-api-DocbsBbT.js} +1 -1
  90. package/dist/gateway/static/root/assets/notes-page-B7889s6-.js +8 -0
  91. package/dist/gateway/static/root/assets/{oauth-api-C3X9FLYw.js → oauth-api-CCFIPbA0.js} +1 -1
  92. package/dist/gateway/static/root/assets/{oauth-provider-connect-H81se_3n.js → oauth-provider-connect-GxkF0vWJ.js} +1 -1
  93. package/dist/gateway/static/root/assets/open-capability-settings-Cvb65hQB.js +1 -0
  94. package/dist/gateway/static/root/assets/{page-context-capture-button-BkAlQ7cB.js → page-context-capture-button-CvWLVeRA.js} +1 -1
  95. package/dist/gateway/static/root/assets/{page-context-draft-ClLgaOaD.js → page-context-draft-CMRDNv4d.js} +1 -1
  96. package/dist/gateway/static/root/assets/page-header-store-reh1es-3.js +1 -0
  97. package/dist/gateway/static/root/assets/{personal-avatar-BLtHt8fV.js → personal-avatar-CqNJ48Ge.js} +1 -1
  98. package/dist/gateway/static/root/assets/personal-page-D95FHaw9.js +1 -0
  99. package/dist/gateway/static/root/assets/personal-settings-panel-DAcl8DU4.js +1 -0
  100. package/dist/gateway/static/root/assets/{phone-dependencies-card-DISHarj8.js → phone-dependencies-card-DLWblGj7.js} +1 -1
  101. package/dist/gateway/static/root/assets/phone-model-picker-ugrT9GJu.js +1 -0
  102. package/dist/gateway/static/root/assets/phone-settings-page-DIIt7JOE.js +1 -0
  103. package/dist/gateway/static/root/assets/{phone-workspace-store-fhnZrgy_.js → phone-workspace-store-mawKT5kV.js} +1 -1
  104. package/dist/gateway/static/root/assets/plugin-details-dialog-BdueMT3q.js +1 -0
  105. package/dist/gateway/static/root/assets/popover-select-DD8fmrxH.js +1 -0
  106. package/dist/gateway/static/root/assets/preference-select-fields-CmLZNwbm.js +1 -0
  107. package/dist/gateway/static/root/assets/product-automation-feedback-DYwhL37Y.js +7 -0
  108. package/dist/gateway/static/root/assets/{product-open-page-xn9G4hSI.js → product-open-page-B5G4X71t.js} +1 -1
  109. package/dist/gateway/static/root/assets/{product-preview-content-DcoK-iZe.js → product-preview-content-BUheyLqt.js} +1 -1
  110. package/dist/gateway/static/root/assets/{product-preview-modal-Ruw9WSKK.js → product-preview-modal-Cj_Zxu4G.js} +2 -2
  111. package/dist/gateway/static/root/assets/project-detail-page-CRJb69vP.js +7 -0
  112. package/dist/gateway/static/root/assets/project-understanding-D3w8cZEm.js +1 -0
  113. package/dist/gateway/static/root/assets/projects-page-CkifzKjz.js +1 -0
  114. package/dist/gateway/static/root/assets/{providers-api-CzVkFKFg.js → providers-api-CKFg2PZQ.js} +1 -1
  115. package/dist/gateway/static/root/assets/{recording-upload-0jxahBMo.js → recording-upload-ZkmRf0GR.js} +1 -1
  116. package/dist/gateway/static/root/assets/{registry-api-n8TwtJ_j.js → registry-api-B1Mh3bNo.js} +1 -1
  117. package/dist/gateway/static/root/assets/{remote-access-hub-cZpBi4Rk.js → remote-access-hub-Dw5rG-aA.js} +1 -1
  118. package/dist/gateway/static/root/assets/resource-unavailable-BUWsH3fp.js +1 -0
  119. package/dist/gateway/static/root/assets/route-preload-CRKbVwQ1.js +2 -0
  120. package/dist/gateway/static/root/assets/runtime-impact-DbySfhdp.js +1 -0
  121. package/dist/gateway/static/root/assets/{runtime-tools-api-D-8KjYK6.js → runtime-tools-api-BXvn5ImA.js} +1 -1
  122. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-BALcypHp.js +1 -0
  123. package/dist/gateway/static/root/assets/schema-form-BKeP5G7b.js +1 -0
  124. package/dist/gateway/static/root/assets/service-recommendation-list-CpVUnz89.js +1 -0
  125. package/dist/gateway/static/root/assets/{session-api-CsCoI2im.js → session-api-VquhIBHI.js} +1 -1
  126. package/dist/gateway/static/root/assets/session-manager-DNMosCtW.js +23 -0
  127. package/dist/gateway/static/root/assets/sessions-page-DlvPkE5Y.js +1 -0
  128. package/dist/gateway/static/root/assets/settings-advanced-gate-Ckc1aCLG.js +1 -0
  129. package/dist/gateway/static/root/assets/{settings-advanced-section-BqoVSko2.js → settings-advanced-section-c9_iZ-46.js} +1 -1
  130. package/dist/gateway/static/root/assets/{settings-mode-store-CBsJ-Qg2.js → settings-mode-store-Dem6-TBe.js} +1 -1
  131. package/dist/gateway/static/root/assets/{settings-page-DROUGyJl.js → settings-page-B_wNfFQe.js} +1 -1
  132. package/dist/gateway/static/root/assets/{settings-page-header-Bv-kQFTm.js → settings-page-header-C8a_oOyw.js} +1 -1
  133. package/dist/gateway/static/root/assets/{settings-page-layout-DHP6MrrL.js → settings-page-layout-CTSRWljG.js} +1 -1
  134. package/dist/gateway/static/root/assets/setup-status-panel-BNZoqF40.js +1 -0
  135. package/dist/gateway/static/root/assets/{share-link-dialog-BJHRQVKC.js → share-link-dialog-C5JTTxsy.js} +1 -1
  136. package/dist/gateway/static/root/assets/share-preview-page-D-KxzXgm.js +2 -0
  137. package/dist/gateway/static/root/assets/{shares-api-rtWVHA_d.js → shares-api-CztKbxdd.js} +1 -1
  138. package/dist/gateway/static/root/assets/shares-settings-CzR21j6e.js +1 -0
  139. package/dist/gateway/static/root/assets/skill-api-B7kWl6LK.js +1 -0
  140. package/dist/gateway/static/root/assets/{skill-list-api-BzlKXPsE.js → skill-list-api-Cn07P6qZ.js} +1 -1
  141. package/dist/gateway/static/root/assets/{skill-reload-api-Cff2GgZb.js → skill-reload-api-Bhl0u16_.js} +1 -1
  142. package/dist/gateway/static/root/assets/skills-page-BmkuxHZe.js +2 -0
  143. package/dist/gateway/static/root/assets/{system-settings-panel-BeQeUUMH.js → system-settings-panel-Ce6zIcki.js} +1 -1
  144. package/dist/gateway/static/root/assets/task-detail-page-CysJhG3B.js +2 -0
  145. package/dist/gateway/static/root/assets/task-result-evidence-CGZKMnNo.js +1 -0
  146. package/dist/gateway/static/root/assets/{terminal-panel-store-5Fzctajw.js → terminal-panel-store-YwLUkuyV.js} +1 -1
  147. package/dist/gateway/static/root/assets/{theme-store-DW45fWYQ.js → theme-store-DOJ9tu-j.js} +1 -1
  148. package/dist/gateway/static/root/assets/tracing-settings-page-BplBpTdL.js +1 -0
  149. package/dist/gateway/static/root/assets/tunnel-api-B5-Ypvqa.js +1 -0
  150. package/dist/gateway/static/root/assets/{understanding-activity-store-CTe6TFB0.js → understanding-activity-store-CmwtE8Kd.js} +1 -1
  151. package/dist/gateway/static/root/assets/{understanding-refresh-store-mE9OKG6q.js → understanding-refresh-store-9apSmAVL.js} +1 -1
  152. package/dist/gateway/static/root/assets/usage-page-cPbirpXX.js +1 -0
  153. package/dist/gateway/static/root/assets/{use-autosave-Cs2Ga_Y_.js → use-autosave-B3p2QWaF.js} +1 -1
  154. package/dist/gateway/static/root/assets/use-composer-attachments-D-AEYC85.js +2 -0
  155. package/dist/gateway/static/root/assets/use-file-preview-expanded-CO4SC-LX.js +2 -0
  156. package/dist/gateway/static/root/assets/{use-personal-profile-BHL2AxWU.js → use-personal-profile-DocmhC9I.js} +1 -1
  157. package/dist/gateway/static/root/assets/{use-workspace-tree-CnmPZrpx.js → use-workspace-tree-VraTGKx-.js} +1 -1
  158. package/dist/gateway/static/root/assets/user-model-page-DuRALzhe.js +2 -0
  159. package/dist/gateway/static/root/assets/{voice-api-key-field-3gyc2UV3.js → voice-api-key-field-DbSQHZZW.js} +1 -1
  160. package/dist/gateway/static/root/assets/{voice-config-api-Cda2uBIC.js → voice-config-api-D9iNJSvm.js} +1 -1
  161. package/dist/gateway/static/root/assets/{voice-input-shortcut-events-DtYHsPLF.js → voice-input-shortcut-events-hso9_VvT.js} +1 -1
  162. package/dist/gateway/static/root/assets/voice-transcribe-api-BqIs0jgv.js +1 -0
  163. package/dist/gateway/static/root/assets/{work-discovery-overlay-Dqu5CQCS.js → work-discovery-overlay-fsL9RJqB.js} +1 -1
  164. package/dist/gateway/static/root/assets/work-discovery-page-DAQPKVDs.js +1 -0
  165. package/dist/gateway/static/root/assets/{working-directory-picker-modal-DHl2cZY1.js → working-directory-picker-modal-Ta73QrNw.js} +1 -1
  166. package/dist/gateway/static/root/assets/{workspace-api-CtDbI6T7.js → workspace-api-CgrcNyBc.js} +2 -2
  167. package/dist/gateway/static/root/assets/workspace-editor-agent-store-Dw6wtadX.js +1 -0
  168. package/dist/gateway/static/root/assets/{workspace-file-preview-dialog-CTIbUfKb.js → workspace-file-preview-dialog-B7uBuPtA.js} +1 -1
  169. package/dist/gateway/static/root/assets/{workspace-open-location-menu-BwxouqdZ.js → workspace-open-location-menu-Bi2vRvaQ.js} +1 -1
  170. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-CFb-23rS.js → xopc-cloud-account-card-CCOOBG-7.js} +1 -1
  171. package/dist/gateway/static/root/index.html +86 -81
  172. package/dist/package.js +1 -1
  173. package/dist/packages/gateway-contract/src/index.js +2 -0
  174. package/dist/packages/gateway-contract/src/task-display.js +14 -0
  175. package/dist/src/agent/agent-manager.js +1 -1
  176. package/dist/src/agent/background-review/run-background-review.js +1 -1
  177. package/dist/src/agent/context/execution-scope.js +10 -5
  178. package/dist/src/agent/external-tools/cliProvider.js +2 -2
  179. package/dist/src/agent/external-tools/composio-provider.js +2 -2
  180. package/dist/src/agent/external-tools/endpoint-provider.js +2 -2
  181. package/dist/src/agent/service.js +1 -1
  182. package/dist/src/agent/skills/index.js +1 -1
  183. package/dist/src/agent/skills/managed-store.js +1 -1
  184. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  185. package/dist/src/agent/tools/automation-tool.d.ts +2 -1
  186. package/dist/src/agent/tools/automation-tool.js +10 -3
  187. package/dist/src/agent/tools/factory.js +1 -0
  188. package/dist/src/agent/tools/personal-read-tool.js +1 -1
  189. package/dist/src/agent/tools/personal-task-tool.js +2 -1
  190. package/dist/src/agent/tools/xopc-use-tool.js +7 -5
  191. package/dist/src/agent-catalog/capabilities.js +2 -2
  192. package/dist/src/agent-catalog/repository.js +1 -1
  193. package/dist/src/automations/api/routes.js +38 -0
  194. package/dist/src/automations/capabilities/drafts.js +1 -1
  195. package/dist/src/automations/capabilities/write.js +25 -9
  196. package/dist/src/automations/configuration-conversation.d.ts +16 -0
  197. package/dist/src/automations/configuration-conversation.js +120 -0
  198. package/dist/src/automations/delivery/delivery-router.d.ts +2 -0
  199. package/dist/src/automations/delivery/delivery-router.js +30 -9
  200. package/dist/src/automations/domain/types.d.ts +1 -0
  201. package/dist/src/automations/index.js +5 -5
  202. package/dist/src/automations/service/action-executor.js +41 -12
  203. package/dist/src/automations/service/automation-service.d.ts +6 -0
  204. package/dist/src/automations/service/automation-service.js +47 -12
  205. package/dist/src/automations/service/index.js +2 -2
  206. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  207. package/dist/src/capabilities/runtime/dispatcher.js +1 -1
  208. package/dist/src/capabilities/runtime/product.js +1 -1
  209. package/dist/src/cli/commands/agents.js +1 -1
  210. package/dist/src/cli/commands/models.js +1 -1
  211. package/dist/src/cli/commands/onboard/model.js +1 -1
  212. package/dist/src/cli/utils/init-workspace-core.js +1 -1
  213. package/dist/src/computer/broker.js +16 -3
  214. package/dist/src/computer/diagnostics.js +1 -1
  215. package/dist/src/computer/errors.js +4 -0
  216. package/dist/src/config/agent-profile.js +1 -1
  217. package/dist/src/execution-environments/local-worktree-manager.js +1 -1
  218. package/dist/src/extensions/agent-plugins/skill-catalog.js +1 -1
  219. package/dist/src/extensions/agent-plugins/validation.js +1 -1
  220. package/dist/src/gateway/agents-admin.js +2 -2
  221. package/dist/src/gateway/automation-completion-delivery.d.ts +4 -0
  222. package/dist/src/gateway/automation-completion-delivery.js +14 -0
  223. package/dist/src/gateway/global-defaults-admin.js +1 -1
  224. package/dist/src/gateway/hono/routes/agents.js +1 -1
  225. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
  226. package/dist/src/gateway/hono/routes/notes.js +2 -2
  227. package/dist/src/gateway/hono/routes/phone-setup.js +1 -1
  228. package/dist/src/gateway/hono/routes/projects.js +2 -2
  229. package/dist/src/gateway/hono/routes/session-input-handler.js +1 -1
  230. package/dist/src/gateway/hono/routes/tasks.js +1 -1
  231. package/dist/src/gateway/image-generation-setup.js +1 -1
  232. package/dist/src/gateway/respawn.js +2 -1
  233. package/dist/src/gateway/service.js +4 -4
  234. package/dist/src/gateway/xopc-cloud-capability-setup.js +1 -1
  235. package/dist/src/imports/importService.js +1 -1
  236. package/dist/src/local-apps/service.js +1 -1
  237. package/dist/src/observability/store.d.ts +9 -0
  238. package/dist/src/observability/store.js +77 -32
  239. package/dist/src/personal-agent/communication.d.ts +1 -1
  240. package/dist/src/personal-agent/communication.js +3 -6
  241. package/dist/src/personal-agent/request-service.js +2 -1
  242. package/dist/src/personal-agent/service.js +1 -1
  243. package/dist/src/runtime-tools/archive.js +1 -1
  244. package/dist/src/tasks/capabilities/read.js +2 -2
  245. package/dist/src/tasks/capabilities/write.js +1 -1
  246. package/dist/src/tasks/task-contract-planner.js +2 -1
  247. package/dist/src/tui/backends/embedded-backend.js +1 -1
  248. package/dist/src/voice/realtime/persona-context.js +1 -1
  249. package/package.json +3 -3
  250. package/dist/gateway/static/root/assets/agent-avatar-display-Cy50vjbq.js +0 -2
  251. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-V4NX_cWz.js +0 -1
  252. package/dist/gateway/static/root/assets/agent-plugin-dialog-CQ5LLDMO.js +0 -1
  253. package/dist/gateway/static/root/assets/app-management-settings-panel-C1Zs-eha.js +0 -1
  254. package/dist/gateway/static/root/assets/appearance-settings-lIfGokbz.js +0 -1
  255. package/dist/gateway/static/root/assets/apps-page-CUvtsRYD.js +0 -1
  256. package/dist/gateway/static/root/assets/automation-api-Bld8blNl.js +0 -1
  257. package/dist/gateway/static/root/assets/automation-display-BcfZOQTC.js +0 -2
  258. package/dist/gateway/static/root/assets/automations-workspace-BgtYY2Mm.js +0 -8
  259. package/dist/gateway/static/root/assets/browser-automations-page-DIUNY94X.js +0 -3
  260. package/dist/gateway/static/root/assets/capabilities-page-DFW4Y0x8.js +0 -2
  261. package/dist/gateway/static/root/assets/capabilities-settings-panel-uOHSMQPZ.js +0 -8
  262. package/dist/gateway/static/root/assets/channels-D2a69dSt.js +0 -1
  263. package/dist/gateway/static/root/assets/chat-page-CG38tCHE.js +0 -71
  264. package/dist/gateway/static/root/assets/composer-payload-handoff-BU3B-C26.js +0 -1
  265. package/dist/gateway/static/root/assets/connected-providers-grid-Dmnu2zle.js +0 -1
  266. package/dist/gateway/static/root/assets/connectors-page-DT_WrC1y.js +0 -1
  267. package/dist/gateway/static/root/assets/desktop-pet-lorocS9j.js +0 -1
  268. package/dist/gateway/static/root/assets/desktop-pet-settings-CEcohlZq.js +0 -1
  269. package/dist/gateway/static/root/assets/device-pairing-wizard-CLCPuf4R.js +0 -1
  270. package/dist/gateway/static/root/assets/discussion-annotation-sync-BKjf9gWe.js +0 -1
  271. package/dist/gateway/static/root/assets/extension-iframe-host-Dhkk5JV2.js +0 -1
  272. package/dist/gateway/static/root/assets/extension-page-Brps2XDP.js +0 -1
  273. package/dist/gateway/static/root/assets/extension-settings-page-CHY68DpG.js +0 -1
  274. package/dist/gateway/static/root/assets/gateway-realtime-store-DQqMBruB.js +0 -1
  275. package/dist/gateway/static/root/assets/gateway-restart-Ch128Lrr.js +0 -1
  276. package/dist/gateway/static/root/assets/home-page-DaMFBYo1.js +0 -2
  277. package/dist/gateway/static/root/assets/image-generation-api-I_JgLL_m.js +0 -1
  278. package/dist/gateway/static/root/assets/index-DY2Y83b9.css +0 -1
  279. package/dist/gateway/static/root/assets/index-UCOlAnf-.js +0 -11
  280. package/dist/gateway/static/root/assets/install-connector-dialog-DU1Tz7B3.js +0 -1
  281. package/dist/gateway/static/root/assets/local-app-workbench-page-qPflPuQD.js +0 -1
  282. package/dist/gateway/static/root/assets/logs-page-CbY1N-zi.js +0 -2
  283. package/dist/gateway/static/root/assets/management-settings-Diy12JfQ.js +0 -1
  284. package/dist/gateway/static/root/assets/messages-DRR9N3HC.js +0 -3
  285. package/dist/gateway/static/root/assets/model-selector-DCYA_ntf.js +0 -1
  286. package/dist/gateway/static/root/assets/navigation-BkjnOw30.js +0 -1
  287. package/dist/gateway/static/root/assets/note-detail-panel-DBs1yHLy.js +0 -5
  288. package/dist/gateway/static/root/assets/note-image-lightbox-CivkB6LB.js +0 -1
  289. package/dist/gateway/static/root/assets/notes-page-DL3c-41a.js +0 -8
  290. package/dist/gateway/static/root/assets/page-header-store-DH8K0xii.js +0 -1
  291. package/dist/gateway/static/root/assets/personal-page-B5DP3lO-.js +0 -1
  292. package/dist/gateway/static/root/assets/personal-settings-panel-DjDc5Kaz.js +0 -1
  293. package/dist/gateway/static/root/assets/phone-model-picker-u8YIQCgo.js +0 -1
  294. package/dist/gateway/static/root/assets/phone-settings-page-el3pT0PD.js +0 -1
  295. package/dist/gateway/static/root/assets/plugin-details-dialog-CTBs1Jde.js +0 -1
  296. package/dist/gateway/static/root/assets/popover-select-DniHw2dy.js +0 -1
  297. package/dist/gateway/static/root/assets/preference-select-fields-D7oluyHN.js +0 -1
  298. package/dist/gateway/static/root/assets/product-automation-feedback-DsUSqCOX.js +0 -7
  299. package/dist/gateway/static/root/assets/project-detail-page-BKvWLiMw.js +0 -7
  300. package/dist/gateway/static/root/assets/project-understanding-BCQr0AZ_.js +0 -1
  301. package/dist/gateway/static/root/assets/projects-page-D4g7bB7X.js +0 -1
  302. package/dist/gateway/static/root/assets/route-preload-B5UiReO7.js +0 -2
  303. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-MKlLFuow.js +0 -1
  304. package/dist/gateway/static/root/assets/schema-form-v4N4lawq.js +0 -1
  305. package/dist/gateway/static/root/assets/service-recommendation-list-B1xuVT3N.js +0 -1
  306. package/dist/gateway/static/root/assets/session-manager-5l9q0cd5.js +0 -16
  307. package/dist/gateway/static/root/assets/sessions-page-DsLw2aMD.js +0 -1
  308. package/dist/gateway/static/root/assets/settings-advanced-gate-B5lQeVNi.js +0 -1
  309. package/dist/gateway/static/root/assets/setup-status-panel-MJE3B_LX.js +0 -1
  310. package/dist/gateway/static/root/assets/share-preview-page-Bsrv_zOQ.js +0 -2
  311. package/dist/gateway/static/root/assets/shares-settings-CfIRv4uX.js +0 -1
  312. package/dist/gateway/static/root/assets/skill-api-B_W1K3sv.js +0 -1
  313. package/dist/gateway/static/root/assets/skills-page-DtBloYeU.js +0 -2
  314. package/dist/gateway/static/root/assets/task-detail-page-Drrv-Hp0.js +0 -2
  315. package/dist/gateway/static/root/assets/task-result-evidence-D1Kyskm_.js +0 -1
  316. package/dist/gateway/static/root/assets/tracing-settings-page-B12u5D9A.js +0 -1
  317. package/dist/gateway/static/root/assets/tunnel-api-DGO56LQU.js +0 -1
  318. package/dist/gateway/static/root/assets/usage-page-Ud2U9UG1.js +0 -1
  319. package/dist/gateway/static/root/assets/use-composer-attachments-BCbMj-MN.js +0 -2
  320. package/dist/gateway/static/root/assets/use-file-preview-expanded-DSpCRXUW.js +0 -2
  321. package/dist/gateway/static/root/assets/user-model-page-p5iPfnwl.js +0 -2
  322. package/dist/gateway/static/root/assets/voice-transcribe-api-TInEfIYo.js +0 -1
  323. package/dist/gateway/static/root/assets/work-discovery-page-p-8ciZ0i.js +0 -1
  324. package/dist/gateway/static/root/assets/workspace-editor-agent-store-B94Q2nN8.js +0 -1
@@ -1 +1 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,t as n}from"./vendor-react-BOUWij0V.js";import{i as r,n as i}from"./dist-CxGUk8J-.js";import{a,d as o,f as s,g as c,h as l,i as u,l as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y}from"./es2015-DBLcMg5B.js";import{a as b,i as x,n as S,r as ee,t as C}from"./dist-DusecO_p.js";var w=e(t(),1),T=n();function E(e){let t=e+`CollectionProvider`,[n,a]=l(t),[o,s]=n(t,{collectionRef:{current:null},itemMap:new Map}),c=e=>{let{scope:t,children:n}=e,r=w.useRef(null),i=w.useRef(new Map).current;return(0,T.jsx)(o,{scope:t,itemMap:i,collectionRef:r,children:n})};c.displayName=t;let u=e+`CollectionSlot`,d=i(u),f=w.forwardRef((e,t)=>{let{scope:n,children:i}=e,a=r(t,s(u,n).collectionRef);return(0,T.jsx)(d,{ref:a,children:i})});f.displayName=u;let p=e+`CollectionItemSlot`,m=`data-radix-collection-item`,h=i(p),g=w.forwardRef((e,t)=>{let{scope:n,children:i,...a}=e,o=w.useRef(null),c=r(t,o),l=s(p,n);return w.useEffect(()=>(l.itemMap.set(o,{ref:o,...a}),()=>void l.itemMap.delete(o))),(0,T.jsx)(h,{[m]:``,ref:c,children:i})});g.displayName=p;function _(t){let n=s(e+`CollectionConsumer`,t);return w.useCallback(()=>{let e=n.collectionRef.current;if(!e)return[];let t=Array.from(e.querySelectorAll(`[${m}]`));return Array.from(n.itemMap.values()).sort((e,n)=>t.indexOf(e.ref.current)-t.indexOf(n.ref.current))},[n.collectionRef,n.itemMap])}return[{Provider:c,Slot:f,ItemSlot:g},_,a]}var D=w.createContext(void 0);function O(e){let t=w.useContext(D);return e||t||`ltr`}var k=!1;function A(){let[e,t]=w.useState(k);return w.useEffect(()=>{k||(k=!0,t(!0))},[]),e}var j=w.useSyncExternalStore;function te(){return()=>{}}function M(){return j(te,()=>!0,()=>!1)}var N=typeof j==`function`?M:A,P=`rovingFocusGroup.onEntryFocus`,F={bubbles:!1,cancelable:!0},I=`RovingFocusGroup`,[L,R,ne]=E(I),[re,z]=l(I,[ne]),[ie,ae]=re(I),oe=w.forwardRef((e,t)=>(0,T.jsx)(L.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,T.jsx)(L.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,T.jsx)(se,{...e,ref:t})})}));oe.displayName=I;var se=w.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,orientation:i,loop:a=!1,dir:o,currentTabStopId:l,defaultCurrentTabStopId:u,onCurrentTabStopIdChange:f,onEntryFocus:p,preventScrollOnEntryFocus:m=!1,...h}=e,g=w.useRef(null),_=r(t,g),v=O(o),[b,x]=s({prop:l,defaultProp:u??null,onChange:f,caller:I}),[S,ee]=w.useState(!1),C=d(p),E=R(n),D=w.useRef(!1),[k,A]=w.useState(0);return w.useEffect(()=>{let e=g.current;if(e)return e.addEventListener(P,C),()=>e.removeEventListener(P,C)},[C]),(0,T.jsx)(ie,{scope:n,orientation:i,dir:v,loop:a,currentTabStopId:b,onItemFocus:w.useCallback(e=>x(e),[x]),onItemShiftTab:w.useCallback(()=>ee(!0),[]),onFocusableItemAdd:w.useCallback(()=>A(e=>e+1),[]),onFocusableItemRemove:w.useCallback(()=>A(e=>e-1),[]),children:(0,T.jsx)(y.div,{tabIndex:S||k===0?-1:0,"data-orientation":i,...h,ref:_,style:{outline:`none`,...e.style},onMouseDown:c(e.onMouseDown,()=>{D.current=!0}),onFocus:c(e.onFocus,e=>{let t=!D.current;if(e.target===e.currentTarget&&t&&!S){let t=new CustomEvent(P,F);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=E().filter(e=>e.focusable);pe([e.find(e=>e.active),e.find(e=>e.id===b),...e].filter(Boolean).map(e=>e.ref.current),m)}}D.current=!1}),onBlur:c(e.onBlur,()=>ee(!1))})})}),ce=`RovingFocusGroupItem`,le=w.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,focusable:r=!0,active:i=!1,tabStopId:a,children:o,...s}=e,l=h(),u=a||l,d=ae(ce,n),p=d.currentTabStopId===u,m=R(n),{onFocusableItemAdd:g,onFocusableItemRemove:_,currentTabStopId:v}=d,b=N();return f(()=>{if(!(!b||!r))return g(),()=>_()},[b,r,g,_]),w.useEffect(()=>{if(!(b||!r))return g(),()=>_()},[b,r,g,_]),(0,T.jsx)(L.ItemSlot,{scope:n,id:u,focusable:r,active:i,children:(0,T.jsx)(y.span,{tabIndex:p?0:-1,"data-orientation":d.orientation,...s,ref:t,onMouseDown:c(e.onMouseDown,e=>{r?d.onItemFocus(u):e.preventDefault()}),onFocus:c(e.onFocus,()=>d.onItemFocus(u)),onKeyDown:c(e.onKeyDown,e=>{if(e.key===`Tab`&&e.shiftKey){d.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let t=fe(e,d.orientation,d.dir);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=m().filter(e=>e.focusable).map(e=>e.ref.current);if(t===`last`)n.reverse();else if(t===`prev`||t===`next`){t===`prev`&&n.reverse();let r=n.indexOf(e.currentTarget);n=d.loop?me(n,r+1):n.slice(r+1)}setTimeout(()=>pe(n))}}),children:typeof o==`function`?o({isCurrentTabStop:p,hasTabStop:v!=null}):o})})});le.displayName=ce;var ue={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function de(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function fe(e,t,n){let r=de(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return ue[r]}function pe(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function me(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var he=oe,ge=le,_e=[`Enter`,` `],ve=[`ArrowDown`,`PageUp`,`Home`],ye=[`ArrowUp`,`PageDown`,`End`],be=[...ve,...ye],xe={ltr:[..._e,`ArrowRight`],rtl:[..._e,`ArrowLeft`]},Se={ltr:[`ArrowLeft`],rtl:[`ArrowRight`]},B=`Menu`,[V,Ce,we]=E(B),[H,Te]=l(B,[we,b,z]),U=b(),Ee=z(),[De,W]=H(B),[Oe,G]=H(B),ke=e=>{let{__scopeMenu:t,open:n=!1,children:r,dir:i,onOpenChange:a,modal:o=!0}=e,s=U(t),[c,l]=w.useState(null),u=w.useRef(!1),f=d(a),p=O(i);return w.useEffect(()=>{let e=()=>{u.current=!0,document.addEventListener(`pointerdown`,t,{capture:!0,once:!0}),document.addEventListener(`pointermove`,t,{capture:!0,once:!0})},t=()=>u.current=!1;return document.addEventListener(`keydown`,e,{capture:!0}),()=>{document.removeEventListener(`keydown`,e,{capture:!0}),document.removeEventListener(`pointerdown`,t,{capture:!0}),document.removeEventListener(`pointermove`,t,{capture:!0})}},[]),w.useEffect(()=>{if(!n)return;let e=()=>f(!1);return window.addEventListener(`blur`,e),()=>window.removeEventListener(`blur`,e)},[n,f]),(0,T.jsx)(x,{...s,children:(0,T.jsx)(De,{scope:t,open:n,onOpenChange:f,content:c,onContentChange:l,children:(0,T.jsx)(Oe,{scope:t,onClose:w.useCallback(()=>f(!1),[f]),isUsingKeyboardRef:u,dir:p,modal:o,children:r})})})};ke.displayName=B;var Ae=`MenuAnchor`,je=w.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=U(n);return(0,T.jsx)(C,{...i,...r,ref:t})});je.displayName=Ae;var Me=`MenuPortal`,[Ne,Pe]=H(Me,{forceMount:void 0}),Fe=e=>{let{__scopeMenu:t,forceMount:n,children:r,container:i}=e,o=W(Me,t);return(0,T.jsx)(Ne,{scope:t,forceMount:n,children:(0,T.jsx)(u,{present:n||o.open,children:(0,T.jsx)(a,{asChild:!0,container:i,children:r})})})};Fe.displayName=Me;var K=`MenuContent`,[Ie,Le]=H(K),Re=w.forwardRef((e,t)=>{let n=Pe(K,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=W(K,e.__scopeMenu),o=G(K,e.__scopeMenu);return(0,T.jsx)(V.Provider,{scope:e.__scopeMenu,children:(0,T.jsx)(u,{present:r||a.open,children:(0,T.jsx)(V.Slot,{scope:e.__scopeMenu,children:o.modal?(0,T.jsx)(ze,{...i,ref:t}):(0,T.jsx)(Be,{...i,ref:t})})})})}),ze=w.forwardRef((e,t)=>{let n=W(K,e.__scopeMenu),i=w.useRef(null),a=r(t,i);return w.useEffect(()=>{let e=i.current;if(e)return v(e)},[]),(0,T.jsx)(He,{...e,ref:a,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:c(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})}),Be=w.forwardRef((e,t)=>{let n=W(K,e.__scopeMenu);return(0,T.jsx)(He,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})}),Ve=i(`MenuContent.ScrollLock`),He=w.forwardRef((e,t)=>{let{__scopeMenu:n,loop:i=!1,trapFocus:a,onOpenAutoFocus:o,onCloseAutoFocus:s,disableOutsidePointerEvents:l,onEntryFocus:u,onEscapeKeyDown:d,onPointerDownOutside:f,onFocusOutside:h,onInteractOutside:v,onDismiss:y,disableOutsideScroll:b,...x}=e,S=W(K,n),C=G(K,n),E=U(n),D=Ee(n),O=Ce(n),[k,A]=w.useState(null),j=w.useRef(null),te=r(t,j,S.onContentChange),M=w.useRef(0),N=w.useRef(``),P=w.useRef(0),F=w.useRef(null),I=w.useRef(`right`),L=w.useRef(0),R=b?p:w.Fragment,ne=b?{as:Ve,allowPinchZoom:!0}:void 0,re=e=>{let t=N.current+e,n=O().filter(e=>!e.disabled),r=document.activeElement,i=n.find(e=>e.ref.current===r)?.textValue,a=St(n.map(e=>e.textValue),t,i),o=n.find(e=>e.textValue===a)?.ref.current;(function e(t){N.current=t,window.clearTimeout(M.current),t!==``&&(M.current=window.setTimeout(()=>e(``),1e3))})(t),o&&setTimeout(()=>o.focus())};w.useEffect(()=>()=>window.clearTimeout(M.current),[]),g();let z=w.useCallback(e=>I.current===F.current?.side&&wt(e,F.current?.area),[]);return(0,T.jsx)(Ie,{scope:n,searchRef:N,onItemEnter:w.useCallback(e=>{z(e)&&e.preventDefault()},[z]),onItemLeave:w.useCallback(e=>{z(e)||(j.current?.focus(),A(null))},[z]),onTriggerLeave:w.useCallback(e=>{z(e)&&e.preventDefault()},[z]),pointerGraceTimerRef:P,onPointerGraceIntentChange:w.useCallback(e=>{F.current=e},[]),children:(0,T.jsx)(R,{...ne,children:(0,T.jsx)(m,{asChild:!0,trapped:a,onMountAutoFocus:c(o,e=>{e.preventDefault(),j.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:s,children:(0,T.jsx)(_,{asChild:!0,disableOutsidePointerEvents:l,onEscapeKeyDown:d,onPointerDownOutside:f,onFocusOutside:h,onInteractOutside:v,onDismiss:y,children:(0,T.jsx)(he,{asChild:!0,...D,dir:C.dir,orientation:`vertical`,loop:i,currentTabStopId:k,onCurrentTabStopIdChange:A,onEntryFocus:c(u,e=>{C.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,T.jsx)(ee,{role:`menu`,"aria-orientation":`vertical`,"data-state":vt(S.open),"data-radix-menu-content":``,dir:C.dir,...E,...x,ref:te,style:{outline:`none`,...x.style},onKeyDown:c(x.onKeyDown,e=>{let t=e.target.closest(`[data-radix-menu-content]`)===e.currentTarget,n=e.ctrlKey||e.altKey||e.metaKey,r=e.key.length===1;t&&(e.key===`Tab`&&e.preventDefault(),!n&&r&&re(e.key));let i=j.current;if(e.target!==i||!be.includes(e.key))return;e.preventDefault();let a=O().filter(e=>!e.disabled).map(e=>e.ref.current);ye.includes(e.key)&&a.reverse(),bt(a)}),onBlur:c(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(M.current),N.current=``)}),onPointerMove:c(e.onPointerMove,Z(e=>{let t=e.target,n=L.current!==e.clientX;if(e.currentTarget.contains(t)&&n){let t=e.clientX>L.current?`right`:`left`;I.current=t,L.current=e.clientX}}))})})})})})})});Re.displayName=K;var Ue=`MenuGroup`,We=w.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,T.jsx)(y.div,{role:`group`,...r,ref:t})});We.displayName=Ue;var Ge=`MenuLabel`,Ke=w.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,T.jsx)(y.div,{...r,ref:t})});Ke.displayName=Ge;var q=`MenuItem`,qe=`menu.itemSelect`,J=w.forwardRef((e,t)=>{let{disabled:n=!1,onSelect:i,...a}=e,s=w.useRef(null),l=G(q,e.__scopeMenu),u=Le(q,e.__scopeMenu),d=r(t,s),f=w.useRef(!1),p=()=>{let e=s.current;if(!n&&e){let t=new CustomEvent(qe,{bubbles:!0,cancelable:!0});e.addEventListener(qe,e=>i?.(e),{once:!0}),o(e,t),t.defaultPrevented?f.current=!1:l.onClose()}};return(0,T.jsx)(Je,{...a,ref:d,disabled:n,onClick:c(e.onClick,p),onPointerDown:t=>{e.onPointerDown?.(t),f.current=!0},onPointerUp:c(e.onPointerUp,e=>{f.current||e.currentTarget?.click()}),onKeyDown:c(e.onKeyDown,e=>{n||e.target!==e.currentTarget||u.searchRef.current!==``&&e.key===` `||_e.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})});J.displayName=q;var Je=w.forwardRef((e,t)=>{let{__scopeMenu:n,disabled:i=!1,textValue:a,...o}=e,s=Le(q,n),l=Ee(n),u=w.useRef(null),d=r(t,u),[f,p]=w.useState(!1),[m,h]=w.useState(``);return w.useEffect(()=>{let e=u.current;e&&h((e.textContent??``).trim())},[o.children]),(0,T.jsx)(V.ItemSlot,{scope:n,disabled:i,textValue:a??m,children:(0,T.jsx)(ge,{asChild:!0,...l,focusable:!i,children:(0,T.jsx)(y.div,{role:`menuitem`,"data-highlighted":f?``:void 0,"aria-disabled":i||void 0,"data-disabled":i?``:void 0,...o,ref:d,onPointerMove:c(e.onPointerMove,Z(e=>{i?s.onItemLeave(e):(s.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:c(e.onPointerLeave,Z(e=>s.onItemLeave(e))),onFocus:c(e.onFocus,()=>p(!0)),onBlur:c(e.onBlur,()=>p(!1))})})})}),Ye=`MenuCheckboxItem`,Xe=w.forwardRef((e,t)=>{let{checked:n=!1,onCheckedChange:r,...i}=e;return(0,T.jsx)(it,{scope:e.__scopeMenu,checked:n,children:(0,T.jsx)(J,{role:`menuitemcheckbox`,"aria-checked":X(n)?`mixed`:n,...i,ref:t,"data-state":yt(n),onSelect:c(i.onSelect,()=>r?.(X(n)?!0:!n),{checkForDefaultPrevented:!1})})})});Xe.displayName=Ye;var Ze=`MenuRadioGroup`,[Qe,$e]=H(Ze,{value:void 0,onValueChange:()=>{}}),et=w.forwardRef((e,t)=>{let{value:n,onValueChange:r,...i}=e,a=d(r);return(0,T.jsx)(Qe,{scope:e.__scopeMenu,value:n,onValueChange:a,children:(0,T.jsx)(We,{...i,ref:t})})});et.displayName=Ze;var tt=`MenuRadioItem`,nt=w.forwardRef((e,t)=>{let{value:n,...r}=e,i=$e(tt,e.__scopeMenu),a=n===i.value;return(0,T.jsx)(it,{scope:e.__scopeMenu,checked:a,children:(0,T.jsx)(J,{role:`menuitemradio`,"aria-checked":a,...r,ref:t,"data-state":yt(a),onSelect:c(r.onSelect,()=>i.onValueChange?.(n),{checkForDefaultPrevented:!1})})})});nt.displayName=tt;var rt=`MenuItemIndicator`,[it,at]=H(rt,{checked:!1}),ot=w.forwardRef((e,t)=>{let{__scopeMenu:n,forceMount:r,...i}=e,a=at(rt,n);return(0,T.jsx)(u,{present:r||X(a.checked)||a.checked===!0,children:(0,T.jsx)(y.span,{...i,ref:t,"data-state":yt(a.checked)})})});ot.displayName=rt;var st=`MenuSeparator`,ct=w.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,T.jsx)(y.div,{role:`separator`,"aria-orientation":`horizontal`,...r,ref:t})});ct.displayName=st;var lt=`MenuArrow`,ut=w.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=U(n);return(0,T.jsx)(S,{...i,...r,ref:t})});ut.displayName=lt;var dt=`MenuSub`,[ft,pt]=H(dt),mt=e=>{let{__scopeMenu:t,children:n,open:r=!1,onOpenChange:i}=e,a=W(dt,t),o=U(t),[s,c]=w.useState(null),[l,u]=w.useState(null),f=d(i);return w.useEffect(()=>(a.open===!1&&f(!1),()=>f(!1)),[a.open,f]),(0,T.jsx)(x,{...o,children:(0,T.jsx)(De,{scope:t,open:r,onOpenChange:f,content:l,onContentChange:u,children:(0,T.jsx)(ft,{scope:t,contentId:h(),triggerId:h(),trigger:s,onTriggerChange:c,children:n})})})};mt.displayName=dt;var Y=`MenuSubTrigger`,ht=w.forwardRef((e,t)=>{let n=W(Y,e.__scopeMenu),i=G(Y,e.__scopeMenu),a=pt(Y,e.__scopeMenu),o=Le(Y,e.__scopeMenu),s=w.useRef(null),{pointerGraceTimerRef:l,onPointerGraceIntentChange:u}=o,d={__scopeMenu:e.__scopeMenu},f=w.useCallback(()=>{s.current&&window.clearTimeout(s.current),s.current=null},[]);w.useEffect(()=>f,[f]),w.useEffect(()=>{let e=l.current;return()=>{window.clearTimeout(e),u(null)}},[l,u]);let p=r(t,a.onTriggerChange);return(0,T.jsx)(je,{asChild:!0,...d,children:(0,T.jsx)(Je,{id:a.triggerId,"aria-haspopup":`menu`,"aria-expanded":n.open,"aria-controls":n.open?a.contentId:void 0,"data-state":vt(n.open),...e,ref:p,onClick:t=>{e.onClick?.(t),!(e.disabled||t.defaultPrevented)&&(t.currentTarget.focus(),n.open||n.onOpenChange(!0))},onPointerMove:c(e.onPointerMove,Z(t=>{o.onItemEnter(t),!t.defaultPrevented&&!e.disabled&&!n.open&&!s.current&&(o.onPointerGraceIntentChange(null),s.current=window.setTimeout(()=>{n.onOpenChange(!0),f()},100))})),onPointerLeave:c(e.onPointerLeave,Z(e=>{f();let t=n.content?.getBoundingClientRect();if(t){let r=n.content?.dataset.side,i=r===`right`,a=i?-5:5,s=t[i?`left`:`right`],c=t[i?`right`:`left`];o.onPointerGraceIntentChange({area:[{x:e.clientX+a,y:e.clientY},{x:s,y:t.top},{x:c,y:t.top},{x:c,y:t.bottom},{x:s,y:t.bottom}],side:r}),window.clearTimeout(l.current),l.current=window.setTimeout(()=>o.onPointerGraceIntentChange(null),300)}else{if(o.onTriggerLeave(e),e.defaultPrevented)return;o.onPointerGraceIntentChange(null)}})),onKeyDown:c(e.onKeyDown,t=>{e.disabled||t.target!==t.currentTarget||o.searchRef.current!==``&&t.key===` `||xe[i.dir].includes(t.key)&&(n.onOpenChange(!0),n.content?.focus(),t.preventDefault())})})})});ht.displayName=Y;var gt=`MenuSubContent`,_t=w.forwardRef((e,t)=>{let n=Pe(K,e.__scopeMenu),{forceMount:i=n.forceMount,align:a=`start`,...o}=e,s=W(K,e.__scopeMenu),l=G(K,e.__scopeMenu),d=pt(gt,e.__scopeMenu),f=w.useRef(null),p=r(t,f);return(0,T.jsx)(V.Provider,{scope:e.__scopeMenu,children:(0,T.jsx)(u,{present:i||s.open,children:(0,T.jsx)(V.Slot,{scope:e.__scopeMenu,children:(0,T.jsx)(He,{id:d.contentId,"aria-labelledby":d.triggerId,...o,ref:p,align:a,side:l.dir===`rtl`?`left`:`right`,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:e=>{l.isUsingKeyboardRef.current&&f.current?.focus(),e.preventDefault()},onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:c(e.onFocusOutside,e=>{e.target!==d.trigger&&s.onOpenChange(!1)}),onEscapeKeyDown:c(e.onEscapeKeyDown,e=>{l.onClose(),e.preventDefault()}),onKeyDown:c(e.onKeyDown,e=>{let t=e.currentTarget.contains(e.target),n=Se[l.dir].includes(e.key);t&&n&&(s.onOpenChange(!1),d.trigger?.focus(),e.preventDefault())})})})})})});_t.displayName=gt;function vt(e){return e?`open`:`closed`}function X(e){return e===`indeterminate`}function yt(e){return X(e)?`indeterminate`:e?`checked`:`unchecked`}function bt(e){let t=document.activeElement;for(let n of e)if(n===t||(n.focus(),document.activeElement!==t))return}function xt(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function St(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=xt(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}function Ct(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function wt(e,t){return t?Ct({x:e.clientX,y:e.clientY},t):!1}function Z(e){return t=>t.pointerType===`mouse`?e(t):void 0}var Tt=ke,Et=je,Dt=Fe,Ot=Re,kt=We,At=Ke,jt=J,Mt=Xe,Nt=et,Pt=nt,Ft=ot,It=ct,Lt=ut,Rt=ht,zt=_t,Q=`DropdownMenu`,[Bt,Vt]=l(Q,[Te]),$=Te(),[Ht,Ut]=Bt(Q),Wt=e=>{let{__scopeDropdownMenu:t,children:n,dir:r,open:i,defaultOpen:a,onOpenChange:o,modal:c=!0}=e,l=$(t),u=w.useRef(null),[d,f]=s({prop:i,defaultProp:a??!1,onChange:o,caller:Q});return(0,T.jsx)(Ht,{scope:t,triggerId:h(),triggerRef:u,contentId:h(),open:d,onOpenChange:f,onOpenToggle:w.useCallback(()=>f(e=>!e),[f]),modal:c,children:(0,T.jsx)(Tt,{...l,open:d,onOpenChange:f,dir:r,modal:c,children:n})})};Wt.displayName=Q;var Gt=`DropdownMenuTrigger`,Kt=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,disabled:i=!1,...a}=e,o=Ut(Gt,n),s=$(n),l=r(t,o.triggerRef);return(0,T.jsx)(Et,{asChild:!0,...s,children:(0,T.jsx)(y.button,{type:`button`,id:o.triggerId,"aria-haspopup":`menu`,"aria-expanded":o.open,"aria-controls":o.open?o.contentId:void 0,"data-state":o.open?`open`:`closed`,"data-disabled":i?``:void 0,disabled:i,...a,ref:l,onPointerDown:c(e.onPointerDown,e=>{!i&&e.button===0&&e.ctrlKey===!1&&(o.onOpenToggle(),o.open||e.preventDefault())}),onKeyDown:c(e.onKeyDown,e=>{i||([`Enter`,` `].includes(e.key)&&o.onOpenToggle(),e.key===`ArrowDown`&&o.onOpenChange(!0),[`Enter`,` `,`ArrowDown`].includes(e.key)&&e.preventDefault())})})})});Kt.displayName=Gt;var qt=`DropdownMenuPortal`,Jt=e=>{let{__scopeDropdownMenu:t,...n}=e,r=$(t);return(0,T.jsx)(Dt,{...r,...n})};Jt.displayName=qt;var Yt=`DropdownMenuContent`,Xt=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Ut(Yt,n),a=$(n),o=w.useRef(!1);return(0,T.jsx)(Ot,{id:i.contentId,"aria-labelledby":i.triggerId,...a,...r,ref:t,onCloseAutoFocus:c(e.onCloseAutoFocus,e=>{o.current||i.triggerRef.current?.focus(),o.current=!1,e.preventDefault()}),onInteractOutside:c(e.onInteractOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0,r=t.button===2||n;(!i.modal||r)&&(o.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});Xt.displayName=Yt;var Zt=`DropdownMenuGroup`,Qt=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(kt,{...i,...r,ref:t})});Qt.displayName=Zt;var $t=`DropdownMenuLabel`,en=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(At,{...i,...r,ref:t})});en.displayName=$t;var tn=`DropdownMenuItem`,nn=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(jt,{...i,...r,ref:t})});nn.displayName=tn;var rn=`DropdownMenuCheckboxItem`,an=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(Mt,{...i,...r,ref:t})});an.displayName=rn;var on=`DropdownMenuRadioGroup`,sn=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(Nt,{...i,...r,ref:t})});sn.displayName=on;var cn=`DropdownMenuRadioItem`,ln=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(Pt,{...i,...r,ref:t})});ln.displayName=cn;var un=`DropdownMenuItemIndicator`,dn=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(Ft,{...i,...r,ref:t})});dn.displayName=un;var fn=`DropdownMenuSeparator`,pn=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(It,{...i,...r,ref:t})});pn.displayName=fn;var mn=`DropdownMenuArrow`,hn=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(Lt,{...i,...r,ref:t})});hn.displayName=mn;var gn=`DropdownMenuSubTrigger`,_n=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(Rt,{...i,...r,ref:t})});_n.displayName=gn;var vn=`DropdownMenuSubContent`,yn=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(zt,{...i,...r,ref:t,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});yn.displayName=vn;var bn=Wt,xn=Kt,Sn=Jt,Cn=Xt,wn=Qt,Tn=en,En=nn,Dn=pn;export{Sn as a,xn as c,Tn as i,wn as n,bn as o,En as r,Dn as s,Cn as t};
1
+ import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,t as n}from"./vendor-react-BOUWij0V.js";import{i as r,n as i}from"./dist-CxGUk8J-.js";import{a,d as o,f as s,g as c,h as l,i as u,l as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y}from"./es2015-DBLcMg5B.js";import{a as b,i as x,n as S,r as ee,t as C}from"./dist-DusecO_p.js";var w=e(t(),1),T=n();function E(e){let t=e+`CollectionProvider`,[n,a]=l(t),[o,s]=n(t,{collectionRef:{current:null},itemMap:new Map}),c=e=>{let{scope:t,children:n}=e,r=w.useRef(null),i=w.useRef(new Map).current;return(0,T.jsx)(o,{scope:t,itemMap:i,collectionRef:r,children:n})};c.displayName=t;let u=e+`CollectionSlot`,d=i(u),f=w.forwardRef((e,t)=>{let{scope:n,children:i}=e,a=r(t,s(u,n).collectionRef);return(0,T.jsx)(d,{ref:a,children:i})});f.displayName=u;let p=e+`CollectionItemSlot`,m=`data-radix-collection-item`,h=i(p),g=w.forwardRef((e,t)=>{let{scope:n,children:i,...a}=e,o=w.useRef(null),c=r(t,o),l=s(p,n);return w.useEffect(()=>(l.itemMap.set(o,{ref:o,...a}),()=>void l.itemMap.delete(o))),(0,T.jsx)(h,{[m]:``,ref:c,children:i})});g.displayName=p;function _(t){let n=s(e+`CollectionConsumer`,t);return w.useCallback(()=>{let e=n.collectionRef.current;if(!e)return[];let t=Array.from(e.querySelectorAll(`[${m}]`));return Array.from(n.itemMap.values()).sort((e,n)=>t.indexOf(e.ref.current)-t.indexOf(n.ref.current))},[n.collectionRef,n.itemMap])}return[{Provider:c,Slot:f,ItemSlot:g},_,a]}var D=w.createContext(void 0);function O(e){let t=w.useContext(D);return e||t||`ltr`}var k=!1;function A(){let[e,t]=w.useState(k);return w.useEffect(()=>{k||(k=!0,t(!0))},[]),e}var j=w.useSyncExternalStore;function te(){return()=>{}}function M(){return j(te,()=>!0,()=>!1)}var N=typeof j==`function`?M:A,P=`rovingFocusGroup.onEntryFocus`,F={bubbles:!1,cancelable:!0},I=`RovingFocusGroup`,[L,R,ne]=E(I),[re,z]=l(I,[ne]),[ie,ae]=re(I),oe=w.forwardRef((e,t)=>(0,T.jsx)(L.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,T.jsx)(L.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,T.jsx)(se,{...e,ref:t})})}));oe.displayName=I;var se=w.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,orientation:i,loop:a=!1,dir:o,currentTabStopId:l,defaultCurrentTabStopId:u,onCurrentTabStopIdChange:f,onEntryFocus:p,preventScrollOnEntryFocus:m=!1,...h}=e,g=w.useRef(null),_=r(t,g),v=O(o),[b,x]=s({prop:l,defaultProp:u??null,onChange:f,caller:I}),[S,ee]=w.useState(!1),C=d(p),E=R(n),D=w.useRef(!1),[k,A]=w.useState(0);return w.useEffect(()=>{let e=g.current;if(e)return e.addEventListener(P,C),()=>e.removeEventListener(P,C)},[C]),(0,T.jsx)(ie,{scope:n,orientation:i,dir:v,loop:a,currentTabStopId:b,onItemFocus:w.useCallback(e=>x(e),[x]),onItemShiftTab:w.useCallback(()=>ee(!0),[]),onFocusableItemAdd:w.useCallback(()=>A(e=>e+1),[]),onFocusableItemRemove:w.useCallback(()=>A(e=>e-1),[]),children:(0,T.jsx)(y.div,{tabIndex:S||k===0?-1:0,"data-orientation":i,...h,ref:_,style:{outline:`none`,...e.style},onMouseDown:c(e.onMouseDown,()=>{D.current=!0}),onFocus:c(e.onFocus,e=>{let t=!D.current;if(e.target===e.currentTarget&&t&&!S){let t=new CustomEvent(P,F);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=E().filter(e=>e.focusable);pe([e.find(e=>e.active),e.find(e=>e.id===b),...e].filter(Boolean).map(e=>e.ref.current),m)}}D.current=!1}),onBlur:c(e.onBlur,()=>ee(!1))})})}),ce=`RovingFocusGroupItem`,le=w.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,focusable:r=!0,active:i=!1,tabStopId:a,children:o,...s}=e,l=h(),u=a||l,d=ae(ce,n),p=d.currentTabStopId===u,m=R(n),{onFocusableItemAdd:g,onFocusableItemRemove:_,currentTabStopId:v}=d,b=N();return f(()=>{if(!(!b||!r))return g(),()=>_()},[b,r,g,_]),w.useEffect(()=>{if(!(b||!r))return g(),()=>_()},[b,r,g,_]),(0,T.jsx)(L.ItemSlot,{scope:n,id:u,focusable:r,active:i,children:(0,T.jsx)(y.span,{tabIndex:p?0:-1,"data-orientation":d.orientation,...s,ref:t,onMouseDown:c(e.onMouseDown,e=>{r?d.onItemFocus(u):e.preventDefault()}),onFocus:c(e.onFocus,()=>d.onItemFocus(u)),onKeyDown:c(e.onKeyDown,e=>{if(e.key===`Tab`&&e.shiftKey){d.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let t=fe(e,d.orientation,d.dir);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=m().filter(e=>e.focusable).map(e=>e.ref.current);if(t===`last`)n.reverse();else if(t===`prev`||t===`next`){t===`prev`&&n.reverse();let r=n.indexOf(e.currentTarget);n=d.loop?me(n,r+1):n.slice(r+1)}setTimeout(()=>pe(n))}}),children:typeof o==`function`?o({isCurrentTabStop:p,hasTabStop:v!=null}):o})})});le.displayName=ce;var ue={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function de(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function fe(e,t,n){let r=de(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return ue[r]}function pe(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function me(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var he=oe,ge=le,_e=[`Enter`,` `],ve=[`ArrowDown`,`PageUp`,`Home`],ye=[`ArrowUp`,`PageDown`,`End`],be=[...ve,...ye],xe={ltr:[..._e,`ArrowRight`],rtl:[..._e,`ArrowLeft`]},Se={ltr:[`ArrowLeft`],rtl:[`ArrowRight`]},B=`Menu`,[V,Ce,we]=E(B),[H,Te]=l(B,[we,b,z]),U=b(),Ee=z(),[De,W]=H(B),[Oe,G]=H(B),ke=e=>{let{__scopeMenu:t,open:n=!1,children:r,dir:i,onOpenChange:a,modal:o=!0}=e,s=U(t),[c,l]=w.useState(null),u=w.useRef(!1),f=d(a),p=O(i);return w.useEffect(()=>{let e=()=>{u.current=!0,document.addEventListener(`pointerdown`,t,{capture:!0,once:!0}),document.addEventListener(`pointermove`,t,{capture:!0,once:!0})},t=()=>u.current=!1;return document.addEventListener(`keydown`,e,{capture:!0}),()=>{document.removeEventListener(`keydown`,e,{capture:!0}),document.removeEventListener(`pointerdown`,t,{capture:!0}),document.removeEventListener(`pointermove`,t,{capture:!0})}},[]),w.useEffect(()=>{if(!n)return;let e=()=>f(!1);return window.addEventListener(`blur`,e),()=>window.removeEventListener(`blur`,e)},[n,f]),(0,T.jsx)(x,{...s,children:(0,T.jsx)(De,{scope:t,open:n,onOpenChange:f,content:c,onContentChange:l,children:(0,T.jsx)(Oe,{scope:t,onClose:w.useCallback(()=>f(!1),[f]),isUsingKeyboardRef:u,dir:p,modal:o,children:r})})})};ke.displayName=B;var Ae=`MenuAnchor`,je=w.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=U(n);return(0,T.jsx)(C,{...i,...r,ref:t})});je.displayName=Ae;var Me=`MenuPortal`,[Ne,Pe]=H(Me,{forceMount:void 0}),Fe=e=>{let{__scopeMenu:t,forceMount:n,children:r,container:i}=e,o=W(Me,t);return(0,T.jsx)(Ne,{scope:t,forceMount:n,children:(0,T.jsx)(u,{present:n||o.open,children:(0,T.jsx)(a,{asChild:!0,container:i,children:r})})})};Fe.displayName=Me;var K=`MenuContent`,[Ie,Le]=H(K),Re=w.forwardRef((e,t)=>{let n=Pe(K,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=W(K,e.__scopeMenu),o=G(K,e.__scopeMenu);return(0,T.jsx)(V.Provider,{scope:e.__scopeMenu,children:(0,T.jsx)(u,{present:r||a.open,children:(0,T.jsx)(V.Slot,{scope:e.__scopeMenu,children:o.modal?(0,T.jsx)(ze,{...i,ref:t}):(0,T.jsx)(Be,{...i,ref:t})})})})}),ze=w.forwardRef((e,t)=>{let n=W(K,e.__scopeMenu),i=w.useRef(null),a=r(t,i);return w.useEffect(()=>{let e=i.current;if(e)return v(e)},[]),(0,T.jsx)(He,{...e,ref:a,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:c(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})}),Be=w.forwardRef((e,t)=>{let n=W(K,e.__scopeMenu);return(0,T.jsx)(He,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})}),Ve=i(`MenuContent.ScrollLock`),He=w.forwardRef((e,t)=>{let{__scopeMenu:n,loop:i=!1,trapFocus:a,onOpenAutoFocus:o,onCloseAutoFocus:s,disableOutsidePointerEvents:l,onEntryFocus:u,onEscapeKeyDown:d,onPointerDownOutside:f,onFocusOutside:h,onInteractOutside:v,onDismiss:y,disableOutsideScroll:b,...x}=e,S=W(K,n),C=G(K,n),E=U(n),D=Ee(n),O=Ce(n),[k,A]=w.useState(null),j=w.useRef(null),te=r(t,j,S.onContentChange),M=w.useRef(0),N=w.useRef(``),P=w.useRef(0),F=w.useRef(null),I=w.useRef(`right`),L=w.useRef(0),R=b?p:w.Fragment,ne=b?{as:Ve,allowPinchZoom:!0}:void 0,re=e=>{let t=N.current+e,n=O().filter(e=>!e.disabled),r=document.activeElement,i=n.find(e=>e.ref.current===r)?.textValue,a=St(n.map(e=>e.textValue),t,i),o=n.find(e=>e.textValue===a)?.ref.current;(function e(t){N.current=t,window.clearTimeout(M.current),t!==``&&(M.current=window.setTimeout(()=>e(``),1e3))})(t),o&&setTimeout(()=>o.focus())};w.useEffect(()=>()=>window.clearTimeout(M.current),[]),g();let z=w.useCallback(e=>I.current===F.current?.side&&wt(e,F.current?.area),[]);return(0,T.jsx)(Ie,{scope:n,searchRef:N,onItemEnter:w.useCallback(e=>{z(e)&&e.preventDefault()},[z]),onItemLeave:w.useCallback(e=>{z(e)||(j.current?.focus(),A(null))},[z]),onTriggerLeave:w.useCallback(e=>{z(e)&&e.preventDefault()},[z]),pointerGraceTimerRef:P,onPointerGraceIntentChange:w.useCallback(e=>{F.current=e},[]),children:(0,T.jsx)(R,{...ne,children:(0,T.jsx)(m,{asChild:!0,trapped:a,onMountAutoFocus:c(o,e=>{e.preventDefault(),j.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:s,children:(0,T.jsx)(_,{asChild:!0,disableOutsidePointerEvents:l,onEscapeKeyDown:d,onPointerDownOutside:f,onFocusOutside:h,onInteractOutside:v,onDismiss:y,children:(0,T.jsx)(he,{asChild:!0,...D,dir:C.dir,orientation:`vertical`,loop:i,currentTabStopId:k,onCurrentTabStopIdChange:A,onEntryFocus:c(u,e=>{C.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,T.jsx)(ee,{role:`menu`,"aria-orientation":`vertical`,"data-state":vt(S.open),"data-radix-menu-content":``,dir:C.dir,...E,...x,ref:te,style:{outline:`none`,...x.style},onKeyDown:c(x.onKeyDown,e=>{let t=e.target.closest(`[data-radix-menu-content]`)===e.currentTarget,n=e.ctrlKey||e.altKey||e.metaKey,r=e.key.length===1;t&&(e.key===`Tab`&&e.preventDefault(),!n&&r&&re(e.key));let i=j.current;if(e.target!==i||!be.includes(e.key))return;e.preventDefault();let a=O().filter(e=>!e.disabled).map(e=>e.ref.current);ye.includes(e.key)&&a.reverse(),bt(a)}),onBlur:c(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(M.current),N.current=``)}),onPointerMove:c(e.onPointerMove,Z(e=>{let t=e.target,n=L.current!==e.clientX;if(e.currentTarget.contains(t)&&n){let t=e.clientX>L.current?`right`:`left`;I.current=t,L.current=e.clientX}}))})})})})})})});Re.displayName=K;var Ue=`MenuGroup`,We=w.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,T.jsx)(y.div,{role:`group`,...r,ref:t})});We.displayName=Ue;var Ge=`MenuLabel`,Ke=w.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,T.jsx)(y.div,{...r,ref:t})});Ke.displayName=Ge;var q=`MenuItem`,qe=`menu.itemSelect`,J=w.forwardRef((e,t)=>{let{disabled:n=!1,onSelect:i,...a}=e,s=w.useRef(null),l=G(q,e.__scopeMenu),u=Le(q,e.__scopeMenu),d=r(t,s),f=w.useRef(!1),p=()=>{let e=s.current;if(!n&&e){let t=new CustomEvent(qe,{bubbles:!0,cancelable:!0});e.addEventListener(qe,e=>i?.(e),{once:!0}),o(e,t),t.defaultPrevented?f.current=!1:l.onClose()}};return(0,T.jsx)(Je,{...a,ref:d,disabled:n,onClick:c(e.onClick,p),onPointerDown:t=>{e.onPointerDown?.(t),f.current=!0},onPointerUp:c(e.onPointerUp,e=>{f.current||e.currentTarget?.click()}),onKeyDown:c(e.onKeyDown,e=>{n||e.target!==e.currentTarget||u.searchRef.current!==``&&e.key===` `||_e.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})});J.displayName=q;var Je=w.forwardRef((e,t)=>{let{__scopeMenu:n,disabled:i=!1,textValue:a,...o}=e,s=Le(q,n),l=Ee(n),u=w.useRef(null),d=r(t,u),[f,p]=w.useState(!1),[m,h]=w.useState(``);return w.useEffect(()=>{let e=u.current;e&&h((e.textContent??``).trim())},[o.children]),(0,T.jsx)(V.ItemSlot,{scope:n,disabled:i,textValue:a??m,children:(0,T.jsx)(ge,{asChild:!0,...l,focusable:!i,children:(0,T.jsx)(y.div,{role:`menuitem`,"data-highlighted":f?``:void 0,"aria-disabled":i||void 0,"data-disabled":i?``:void 0,...o,ref:d,onPointerMove:c(e.onPointerMove,Z(e=>{i?s.onItemLeave(e):(s.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:c(e.onPointerLeave,Z(e=>s.onItemLeave(e))),onFocus:c(e.onFocus,()=>p(!0)),onBlur:c(e.onBlur,()=>p(!1))})})})}),Ye=`MenuCheckboxItem`,Xe=w.forwardRef((e,t)=>{let{checked:n=!1,onCheckedChange:r,...i}=e;return(0,T.jsx)(it,{scope:e.__scopeMenu,checked:n,children:(0,T.jsx)(J,{role:`menuitemcheckbox`,"aria-checked":X(n)?`mixed`:n,...i,ref:t,"data-state":yt(n),onSelect:c(i.onSelect,()=>r?.(X(n)?!0:!n),{checkForDefaultPrevented:!1})})})});Xe.displayName=Ye;var Ze=`MenuRadioGroup`,[Qe,$e]=H(Ze,{value:void 0,onValueChange:()=>{}}),et=w.forwardRef((e,t)=>{let{value:n,onValueChange:r,...i}=e,a=d(r);return(0,T.jsx)(Qe,{scope:e.__scopeMenu,value:n,onValueChange:a,children:(0,T.jsx)(We,{...i,ref:t})})});et.displayName=Ze;var tt=`MenuRadioItem`,nt=w.forwardRef((e,t)=>{let{value:n,...r}=e,i=$e(tt,e.__scopeMenu),a=n===i.value;return(0,T.jsx)(it,{scope:e.__scopeMenu,checked:a,children:(0,T.jsx)(J,{role:`menuitemradio`,"aria-checked":a,...r,ref:t,"data-state":yt(a),onSelect:c(r.onSelect,()=>i.onValueChange?.(n),{checkForDefaultPrevented:!1})})})});nt.displayName=tt;var rt=`MenuItemIndicator`,[it,at]=H(rt,{checked:!1}),ot=w.forwardRef((e,t)=>{let{__scopeMenu:n,forceMount:r,...i}=e,a=at(rt,n);return(0,T.jsx)(u,{present:r||X(a.checked)||a.checked===!0,children:(0,T.jsx)(y.span,{...i,ref:t,"data-state":yt(a.checked)})})});ot.displayName=rt;var st=`MenuSeparator`,ct=w.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,T.jsx)(y.div,{role:`separator`,"aria-orientation":`horizontal`,...r,ref:t})});ct.displayName=st;var lt=`MenuArrow`,ut=w.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=U(n);return(0,T.jsx)(S,{...i,...r,ref:t})});ut.displayName=lt;var dt=`MenuSub`,[ft,pt]=H(dt),mt=e=>{let{__scopeMenu:t,children:n,open:r=!1,onOpenChange:i}=e,a=W(dt,t),o=U(t),[s,c]=w.useState(null),[l,u]=w.useState(null),f=d(i);return w.useEffect(()=>(a.open===!1&&f(!1),()=>f(!1)),[a.open,f]),(0,T.jsx)(x,{...o,children:(0,T.jsx)(De,{scope:t,open:r,onOpenChange:f,content:l,onContentChange:u,children:(0,T.jsx)(ft,{scope:t,contentId:h(),triggerId:h(),trigger:s,onTriggerChange:c,children:n})})})};mt.displayName=dt;var Y=`MenuSubTrigger`,ht=w.forwardRef((e,t)=>{let n=W(Y,e.__scopeMenu),i=G(Y,e.__scopeMenu),a=pt(Y,e.__scopeMenu),o=Le(Y,e.__scopeMenu),s=w.useRef(null),{pointerGraceTimerRef:l,onPointerGraceIntentChange:u}=o,d={__scopeMenu:e.__scopeMenu},f=w.useCallback(()=>{s.current&&window.clearTimeout(s.current),s.current=null},[]);w.useEffect(()=>f,[f]),w.useEffect(()=>{let e=l.current;return()=>{window.clearTimeout(e),u(null)}},[l,u]);let p=r(t,a.onTriggerChange);return(0,T.jsx)(je,{asChild:!0,...d,children:(0,T.jsx)(Je,{id:a.triggerId,"aria-haspopup":`menu`,"aria-expanded":n.open,"aria-controls":n.open?a.contentId:void 0,"data-state":vt(n.open),...e,ref:p,onClick:t=>{e.onClick?.(t),!(e.disabled||t.defaultPrevented)&&(t.currentTarget.focus(),n.open||n.onOpenChange(!0))},onPointerMove:c(e.onPointerMove,Z(t=>{o.onItemEnter(t),!t.defaultPrevented&&!e.disabled&&!n.open&&!s.current&&(o.onPointerGraceIntentChange(null),s.current=window.setTimeout(()=>{n.onOpenChange(!0),f()},100))})),onPointerLeave:c(e.onPointerLeave,Z(e=>{f();let t=n.content?.getBoundingClientRect();if(t){let r=n.content?.dataset.side,i=r===`right`,a=i?-5:5,s=t[i?`left`:`right`],c=t[i?`right`:`left`];o.onPointerGraceIntentChange({area:[{x:e.clientX+a,y:e.clientY},{x:s,y:t.top},{x:c,y:t.top},{x:c,y:t.bottom},{x:s,y:t.bottom}],side:r}),window.clearTimeout(l.current),l.current=window.setTimeout(()=>o.onPointerGraceIntentChange(null),300)}else{if(o.onTriggerLeave(e),e.defaultPrevented)return;o.onPointerGraceIntentChange(null)}})),onKeyDown:c(e.onKeyDown,t=>{e.disabled||t.target!==t.currentTarget||o.searchRef.current!==``&&t.key===` `||xe[i.dir].includes(t.key)&&(n.onOpenChange(!0),n.content?.focus(),t.preventDefault())})})})});ht.displayName=Y;var gt=`MenuSubContent`,_t=w.forwardRef((e,t)=>{let n=Pe(K,e.__scopeMenu),{forceMount:i=n.forceMount,align:a=`start`,...o}=e,s=W(K,e.__scopeMenu),l=G(K,e.__scopeMenu),d=pt(gt,e.__scopeMenu),f=w.useRef(null),p=r(t,f);return(0,T.jsx)(V.Provider,{scope:e.__scopeMenu,children:(0,T.jsx)(u,{present:i||s.open,children:(0,T.jsx)(V.Slot,{scope:e.__scopeMenu,children:(0,T.jsx)(He,{id:d.contentId,"aria-labelledby":d.triggerId,...o,ref:p,align:a,side:l.dir===`rtl`?`left`:`right`,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:e=>{l.isUsingKeyboardRef.current&&f.current?.focus(),e.preventDefault()},onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:c(e.onFocusOutside,e=>{e.target!==d.trigger&&s.onOpenChange(!1)}),onEscapeKeyDown:c(e.onEscapeKeyDown,e=>{l.onClose(),e.preventDefault()}),onKeyDown:c(e.onKeyDown,e=>{let t=e.currentTarget.contains(e.target),n=Se[l.dir].includes(e.key);t&&n&&(s.onOpenChange(!1),d.trigger?.focus(),e.preventDefault())})})})})})});_t.displayName=gt;function vt(e){return e?`open`:`closed`}function X(e){return e===`indeterminate`}function yt(e){return X(e)?`indeterminate`:e?`checked`:`unchecked`}function bt(e){let t=document.activeElement;for(let n of e)if(n===t||(n.focus(),document.activeElement!==t))return}function xt(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function St(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=xt(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}function Ct(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function wt(e,t){return t?Ct({x:e.clientX,y:e.clientY},t):!1}function Z(e){return t=>t.pointerType===`mouse`?e(t):void 0}var Tt=ke,Et=je,Dt=Fe,Ot=Re,kt=We,At=Ke,jt=J,Mt=Xe,Nt=et,Pt=nt,Ft=ot,It=ct,Lt=ut,Rt=mt,zt=ht,Bt=_t,Q=`DropdownMenu`,[Vt,Ht]=l(Q,[Te]),$=Te(),[Ut,Wt]=Vt(Q),Gt=e=>{let{__scopeDropdownMenu:t,children:n,dir:r,open:i,defaultOpen:a,onOpenChange:o,modal:c=!0}=e,l=$(t),u=w.useRef(null),[d,f]=s({prop:i,defaultProp:a??!1,onChange:o,caller:Q});return(0,T.jsx)(Ut,{scope:t,triggerId:h(),triggerRef:u,contentId:h(),open:d,onOpenChange:f,onOpenToggle:w.useCallback(()=>f(e=>!e),[f]),modal:c,children:(0,T.jsx)(Tt,{...l,open:d,onOpenChange:f,dir:r,modal:c,children:n})})};Gt.displayName=Q;var Kt=`DropdownMenuTrigger`,qt=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,disabled:i=!1,...a}=e,o=Wt(Kt,n),s=$(n),l=r(t,o.triggerRef);return(0,T.jsx)(Et,{asChild:!0,...s,children:(0,T.jsx)(y.button,{type:`button`,id:o.triggerId,"aria-haspopup":`menu`,"aria-expanded":o.open,"aria-controls":o.open?o.contentId:void 0,"data-state":o.open?`open`:`closed`,"data-disabled":i?``:void 0,disabled:i,...a,ref:l,onPointerDown:c(e.onPointerDown,e=>{!i&&e.button===0&&e.ctrlKey===!1&&(o.onOpenToggle(),o.open||e.preventDefault())}),onKeyDown:c(e.onKeyDown,e=>{i||([`Enter`,` `].includes(e.key)&&o.onOpenToggle(),e.key===`ArrowDown`&&o.onOpenChange(!0),[`Enter`,` `,`ArrowDown`].includes(e.key)&&e.preventDefault())})})})});qt.displayName=Kt;var Jt=`DropdownMenuPortal`,Yt=e=>{let{__scopeDropdownMenu:t,...n}=e,r=$(t);return(0,T.jsx)(Dt,{...r,...n})};Yt.displayName=Jt;var Xt=`DropdownMenuContent`,Zt=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Wt(Xt,n),a=$(n),o=w.useRef(!1);return(0,T.jsx)(Ot,{id:i.contentId,"aria-labelledby":i.triggerId,...a,...r,ref:t,onCloseAutoFocus:c(e.onCloseAutoFocus,e=>{o.current||i.triggerRef.current?.focus(),o.current=!1,e.preventDefault()}),onInteractOutside:c(e.onInteractOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0,r=t.button===2||n;(!i.modal||r)&&(o.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});Zt.displayName=Xt;var Qt=`DropdownMenuGroup`,$t=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(kt,{...i,...r,ref:t})});$t.displayName=Qt;var en=`DropdownMenuLabel`,tn=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(At,{...i,...r,ref:t})});tn.displayName=en;var nn=`DropdownMenuItem`,rn=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(jt,{...i,...r,ref:t})});rn.displayName=nn;var an=`DropdownMenuCheckboxItem`,on=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(Mt,{...i,...r,ref:t})});on.displayName=an;var sn=`DropdownMenuRadioGroup`,cn=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(Nt,{...i,...r,ref:t})});cn.displayName=sn;var ln=`DropdownMenuRadioItem`,un=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(Pt,{...i,...r,ref:t})});un.displayName=ln;var dn=`DropdownMenuItemIndicator`,fn=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(Ft,{...i,...r,ref:t})});fn.displayName=dn;var pn=`DropdownMenuSeparator`,mn=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(It,{...i,...r,ref:t})});mn.displayName=pn;var hn=`DropdownMenuArrow`,gn=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(Lt,{...i,...r,ref:t})});gn.displayName=hn;var _n=e=>{let{__scopeDropdownMenu:t,children:n,open:r,onOpenChange:i,defaultOpen:a}=e,o=$(t),[c,l]=s({prop:r,defaultProp:a??!1,onChange:i,caller:`DropdownMenuSub`});return(0,T.jsx)(Rt,{...o,open:c,onOpenChange:l,children:n})},vn=`DropdownMenuSubTrigger`,yn=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(zt,{...i,...r,ref:t})});yn.displayName=vn;var bn=`DropdownMenuSubContent`,xn=w.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,T.jsx)(Bt,{...i,...r,ref:t,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});xn.displayName=bn;var Sn=Gt,Cn=qt,wn=Yt,Tn=Zt,En=$t,Dn=tn,On=rn,kn=cn,An=un,jn=fn,Mn=mn,Nn=_n,Pn=yn,Fn=xn;export{Dn as a,An as c,Nn as d,Fn as f,jn as i,Sn as l,Cn as m,En as n,wn as o,Pn as p,On as r,kn as s,Tn as t,Mn as u};
@@ -1 +1 @@
1
- import"./rolldown-runtime-aKtaBQYM.js";import{a as e,n as t,t as n}from"./vendor-react-BOUWij0V.js";import{t as r}from"./messages-DRR9N3HC.js";import{n as i}from"./locale-store-lIXD1FMw.js";import{r as a}from"./extension-provider-Byrd8Sor.js";import{n as o,t as s}from"./settings-page-header-Bv-kQFTm.js";import"./settings-page-layout-DHP6MrrL.js";var c=t();e();var l=n();function u(){let e=(0,c.c)(40),t=i(p),n;e[0]===t?n=e[1]:(n=r(t),e[0]=t,e[1]=n);let u=n.extensionDebug,m=a(),h;e[2]===m?h=e[3]:(h=m.toSorted(f),e[2]=m,e[3]=h);let g=h,_;e[4]!==u.subtitle||e[5]!==u.title?(_=(0,l.jsx)(s,{title:u.title,subtitle:u.subtitle}),e[4]=u.subtitle,e[5]=u.title,e[6]=_):_=e[6];let v;e[7]===u.listHeading?v=e[8]:(v=(0,l.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:u.listHeading}),e[7]=u.listHeading,e[8]=v);let y;e[9]===u.colId?y=e[10]:(y=(0,l.jsx)(`th`,{className:`px-3 py-2`,children:u.colId}),e[9]=u.colId,e[10]=y);let b;e[11]===u.colName?b=e[12]:(b=(0,l.jsx)(`th`,{className:`px-3 py-2`,children:u.colName}),e[11]=u.colName,e[12]=b);let x;e[13]===u.colPermissions?x=e[14]:(x=(0,l.jsx)(`th`,{className:`px-3 py-2`,children:u.colPermissions}),e[13]=u.colPermissions,e[14]=x);let S;e[15]!==y||e[16]!==b||e[17]!==x?(S=(0,l.jsx)(`thead`,{children:(0,l.jsxs)(`tr`,{className:`text-xs uppercase text-fg-muted`,children:[y,b,x]})}),e[15]=y,e[16]=b,e[17]=x,e[18]=S):S=e[18];let C;e[19]===g?C=e[20]:(C=g.map(d),e[19]=g,e[20]=C);let w;e[21]===C?w=e[22]:(w=(0,l.jsx)(`tbody`,{children:C}),e[21]=C,e[22]=w);let T;e[23]!==S||e[24]!==w?(T=(0,l.jsx)(`div`,{className:`mt-3 overflow-x-auto`,children:(0,l.jsxs)(`table`,{className:`w-full min-w-[32rem] border-separate border-spacing-y-1 text-left text-sm`,children:[S,w]})}),e[23]=S,e[24]=w,e[25]=T):T=e[25];let E;e[26]!==T||e[27]!==v?(E=(0,l.jsxs)(`section`,{className:`rounded-xl bg-surface-hover/20 p-4`,children:[v,T]}),e[26]=T,e[27]=v,e[28]=E):E=e[28];let D;e[29]===u.futureHeading?D=e[30]:(D=(0,l.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:u.futureHeading}),e[29]=u.futureHeading,e[30]=D);let O;e[31]===u.futureBody?O=e[32]:(O=(0,l.jsx)(`p`,{className:`mt-2`,children:u.futureBody}),e[31]=u.futureBody,e[32]=O);let k;e[33]!==D||e[34]!==O?(k=(0,l.jsxs)(`section`,{className:`rounded-xl bg-surface-hover/20 p-4 text-sm text-fg-muted`,children:[D,O]}),e[33]=D,e[34]=O,e[35]=k):k=e[35];let A;return e[36]!==E||e[37]!==k||e[38]!==_?(A=(0,l.jsxs)(o,{gap:`gap-5`,children:[_,E,k]}),e[36]=E,e[37]=k,e[38]=_,e[39]=A):A=e[39],A}function d(e){return(0,l.jsxs)(`tr`,{className:`bg-surface-base/55`,children:[(0,l.jsx)(`td`,{className:`rounded-l-lg px-3 py-2 font-mono text-xs text-fg`,children:e.id}),(0,l.jsx)(`td`,{className:`px-3 py-2 text-fg`,children:e.name}),(0,l.jsx)(`td`,{className:`rounded-r-lg px-3 py-2 font-mono text-xs text-fg-muted`,children:(e.ui?.permissions??[]).join(`, `)||`—`})]},e.id)}function f(e,t){return e.id.localeCompare(t.id)}function p(e){return e.language}export{u as ExtensionDebugPage};
1
+ import"./rolldown-runtime-aKtaBQYM.js";import{a as e,n as t,t as n}from"./vendor-react-BOUWij0V.js";import{n as r}from"./locale-store-5Hf8J8-_.js";import{t as i}from"./messages-uXxg5p54.js";import{r as a}from"./extension-provider-BA0Y2Rvs.js";import{n as o,t as s}from"./settings-page-header-C8a_oOyw.js";import"./settings-page-layout-CTSRWljG.js";var c=t();e();var l=n();function u(){let e=(0,c.c)(40),t=r(p),n;e[0]===t?n=e[1]:(n=i(t),e[0]=t,e[1]=n);let u=n.extensionDebug,m=a(),h;e[2]===m?h=e[3]:(h=m.toSorted(f),e[2]=m,e[3]=h);let g=h,_;e[4]!==u.subtitle||e[5]!==u.title?(_=(0,l.jsx)(s,{title:u.title,subtitle:u.subtitle}),e[4]=u.subtitle,e[5]=u.title,e[6]=_):_=e[6];let v;e[7]===u.listHeading?v=e[8]:(v=(0,l.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:u.listHeading}),e[7]=u.listHeading,e[8]=v);let y;e[9]===u.colId?y=e[10]:(y=(0,l.jsx)(`th`,{className:`px-3 py-2`,children:u.colId}),e[9]=u.colId,e[10]=y);let b;e[11]===u.colName?b=e[12]:(b=(0,l.jsx)(`th`,{className:`px-3 py-2`,children:u.colName}),e[11]=u.colName,e[12]=b);let x;e[13]===u.colPermissions?x=e[14]:(x=(0,l.jsx)(`th`,{className:`px-3 py-2`,children:u.colPermissions}),e[13]=u.colPermissions,e[14]=x);let S;e[15]!==y||e[16]!==b||e[17]!==x?(S=(0,l.jsx)(`thead`,{children:(0,l.jsxs)(`tr`,{className:`text-xs uppercase text-fg-muted`,children:[y,b,x]})}),e[15]=y,e[16]=b,e[17]=x,e[18]=S):S=e[18];let C;e[19]===g?C=e[20]:(C=g.map(d),e[19]=g,e[20]=C);let w;e[21]===C?w=e[22]:(w=(0,l.jsx)(`tbody`,{children:C}),e[21]=C,e[22]=w);let T;e[23]!==S||e[24]!==w?(T=(0,l.jsx)(`div`,{className:`mt-3 overflow-x-auto`,children:(0,l.jsxs)(`table`,{className:`w-full min-w-[32rem] border-separate border-spacing-y-1 text-left text-sm`,children:[S,w]})}),e[23]=S,e[24]=w,e[25]=T):T=e[25];let E;e[26]!==T||e[27]!==v?(E=(0,l.jsxs)(`section`,{className:`rounded-xl bg-surface-hover/20 p-4`,children:[v,T]}),e[26]=T,e[27]=v,e[28]=E):E=e[28];let D;e[29]===u.futureHeading?D=e[30]:(D=(0,l.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:u.futureHeading}),e[29]=u.futureHeading,e[30]=D);let O;e[31]===u.futureBody?O=e[32]:(O=(0,l.jsx)(`p`,{className:`mt-2`,children:u.futureBody}),e[31]=u.futureBody,e[32]=O);let k;e[33]!==D||e[34]!==O?(k=(0,l.jsxs)(`section`,{className:`rounded-xl bg-surface-hover/20 p-4 text-sm text-fg-muted`,children:[D,O]}),e[33]=D,e[34]=O,e[35]=k):k=e[35];let A;return e[36]!==E||e[37]!==k||e[38]!==_?(A=(0,l.jsxs)(o,{gap:`gap-5`,children:[_,E,k]}),e[36]=E,e[37]=k,e[38]=_,e[39]=A):A=e[39],A}function d(e){return(0,l.jsxs)(`tr`,{className:`bg-surface-base/55`,children:[(0,l.jsx)(`td`,{className:`rounded-l-lg px-3 py-2 font-mono text-xs text-fg`,children:e.id}),(0,l.jsx)(`td`,{className:`px-3 py-2 text-fg`,children:e.name}),(0,l.jsx)(`td`,{className:`rounded-r-lg px-3 py-2 font-mono text-xs text-fg-muted`,children:(e.ui?.permissions??[]).join(`, `)||`—`})]},e.id)}function f(e,t){return e.id.localeCompare(t.id)}function p(e){return e.language}export{u as ExtensionDebugPage};
@@ -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{i,l as a,n as ee,o}from"./locale-store-5Hf8J8-_.js";import{t as te}from"./messages-uXxg5p54.js";import{a as s,n as c,o as l,r as ne,s as re,t as u}from"./dist-DfWfZ9iu.js";import{c as d,n as f}from"./extension-provider-BA0Y2Rvs.js";import{i as p}from"./theme-store-DOJ9tu-j.js";import{r as m}from"./settings-form-draft-Dy10ldo8.js";var h=e(t(),1),ie=n();function g(e){return e.split(`/`).filter(Boolean).map(e=>encodeURIComponent(e)).join(`/`)}function _(e,t){let n=g(t);return i(`/api/extensions/${encodeURIComponent(e)}/assets/${n}`)}var v={"capability:xopc.notes.create":`Create notes in this workspace`,"capability:xopc.notes.update":`Change notes in this workspace at an exact revision`,"capability:xopc.notes.append":`Append content to notes in this workspace`,"capability:xopc.notes.get":`Read notes in this workspace by ID`,"capability:xopc.notes.list":`Search and list notes in this workspace`,"capability:xopc.tasks.get":`Read tasks and their context in this workspace`,"capability:xopc.tasks.list":`Search and list tasks in this workspace`,theme:`Read theme (light / dark)`,"agent.send":`Send messages to the assistant`,"agent.subscribe":`Receive live agent stream events for a chat`,"session.read":`List and open chat sessions`,"config.read":`Read plugin configuration`,"config.write":`Write plugin configuration`,storage:`Read and write plugin storage`,notification:`Show in-app notifications`},y={"capability:xopc.notes.create":`在当前工作区创建笔记`,"capability:xopc.notes.update":`按精确版本修改当前工作区的笔记`,"capability:xopc.notes.append":`向当前工作区的笔记追加内容`,"capability:xopc.notes.get":`按 ID 读取当前工作区的笔记`,"capability:xopc.notes.list":`搜索和列出当前工作区的笔记`,"capability:xopc.tasks.get":`读取当前工作区的任务及其上下文`,"capability:xopc.tasks.list":`搜索和列出当前工作区的任务`,theme:`读取主题(浅色/深色)`,"agent.send":`向助手发送消息`,"agent.subscribe":`接收会话的实时助手流式事件`,"session.read":`列出并打开聊天会话`,"config.read":`读取插件配置`,"config.write":`写入插件配置`,storage:`读写插件存储`,notification:`显示应用内通知`};function b(e,t){let n=v[e];return t===`zh`&&y[e]?y[e]:n??e}var x=r();function S(e){let t=(0,ie.c)(59),{open:n,onOpenChange:r,extensionId:i,extensionName:a,permissions:o,onConfirm:d,confirmDisabled:f}=e,p=ee(w),m,h,g,_,v,y,S,T,E,D,O,k;t[0]!==a||t[1]!==p||t[2]!==r||t[3]!==n?(v=te(p).extensionUi,_=u,O=n,k=r,g=l,t[16]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,x.jsx)(s,{className:`xopc-dialog-overlay fixed inset-0 z-[130] bg-scrim`}),t[16]=D):D=t[16],h=ne,T=`xopc-dialog-content fixed left-1/2 top-1/2 z-[131] w-[min(28rem,calc(100vw-2rem))] -translate-x-1/2 -translate-y-1/2 rounded-xl border border-edge bg-surface-overlay p-5`,E=C,m=re,y=`text-base font-semibold text-fg`,S=v.permissionTitle.replace(`{{name}}`,a),t[0]=a,t[1]=p,t[2]=r,t[3]=n,t[4]=m,t[5]=h,t[6]=g,t[7]=_,t[8]=v,t[9]=y,t[10]=S,t[11]=T,t[12]=E,t[13]=D,t[14]=O,t[15]=k):(m=t[4],h=t[5],g=t[6],_=t[7],v=t[8],y=t[9],S=t[10],T=t[11],E=t[12],D=t[13],O=t[14],k=t[15]);let A;t[17]!==m||t[18]!==y||t[19]!==S?(A=(0,x.jsx)(m,{className:y,children:S}),t[17]=m,t[18]=y,t[19]=S,t[20]=A):A=t[20];let j;t[21]===i?j=t[22]:(j=(0,x.jsxs)(`span`,{className:`font-mono text-xs text-fg-muted`,title:i,children:[`(`,i,`)`]}),t[21]=i,t[22]=j);let M;t[23]!==v.permissionSubtitle||t[24]!==j?(M=(0,x.jsxs)(`p`,{className:`mt-2 text-sm text-fg-muted`,children:[v.permissionSubtitle,` `,j]}),t[23]=v.permissionSubtitle,t[24]=j,t[25]=M):M=t[25];let N;t[26]!==p||t[27]!==o||t[28]!==v.permissionsNone?(N=o.length===0?(0,x.jsx)(`p`,{className:`mt-4 text-sm text-fg-muted`,children:v.permissionsNone}):(0,x.jsx)(`ul`,{className:`mt-4 max-h-48 list-inside list-disc space-y-1 overflow-y-auto text-sm text-fg`,children:o.map(e=>(0,x.jsx)(`li`,{children:b(e,p)},e))}),t[26]=p,t[27]=o,t[28]=v.permissionsNone,t[29]=N):N=t[29];let P;t[30]===v.deny?P=t[31]:(P=(0,x.jsx)(c,{asChild:!0,children:(0,x.jsx)(`button`,{type:`button`,className:`rounded-lg border border-edge px-3 py-2 text-sm text-fg hover:bg-surface-inset`,children:v.deny})}),t[30]=v.deny,t[31]=P);let F;t[32]!==d||t[33]!==r?(F=()=>{d(),r(!1)},t[32]=d,t[33]=r,t[34]=F):F=t[34];let I;t[35]!==f||t[36]!==v.allow||t[37]!==F?(I=(0,x.jsx)(`button`,{type:`button`,disabled:f,className:`rounded-lg bg-accent px-3 py-2 text-sm font-medium text-on-accent hover:opacity-90`,onClick:F,children:v.allow}),t[35]=f,t[36]=v.allow,t[37]=F,t[38]=I):I=t[38];let L;t[39]!==P||t[40]!==I?(L=(0,x.jsxs)(`div`,{className:`mt-6 flex justify-end gap-2`,children:[P,I]}),t[39]=P,t[40]=I,t[41]=L):L=t[41];let R;t[42]!==h||t[43]!==M||t[44]!==N||t[45]!==L||t[46]!==T||t[47]!==E||t[48]!==A?(R=(0,x.jsxs)(h,{className:T,onOpenAutoFocus:E,children:[A,M,N,L]}),t[42]=h,t[43]=M,t[44]=N,t[45]=L,t[46]=T,t[47]=E,t[48]=A,t[49]=R):R=t[49];let z;t[50]!==g||t[51]!==R||t[52]!==D?(z=(0,x.jsxs)(g,{children:[D,R]}),t[50]=g,t[51]=R,t[52]=D,t[53]=z):z=t[53];let B;return t[54]!==_||t[55]!==z||t[56]!==O||t[57]!==k?(B=(0,x.jsx)(_,{open:O,onOpenChange:k,children:z}),t[54]=_,t[55]=z,t[56]=O,t[57]=k,t[58]=B):B=t[58],B}function C(e){return e.preventDefault()}function w(e){return e.language}async function T(e){let{grant:t}=await o(i(`/api/extensions/${encodeURIComponent(e)}/ui-grant`));return t}async function E(e,t){return(await o(i(`/api/extensions/${encodeURIComponent(e)}/ui-grant`),{method:`POST`,body:JSON.stringify({manifestDigest:t})})).grant}var D=48,O=2e3,k=`allow-scripts allow-forms allow-popups`;function A(e){let t=(0,ie.c)(98),{extensionId:n,extensionName:r,entrypoint:i,permissions:o,title:s,className:c,fixedHeight:l,maxHeight:ne,minHeight:re,initialData:u}=e,g=ne===void 0?O:ne,v=re===void 0?D:re,y=ee(P),b;t[0]===y?b=t[1]:(b=te(y),t[0]=y,t[1]=b);let C=b.extensionUi,w=f(),A=a(N),F=a(M),I=(0,h.useRef)(0),L=(0,h.useRef)(!1),R=(0,h.useRef)(null),z=p(j),B;t[2]!==n||t[3]!==r?(B=r?.trim()||n,t[2]=n,t[3]=r,t[4]=B):B=t[4];let ae=B,oe;t[5]!==n||t[6]!==s?(oe=s?.trim()||`Extension ${n}`,t[5]=n,t[6]=s,t[7]=oe):oe=t[7];let se=oe,V;t[8]===o?V=t[9]:(V=JSON.stringify(Array.from(o??[]).toSorted()),t[8]=o,t[9]=V);let ce=V,H;t[10]===ce?H=t[11]:(H=JSON.parse(ce),t[10]=ce,t[11]=H);let le=H,ue=l??Math.min(g,Math.max(v,320)),U;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(U=[],t[12]=U):U=t[12];let W;t[13]===ue?W=t[14]:(W={allowed:!1,dialogOpen:!1,reloadKey:0,loadError:!1,dynamicHeight:ue,grantResolved:!1,grantError:null,manifestDigest:null,grantedPermissions:U},t[13]=ue,t[14]=W);let[G,K]=(0,h.useReducer)(m,W),{allowed:q,dialogOpen:J,reloadKey:Y,loadError:de,dynamicHeight:fe,grantResolved:pe,grantError:X}=G,me;t[15]===n?me=t[16]:(me=()=>{let e=!0;return L.current=!1,K({type:`patch`,patch:{allowed:!1,dialogOpen:!1,grantResolved:!1,grantError:null,manifestDigest:null,grantedPermissions:[]}}),T(n).then(t=>{if(e){if(t.extensionId!==n||!t.manifestDigest)throw Error(`Could not verify plugin permissions`);K({type:`patch`,patch:{allowed:t.granted,dialogOpen:!t.granted,grantResolved:!0,manifestDigest:t.manifestDigest,grantedPermissions:t.permissions}})}}).catch(t=>{e&&K({type:`patch`,patch:{allowed:!1,dialogOpen:!0,grantResolved:!0,grantError:t instanceof Error?t.message:String(t)}})}),()=>{e=!1,I.current+=1}},t[15]=n,t[16]=me);let he;t[17]!==n||t[18]!==A||t[19]!==F||t[20]!==le||t[21]!==Y?(he=[n,le,A,F,Y],t[17]=n,t[18]=A,t[19]=F,t[20]=le,t[21]=Y,t[22]=he):he=t[22],(0,h.useEffect)(me,he);let ge;t[23]===Symbol.for(`react.memo_cache_sentinel`)?(ge=e=>K({type:`patch`,patch:{dialogOpen:e}}),t[23]=ge):ge=t[23];let _e=ge,ve;t[24]!==i||t[25]!==n?(ve=_(n,i),t[24]=i,t[25]=n,t[26]=ve):ve=t[26];let ye=ve,be;t[27]!==q||t[28]!==n||t[29]!==l||t[30]!==g||t[31]!==v||t[32]!==w||t[33]!==G.grantedPermissions||t[34]!==G.manifestDigest?(be=()=>{if(!q)return;let e=R.current;if(!e)return;w.registerIframe(n,e,G.grantedPermissions,G.manifestDigest??void 0);let t=w.subscribeExtensionEvents(n,e=>{if(e.event!==`ui.resize`||!e.data||typeof e.data!=`object`||e.data===null)return;let t=Number(e.data.height);Number.isFinite(t)&&l===void 0&&K({type:`patch`,patch:{dynamicHeight:Math.min(g,Math.max(v,t))}})});return()=>{t(),w.unregisterIframe(n)}},t[27]=q,t[28]=n,t[29]=l,t[30]=g,t[31]=v,t[32]=w,t[33]=G.grantedPermissions,t[34]=G.manifestDigest,t[35]=be):be=t[35];let xe;t[36]!==q||t[37]!==n||t[38]!==l||t[39]!==g||t[40]!==v||t[41]!==Y||t[42]!==w||t[43]!==G.grantedPermissions||t[44]!==G.manifestDigest?(xe=[q,n,l,g,v,G.grantedPermissions,G.manifestDigest,w,Y],t[36]=q,t[37]=n,t[38]=l,t[39]=g,t[40]=v,t[41]=Y,t[42]=w,t[43]=G.grantedPermissions,t[44]=G.manifestDigest,t[45]=xe):xe=t[45],(0,h.useLayoutEffect)(be,xe);let Se,Ce;t[46]!==q||t[47]!==n||t[48]!==z||t[49]!==w?(Se=()=>{if(!q)return;let e=d(z);w.sendEvent(n,`theme.changed`,e)},Ce=[q,n,z,w],t[46]=q,t[47]=n,t[48]=z,t[49]=w,t[50]=Se,t[51]=Ce):(Se=t[50],Ce=t[51]),(0,h.useEffect)(Se,Ce);let we;t[52]!==fe||t[53]!==l?(we=l===void 0?{width:`100%`,height:fe,border:`none`}:{width:`100%`,height:l,border:`none`},t[52]=fe,t[53]=l,t[54]=we):we=t[54];let Te=we,Ee;t[55]!==n||t[56]!==A||t[57]!==F||t[58]!==G.manifestDigest?(Ee=()=>{if(L.current||!G.manifestDigest)return;L.current=!0;let e=I.current,t=()=>I.current===e&&a.getState().baseUrl===A&&a.getState().conversationId===F;E(n,G.manifestDigest).then(e=>{if(t()){if(!e.granted||e.extensionId!==n||e.manifestDigest!==G.manifestDigest)throw Error(`Permission grant was not persisted`);K({type:`patch`,patch:{allowed:!0,grantError:null}})}}).catch(e=>{t()&&K({type:`patch`,patch:{allowed:!1,manifestDigest:null,grantError:e instanceof Error?e.message:String(e)}})}).finally(()=>{t()&&(L.current=!1)})},t[55]=n,t[56]=A,t[57]=F,t[58]=G.manifestDigest,t[59]=Ee):Ee=t[59];let De=Ee;if(!pe){let e=`${c??``} min-h-32 animate-pulse rounded-lg bg-surface-inset`,n;return t[60]===e?n=t[61]:(n=(0,x.jsx)(`div`,{className:e}),t[60]=e,t[61]=n),n}if(!q){let e=!G.manifestDigest,r;t[62]!==J||t[63]!==ae||t[64]!==n||t[65]!==De||t[66]!==e||t[67]!==G.grantedPermissions?(r=(0,x.jsx)(S,{open:J,onOpenChange:_e,extensionId:n,extensionName:ae,permissions:G.grantedPermissions,confirmDisabled:e,onConfirm:De}),t[62]=J,t[63]=ae,t[64]=n,t[65]=De,t[66]=e,t[67]=G.grantedPermissions,t[68]=r):r=t[68];let i;t[69]!==c||t[70]!==J||t[71]!==X||t[72]!==Y||t[73]!==C?(i=J?null:(0,x.jsxs)(`div`,{className:c?`${c} rounded-lg border border-edge border-dashed bg-surface-base p-4 text-sm text-fg-muted`:`rounded-lg border border-edge border-dashed bg-surface-base p-4 text-sm text-fg-muted`,children:[X?(0,x.jsx)(`p`,{className:`mb-2 text-danger`,children:X}):null,(0,x.jsx)(`p`,{children:C.deniedHint}),(0,x.jsx)(`button`,{type:`button`,className:`mt-2 text-sm font-medium text-accent underline-offset-2 hover:underline`,onClick:()=>K({type:`patch`,patch:{reloadKey:Y+1}}),children:C.reviewPermissions})]}),t[69]=c,t[70]=J,t[71]=X,t[72]=Y,t[73]=C,t[74]=i):i=t[74];let a;return t[75]!==r||t[76]!==i?(a=(0,x.jsxs)(x.Fragment,{children:[r,i]}),t[75]=r,t[76]=i,t[77]=a):a=t[77],a}let Z;t[78]!==de||t[79]!==Y||t[80]!==C?(Z=de?(0,x.jsxs)(`div`,{className:`mb-2 rounded-lg border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-sm text-fg`,children:[(0,x.jsx)(`p`,{children:C.loadFailed}),(0,x.jsx)(`p`,{className:`mt-2 text-xs text-fg-muted`,children:C.loadFailedConnectionHint}),(0,x.jsx)(`button`,{type:`button`,className:`mt-2 font-medium text-accent underline-offset-2 hover:underline`,onClick:()=>{K({type:`patch`,patch:{loadError:!1,reloadKey:Y+1}})},children:C.retryLoad})]}):null,t[78]=de,t[79]=Y,t[80]=C,t[81]=Z):Z=t[81];let Oe=`${n}-${i}-${Y}`,ke;t[82]===Symbol.for(`react.memo_cache_sentinel`)?(ke=()=>K({type:`patch`,patch:{loadError:!0}}),t[82]=ke):ke=t[82];let Q;t[83]!==n||t[84]!==u||t[85]!==y||t[86]!==w?(Q=()=>{K({type:`patch`,patch:{loadError:!1}}),w.sendInit(n,d(p.getState().resolved),y),u!==void 0&&w.sendEvent(n,`widget.data`,u)},t[83]=n,t[84]=u,t[85]=y,t[86]=w,t[87]=Q):Q=t[87];let $;t[88]!==c||t[89]!==se||t[90]!==ye||t[91]!==Te||t[92]!==Oe||t[93]!==Q?($=(0,x.jsx)(`iframe`,{ref:R,className:c,title:se,src:ye,style:Te,sandbox:k,referrerPolicy:`no-referrer`,onError:ke,onLoad:Q},Oe),t[88]=c,t[89]=se,t[90]=ye,t[91]=Te,t[92]=Oe,t[93]=Q,t[94]=$):$=t[94];let Ae;return t[95]!==Z||t[96]!==$?(Ae=(0,x.jsxs)(`div`,{className:`flex flex-1 min-h-0 min-w-0 flex-col`,children:[Z,$]}),t[95]=Z,t[96]=$,t[97]=Ae):Ae=t[97],Ae}function j(e){return e.resolved}function M(e){return e.conversationId}function N(e){return e.baseUrl}function P(e){return e.language}export{A as t};
@@ -1 +1 @@
1
- import{a as e,i as t}from"./locale-store-lIXD1FMw.js";async function n(n=``){let i=await e(t(`/api/marketplace${n.trim()?`?q=${encodeURIComponent(n.trim())}`:``}`),{cache:`no-store`});if(!i.ok)throw Error(await r(i));let a=await i.json();if(!a.ok||!Array.isArray(a.extensions))throw Error(a.error??`Invalid response`);return a.extensions}async function r(e){try{let t=await e.json();if(typeof t.error==`string`)return t.error;if(t.error&&typeof t.error==`object`&&typeof t.error.message==`string`)return t.error.message;if(typeof t.message==`string`)return t.message}catch{}return e.statusText||`HTTP ${e.status}`}async function i(n){let i=await e(t(`/api/marketplace/packages/${encodeURIComponent(n.trim())}`),{cache:`no-store`});if(!i.ok)throw Error(await r(i));let a=await i.json();if(!a.ok||!a.payload?.id)throw Error(a.error??`Invalid response`);return a.payload}async function a(n){let i=await e(t(`/api/marketplace/install`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)});if(!i.ok)throw Error(await r(i));let a=await i.json();if(!a.ok||!a.payload?.extensionId)throw Error(a.error??`Invalid response`);return a.payload}async function o(n){let i=await e(t(`/api/extensions/${encodeURIComponent(n.extensionId.trim())}/activation`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({enabled:n.enabled})});if(!i.ok)throw Error(await r(i));let a=await i.json();if(!a.ok||!a.payload)throw Error(a.error?.message??`Invalid response`);return a.payload}async function s(n){let i=await e(t(`/api/marketplace/uninstall`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({extensionId:n})});if(!i.ok)throw Error(await r(i));let a=await i.json();if(!a.ok||!a.payload)throw Error(a.error??`Invalid response`);return a.payload}export{s as a,o as i,i as n,a as r,n as t};
1
+ import{a as e,i as t}from"./locale-store-5Hf8J8-_.js";async function n(n=``){let i=await e(t(`/api/marketplace${n.trim()?`?q=${encodeURIComponent(n.trim())}`:``}`),{cache:`no-store`});if(!i.ok)throw Error(await r(i));let a=await i.json();if(!a.ok||!Array.isArray(a.extensions))throw Error(a.error??`Invalid response`);return a.extensions}async function r(e){try{let t=await e.json();if(typeof t.error==`string`)return t.error;if(t.error&&typeof t.error==`object`&&typeof t.error.message==`string`)return t.error.message;if(typeof t.message==`string`)return t.message}catch{}return e.statusText||`HTTP ${e.status}`}async function i(n){let i=await e(t(`/api/marketplace/packages/${encodeURIComponent(n.trim())}`),{cache:`no-store`});if(!i.ok)throw Error(await r(i));let a=await i.json();if(!a.ok||!a.payload?.id)throw Error(a.error??`Invalid response`);return a.payload}async function a(n){let i=await e(t(`/api/marketplace/install`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)});if(!i.ok)throw Error(await r(i));let a=await i.json();if(!a.ok||!a.payload?.extensionId)throw Error(a.error??`Invalid response`);return a.payload}async function o(n){let i=await e(t(`/api/extensions/${encodeURIComponent(n.extensionId.trim())}/activation`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({enabled:n.enabled})});if(!i.ok)throw Error(await r(i));let a=await i.json();if(!a.ok||!a.payload)throw Error(a.error?.message??`Invalid response`);return a.payload}async function s(n){let i=await e(t(`/api/marketplace/uninstall`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({extensionId:n})});if(!i.ok)throw Error(await r(i));let a=await i.json();if(!a.ok||!a.payload)throw Error(a.error??`Invalid response`);return a.payload}export{s as a,o as i,i as n,a as r,n as t};
@@ -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{f as i}from"./chunk-KS7C4IRE-CiwuuyV8.js";import{t as a}from"./resource-unavailable-BUWsH3fp.js";import{r as o,s}from"./extension-provider-BA0Y2Rvs.js";import{t as c}from"./page-header-store-reh1es-3.js";import{t as l}from"./extension-iframe-host-CnOdNwbo.js";var u=n(),d=e(t(),1),f=r();function p(){let e=(0,u.c)(24),{extensionId:t,pageId:n}=i(),r=o(),p=c(h),g=c(m),_,v,y;e[0]!==t||e[1]!==r||e[2]!==n?(_=t?r.find(e=>e.id===t&&s(e)):void 0,v=_?.ui?.contributions?.pages,y=t&&v?.length?n?v.find(e=>e.id===n||e.id===`${t}.${n}`):v[0]:void 0,e[0]=t,e[1]=r,e[2]=n,e[3]=_,e[4]=v,e[5]=y):(_=e[3],v=e[4],y=e[5]);let b=y,x,S;if(e[6]!==g||e[7]!==_||e[8]!==t||e[9]!==b||e[10]!==p?(x=()=>{if(!t||!_||!b)return g(),()=>g();let e=b.title?.trim()||_.name||t;return p({startExtra:null,main:(0,f.jsx)(`div`,{className:`w-full min-w-0 px-3 sm:px-5 xl:px-6`,children:(0,f.jsx)(`h1`,{className:`min-w-0 truncate text-base font-semibold tracking-tight text-fg`,title:e,children:e})}),end:null}),()=>g()},S=[g,_,t,b,p],e[6]=g,e[7]=_,e[8]=t,e[9]=b,e[10]=p,e[11]=x,e[12]=S):(x=e[11],S=e[12]),(0,d.useLayoutEffect)(x,S),!t){let t;return e[13]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,f.jsx)(a,{kind:`plugin`,backTo:`/capabilities/extensions`}),e[13]=t):t=e[13],t}if(!_){let n=r.some(e=>e.id===t)?`plugin-page`:`plugin`,i;return e[14]===n?i=e[15]:(i=(0,f.jsx)(a,{kind:n,backTo:`/capabilities/extensions`}),e[14]=n,e[15]=i),i}if(!v?.length){let t;return e[16]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,f.jsx)(a,{kind:`plugin-page`,backTo:`/capabilities/extensions`}),e[16]=t):t=e[16],t}if(!b){let t;return e[17]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,f.jsx)(a,{kind:`plugin`,backTo:`/capabilities/extensions`}),e[17]=t):t=e[17],t}let C=_.ui?.permissions,w;return e[18]!==_.name||e[19]!==t||e[20]!==b.entrypoint||e[21]!==b.title||e[22]!==C?(w=(0,f.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:(0,f.jsx)(l,{extensionId:t,extensionName:_.name,entrypoint:b.entrypoint,permissions:C,title:b.title,className:`min-h-0 flex-1`,fixedHeight:void 0,maxHeight:99999})}),e[18]=_.name,e[19]=t,e[20]=b.entrypoint,e[21]=b.title,e[22]=C,e[23]=w):w=e[23],w}function m(e){return e.clearPageHeader}function h(e){return e.setPageHeader}export{p as ExtensionPage};
@@ -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{a as i,i as a,l as o,o as s}from"./locale-store-lIXD1FMw.js";import{i as c}from"./vendor-swr-CdRzEUwF.js";import{i as l,m as u,n as d,p as f,u as p}from"./schemas-CCWMleym.js";import{d as m,i as h,t as g}from"./session-manager-5l9q0cd5.js";import{t as _}from"./capabilities-DRVXLssH.js";import{t as v}from"./activity-store-DnqOM8GN.js";import{a as y}from"./gateway-realtime-CsykKL4l.js";import{i as b}from"./theme-store-DW45fWYQ.js";var x=f({id:d([`xopc.notes.get`,`xopc.notes.list`,`xopc.tasks.get`,`xopc.tasks.list`,`xopc.notes.create`,`xopc.notes.update`,`xopc.notes.append`]),majorVersion:p().int().positive(),descriptorDigest:u().regex(/^[a-f0-9]{64}$/)});l(x).max(7).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`Duplicate capability binding`);var S=e(t(),1),C=n(),w=`agent-stream-event`;function T(e){return e===`off`||e===`on`||e===`stream`}function E(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e,n=typeof t.conversationId==`string`?t.conversationId.trim():``,r=typeof t.runId==`string`?t.runId.trim():``;return n&&r?{conversationId:n,runId:r}:null}function D(e,t,n){return t&&typeof t==`object`&&!Array.isArray(t)?{...t,seq:n}:{type:e,seq:n,payload:t}}async function O(e){try{let t=await i(a(`/api/sessions/${encodeURIComponent(e)}/agent-config`));if(!t.ok)return`on`;let n=await t.json(),r=n.payload?.activityDetail?.effective;if(T(r))return r;let o=n.payload?.activityDetail?.default;return T(o)?o:`on`}catch{return`on`}}function k(e){window.dispatchEvent(new CustomEvent(w,{detail:e}))}function A(e={}){let t=e.subscribe??y,n=e.loadActivityDetailLevel??O,r=e.dispatch??k,i=new Map,a=!1,o=e=>{let o=E(e.detail);if(!o||i.has(o.runId))return;let s=`on`,c=!1,l,u=!1,d=!1,f=()=>{},p=()=>{u||(u=!0,f(),i.get(o.runId)===p&&i.delete(o.runId))},m=e=>{a||u||r({conversationId:o.conversationId,event:e,activityDetailLevel:s})};n(o.conversationId).then(e=>{s=e,c=!0,e===`stream`&&l&&!d&&m(l),l=void 0}),f=t(`run:${o.runId}`,{onEvent:e=>{if(u||d)return;let t=D(e.event,e.data,e.seq);e.event===`thinking_delta`&&!c?l=t:m(t),e.event===`run_end`&&(d=!0,l=void 0,queueMicrotask(p))},onGap:e=>{e.recoverable||p()}},0),i.set(o.runId,p)},s=e=>{let t=E(e.detail);t&&i.get(t.runId)?.()};return window.addEventListener(`run-started`,o),window.addEventListener(`run-completed`,s),window.addEventListener(`agent-run-ended`,s),()=>{a=!0,window.removeEventListener(`run-started`,o),window.removeEventListener(`run-completed`,s),window.removeEventListener(`agent-run-ended`,s);for(let e of[...i.values()])e()}}var j=function(e){return e[e.PermissionDenied=4001]=`PermissionDenied`,e[e.InvalidRequest=4002]=`InvalidRequest`,e[e.MethodNotFound=4003]=`MethodNotFound`,e[e.InternalError=4004]=`InternalError`,e[e.Timeout=4005]=`Timeout`,e[e.ExtensionNotFound=4006]=`ExtensionNotFound`,e[e.RateLimited=4007]=`RateLimited`,e}({});async function M(e,t,n){let r=new g,i=await r.loadSessionAgentConfig(e);await r.loadSession(e),m(e,i),await new h().send(t,e,n,i.thinkingLevel)}var N=[`--color-surface-base`,`--color-surface-panel`,`--color-surface-hover`,`--color-fg`,`--color-fg-muted`,`--color-fg-subtle`,`--color-accent`,`--color-accent-hover`,`--color-accent-soft`,`--color-edge`,`--color-edge-subtle`,`--color-danger`,`--color-success`,`--color-warning`,`--radius-sm`,`--radius-lg`,`--radius-xl`];function P(e){let t=getComputedStyle(document.documentElement),n={};for(let e of N){let r=t.getPropertyValue(e).trim();r&&(n[e]=r)}return{mode:e,tokens:n,fontFamily:t.getPropertyValue(`font-family`).trim(),fontFamilyMono:t.getPropertyValue(`--font-mono`).trim()}}var F={"agent.sendMessage":`agent.send`,"session.list":`session.read`,"session.navigate":`session.read`,"config.get":`config.read`,"config.set":`config.write`,"storage.get":`storage`,"storage.set":`storage`,"storage.remove":`storage`,"storage.keys":`storage`,"ui.notification":`notification`,"theme.get":`theme`},I=class{iframes=new Map;byContentWindow=new WeakMap;handlers=new Map;extensionPermissions=new Map;releaseBindings=new Map;eventSubscribers=new Map;agentStreamSubscriptions=new Map;boundListener=e=>{this.onWindowMessage(e)};constructor(){window.addEventListener(`message`,this.boundListener)}dispose(){window.removeEventListener(`message`,this.boundListener),this.iframes.clear(),this.handlers.clear(),this.extensionPermissions.clear(),this.releaseBindings.clear(),this.eventSubscribers.clear(),this.agentStreamSubscriptions.clear()}registerIframe(e,t,n,r){let i=this.iframes.get(e);if(i&&i!==t&&i.contentWindow&&this.byContentWindow.delete(i.contentWindow),this.iframes.set(e,t),this.extensionPermissions.set(e,new Set(n)),this.releaseBindings.delete(e),r){let t=o.getState();this.releaseBindings.set(e,{digest:r,baseUrl:t.baseUrl,namespace:t.conversationId})}this.rememberIframeWindow(e,t)}unregisterIframe(e){let t=this.iframes.get(e);this.sendEvent(e,`panel.dispose`),t?.contentWindow&&this.byContentWindow.delete(t.contentWindow),this.iframes.delete(e),this.extensionPermissions.delete(e),this.releaseBindings.delete(e),this.agentStreamSubscriptions.delete(e)}rememberIframeWindow(e,t){let n=t.contentWindow;n&&this.byContentWindow.set(n,{extensionId:e,iframe:t})}subscribeAgentStream(e,t){let n=this.agentStreamSubscriptions.get(e);n||(n=new Set,this.agentStreamSubscriptions.set(e,n)),n.add(t)}unsubscribeAgentStream(e,t){this.agentStreamSubscriptions.get(e)?.delete(t)}forwardAgentStreamEvent(e,t){for(let[n,r]of this.agentStreamSubscriptions)r.has(e)&&this.sendEvent(n,`agent.stream.${e}`,t)}broadcastExtensionEvent(e,t,n){let r=t.startsWith(`ext.`)?t:`ext.${t}`;for(let[t]of this.iframes)t!==e&&this.sendEvent(t,r,n)}handleExtensionEvent(e,t,n){if(t.startsWith(`ext.`)){let r=t.slice(4);this.broadcastExtensionEvent(e,r,n);return}if(t===`agent.subscribe`||t===`agent.unsubscribe`){if(!(this.extensionPermissions.get(e)??new Set).has(`agent.subscribe`))return;let{conversationId:r}=n??{};if(typeof r!=`string`||!r.trim())return;let i=r.trim();t===`agent.subscribe`?this.subscribeAgentStream(e,i):this.unsubscribeAgentStream(e,i)}}registerMethod(e,t){this.handlers.set(e,t)}getReleaseDigest(e){let t=this.releaseBindings.get(e),n=o.getState();if(!t||t.baseUrl!==n.baseUrl||t.namespace!==n.conversationId)throw Error(`Extension release authorization is unavailable`);return t.digest}subscribeExtensionEvents(e,t){let n=this.eventSubscribers.get(e);return n||(n=new Set,this.eventSubscribers.set(e,n)),n.add(t),()=>{n.delete(t),n.size===0&&this.eventSubscribers.delete(e)}}sendInit(e,t,n){let r=this.iframes.get(e);if(!r?.contentWindow)return;this.rememberIframeWindow(e,r);let i=[...this.extensionPermissions.get(e)??[]];r.contentWindow.postMessage({source:`xopc-host`,type:`init`,extensionId:e,permissions:i,theme:t,locale:n},`*`)}sendEvent(e,t,n){let r=this.iframes.get(e);r?.contentWindow&&r.contentWindow.postMessage({source:`xopc-host`,type:`event`,event:t,data:n},`*`)}broadcastEvent(e,t){for(let[,n]of this.iframes)n.contentWindow?.postMessage({source:`xopc-host`,type:`event`,event:e,data:t},`*`)}postResponse(e,t,n,r,i){let a=e.contentWindow,o={source:`xopc-host`,type:`response`,requestId:n,result:r,error:i};!a||a!==t?.source||a.postMessage(o,`*`)}async onWindowMessage(e){let t=e.data;if(!t||t.source!==`xopc-extension`||!e.source)return;let n=this.byContentWindow.get(e.source);if(!n)return;let{iframe:r,extensionId:i}=n;if(this.iframes.get(i)!==r||r.contentWindow!==e.source)return;if(t.type===`event`){this.handleExtensionEvent(i,t.event,t.data);let e=this.eventSubscribers.get(i);if(e){let n={event:t.event,data:t.data};for(let t of e)try{t(n)}catch{}}return}if(t.type!==`request`)return;let{requestId:a,method:s,params:c}=t;if(typeof a!=`string`||a.length>200||typeof s!=`string`||s.length>200)return;let l=this.handlers.get(s);if(!l){this.postResponse(r,e,a,void 0,{code:j.MethodNotFound,message:`Unknown method: ${s}`});return}let u=c&&typeof c==`object`&&`id`in c?c.id:void 0,d=s===`capability.describe`||s===`capability.call`?`capability:${typeof u==`string`?u:``}`:F[s],f=this.extensionPermissions.get(i)??new Set;if(d&&!f.has(d)){this.postResponse(r,e,a,void 0,{code:j.PermissionDenied,message:`Missing permission: ${d}`});return}let p=o.getState(),m=()=>this.iframes.get(i)===r&&r.contentWindow===e.source&&this.extensionPermissions.get(i)===f&&o.getState().baseUrl===p.baseUrl&&o.getState().conversationId===p.conversationId;try{let t=await l(i,c);if(!m())return;this.postResponse(r,e,a,t)}catch(t){if(!m())return;let n=t instanceof Error?t.message:String(t);this.postResponse(r,e,a,void 0,{code:j.InternalError,message:n})}}};function L(e){let t=f({id:x.shape.id}),n=t.extend({call:_});e.registerMethod(`capability.describe`,async(n,r)=>{let{id:i}=t.parse(r),o=e.getReleaseDigest(n),c=(await s(a(`/api/local-app-capabilities/${encodeURIComponent(n)}?manifestDigest=${encodeURIComponent(o)}`))).capabilities.find(e=>e.id===i);if(!c)throw Error(`Capability is unavailable for this release`);return c}),e.registerMethod(`capability.call`,async(t,r)=>{let{id:i,call:o}=n.parse(r),c=e.getReleaseDigest(t);return s(a(`/api/local-app-capabilities/${encodeURIComponent(t)}/${encodeURIComponent(i)}/invocations`),{method:`POST`,body:JSON.stringify({manifestDigest:c,call:o})})}),e.registerMethod(`theme.get`,async()=>P(b.getState().resolved)),e.registerMethod(`ui.navigate`,async(e,t)=>{let n=t&&typeof t==`object`&&t&&`path`in t?String(t.path??``):``;if(n){let e=n.startsWith(`/`)?n:`/${n}`;window.location.hash=`#${e}`}}),e.registerMethod(`ui.notification`,async(e,t)=>{if(!t||typeof t!=`object`)return;let n=t,r=typeof n.title==`string`?n.title.trim():``;r&&v({tone:n.type===`success`||n.type===`warning`||n.type===`error`||n.type===`info`?n.type:`info`,title:r,message:typeof n.message==`string`?n.message:void 0,source:e,dedupeKey:`extension:${e}:${r}`})}),e.registerMethod(`session.navigate`,async(e,t)=>{let n=t&&typeof t==`object`&&t&&`conversationId`in t?String(t.conversationId??``):``;n&&window.dispatchEvent(new CustomEvent(`navigate-to-chat`,{detail:{conversationId:n},bubbles:!0}))}),e.registerMethod(`session.list`,async()=>{let e=await i(a(`/api/sessions`));if(!e.ok)throw Error(`Failed to list sessions: ${e.status}`);return((await e.json()).items??[]).map(e=>({conversationId:e.key,title:e.name,lastMessageAt:e.updatedAt??e.lastAccessedAt,messageCount:e.messageCount}))}),e.registerMethod(`agent.sendMessage`,async(e,t)=>{let{message:n,conversationId:r,newSession:i}=t,a=r?.trim()||``;return(i||!a)&&(a=(await new g().createSession()).key),await M(a,n),{conversationId:a}}),e.registerMethod(`config.get`,async e=>{let t=await i(a(`/api/extensions/${encodeURIComponent(e)}/config`));if(!t.ok)throw Error(`Failed to get config: ${t.status}`);return t.json()}),e.registerMethod(`config.set`,async(e,t)=>{let n=t&&typeof t==`object`&&t&&!Array.isArray(t)?t:{},r=await i(a(`/api/extensions/${encodeURIComponent(e)}/config`),{method:`PATCH`,body:JSON.stringify(n)});if(!r.ok)throw Error(`Failed to set config: ${r.status}`)}),e.registerMethod(`storage.get`,async(e,t)=>{let n=t&&typeof t==`object`&&t&&`key`in t?String(t.key??``):``,r=await i(a(`/api/extensions/${encodeURIComponent(e)}/storage/${encodeURIComponent(n)}`));if(r.status!==404){if(!r.ok)throw Error(`Failed to get storage key: ${r.status}`);return(await r.json()).value}}),e.registerMethod(`storage.set`,async(e,t)=>{let n=t,r=n&&typeof n.key==`string`?n.key:``,o=await i(a(`/api/extensions/${encodeURIComponent(e)}/storage/${encodeURIComponent(r)}`),{method:`PUT`,body:JSON.stringify({value:n?.value})});if(!o.ok)throw Error(`Failed to set storage key: ${o.status}`)}),e.registerMethod(`storage.remove`,async(e,t)=>{let n=t&&typeof t==`object`&&t&&`key`in t?String(t.key??``):``,r=await i(a(`/api/extensions/${encodeURIComponent(e)}/storage/${encodeURIComponent(n)}`),{method:`DELETE`});if(r.status!==404&&!r.ok)throw Error(`Failed to remove storage key: ${r.status}`)}),e.registerMethod(`storage.keys`,async e=>{let t=await i(a(`/api/extensions/${encodeURIComponent(e)}/storage`));if(!t.ok)throw Error(`Failed to list storage keys: ${t.status}`);return(await t.json()).keys??[]})}function R(e){return e.active||e.activationEligible===!0}function z(e){let t=e.ui?.contributions;return t?Array.isArray(t.pages)&&t.pages.length>0||Array.isArray(t.settingsPanels)&&t.settingsPanels.length>0||Array.isArray(t.chatWidgets)&&t.chatWidgets.length>0:!1}function B(e){return e.source===`bundled`&&e.hasUi===!0&&z(e)}function V(e){return e.kind===`image-generation`||e.kind===`media-provider`}function H(e){return R(e)?e.hasConfigSchema||V(e)?!0:e.hasUi?z(e):!1:!1}function U(e){return H(e)||B(e)}var W=r(),G=(0,S.createContext)(null);function K({children:e}){let t=(0,S.useRef)(null);if(!t.current){let e=new I;L(e),t.current=e}let n=t.current,{data:r,isLoading:i,mutate:l}=c(o(e=>!!e.conversationId)?`gateway-extensions-list`:null,()=>s(a(`/api/extensions`)),{revalidateOnFocus:!1}),u=r?.extensions??[],d=b(e=>e.resolved);(0,S.useEffect)(()=>{let e=()=>{l()};return window.addEventListener(`config-reload`,e),window.addEventListener(`registry-updated`,e),()=>{window.removeEventListener(`config-reload`,e),window.removeEventListener(`registry-updated`,e)}},[l]);let f=(0,S.useCallback)(e=>{let t=e.detail;t?.conversationId&&n.forwardAgentStreamEvent(t.conversationId,t.event??t)},[n]),p=(0,S.useRef)(f);p.current=f,(0,S.useEffect)(()=>{let e=e=>{p.current(e)};return window.addEventListener(w,e),()=>{window.removeEventListener(w,e)}},[]),(0,S.useEffect)(()=>{let e=P(d);n.broadcastEvent(`theme.changed`,e)},[d,n]);let m=(0,S.useRef)(n);m.current=n,(0,S.useEffect)(()=>()=>{m.current.dispose(),t.current=null},[]);let h=(0,S.useMemo)(()=>({router:n,extensions:u,loading:i}),[n,u,i]);return(0,W.jsx)(G.Provider,{value:h,children:e})}function q(){let e=(0,S.useContext)(G);if(!e)throw Error(`useExtensionRouter must be used within ExtensionProvider`);return e.router}function J(){let e=(0,S.useContext)(G);if(!e)throw Error(`useExtensions must be used within ExtensionProvider`);return e.extensions}function Y(){let e=(0,C.c)(2),t=J(),n;return e[0]===t?n=e[1]:(n=t.filter(H),e[0]=t,e[1]=n),n}function X(){let e=(0,S.useContext)(G);if(!e)throw Error(`useExtensionsLoading must be used within ExtensionProvider`);return e.loading}export{Y as a,P as c,A as d,X as i,M as l,q as n,V as o,J as r,U as s,K as t,w 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{a as i,i as a,l as o,o as s}from"./locale-store-5Hf8J8-_.js";import{i as c}from"./vendor-swr-CdRzEUwF.js";import{i as l,m as u,n as d,p as f,u as p}from"./schemas-CCWMleym.js";import{d as m,i as h,t as g}from"./session-manager-DNMosCtW.js";import{t as _}from"./capabilities-D0-HCZ5J.js";import{t as v}from"./activity-store-CKrylgib.js";import{a as y}from"./gateway-realtime-CyCCNUxm.js";import{i as b}from"./theme-store-DOJ9tu-j.js";var x=f({id:d([`xopc.notes.get`,`xopc.notes.list`,`xopc.tasks.get`,`xopc.tasks.list`,`xopc.notes.create`,`xopc.notes.update`,`xopc.notes.append`]),majorVersion:p().int().positive(),descriptorDigest:u().regex(/^[a-f0-9]{64}$/)});l(x).max(7).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`Duplicate capability binding`);var S=e(t(),1),C=n(),w=`agent-stream-event`;function T(e){return e===`off`||e===`on`||e===`stream`}function E(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e,n=typeof t.conversationId==`string`?t.conversationId.trim():``,r=typeof t.runId==`string`?t.runId.trim():``;return n&&r?{conversationId:n,runId:r}:null}function D(e,t,n){return t&&typeof t==`object`&&!Array.isArray(t)?{...t,seq:n}:{type:e,seq:n,payload:t}}async function O(e){try{let t=await i(a(`/api/sessions/${encodeURIComponent(e)}/agent-config`));if(!t.ok)return`on`;let n=await t.json(),r=n.payload?.activityDetail?.effective;if(T(r))return r;let o=n.payload?.activityDetail?.default;return T(o)?o:`on`}catch{return`on`}}function k(e){window.dispatchEvent(new CustomEvent(w,{detail:e}))}function A(e={}){let t=e.subscribe??y,n=e.loadActivityDetailLevel??O,r=e.dispatch??k,i=new Map,a=!1,o=e=>{let o=E(e.detail);if(!o||i.has(o.runId))return;let s=`on`,c=!1,l,u=!1,d=!1,f=()=>{},p=()=>{u||(u=!0,f(),i.get(o.runId)===p&&i.delete(o.runId))},m=e=>{a||u||r({conversationId:o.conversationId,event:e,activityDetailLevel:s})};n(o.conversationId).then(e=>{s=e,c=!0,e===`stream`&&l&&!d&&m(l),l=void 0}),f=t(`run:${o.runId}`,{onEvent:e=>{if(u||d)return;let t=D(e.event,e.data,e.seq);e.event===`thinking_delta`&&!c?l=t:m(t),e.event===`run_end`&&(d=!0,l=void 0,queueMicrotask(p))},onGap:e=>{e.recoverable||p()}},0),i.set(o.runId,p)},s=e=>{let t=E(e.detail);t&&i.get(t.runId)?.()};return window.addEventListener(`run-started`,o),window.addEventListener(`run-completed`,s),window.addEventListener(`agent-run-ended`,s),()=>{a=!0,window.removeEventListener(`run-started`,o),window.removeEventListener(`run-completed`,s),window.removeEventListener(`agent-run-ended`,s);for(let e of[...i.values()])e()}}var j=function(e){return e[e.PermissionDenied=4001]=`PermissionDenied`,e[e.InvalidRequest=4002]=`InvalidRequest`,e[e.MethodNotFound=4003]=`MethodNotFound`,e[e.InternalError=4004]=`InternalError`,e[e.Timeout=4005]=`Timeout`,e[e.ExtensionNotFound=4006]=`ExtensionNotFound`,e[e.RateLimited=4007]=`RateLimited`,e}({});async function M(e,t,n){let r=new g,i=await r.loadSessionAgentConfig(e);await r.loadSession(e),m(e,i),await new h().send(t,e,n,i.thinkingLevel)}var N=[`--color-surface-base`,`--color-surface-panel`,`--color-surface-hover`,`--color-fg`,`--color-fg-muted`,`--color-fg-subtle`,`--color-accent`,`--color-accent-hover`,`--color-accent-soft`,`--color-edge`,`--color-edge-subtle`,`--color-danger`,`--color-success`,`--color-warning`,`--radius-sm`,`--radius-lg`,`--radius-xl`];function P(e){let t=getComputedStyle(document.documentElement),n={};for(let e of N){let r=t.getPropertyValue(e).trim();r&&(n[e]=r)}return{mode:e,tokens:n,fontFamily:t.getPropertyValue(`font-family`).trim(),fontFamilyMono:t.getPropertyValue(`--font-mono`).trim()}}var F={"agent.sendMessage":`agent.send`,"session.list":`session.read`,"session.navigate":`session.read`,"config.get":`config.read`,"config.set":`config.write`,"storage.get":`storage`,"storage.set":`storage`,"storage.remove":`storage`,"storage.keys":`storage`,"ui.notification":`notification`,"theme.get":`theme`},I=class{iframes=new Map;byContentWindow=new WeakMap;handlers=new Map;extensionPermissions=new Map;releaseBindings=new Map;eventSubscribers=new Map;agentStreamSubscriptions=new Map;boundListener=e=>{this.onWindowMessage(e)};constructor(){window.addEventListener(`message`,this.boundListener)}dispose(){window.removeEventListener(`message`,this.boundListener),this.iframes.clear(),this.handlers.clear(),this.extensionPermissions.clear(),this.releaseBindings.clear(),this.eventSubscribers.clear(),this.agentStreamSubscriptions.clear()}registerIframe(e,t,n,r){let i=this.iframes.get(e);if(i&&i!==t&&i.contentWindow&&this.byContentWindow.delete(i.contentWindow),this.iframes.set(e,t),this.extensionPermissions.set(e,new Set(n)),this.releaseBindings.delete(e),r){let t=o.getState();this.releaseBindings.set(e,{digest:r,baseUrl:t.baseUrl,namespace:t.conversationId})}this.rememberIframeWindow(e,t)}unregisterIframe(e){let t=this.iframes.get(e);this.sendEvent(e,`panel.dispose`),t?.contentWindow&&this.byContentWindow.delete(t.contentWindow),this.iframes.delete(e),this.extensionPermissions.delete(e),this.releaseBindings.delete(e),this.agentStreamSubscriptions.delete(e)}rememberIframeWindow(e,t){let n=t.contentWindow;n&&this.byContentWindow.set(n,{extensionId:e,iframe:t})}subscribeAgentStream(e,t){let n=this.agentStreamSubscriptions.get(e);n||(n=new Set,this.agentStreamSubscriptions.set(e,n)),n.add(t)}unsubscribeAgentStream(e,t){this.agentStreamSubscriptions.get(e)?.delete(t)}forwardAgentStreamEvent(e,t){for(let[n,r]of this.agentStreamSubscriptions)r.has(e)&&this.sendEvent(n,`agent.stream.${e}`,t)}broadcastExtensionEvent(e,t,n){let r=t.startsWith(`ext.`)?t:`ext.${t}`;for(let[t]of this.iframes)t!==e&&this.sendEvent(t,r,n)}handleExtensionEvent(e,t,n){if(t.startsWith(`ext.`)){let r=t.slice(4);this.broadcastExtensionEvent(e,r,n);return}if(t===`agent.subscribe`||t===`agent.unsubscribe`){if(!(this.extensionPermissions.get(e)??new Set).has(`agent.subscribe`))return;let{conversationId:r}=n??{};if(typeof r!=`string`||!r.trim())return;let i=r.trim();t===`agent.subscribe`?this.subscribeAgentStream(e,i):this.unsubscribeAgentStream(e,i)}}registerMethod(e,t){this.handlers.set(e,t)}getReleaseDigest(e){let t=this.releaseBindings.get(e),n=o.getState();if(!t||t.baseUrl!==n.baseUrl||t.namespace!==n.conversationId)throw Error(`Extension release authorization is unavailable`);return t.digest}subscribeExtensionEvents(e,t){let n=this.eventSubscribers.get(e);return n||(n=new Set,this.eventSubscribers.set(e,n)),n.add(t),()=>{n.delete(t),n.size===0&&this.eventSubscribers.delete(e)}}sendInit(e,t,n){let r=this.iframes.get(e);if(!r?.contentWindow)return;this.rememberIframeWindow(e,r);let i=[...this.extensionPermissions.get(e)??[]];r.contentWindow.postMessage({source:`xopc-host`,type:`init`,extensionId:e,permissions:i,theme:t,locale:n},`*`)}sendEvent(e,t,n){let r=this.iframes.get(e);r?.contentWindow&&r.contentWindow.postMessage({source:`xopc-host`,type:`event`,event:t,data:n},`*`)}broadcastEvent(e,t){for(let[,n]of this.iframes)n.contentWindow?.postMessage({source:`xopc-host`,type:`event`,event:e,data:t},`*`)}postResponse(e,t,n,r,i){let a=e.contentWindow,o={source:`xopc-host`,type:`response`,requestId:n,result:r,error:i};!a||a!==t?.source||a.postMessage(o,`*`)}async onWindowMessage(e){let t=e.data;if(!t||t.source!==`xopc-extension`||!e.source)return;let n=this.byContentWindow.get(e.source);if(!n)return;let{iframe:r,extensionId:i}=n;if(this.iframes.get(i)!==r||r.contentWindow!==e.source)return;if(t.type===`event`){this.handleExtensionEvent(i,t.event,t.data);let e=this.eventSubscribers.get(i);if(e){let n={event:t.event,data:t.data};for(let t of e)try{t(n)}catch{}}return}if(t.type!==`request`)return;let{requestId:a,method:s,params:c}=t;if(typeof a!=`string`||a.length>200||typeof s!=`string`||s.length>200)return;let l=this.handlers.get(s);if(!l){this.postResponse(r,e,a,void 0,{code:j.MethodNotFound,message:`Unknown method: ${s}`});return}let u=c&&typeof c==`object`&&`id`in c?c.id:void 0,d=s===`capability.describe`||s===`capability.call`?`capability:${typeof u==`string`?u:``}`:F[s],f=this.extensionPermissions.get(i)??new Set;if(d&&!f.has(d)){this.postResponse(r,e,a,void 0,{code:j.PermissionDenied,message:`Missing permission: ${d}`});return}let p=o.getState(),m=()=>this.iframes.get(i)===r&&r.contentWindow===e.source&&this.extensionPermissions.get(i)===f&&o.getState().baseUrl===p.baseUrl&&o.getState().conversationId===p.conversationId;try{let t=await l(i,c);if(!m())return;this.postResponse(r,e,a,t)}catch(t){if(!m())return;let n=t instanceof Error?t.message:String(t);this.postResponse(r,e,a,void 0,{code:j.InternalError,message:n})}}};function L(e){let t=f({id:x.shape.id}),n=t.extend({call:_});e.registerMethod(`capability.describe`,async(n,r)=>{let{id:i}=t.parse(r),o=e.getReleaseDigest(n),c=(await s(a(`/api/local-app-capabilities/${encodeURIComponent(n)}?manifestDigest=${encodeURIComponent(o)}`))).capabilities.find(e=>e.id===i);if(!c)throw Error(`Capability is unavailable for this release`);return c}),e.registerMethod(`capability.call`,async(t,r)=>{let{id:i,call:o}=n.parse(r),c=e.getReleaseDigest(t);return s(a(`/api/local-app-capabilities/${encodeURIComponent(t)}/${encodeURIComponent(i)}/invocations`),{method:`POST`,body:JSON.stringify({manifestDigest:c,call:o})})}),e.registerMethod(`theme.get`,async()=>P(b.getState().resolved)),e.registerMethod(`ui.navigate`,async(e,t)=>{let n=t&&typeof t==`object`&&t&&`path`in t?String(t.path??``):``;if(n){let e=n.startsWith(`/`)?n:`/${n}`;window.location.hash=`#${e}`}}),e.registerMethod(`ui.notification`,async(e,t)=>{if(!t||typeof t!=`object`)return;let n=t,r=typeof n.title==`string`?n.title.trim():``;r&&v({tone:n.type===`success`||n.type===`warning`||n.type===`error`||n.type===`info`?n.type:`info`,title:r,message:typeof n.message==`string`?n.message:void 0,source:e,dedupeKey:`extension:${e}:${r}`})}),e.registerMethod(`session.navigate`,async(e,t)=>{let n=t&&typeof t==`object`&&t&&`conversationId`in t?String(t.conversationId??``):``;n&&window.dispatchEvent(new CustomEvent(`navigate-to-chat`,{detail:{conversationId:n},bubbles:!0}))}),e.registerMethod(`session.list`,async()=>{let e=await i(a(`/api/sessions`));if(!e.ok)throw Error(`Failed to list sessions: ${e.status}`);return((await e.json()).items??[]).map(e=>({conversationId:e.key,title:e.name,lastMessageAt:e.updatedAt??e.lastAccessedAt,messageCount:e.messageCount}))}),e.registerMethod(`agent.sendMessage`,async(e,t)=>{let{message:n,conversationId:r,newSession:i}=t,a=r?.trim()||``;return(i||!a)&&(a=(await new g().createSession()).key),await M(a,n),{conversationId:a}}),e.registerMethod(`config.get`,async e=>{let t=await i(a(`/api/extensions/${encodeURIComponent(e)}/config`));if(!t.ok)throw Error(`Failed to get config: ${t.status}`);return t.json()}),e.registerMethod(`config.set`,async(e,t)=>{let n=t&&typeof t==`object`&&t&&!Array.isArray(t)?t:{},r=await i(a(`/api/extensions/${encodeURIComponent(e)}/config`),{method:`PATCH`,body:JSON.stringify(n)});if(!r.ok)throw Error(`Failed to set config: ${r.status}`)}),e.registerMethod(`storage.get`,async(e,t)=>{let n=t&&typeof t==`object`&&t&&`key`in t?String(t.key??``):``,r=await i(a(`/api/extensions/${encodeURIComponent(e)}/storage/${encodeURIComponent(n)}`));if(r.status!==404){if(!r.ok)throw Error(`Failed to get storage key: ${r.status}`);return(await r.json()).value}}),e.registerMethod(`storage.set`,async(e,t)=>{let n=t,r=n&&typeof n.key==`string`?n.key:``,o=await i(a(`/api/extensions/${encodeURIComponent(e)}/storage/${encodeURIComponent(r)}`),{method:`PUT`,body:JSON.stringify({value:n?.value})});if(!o.ok)throw Error(`Failed to set storage key: ${o.status}`)}),e.registerMethod(`storage.remove`,async(e,t)=>{let n=t&&typeof t==`object`&&t&&`key`in t?String(t.key??``):``,r=await i(a(`/api/extensions/${encodeURIComponent(e)}/storage/${encodeURIComponent(n)}`),{method:`DELETE`});if(r.status!==404&&!r.ok)throw Error(`Failed to remove storage key: ${r.status}`)}),e.registerMethod(`storage.keys`,async e=>{let t=await i(a(`/api/extensions/${encodeURIComponent(e)}/storage`));if(!t.ok)throw Error(`Failed to list storage keys: ${t.status}`);return(await t.json()).keys??[]})}function R(e){return e.active||e.activationEligible===!0}function z(e){let t=e.ui?.contributions;return t?Array.isArray(t.pages)&&t.pages.length>0||Array.isArray(t.settingsPanels)&&t.settingsPanels.length>0||Array.isArray(t.chatWidgets)&&t.chatWidgets.length>0:!1}function B(e){return e.source===`bundled`&&e.hasUi===!0&&z(e)}function V(e){return e.kind===`image-generation`||e.kind===`media-provider`}function H(e){return R(e)?e.hasConfigSchema||V(e)?!0:e.hasUi?z(e):!1:!1}function U(e){return H(e)||B(e)}var W=r(),G=(0,S.createContext)(null);function K({children:e}){let t=(0,S.useRef)(null);if(!t.current){let e=new I;L(e),t.current=e}let n=t.current,{data:r,isLoading:i,mutate:l}=c(o(e=>!!e.conversationId)?`gateway-extensions-list`:null,()=>s(a(`/api/extensions`)),{revalidateOnFocus:!1}),u=r?.extensions??[],d=b(e=>e.resolved);(0,S.useEffect)(()=>{let e=()=>{l()};return window.addEventListener(`config-reload`,e),window.addEventListener(`registry-updated`,e),()=>{window.removeEventListener(`config-reload`,e),window.removeEventListener(`registry-updated`,e)}},[l]);let f=(0,S.useCallback)(e=>{let t=e.detail;t?.conversationId&&n.forwardAgentStreamEvent(t.conversationId,t.event??t)},[n]),p=(0,S.useRef)(f);p.current=f,(0,S.useEffect)(()=>{let e=e=>{p.current(e)};return window.addEventListener(w,e),()=>{window.removeEventListener(w,e)}},[]),(0,S.useEffect)(()=>{let e=P(d);n.broadcastEvent(`theme.changed`,e)},[d,n]);let m=(0,S.useRef)(n);m.current=n,(0,S.useEffect)(()=>()=>{m.current.dispose(),t.current=null},[]);let h=(0,S.useMemo)(()=>({router:n,extensions:u,loading:i}),[n,u,i]);return(0,W.jsx)(G.Provider,{value:h,children:e})}function q(){let e=(0,S.useContext)(G);if(!e)throw Error(`useExtensionRouter must be used within ExtensionProvider`);return e.router}function J(){let e=(0,S.useContext)(G);if(!e)throw Error(`useExtensions must be used within ExtensionProvider`);return e.extensions}function Y(){let e=(0,C.c)(2),t=J(),n;return e[0]===t?n=e[1]:(n=t.filter(H),e[0]=t,e[1]=n),n}function X(){let e=(0,S.useContext)(G);if(!e)throw Error(`useExtensionsLoading must be used within ExtensionProvider`);return e.loading}export{Y as a,P as c,A as d,X as i,M as l,q as n,V as o,J as r,U as s,K as t,w as u};
@@ -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{f as i,t as a}from"./chunk-KS7C4IRE-CiwuuyV8.js";import{a as o,i as s,l as c,n as l,o as u}from"./locale-store-5Hf8J8-_.js";import{t as d}from"./messages-uXxg5p54.js";import{t as f}from"./resource-unavailable-BUWsH3fp.js";import{n as p,r as m}from"./popover-select-DD8fmrxH.js";import{t as h}from"./cn-0WouolD0.js";import{i as g}from"./vendor-swr-CdRzEUwF.js";import{t as _}from"./button-CnRSIP6m.js";import{r as v}from"./extension-provider-BA0Y2Rvs.js";import{a as y,o as b,s as x}from"./form-field-width-DJw_jULe.js";import{t as S}from"./extension-iframe-host-CnOdNwbo.js";import{t as C}from"./settings-loading-skeleton-BTqvr_Fw.js";import{n as w,t as T}from"./settings-page-header-C8a_oOyw.js";import"./settings-page-layout-CTSRWljG.js";import{n as E,t as D}from"./use-autosave-B3p2QWaF.js";import{a as O,c as k,o as A}from"./voice-config-api-D9iNJSvm.js";import{t as j}from"./voice-api-key-field-DbSQHZZW.js";import{t as M}from"./schema-form-BKeP5G7b.js";var N=e(t(),1),P=n(),F=r();function I(e){let t=(0,P.c)(2),{children:n}=e,r;return t[0]===n?r=t[1]:(r=(0,F.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:n}),t[0]=n,t[1]=r),r}function L(e){let t=e?.manifest?.mediaUnderstandingProviders?.[0];if(typeof t==`string`&&t.trim())return t.trim();let n=e?.manifest?.contracts?.mediaUnderstandingProviders?.[0];if(typeof n==`string`&&n.trim())return n.trim()}function R(){return h(b,y)}function z(){return h(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,x,`dark:border-edge`)}function B(e,t,n){if(!e||!t)return{apiKey:``,model:n};let r=e.stt.providers?.[t];return{apiKey:typeof r?.apiKey==`string`?r.apiKey:``,model:typeof r?.model==`string`?r.model:n}}function V({providerId:e,voiceSettings:t,mutateVoice:n}){let r=d(l(e=>e.language)),i=r.voiceSettings,a=r.extensionSttMedia,o={maskedHelp:i.apiKeyMaskedHelp,copy:i.apiKeyCopy,copied:i.apiKeyCopied,show:i.apiKeyShow,hide:i.apiKeyHide,notInConfigFile:i.apiKeyNotInConfigFile,loadFailed:i.apiKeyRevealFailed},{data:c}=g(s(`/api/voice/stt-providers`),A,{revalidateOnFocus:!1}),u=(0,N.useMemo)(()=>c?.providers.find(t=>t.id===e),[e,c]),f=u?.configured??!1,_=u?.models??[],v=_[0]?.id??u?.fields.find(e=>e.key===`model`)?.defaultValue??``,b=(0,N.useMemo)(()=>B(t,e,v),[v,e,t]),x=(0,N.useRef)(!1),[S,C]=(0,N.useState)(null),w=S??b,T=(0,N.useRef)(w);T.current=w;let O=b,M=D({value:w,dirty:w.apiKey!==O.apiKey||w.model!==O.model,onSave:(0,N.useCallback)(async r=>{let i=structuredClone(t);i.stt.enabled=!0,i.stt.provider=e,i.stt.providers={...i.stt.providers??{},[e]:{...i.stt.providers?.[e]??{},apiKey:r.apiKey,model:r.model}},await k(i,`transcription`),await n(i,!1),x.current=JSON.stringify(T.current)!==JSON.stringify(r),C(e=>e&&JSON.stringify(e)===JSON.stringify(r)?null:e)},[n,e,t])}),P=_.length>0?_:w.model?[{id:w.model,name:w.model}]:[];return(0,F.jsxs)(`div`,{className:`flex flex-col gap-4 rounded-xl bg-surface-base p-4`,onBlurCapture:M.onBlurCapture,children:[(0,F.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,F.jsxs)(`div`,{children:[(0,F.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:a.credentialsTitle}),(0,F.jsx)(`p`,{className:`mt-1 text-xs text-fg-muted`,children:a.credentialsHint.replace(`{providerId}`,e)})]}),(0,F.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,F.jsx)(E,{status:M.status,error:M.error}),(0,F.jsx)(`span`,{className:h(`rounded-full px-2 py-0.5 text-xs font-medium`,f?`bg-emerald-500/10 text-emerald-700 dark:text-emerald-300`:`bg-amber-500/10 text-amber-800 dark:text-amber-200`),children:f?a.configured:a.notConfigured})]})]}),(0,F.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,F.jsxs)(`div`,{className:h(`flex flex-col gap-1.5`,y),children:[(0,F.jsx)(I,{children:i.stt.apiKey}),(0,F.jsx)(j,{kind:`stt`,providerId:e,fieldId:`ext-stt-${e}-api-key`,value:w.apiKey,onChange:e=>{x.current=!0,C(t=>({...t??b,apiKey:e}))},labels:o,placeholder:e===`groq`?`gsk_...`:`sk-...`}),(0,F.jsxs)(`p`,{className:`text-xs text-fg-subtle`,children:[i.stt.apiKeyDesc,e===`groq`?` (GROQ_API_KEY)`:``]})]}),(0,F.jsxs)(`div`,{className:h(`flex flex-col gap-1.5`,y),children:[(0,F.jsx)(I,{children:i.stt.model}),P.length>0?(0,F.jsx)(p,{className:R(),value:w.model,onChange:e=>{x.current=!0,C(t=>({...t??b,model:e.target.value})),M.saveNow({...w,model:e.target.value})},children:P.map(e=>(0,F.jsx)(m,{value:e.id,children:e.name},e.id))}):(0,F.jsx)(`input`,{className:z(),value:w.model,onChange:e=>{x.current=!0,C(t=>({...t??b,model:e.target.value}))}})]})]})]})}function H(e){let t=(0,P.c)(13),{extensionId:n}=e,r=l(W),i=c(U),a;t[0]===n?a=t[1]:(a=()=>u(s(`/api/extensions/${encodeURIComponent(n)}`)),t[0]=n,t[1]=a);let{data:o,isLoading:d}=g(i&&n?`ext-stt-detail-${n}`:null,a),f;t[2]===o?f=t[3]:(f=L(o),t[2]=o,t[3]=f);let p=f,m;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(m={revalidateOnFocus:!1},t[4]=m):m=t[4];let{data:h,mutate:_,isLoading:v}=g(i?`voice-settings-ext-stt`:null,O,m);if(!i)return null;if(d||v){let e;return t[5]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,F.jsx)(C,{rows:2}),t[5]=e):e=t[5],e}if(!p){let e=r===`zh`?`该插件未声明 mediaUnderstandingProviders。`:`This plugin does not declare mediaUnderstandingProviders.`,n;return t[6]===e?n=t[7]:(n=(0,F.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e}),t[6]=e,t[7]=n),n}if(!h)return null;let y=`${n}:${p}`,b;return t[8]!==_||t[9]!==p||t[10]!==y||t[11]!==h?(b=(0,F.jsx)(V,{providerId:p,voiceSettings:h,mutateVoice:_},y),t[8]=_,t[9]=p,t[10]=y,t[11]=h,t[12]=b):b=t[12],b}function U(e){return!!e.conversationId}function W(e){return e.language}function G(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function K(e){let t={};if(e.type!==`object`||!G(e.properties))return t;for(let[n,r]of Object.entries(e.properties))G(r)&&Object.prototype.hasOwnProperty.call(r,`default`)&&(t[n]=r.default);return t}function q(e,t){switch(t.type){case`sync`:return{localValues:t.value,isDirty:!1};case`change`:return{localValues:t.value,isDirty:!0};case`reset-defaults`:return{localValues:t.value,isDirty:!0};case`saved`:return JSON.stringify(e.localValues)===JSON.stringify(t.value)?{localValues:e.localValues,isDirty:!1}:e}}function J({extensionId:e}){let t=c(e=>!!e.conversationId),{data:n,error:r}=g(t&&e?`ext-detail-${e}`:null,()=>u(s(`/api/extensions/${encodeURIComponent(e)}`))),{data:i,mutate:a,error:l}=g(t&&e?`ext-cfg-${e}`:null,()=>u(s(`/api/extensions/${encodeURIComponent(e)}/config`))),d=n?.manifest?.configSchema,f=(0,N.useMemo)(()=>d&&d.type===`object`?K(d):{},[d]),p=(0,N.useMemo)(()=>({...f,...i??{}}),[f,i]),[m,h]=(0,N.useReducer)(q,{localValues:{},isDirty:!1}),v=(0,N.useRef)(!1),y=(0,N.useRef)(m.localValues);y.current=m.localValues;let b=(0,N.useRef)(p);!v.current&&b.current!==p&&(b.current=p,h({type:`sync`,value:p}));let x=(0,N.useCallback)(e=>{v.current=!0,h({type:`change`,value:e})},[]),S=(0,N.useCallback)(()=>{!d||d.type!==`object`||(v.current=!0,h({type:`reset-defaults`,value:{...K(d)}}))},[d]),C=(0,N.useCallback)(async t=>{if(!e)return;let n=await o(s(`/api/extensions/${encodeURIComponent(e)}/config`),{method:`PATCH`,body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error?.message??n.statusText)}await a(t,!1),h({type:`saved`,value:t}),v.current=JSON.stringify(y.current)!==JSON.stringify(t)},[e,a]),w=D({value:m.localValues,dirty:m.isDirty,onSave:C});if(!t)return null;if(r||l){let e=r??l;return(0,F.jsxs)(`p`,{className:`text-sm text-fg-muted`,children:[`Could not load extension settings: `,e instanceof Error?e.message:String(e)]})}return!d||d.type!==`object`?null:(0,F.jsxs)(`div`,{className:`flex flex-col gap-3 rounded-xl bg-surface-hover/20 p-4`,onBlurCapture:w.onBlurCapture,children:[(0,F.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,F.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:`Configuration`}),(0,F.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,F.jsx)(E,{status:w.status,error:w.error}),(0,F.jsx)(_,{type:`button`,variant:`ghost`,className:`h-8 text-xs`,onClick:S,children:`Reset to defaults`})]})]}),(0,F.jsx)(M,{schema:d,values:m.localValues,onChange:x})]})}function Y(){let e=(0,P.c)(36),t=l(X),n;e[0]===t?n=e[1]:(n=d(t),e[0]=t,e[1]=n);let r=n.extensionSttMedia,{extensionId:o,panelId:s}=i(),c=v();if(!o){let t;return e[2]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,F.jsx)(f,{kind:`plugin`,backTo:`/capabilities/extensions`}),e[2]=t):t=e[2],t}let u,p,m;if(e[3]!==o||e[4]!==c||e[5]!==s){m=Symbol.for(`react.early_return_sentinel`);bb0:{let t;if(e[9]===o?t=e[10]:(t=e=>e.id===o,e[9]=o,e[10]=t),u=c.find(t),!u){let t;e[11]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,F.jsx)(f,{kind:`plugin`,backTo:`/capabilities/extensions`}),e[11]=t):t=e[11],m=t;break bb0}let n=u.ui?.contributions?.settingsPanels;p=s?n?.find(e=>e.id===s||e.id===`${o}.${s}`):n?.[0]}e[3]=o,e[4]=c,e[5]=s,e[6]=u,e[7]=p,e[8]=m}else u=e[6],p=e[7],m=e[8];if(m!==Symbol.for(`react.early_return_sentinel`))return m;let h=p,g=!!(h&&u.ui),_=!!u.hasConfigSchema,y=u.kind===`media-provider`;if(!_&&!g&&!y){let t;return e[12]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,F.jsx)(f,{kind:`plugin-settings`,backTo:`/capabilities/extensions`}),e[12]=t):t=e[12],t}let b=h?.title??(t===`zh`?`${u.name} 设置`:`${u.name} Settings`),x;e[13]===b?x=e[14]:(x=(0,F.jsx)(T,{title:b}),e[13]=b,e[14]=x);let C;e[15]!==y||e[16]!==r?(C=y?(0,F.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-lg bg-surface-base px-4 py-3 text-sm`,children:[(0,F.jsx)(`p`,{className:`leading-relaxed text-fg-muted`,children:r.banner}),(0,F.jsx)(a,{to:`/settings/capabilities/models?configure=transcription`,className:`w-fit font-medium text-accent hover:underline`,children:r.openVoice})]}):null,e[15]=y,e[16]=r,e[17]=C):C=e[17];let E;e[18]!==o||e[19]!==y?(E=y?(0,F.jsx)(H,{extensionId:o}):null,e[18]=o,e[19]=y,e[20]=E):E=e[20];let D;e[21]!==o||e[22]!==_?(D=_?(0,F.jsx)(J,{extensionId:o}):null,e[21]=o,e[22]=_,e[23]=D):D=e[23];let O;e[24]!==u.name||e[25]!==u.ui||e[26]!==o||e[27]!==g||e[28]!==h?(O=g&&h&&u.ui?(0,F.jsx)(`div`,{className:`overflow-hidden rounded-xl bg-surface-base shadow-surface`,children:(0,F.jsx)(S,{extensionId:o,extensionName:u.name,entrypoint:h.entrypoint,permissions:u.ui?.permissions,title:h.title,className:`w-full`,minHeight:120,maxHeight:2e3})}):null,e[24]=u.name,e[25]=u.ui,e[26]=o,e[27]=g,e[28]=h,e[29]=O):O=e[29];let k;return e[30]!==x||e[31]!==C||e[32]!==E||e[33]!==D||e[34]!==O?(k=(0,F.jsxs)(w,{gap:`gap-5`,children:[x,C,E,D,O]}),e[30]=x,e[31]=C,e[32]=E,e[33]=D,e[34]=O,e[35]=k):k=e[35],k}function X(e){return e.language}export{Y as ExtensionSettingsPage};
@@ -1 +1 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,i as n,t as r}from"./vendor-react-BOUWij0V.js";import{t as i}from"./cn-0WouolD0.js";import{l as a,p as o}from"./locale-store-lIXD1FMw.js";import{t as s}from"./phone-workspace-store-fhnZrgy_.js";import{n as c}from"./electron-env-DHOGevH3.js";import{a as l}from"./shares-api-rtWVHA_d.js";var u=`xopc:right-workspace:v1`,d={open:!1,tabs:[],activeId:null},f={panes:{},width:0,treeWidth:240,fileTreeOpen:!0,sideTreeOpen:!1};function p(){try{let e=JSON.parse(sessionStorage.getItem(u)||`null`);if(!e||e.version!==1||typeof e.panes!=`object`||!e.panes||e.identity!==a.getState().conversationId||e.gateway!==a.getState().baseUrl)return f;let t={};for(let[n,r]of Object.entries(e.panes)){let e=r;if(!e||!Array.isArray(e.tabs))continue;let i=e.tabs.filter(e=>e&&typeof e.id==`string`&&typeof e.title==`string`&&(e.kind===`file`&&typeof e.path==`string`||e.kind===`sidechat`&&typeof e.sideChatId==`string`||e.kind===`home`||e.kind===`files`));t[n]={open:e.open===!0&&i.length>0,tabs:i,activeId:i.some(t=>t.id===e.activeId)?e.activeId:i[0]?.id??null}}return{...f,panes:t}}catch{return f}}function m(e,t){try{let n=Number(localStorage.getItem(e));return n>0&&Number.isFinite(n)?n:t}catch{return t}}function h(e){try{let t=Object.fromEntries(Object.entries(e.panes).map(([e,t])=>[e,{...t,tabs:t.tabs.filter(e=>e.kind!==`browser`&&(e.kind!==`file`||!e.attachment)).map(e=>({...e}))}]));sessionStorage.setItem(u,JSON.stringify({version:1,identity:a.getState().conversationId,gateway:a.getState().baseUrl,panes:t}))}catch{}}var g=new WeakMap;function _(e){return e?e.id||e.uri?e.id||e.uri:(g.has(e)||g.set(e,crypto.randomUUID()),g.get(e)):``}function v(e){return e.replace(/\\/g,`/`).split(`/`).filter(e=>e!==`.`).join(`/`)}function y(e){let t=e.projectId?`project:${e.projectId}`:e.conversationId?`session:${e.conversationId}`:`agent:${e.agentId??``}`;return JSON.stringify([t,e.path?v(e.path):_(e.attachment)])}var b=o((e,t)=>{let n=(n,r)=>{e(e=>({panes:{...e.panes,[n]:r(e.panes[n]??d)}})),h(t())};return{...p(),width:m(`xopc:workspace-width`,0),treeWidth:m(`xopc:workspace-tree-width`,240),notices:{},setNotice:(t,n)=>e(e=>({notices:{...e.notices,[t]:n}})),fileStatus:{},setFileStatus:(n,r)=>{r&&t().keepFileOpen(n),e(e=>({fileStatus:{...e.fileStatus,[n]:r??``}}))},keepFileOpen:e=>{for(let[r,i]of Object.entries(t().panes))i.tabs.some(t=>t.id===e&&t.kind===`file`&&t.preview)&&n(r,t=>({...t,tabs:t.tabs.map(t=>t.id===e?{...t,preview:!1}:t)}))},scope:`new`,setScope:t=>e({scope:t}),migrateScope:(n,r)=>{let i=t().panes[n];if(!i||n===r)return;let a=t().panes[r]??d,o={...t().panes,[r]:{open:i.open||a.open,tabs:[...a.tabs,...i.tabs.filter(e=>!a.tabs.some(t=>t.id===e.id))],activeId:i.activeId??a.activeId}};delete o[n],e({panes:o,scope:t().scope===n?r:t().scope}),h(t())},openPhone:(e,t,r,i=!0,a=!0)=>{let o=`phone:${e}`;n(r,n=>({open:i||n.open,activeId:i?o:n.activeId,tabs:n.tabs.some(e=>e.id===o)?n.tabs.map(e=>e.id===o?{...e,title:t}:e):[...n.tabs,{id:o,kind:`phone`,phoneSessionId:e,title:t,visitedAt:Date.now()}]})),a&&s.getState().show(e,i,/^[\da-f]{8}-[\da-f-]{27}$/i.test(r)?r:void 0)},openTools:(e=t().scope)=>{let r=crypto.randomUUID();return n(e,e=>{let t=[...e.tabs];return t.splice(Math.max(0,t.findIndex(t=>t.id===e.activeId)+1),0,{id:r,kind:`home`,title:`New tab`,visitedAt:Date.now()}),{open:!0,tabs:t,activeId:r}}),r},openBrowser:(e,r=t().scope,i)=>{let a=t().panes[r]??d,o=a.tabs.find(e=>e.id===a.activeId&&e.kind===`home`)?.id??crypto.randomUUID(),s={id:o,kind:`browser`,title:`Browser`,initialUrl:e,visitedAt:Date.now(),returnTo:i??a.activeId??void 0};return n(r,e=>{let t=[...e.tabs],n=t.findIndex(e=>e.id===o);return n>=0?t[n]=s:t.splice(Math.max(0,t.findIndex(t=>t.id===e.activeId)+1),0,s),{open:!0,activeId:o,tabs:t}}),o},updateBrowserTitle:(e,r)=>{for(let[i,a]of Object.entries(t().panes))a.tabs.some(t=>t.id===e&&t.kind===`browser`&&t.title!==r)&&n(i,t=>({...t,tabs:t.tabs.map(t=>t.id===e?{...t,title:r.slice(0,200)}:t)}))},openFiles:(e=t().scope)=>{let r=t().panes[e]??d,i=r.tabs.find(e=>e.kind===`files`);if(i){t().activate(i.id,e);return}let a=r.tabs.find(e=>e.id===r.activeId&&e.kind===`home`),o=a?.id??crypto.randomUUID();n(e,e=>({open:!0,activeId:o,tabs:a?e.tabs.map(e=>e.id===o?{...e,kind:`files`,title:`Files`}:e):[...e.tabs,{id:o,kind:`files`,title:`Files`,visitedAt:Date.now()}]}))},setOpen:(e,r=t().scope)=>{if(e&&!t().panes[r]?.tabs.length){t().openTools(r);return}n(r,t=>({...t,open:e,activeId:t.activeId??t.tabs[0]?.id??null}))},activate:(e,r=t().scope)=>{let i=t().panes[r]?.tabs.find(t=>t.id===e);i?.kind===`phone`&&(s.getState().setDisplayMode(`docked`),s.getState().show(i.phoneSessionId,!0,/^[\da-f]{8}-[\da-f-]{27}$/i.test(r)?r:void 0)),n(r,t=>({...t,open:!!(e&&t.tabs.some(t=>t.id===e)),activeId:e&&t.tabs.some(t=>t.id===e)?e:t.activeId,tabs:t.tabs.map(t=>t.id===e?{...t,visitedAt:Date.now()}:t)}))},openFile:(e,r=t().scope)=>{let i=t().panes[r]??d,a=i.tabs.find(t=>t.kind===`file`&&(y(t)===y(e)||t.aliases?.includes(y(e)))),o=!a&&e.preview!==!1?i.tabs.find(e=>e.kind===`file`&&e.preview&&!t().fileStatus[e.id]):void 0,s=a?.id??crypto.randomUUID(),c={...a?.kind===`file`?a:{},...e,preview:a?.kind===`file`?a.preview===!0:e.preview!==!1,id:s,kind:`file`,title:e.path?.replace(/\\/g,`/`).split(`/`).pop()||e.attachment?.name||`File`,visitedAt:Date.now(),returnTo:a?.returnTo??(o?o.returnTo:i.activeId??void 0)};return n(r,e=>{let t=[...e.tabs],n=t.findIndex(e=>e.id===s);return n>=0?t[n]=c:o?t[t.findIndex(e=>e.id===o.id)]=c:t.splice(Math.max(0,t.findIndex(t=>t.id===e.activeId)+1),0,c),{open:!0,tabs:t,activeId:s}}),s},addSideChat:(e,t,r,i=!0)=>n(r,n=>{let r=`side:${e}`;if(n.tabs.some(e=>e.id===r))return i?{...n,open:!0,activeId:r}:n;let a=i?n.tabs.findIndex(e=>e.id===n.activeId&&e.kind===`home`):-1,o=[...n.tabs];return a>=0&&o.splice(a,1),o.splice(a>=0?a:Math.max(0,o.findIndex(e=>e.id===n.activeId)+1),0,{id:r,kind:`sidechat`,sideChatId:e,title:t,visitedAt:Date.now()}),{tabs:o,activeId:i?r:n.activeId,open:i||n.open}}),resolveFileIdentity:(e,r)=>{for(let[i,a]of Object.entries(t().panes)){let o=a.tabs.find(t=>t.kind===`file`&&t.id===e);if(!o||o.resourceId===r)continue;let s=a.tabs.find(t=>t.kind===`file`&&t.id!==e&&t.resourceId===r);n(i,n=>!s||t().fileStatus[e]?{...n,tabs:n.tabs.map(t=>t.id===e?{...t,resourceId:r}:t)}:{...n,activeId:n.activeId===e?s.id:n.activeId,tabs:n.tabs.filter(t=>t.id!==e).map(e=>e.id===s.id?{...s,preview:s.preview===!0&&o.preview===!0,aliases:[...new Set([...s.aliases??[],y(o)])],line:o.line??s.line}:e)})}},replaceSideChat:(e,t,r)=>n(r,n=>({...n,activeId:n.activeId===`side:${e}`?`side:${t}`:n.activeId,tabs:n.tabs.map(n=>n.id===`side:${e}`?{...n,id:`side:${t}`,kind:`sidechat`,sideChatId:t}:n)})),remove:(e,r=t().scope)=>n(r,t=>{let n=t.tabs.find(t=>t.id===e),r=t.tabs.filter(t=>t.id!==e),i=r.find(e=>e.id===n?.returnTo)??[...r].sort((e,t)=>t.visitedAt-e.visitedAt)[0];return{...t,open:t.open&&r.length>0,tabs:r,activeId:t.activeId===e?i?.id??null:t.activeId}}),setWidth:t=>{e({width:t});try{localStorage.setItem(`xopc:workspace-width`,String(t))}catch{}},setTreeWidth:n=>{e({treeWidth:Math.max(200,Math.min(320,n))});try{localStorage.setItem(`xopc:workspace-tree-width`,String(t().treeWidth))}catch{}},setTreeOpen:(t,n)=>e(t===`file`?{fileTreeOpen:n}:{sideTreeOpen:n}),reset:()=>{e({panes:{},fileStatus:{},notices:{},scope:`new`}),h(t())}}});a.subscribe((e,t)=>{e.baseUrl!==t.baseUrl||t.conversationId!==void 0&&e.conversationId!==t.conversationId?b.getState().reset():e.conversationId&&!t.conversationId&&b.setState({panes:p().panes})});var x=e(t(),1);function S(){let[e,t]=(0,x.useState)(!1),[n,r]=(0,x.useState)(!1),[i,a]=(0,x.useState)(null),[o,s]=(0,x.useState)(null),[c,u]=(0,x.useState)(null),d=(0,x.useCallback)(e=>{t(!0),u(e),a(null),s(null)},[]),f=(0,x.useCallback)(async e=>{if(!c||n)return null;r(!0),s(null);try{let t=await l({...c,...e});return a(t.payload),t.payload}catch(e){let t=e instanceof Error?e.message:String(e);return s(t),null}finally{r(!1)}},[n,c]),p=(0,x.useCallback)(()=>{a(null),s(null),r(!1),u(null)},[]);return{dialogOpen:e,loading:n,result:i,error:o,pendingParams:c,createShareLink:d,confirmShareLink:f,handleOpenChange:(0,x.useCallback)(e=>{t(e),e||p()},[p])}}var C=e(n(),1);function w(){return c()&&window.electronAPI?.platform===`darwin`}function T(){return c()&&window.electronAPI?.platform===`win32`}function E(){return T()?`windows-preview-viewport`:``}var D=r();function O({expanded:e,children:t}){let n=(0,x.useRef)(null),r=e?n.current?.closest(`.app-main-surface`)??document.querySelector(`.app-main-surface`):null,a=(0,D.jsx)(`div`,{"data-file-preview-expanded":e||void 0,"data-browser-occluder":e||void 0,className:i(`flex h-full min-h-0 min-w-0 flex-1 flex-col overflow-hidden bg-surface-inset [&_.markdown-body_h1]:border-b-0! [&_.markdown-body_h2]:border-b-0!`,e&&(r?`absolute inset-0 z-[115]`:`fixed inset-0 z-[115] h-[100dvh] w-screen`),e&&!r&&E()),children:t});return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`span`,{ref:n,hidden:!0,"aria-hidden":!0}),e?(0,C.createPortal)(a,r??document.body):a]})}export{S as a,T as i,E as n,d as o,w as r,b as s,O as t};
1
+ import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,i as n,t as r}from"./vendor-react-BOUWij0V.js";import{l as i,p as a}from"./locale-store-5Hf8J8-_.js";import{t as o}from"./cn-0WouolD0.js";import{t as s}from"./phone-workspace-store-mawKT5kV.js";import{n as c}from"./electron-env-DHOGevH3.js";import{a as l}from"./shares-api-CztKbxdd.js";var u=`xopc:right-workspace:v1`,d={open:!1,tabs:[],activeId:null},f={panes:{},width:0,treeWidth:240,fileTreeOpen:!0,sideTreeOpen:!1};function p(){try{let e=JSON.parse(sessionStorage.getItem(u)||`null`);if(!e||e.version!==1||typeof e.panes!=`object`||!e.panes||e.identity!==i.getState().conversationId||e.gateway!==i.getState().baseUrl)return f;let t={};for(let[n,r]of Object.entries(e.panes)){let e=r;if(!e||!Array.isArray(e.tabs))continue;let i=e.tabs.filter(e=>e&&typeof e.id==`string`&&typeof e.title==`string`&&(e.kind===`file`&&typeof e.path==`string`||e.kind===`sidechat`&&typeof e.sideChatId==`string`||e.kind===`home`||e.kind===`files`));t[n]={open:e.open===!0&&i.length>0,tabs:i,activeId:i.some(t=>t.id===e.activeId)?e.activeId:i[0]?.id??null}}return{...f,panes:t}}catch{return f}}function m(e,t){try{let n=Number(localStorage.getItem(e));return n>0&&Number.isFinite(n)?n:t}catch{return t}}function h(e){try{let t=Object.fromEntries(Object.entries(e.panes).map(([e,t])=>[e,{...t,tabs:t.tabs.filter(e=>e.kind!==`browser`&&(e.kind!==`file`||!e.attachment)).map(e=>({...e}))}]));sessionStorage.setItem(u,JSON.stringify({version:1,identity:i.getState().conversationId,gateway:i.getState().baseUrl,panes:t}))}catch{}}var g=new WeakMap;function _(e){return e?e.id||e.uri?e.id||e.uri:(g.has(e)||g.set(e,crypto.randomUUID()),g.get(e)):``}function v(e){return e.replace(/\\/g,`/`).split(`/`).filter(e=>e!==`.`).join(`/`)}function y(e){let t=e.projectId?`project:${e.projectId}`:e.conversationId?`session:${e.conversationId}`:`agent:${e.agentId??``}`;return JSON.stringify([t,e.path?v(e.path):_(e.attachment)])}var b=a((e,t)=>{let n=(n,r)=>{e(e=>({panes:{...e.panes,[n]:r(e.panes[n]??d)}})),h(t())};return{...p(),width:m(`xopc:workspace-width`,0),treeWidth:m(`xopc:workspace-tree-width`,240),notices:{},setNotice:(t,n)=>e(e=>({notices:{...e.notices,[t]:n}})),fileStatus:{},setFileStatus:(n,r)=>{r&&t().keepFileOpen(n),e(e=>({fileStatus:{...e.fileStatus,[n]:r??``}}))},keepFileOpen:e=>{for(let[r,i]of Object.entries(t().panes))i.tabs.some(t=>t.id===e&&t.kind===`file`&&t.preview)&&n(r,t=>({...t,tabs:t.tabs.map(t=>t.id===e?{...t,preview:!1}:t)}))},scope:`new`,setScope:t=>e({scope:t}),migrateScope:(n,r)=>{let i=t().panes[n];if(!i||n===r)return;let a=t().panes[r]??d,o={...t().panes,[r]:{open:i.open||a.open,tabs:[...a.tabs,...i.tabs.filter(e=>!a.tabs.some(t=>t.id===e.id))],activeId:i.activeId??a.activeId}};delete o[n],e({panes:o,scope:t().scope===n?r:t().scope}),h(t())},openPhone:(e,t,r,i=!0,a=!0)=>{let o=`phone:${e}`;n(r,n=>({open:i||n.open,activeId:i?o:n.activeId,tabs:n.tabs.some(e=>e.id===o)?n.tabs.map(e=>e.id===o?{...e,title:t}:e):[...n.tabs,{id:o,kind:`phone`,phoneSessionId:e,title:t,visitedAt:Date.now()}]})),a&&s.getState().show(e,i,/^[\da-f]{8}-[\da-f-]{27}$/i.test(r)?r:void 0)},openTools:(e=t().scope)=>{let r=crypto.randomUUID();return n(e,e=>{let t=[...e.tabs];return t.splice(Math.max(0,t.findIndex(t=>t.id===e.activeId)+1),0,{id:r,kind:`home`,title:`New tab`,visitedAt:Date.now()}),{open:!0,tabs:t,activeId:r}}),r},openBrowser:(e,r=t().scope,i)=>{let a=t().panes[r]??d,o=a.tabs.find(e=>e.id===a.activeId&&e.kind===`home`)?.id??crypto.randomUUID(),s={id:o,kind:`browser`,title:`Browser`,initialUrl:e,visitedAt:Date.now(),returnTo:i??a.activeId??void 0};return n(r,e=>{let t=[...e.tabs],n=t.findIndex(e=>e.id===o);return n>=0?t[n]=s:t.splice(Math.max(0,t.findIndex(t=>t.id===e.activeId)+1),0,s),{open:!0,activeId:o,tabs:t}}),o},updateBrowserTitle:(e,r)=>{for(let[i,a]of Object.entries(t().panes))a.tabs.some(t=>t.id===e&&t.kind===`browser`&&t.title!==r)&&n(i,t=>({...t,tabs:t.tabs.map(t=>t.id===e?{...t,title:r.slice(0,200)}:t)}))},openFiles:(e=t().scope)=>{let r=t().panes[e]??d,i=r.tabs.find(e=>e.kind===`files`);if(i){t().activate(i.id,e);return}let a=r.tabs.find(e=>e.id===r.activeId&&e.kind===`home`),o=a?.id??crypto.randomUUID();n(e,e=>({open:!0,activeId:o,tabs:a?e.tabs.map(e=>e.id===o?{...e,kind:`files`,title:`Files`}:e):[...e.tabs,{id:o,kind:`files`,title:`Files`,visitedAt:Date.now()}]}))},setOpen:(e,r=t().scope)=>{if(e&&!t().panes[r]?.tabs.length){t().openTools(r);return}n(r,t=>({...t,open:e,activeId:t.activeId??t.tabs[0]?.id??null}))},activate:(e,r=t().scope)=>{let i=t().panes[r]?.tabs.find(t=>t.id===e);i?.kind===`phone`&&(s.getState().setDisplayMode(`docked`),s.getState().show(i.phoneSessionId,!0,/^[\da-f]{8}-[\da-f-]{27}$/i.test(r)?r:void 0)),n(r,t=>({...t,open:!!(e&&t.tabs.some(t=>t.id===e)),activeId:e&&t.tabs.some(t=>t.id===e)?e:t.activeId,tabs:t.tabs.map(t=>t.id===e?{...t,visitedAt:Date.now()}:t)}))},openFile:(e,r=t().scope)=>{let i=t().panes[r]??d,a=i.tabs.find(t=>t.kind===`file`&&(y(t)===y(e)||t.aliases?.includes(y(e)))),o=!a&&e.preview!==!1?i.tabs.find(e=>e.kind===`file`&&e.preview&&!t().fileStatus[e.id]):void 0,s=a?.id??crypto.randomUUID(),c={...a?.kind===`file`?a:{},...e,preview:a?.kind===`file`?a.preview===!0:e.preview!==!1,id:s,kind:`file`,title:e.path?.replace(/\\/g,`/`).split(`/`).pop()||e.attachment?.name||`File`,visitedAt:Date.now(),returnTo:a?.returnTo??(o?o.returnTo:i.activeId??void 0)};return n(r,e=>{let t=[...e.tabs],n=t.findIndex(e=>e.id===s);return n>=0?t[n]=c:o?t[t.findIndex(e=>e.id===o.id)]=c:t.splice(Math.max(0,t.findIndex(t=>t.id===e.activeId)+1),0,c),{open:!0,tabs:t,activeId:s}}),s},addSideChat:(e,t,r,i=!0)=>n(r,n=>{let r=`side:${e}`;if(n.tabs.some(e=>e.id===r))return i?{...n,open:!0,activeId:r}:n;let a=i?n.tabs.findIndex(e=>e.id===n.activeId&&e.kind===`home`):-1,o=[...n.tabs];return a>=0&&o.splice(a,1),o.splice(a>=0?a:Math.max(0,o.findIndex(e=>e.id===n.activeId)+1),0,{id:r,kind:`sidechat`,sideChatId:e,title:t,visitedAt:Date.now()}),{tabs:o,activeId:i?r:n.activeId,open:i||n.open}}),resolveFileIdentity:(e,r)=>{for(let[i,a]of Object.entries(t().panes)){let o=a.tabs.find(t=>t.kind===`file`&&t.id===e);if(!o||o.resourceId===r)continue;let s=a.tabs.find(t=>t.kind===`file`&&t.id!==e&&t.resourceId===r);n(i,n=>!s||t().fileStatus[e]?{...n,tabs:n.tabs.map(t=>t.id===e?{...t,resourceId:r}:t)}:{...n,activeId:n.activeId===e?s.id:n.activeId,tabs:n.tabs.filter(t=>t.id!==e).map(e=>e.id===s.id?{...s,preview:s.preview===!0&&o.preview===!0,aliases:[...new Set([...s.aliases??[],y(o)])],line:o.line??s.line}:e)})}},replaceSideChat:(e,t,r)=>n(r,n=>({...n,activeId:n.activeId===`side:${e}`?`side:${t}`:n.activeId,tabs:n.tabs.map(n=>n.id===`side:${e}`?{...n,id:`side:${t}`,kind:`sidechat`,sideChatId:t}:n)})),remove:(e,r=t().scope)=>n(r,t=>{let n=t.tabs.find(t=>t.id===e),r=t.tabs.filter(t=>t.id!==e),i=r.find(e=>e.id===n?.returnTo)??[...r].sort((e,t)=>t.visitedAt-e.visitedAt)[0];return{...t,open:t.open&&r.length>0,tabs:r,activeId:t.activeId===e?i?.id??null:t.activeId}}),setWidth:t=>{e({width:t});try{localStorage.setItem(`xopc:workspace-width`,String(t))}catch{}},setTreeWidth:n=>{e({treeWidth:Math.max(200,Math.min(320,n))});try{localStorage.setItem(`xopc:workspace-tree-width`,String(t().treeWidth))}catch{}},setTreeOpen:(t,n)=>e(t===`file`?{fileTreeOpen:n}:{sideTreeOpen:n}),reset:()=>{e({panes:{},fileStatus:{},notices:{},scope:`new`}),h(t())}}});i.subscribe((e,t)=>{e.baseUrl!==t.baseUrl||t.conversationId!==void 0&&e.conversationId!==t.conversationId?b.getState().reset():e.conversationId&&!t.conversationId&&b.setState({panes:p().panes})});var x=e(t(),1);function S(){let[e,t]=(0,x.useState)(!1),[n,r]=(0,x.useState)(!1),[i,a]=(0,x.useState)(null),[o,s]=(0,x.useState)(null),[c,u]=(0,x.useState)(null),d=(0,x.useCallback)(e=>{t(!0),u(e),a(null),s(null)},[]),f=(0,x.useCallback)(async e=>{if(!c||n)return null;r(!0),s(null);try{let t=await l({...c,...e});return a(t.payload),t.payload}catch(e){let t=e instanceof Error?e.message:String(e);return s(t),null}finally{r(!1)}},[n,c]),p=(0,x.useCallback)(()=>{a(null),s(null),r(!1),u(null)},[]);return{dialogOpen:e,loading:n,result:i,error:o,pendingParams:c,createShareLink:d,confirmShareLink:f,handleOpenChange:(0,x.useCallback)(e=>{t(e),e||p()},[p])}}var C=e(n(),1);function w(){return c()&&window.electronAPI?.platform===`darwin`}function T(){return c()&&window.electronAPI?.platform===`win32`}function E(){return T()?`windows-preview-viewport`:``}var D=r();function O({expanded:e,children:t}){let n=(0,x.useRef)(null),r=e?n.current?.closest(`.app-main-surface`)??document.querySelector(`.app-main-surface`):null,i=(0,D.jsx)(`div`,{"data-file-preview-expanded":e||void 0,"data-browser-occluder":e||void 0,className:o(`flex h-full min-h-0 min-w-0 flex-1 flex-col overflow-hidden bg-surface-inset [&_.markdown-body_h1]:border-b-0! [&_.markdown-body_h2]:border-b-0!`,e&&(r?`absolute inset-0 z-[115]`:`fixed inset-0 z-[115] h-[100dvh] w-screen`),e&&!r&&E()),children:t});return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`span`,{ref:n,hidden:!0,"aria-hidden":!0}),e?(0,C.createPortal)(i,r??document.body):i]})}export{S as a,T as i,E as n,d as o,w as r,b as s,O as t};
@@ -1 +1 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n}from"./vendor-react-BOUWij0V.js";import{i as r,o as i}from"./locale-store-lIXD1FMw.js";import{i as a,o}from"./vendor-swr-CdRzEUwF.js";var s=e(t(),1),c=n();function l(e){if(!(!e||typeof e!=`object`||!(`section`in e)))return e.section}function u(e){return l(e)===`skills`}function d(){return r(`/api/config`)}var f=null;async function p(){return f||(f=i(d()).finally(()=>{f=null}),f)}function m(e){let t=(0,c.c)(6),n;t[0]===e?n=t[1]:(n=e?d():null,t[0]=e,t[1]=n);let r=n,i;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(i={revalidateOnFocus:!1},t[2]=i):i=t[2];let l=a(r,p,i),f,m;return t[3]===e?(f=t[4],m=t[5]):(f=()=>{if(!e)return;let t=d(),n=e=>{u(e.detail)||o(t)};return window.addEventListener(`config-reload`,n),()=>window.removeEventListener(`config-reload`,n)},m=[e],t[3]=e,t[4]=f,t[5]=m),(0,s.useEffect)(f,m),l}function h(){return o(d())}export{u as a,l as i,h as n,m as r,p as t};
1
+ import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n}from"./vendor-react-BOUWij0V.js";import{i as r,o as i}from"./locale-store-5Hf8J8-_.js";import{i as a,o}from"./vendor-swr-CdRzEUwF.js";var s=e(t(),1),c=n();function l(e){if(!(!e||typeof e!=`object`||!(`section`in e)))return e.section}function u(e){return l(e)===`skills`}function d(){return r(`/api/config`)}var f=null;async function p(){return f||(f=i(d()).finally(()=>{f=null}),f)}function m(e){let t=(0,c.c)(6),n;t[0]===e?n=t[1]:(n=e?d():null,t[0]=e,t[1]=n);let r=n,i;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(i={revalidateOnFocus:!1},t[2]=i):i=t[2];let l=a(r,p,i),f,m;return t[3]===e?(f=t[4],m=t[5]):(f=()=>{if(!e)return;let t=d(),n=e=>{u(e.detail)||o(t)};return window.addEventListener(`config-reload`,n),()=>window.removeEventListener(`config-reload`,n)},m=[e],t[3]=e,t[4]=f,t[5]=m),(0,s.useEffect)(f,m),l}function h(){return o(d())}export{u as a,l as i,h as n,m as r,p as t};
@@ -1 +1 @@
1
- import{i as e}from"./locale-store-lIXD1FMw.js";import{_ as t,a as n,c as r,d as i,f as a,i as o,m as s,n as c,o as l,p as u,u as d,y as f}from"./schemas-CCWMleym.js";import{t as p}from"./gateway-realtime-store-DQqMBruB.js";var m={type:`array`,minItems:1,maxItems:20,items:{type:`object`,additionalProperties:!1,required:[`type`,`fileId`,`name`,`mimeType`,`size`,`sha256`],properties:{type:{const:`file`},fileId:{type:`string`,minLength:1,maxLength:160},name:{type:`string`,minLength:1,maxLength:255},mimeType:{type:`string`,minLength:1,maxLength:255},size:{type:`integer`,minimum:0},sha256:{type:`string`,pattern:`^[a-f0-9]{64}$`}}}},ee={type:`object`,properties:{},additionalProperties:!1},te=25*1024*1024,h=c([`web`,`desktop`,`mobile`,`browser`]),g=c([`foreground`,`background`]),ne=c([`read`,`write`,`destructive`]),re=c([`never`,`always`]),ie=c([`text`,`json`,`file`]),ae=c([`public`,`personal`]),_=s().min(1).max(160),v=s().min(32).max(160).regex(/^[A-Za-z0-9_-]+$/);l(`type`,[u({type:r(`endpoint`),endpointId:_}),u({type:r(`channel`),channel:s().min(1).max(64)}),u({type:r(`system`),source:c([`cli`,`automation`,`heartbeat`,`task`,`internal`,`task_update`])})]).options[0].extend({token:v});var y=f(),b=d().int().nonnegative(),x=a(s(),t()),S=u({name:s().regex(/^[a-z][a-z0-9_]*(?:\.[a-z][a-z0-9_]*)+$/).max(120),title:s().min(1).max(120),description:s().min(1).max(2e3),inputSchema:x,outputSchema:x,policyId:s().regex(/^[a-z][a-z0-9_.-]+$/).max(120),sensitivity:ae,effect:ne,confirmation:re,requiresForeground:n(),requiredPermissions:o(s().min(1).max(120)).max(20),timeoutMs:d().int().min(1e3).max(3e5),maxConcurrency:d().int().min(1).max(4),supportsCancellation:n(),idempotent:n(),resultKinds:o(ie).min(1).max(3)});u({principalId:_,displayName:s().min(1).max(120),kind:h,platform:s().min(1).max(80),publicKey:s().min(32).max(2048)}),u({endpointId:_});var C=s().regex(/^[a-z][a-z0-9_]*(?:\.[a-z][a-z0-9_]*)+$/).max(120);u({jobId:f(),endpointId:_,capability:C,input:x,idempotencyKey:_,consentGrantId:_,createdAt:b,expiresAt:b}),u({jobId:f(),status:c([`queued`,`running`,`succeeded`,`failed`,`cancelled`]),updatedAt:b,output:x.optional(),error:u({code:_,message:s().min(1).max(2e3)}).optional()}),u({eventId:f(),endpointId:_,subscriptionId:_,eventType:C,data:x,occurredAt:b});var oe=u({principalId:_,endpointId:_,connectionInstanceId:f(),displayName:s().min(1).max(120),kind:h,platform:s().min(1).max(80),appVersion:s().min(1).max(80),availability:g,nonce:_,signedAt:b,signature:s().min(16).max(1024),tools:o(S).max(100)}),se=u({invocationId:f(),toolCallId:_,toolName:S.shape.name,arguments:x,descriptorRevision:s().min(1).max(128),confirmationRequired:n(),deadlineAt:b,uploadGrant:u({path:s().startsWith(`/`).max(500),token:_,maxBytes:d().int().positive(),maxFiles:d().int().min(1).max(20),expiresAt:b}).optional()}),ce=u({invocationId:f(),reason:s().min(1).max(500)}),w=u({invocationId:f()}),T=l(`type`,[u({type:r(`text`),text:s().max(256*1024)}),u({type:r(`json`),value:t()}),u({type:r(`file`),fileId:_,name:s().min(1).max(255),mimeType:s().min(1).max(255),size:d().int().nonnegative(),sha256:s().regex(/^[a-f0-9]{64}$/)})]),le=c([`ENDPOINT_OFFLINE`,`ENDPOINT_NOT_FOREGROUND`,`ENDPOINT_DISCONNECTED`,`TOOL_NOT_FOUND`,`TOOL_REVISION_MISMATCH`,`INVALID_ARGUMENTS`,`PERMISSION_DENIED`,`USER_DENIED`,`TOOL_BUSY`,`TOOL_TIMEOUT`,`TOOL_CANCELLED`,`RESULT_TOO_LARGE`,`PROTOCOL_ERROR`]),E=(e,t)=>u({protocolVersion:r(2),messageId:y,type:r(e),sentAt:b,payload:t}),ue=l(`type`,[E(`endpoint.availability_changed`,u({availability:g})),E(`tool.received`,w),E(`tool.progress`,u({invocationId:f(),message:s().max(500).optional(),percent:d().min(0).max(100).optional()})),E(`tool.result`,u({invocationId:f(),content:o(T).min(1).max(20),details:x.optional()})),E(`tool.error`,u({invocationId:f(),code:le,message:s().min(1).max(2e3)})),E(`tool.cancelled`,w)]),de=l(`type`,[E(`tool.invoke`,se),E(`tool.cancel`,ce)]),fe={type:`array`,minItems:1,maxItems:20,items:{type:`object`,additionalProperties:!1,required:[`type`,`text`],properties:{type:{const:`text`},text:{type:`string`,maxLength:256*1024}}}};function D(e){if(e===null)return`null`;if(typeof e==`string`||typeof e==`boolean`)return JSON.stringify(e);if(typeof e==`number`){if(!Number.isFinite(e))throw Error(`Canonical JSON only supports finite numbers`);return JSON.stringify(e)}if(typeof e!=`object`)throw Error(`Canonical JSON does not support ${typeof e}`);if(Array.isArray(e))return`[${e.map(D).join(`,`)}]`;let t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)throw Error(`Canonical JSON only supports plain objects`);let n=e;return`{${Object.keys(n).sort().map(e=>`${JSON.stringify(e)}:${D(n[e])}`).join(`,`)}}`}function O(e){let{signature:t,...n}=e;return D(n)}var k={type:`array`,minItems:1,maxItems:1,items:{type:`object`,additionalProperties:!1,required:[`type`,`value`],properties:{type:{const:`json`},value:{type:`object`,additionalProperties:!1,required:[`capturedAt`,`platform`,`systemVersion`,`locale`,`timezone`],properties:{capturedAt:{type:`integer`,minimum:0},platform:{type:`string`,minLength:1,maxLength:40},systemVersion:{type:`string`,maxLength:80},locale:{type:`string`,maxLength:80},timezone:{type:`string`,maxLength:80},online:{type:`boolean`}}}}}},A={type:`array`,minItems:1,maxItems:1,items:{type:`object`,additionalProperties:!1,required:[`type`,`value`],properties:{type:{const:`json`},value:{type:`object`,additionalProperties:!1,required:[`capturedAt`,`levelPercent`,`charging`],properties:{capturedAt:{type:`integer`,minimum:0},levelPercent:{type:[`number`,`null`],minimum:0,maximum:100},charging:{type:[`boolean`,`null`]}}}}}};function j(e,t){return{name:`${e}.device.get_${t}`,title:t===`power`?`Read this device’s battery`:`Read this device’s environment`,description:t===`power`?`Read a fresh battery sample from the device that sent this user message. Unknown readings are null.`:`Read bounded platform, system version, language and timezone from the device that sent this user message. No files, page content, network addresses or identifiers are collected.`,inputSchema:ee,outputSchema:t===`power`?A:k,policyId:`public.background-read`,sensitivity:`public`,effect:`read`,confirmation:`never`,requiresForeground:!1,requiredPermissions:[],timeoutMs:1e4,maxConcurrency:1,supportsCancellation:!0,idempotent:!0,resultKinds:[`json`]}}var M=256*1024,N=15e3,P=45e3,F=[`realtime.capability-negotiation.v1`],I=c([`web`,`desktop`,`mobile`,`browser_extension`,`tui`,`mcp`]),L=s().min(1).max(512),R=s().regex(/^[a-z][a-z0-9_.-]*$/).max(160),z=f(),B=d().int().nonnegative(),V=d().int().positive(),H=s().min(1).max(160),U=(e,t)=>i({protocolVersion:r(2),messageId:z,kind:r(e),sentAt:B,payload:t}),W=i({topic:L,afterSeq:d().int().nonnegative().optional(),view:r(`compact`).optional()});l(`kind`,[U(`realtime.hello`,i({ticket:s().min(32).max(512),connectionProof:s().min(1).max(256).optional(),clientId:s().min(1).max(160),clientKind:I,subscriptions:o(W).max(100).default([]),capabilities:o(H).max(64).optional(),endpoint:oe.optional()})),U(`realtime.subscribe`,i({subscriptions:o(W).min(1).max(100)})),U(`realtime.unsubscribe`,i({topics:o(L).min(1).max(100)})),U(`realtime.ping`,i({})),U(`endpoint.message`,ue)]);var pe=i({topic:L,seq:V,event:R,data:t()}),me=l(`kind`,[U(`realtime.ready`,i({connectionId:f(),heartbeatIntervalMs:r(N),heartbeatTimeoutMs:r(P),negotiatedCapabilities:o(H).max(64).optional(),endpoint:i({endpointId:s().min(1).max(160),turnToken:s().min(32).max(160)}).optional()})),U(`realtime.event`,pe),U(`realtime.subscribed`,i({topic:L,cursor:d().int().nonnegative()})),U(`realtime.gap`,i({topic:L,requestedSeq:d().int().nonnegative(),earliestSeq:V,recoverable:n()})),U(`realtime.pong`,i({})),U(`realtime.error`,i({code:s().min(1).max(80),message:s().min(1).max(500)})),U(`endpoint.message`,de)]);function he(e){return me.parse(e)}var G=class extends Error{retryable;constructor(e,t){super(e),this.retryable=t,this.name=`RealtimeConnectionError`}},ge=class extends Error{bytes;maxBytes;constructor(e,t){super(`Realtime client frame is ${e} bytes; maximum is ${t} bytes`),this.bytes=e,this.maxBytes=t,this.name=`RealtimeFrameTooLargeError`}};function _e(e){if(typeof e==`string`)return e;if(e instanceof ArrayBuffer)return new TextDecoder().decode(e);if(ArrayBuffer.isView(e)){let t=Uint8Array.from(new Uint8Array(e.buffer,e.byteOffset,e.byteLength));return new TextDecoder().decode(t)}throw Error(`Realtime server sent a non-text frame`)}function ve(e){return e===1009||e===4400||e===4401||e===4409||e===4413}var ye=class{options;desiredSubscriptions=new Map;cursors=new Map;socket;reconnectTimer;heartbeatTimer;connectionTimer;ticketAbort;generation=0;reconnectAttempts=0;shouldReconnect=!1;ready=!1;lastServerMessageAt=0;endpointBinding;reconnectWhenSocketOpens=!1;offeredCapabilities=new Set;constructor(e){this.options=e}connect(){this.shouldReconnect||(this.shouldReconnect=!0,this.open(!1))}disconnect(){this.shouldReconnect=!1,this.reconnectWhenSocketOpens=!1,this.generation+=1,this.clearTimers(),this.ready=!1,this.offeredCapabilities.clear(),this.endpointBinding?.onDisconnected?.(),this.socket?.close(1e3,`Client disconnected`),this.socket=void 0,this.options.onStateChange?.(`disconnected`)}reconnect(){this.reconnectWhenSocketOpens=!1,this.generation+=1,this.clearTimers(),this.ready=!1,this.endpointBinding?.onDisconnected?.(),this.socket?.close(1e3,`Client reconnecting`),this.socket=void 0,this.reconnectAttempts=0,this.shouldReconnect=!0,this.open(!0)}subscribe(e,t){this.desiredSubscriptions.set(e,t),t!==void 0&&this.cursors.set(e,t),this.ready&&this.sendSubscriptions([{topic:e,afterSeq:this.cursors.get(e)??t}])}unsubscribe(e){this.desiredSubscriptions.delete(e),this.ready&&this.send(this.clientMessage(`realtime.unsubscribe`,{topics:[e]}))}sendEndpointMessage(e){if(!this.ready)throw Error(`Realtime connection is not ready`);this.send(this.clientMessage(`endpoint.message`,e))}setEndpoint(e){this.endpointBinding=e,this.refreshEndpointConnection()}clearEndpoint(e){if(e&&this.endpointBinding!==e)return;let t=this.endpointBinding;this.endpointBinding=void 0,t?.onDisconnected?.(),this.refreshEndpointConnection()}refreshEndpointConnection(){if(this.shouldReconnect){if(this.socket?.readyState===0){this.reconnectWhenSocketOpens=!0;return}this.reconnect()}}async open(e){let t=++this.generation,n=this.options.connectionTimeoutMs??15e3,r=new AbortController;this.ticketAbort?.abort(),this.ticketAbort=r;let i,a=!1,o,s=(e,n=!0)=>{a||t!==this.generation||(a=!0,this.clearConnectionTimer(),r.abort(),this.ticketAbort===r&&(this.ticketAbort=void 0),this.ready=!1,this.offeredCapabilities.clear(),this.endpointBinding?.onDisconnected?.(),this.clearHeartbeat(),this.socket===i&&(this.socket=void 0),i&&(i.onopen=null,i.onmessage=null,i.onerror=null,i.onclose=null,i.close(4e3,e.slice(0,120))),this.shouldReconnect&&n?this.scheduleReconnect(e):this.shouldReconnect?(this.shouldReconnect=!1,this.options.onStateChange?.(`error`,e)):this.options.onStateChange?.(`disconnected`))};this.connectionTimer=setTimeout(()=>s(`Realtime connection timed out`),n),this.options.onStateChange?.(e?`reconnecting`:`connecting`);try{let[e,n]=await Promise.all([this.options.issueTicket(r.signal),this.endpointBinding?.createHello()]),c=e.ticket;if(2<e.realtime.minVersion)throw new G(`CLIENT_UPDATE_REQUIRED`,!1);if(2>e.realtime.maxVersion)throw new G(`GATEWAY_UPDATE_REQUIRED`,!1);let l=F.filter(t=>e.realtime.capabilities.includes(t));if(a||!this.shouldReconnect||t!==this.generation)return;this.offeredCapabilities=new Set(l??[]),i=this.options.createWebSocket(this.options.getWebSocketUrl()),this.socket=i,i.onopen=()=>{if(t!==this.generation)return;if(this.reconnectWhenSocketOpens){this.reconnect();return}let r=[...this.desiredSubscriptions].map(([e,t])=>({topic:e,afterSeq:this.cursors.get(e)??t}));this.send(this.clientMessage(`realtime.hello`,{ticket:c,...e.connectionProof?{connectionProof:e.connectionProof}:{},clientId:this.options.clientId,clientKind:this.options.clientKind,subscriptions:r,...l?.length?{capabilities:l}:{},...n?{endpoint:n}:{}}))},i.onmessage=e=>{if(t!==this.generation)return;let n=()=>{if(!(a||t!==this.generation))return this.handleServerMessage(_e(e.data))};if(!o){try{let e=n();if(!e)return;let t=e.catch(e=>s(e instanceof Error?e.message:`Invalid realtime server message`)).then(()=>void 0);o=t,t.finally(()=>{o===t&&(o=void 0)})}catch(e){s(e instanceof Error?e.message:`Invalid realtime server message`)}return}let r=o.then(n).catch(e=>s(e instanceof Error?e.message:`Invalid realtime server message`)).then(()=>void 0);o=r,r.finally(()=>{o===r&&(o=void 0)})},i.onerror=()=>{},i.onclose=e=>{s(e.reason||`WebSocket closed (${e.code??0})`,!ve(e.code))}}catch(e){s(e instanceof Error?e.message:`Realtime connection failed`,!(e instanceof G)||e.retryable)}}handleServerMessage(e){let t=he(JSON.parse(e));if(this.lastServerMessageAt=Date.now(),t.kind===`realtime.ready`){let e=t.payload.negotiatedCapabilities??[];if(e.some(e=>!this.offeredCapabilities.has(e)))throw Error(`Realtime server negotiated a capability the client did not offer`);this.ready=!0,this.reconnectAttempts=0,this.clearConnectionTimer(),this.ticketAbort=void 0,this.options.onStateChange?.(`connected`),this.options.onCapabilities?.(e),t.payload.endpoint&&this.endpointBinding?.onReady(t.payload.endpoint),this.clearHeartbeat(),this.heartbeatTimer=setInterval(()=>{if(this.ready){if(Date.now()-this.lastServerMessageAt>=t.payload.heartbeatTimeoutMs){this.reconnect();return}this.send(this.clientMessage(`realtime.ping`,{}))}},t.payload.heartbeatIntervalMs)}else if(t.kind===`realtime.event`){let e=this.cursors.get(t.payload.topic);if(e!==void 0&&t.payload.seq<=e)return;this.options.onEvent?.(t.payload),this.cursors.set(t.payload.topic,t.payload.seq)}else if(t.kind===`realtime.subscribed`)this.cursors.set(t.payload.topic,t.payload.cursor),this.options.onSubscribed?.(t.payload);else if(t.kind===`realtime.gap`)return this.cursors.set(t.payload.topic,t.payload.earliestSeq-1),this.options.onGap?.(t.payload);else t.kind===`realtime.error`?this.options.onStateChange?.(`error`,t.payload.message):t.kind===`endpoint.message`&&(this.endpointBinding?.onMessage(t.payload),this.options.onEndpointMessage?.(t.payload))}sendSubscriptions(e){this.send(this.clientMessage(`realtime.subscribe`,{subscriptions:e}))}clientMessage(e,t){let n=this.options.createMessageId?.()??globalThis.crypto?.randomUUID?.();if(!n)throw Error(`RealtimeClient requires createMessageId when crypto.randomUUID is unavailable`);return{protocolVersion:2,messageId:n,kind:e,sentAt:Date.now(),payload:t}}send(e){if(!this.socket||this.socket.readyState!==1)return;let t=JSON.stringify(e),n=new TextEncoder().encode(t).byteLength;if(n>262144)throw new ge(n,M);this.socket.send(t)}scheduleReconnect(e){if(!this.shouldReconnect)return;this.reconnectAttempts+=1;let t=this.options.maxReconnectAttempts;if(t!==void 0&&this.reconnectAttempts>t){this.shouldReconnect=!1,this.options.onStateChange?.(`error`,e);return}this.options.onStateChange?.(`reconnecting`,e);let n=Math.min(3e4,1e3*2**Math.min(this.reconnectAttempts-1,5)),r=Math.round(n*(.5+Math.random()*.5));this.reconnectTimer&&clearTimeout(this.reconnectTimer),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.open(!0)},r)}clearHeartbeat(){this.heartbeatTimer&&clearInterval(this.heartbeatTimer),this.heartbeatTimer=void 0}clearTimers(){this.reconnectTimer&&clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0,this.clearConnectionTimer(),this.ticketAbort?.abort(),this.ticketAbort=void 0,this.clearHeartbeat()}clearConnectionTimer(){this.connectionTimer&&clearTimeout(this.connectionTimer),this.connectionTimer=void 0}},be=500,K=null,q;function J(e){q=e,K!==null&&clearTimeout(K),K=setTimeout(()=>{K=null;let e=q;q=void 0,window.dispatchEvent(new CustomEvent(`config-reload`,{detail:e}))},be)}function xe(e,t){if(e===`config.reload`){J(t);return}window.dispatchEvent(new CustomEvent(e.replace(/[._]/g,`-`),{detail:t}))}var Y=new Map,X=new Map,Z,Q;function Se(){let e=`xopc:realtime-client-id`,t=sessionStorage.getItem(e);if(t)return t;let n=crypto.randomUUID();return sessionStorage.setItem(e,n),n}function Ce(){let t=new URL(e(`/api/realtime/v1/ws`));return t.protocol=t.protocol===`https:`?`wss:`:`ws:`,t.toString()}function $(){let t=Se(),n=window.electronAPI?`desktop`:`web`,r=new ye({clientId:t,clientKind:n,getWebSocketUrl:Ce,issueTicket:async r=>{let i=await fetch(e(`/api/realtime/tickets`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({clientId:t,clientKind:n,protocolVersion:2}),signal:r}),a=await i.json().catch(()=>null);if(!i.ok||!a?.payload?.ticket||!a.payload.realtime)throw Error(a?.error?.message??`Realtime ticket failed (${i.status})`);return{ticket:a.payload.ticket,realtime:a.payload.realtime}},createWebSocket:e=>new WebSocket(e),onStateChange:(e,t)=>{p({connectionState:e,error:t??null}),e===`connected`&&window.dispatchEvent(new CustomEvent(`gateway-realtime-connected`))},onEvent:e=>{(e.topic===`gateway`||e.topic===`sessions`)&&xe(e.event,e.data);let t=X.get(e.topic);(t===void 0||e.seq>t)&&X.set(e.topic,e.seq);for(let t of Y.get(e.topic)??[])if(!(t.cursor!==void 0&&e.seq<=t.cursor))try{t.listener.onEvent(e)}catch(e){console.error(`[realtime] topic listener failed:`,e)}finally{t.cursor=Math.max(t.cursor??0,e.seq)}},onGap:async e=>{window.dispatchEvent(new CustomEvent(`realtime-gap`,{detail:e}));let t=[...Y.get(e.topic)??[]].filter(t=>!e.recoverable||t.cursor===void 0||t.cursor<e.earliestSeq-1),n=await Promise.allSettled(t.map(t=>t.listener.onGap?.(e)));for(let e of n)e.status===`rejected`&&console.error(`[realtime] topic gap handler failed:`,e.reason)}});Z?.disconnect(),Z=r,Q&&r.setEndpoint(Q),r.subscribe(`gateway`,X.get(`gateway`)),r.subscribe(`sessions`,X.get(`sessions`));for(let e of Y.keys())r.subscribe(e,X.get(e));return p({connectionState:`connecting`,error:null}),r.connect(),()=>{Z===r&&(r.disconnect(),Z=void 0)}}function we(e){return Q=e,Z?.setEndpoint(e),()=>{Q===e&&(Q=void 0,Z?.clearEndpoint(e))}}function Te(e){Z?.sendEndpointMessage(e)}function Ee(){Z?.reconnect()}function De(e,t,n){let r=Y.get(e)??new Set,i=r.size===0,a=X.get(e),o={listener:t,cursor:n??a};if(r.add(o),Y.set(e,r),i){let t=n??a;X.set(e,t),Z?.subscribe(e,t)}else n!==void 0&&(a===void 0||n<a)&&Z?.subscribe(e,n);return()=>{let t=Y.get(e);t?.delete(o),(!t||t.size===0)&&(Y.delete(e),X.delete(e),Z?.unsubscribe(e))}}export{De as a,fe as c,O as d,T as f,$ as i,D as l,Ee as n,J as o,m as p,Te as r,te as s,we as t,j as u};
1
+ import{i as e}from"./locale-store-5Hf8J8-_.js";import{_ as t,a as n,c as r,d as i,f as a,i as o,m as s,n as c,o as l,p as u,u as d,y as f}from"./schemas-CCWMleym.js";import{t as p}from"./gateway-realtime-store-0gmDfPeP.js";var m={type:`array`,minItems:1,maxItems:20,items:{type:`object`,additionalProperties:!1,required:[`type`,`fileId`,`name`,`mimeType`,`size`,`sha256`],properties:{type:{const:`file`},fileId:{type:`string`,minLength:1,maxLength:160},name:{type:`string`,minLength:1,maxLength:255},mimeType:{type:`string`,minLength:1,maxLength:255},size:{type:`integer`,minimum:0},sha256:{type:`string`,pattern:`^[a-f0-9]{64}$`}}}},ee={type:`object`,properties:{},additionalProperties:!1},te=25*1024*1024,h=c([`web`,`desktop`,`mobile`,`browser`]),g=c([`foreground`,`background`]),ne=c([`read`,`write`,`destructive`]),re=c([`never`,`always`]),ie=c([`text`,`json`,`file`]),ae=c([`public`,`personal`]),_=s().min(1).max(160),v=s().min(32).max(160).regex(/^[A-Za-z0-9_-]+$/);l(`type`,[u({type:r(`endpoint`),endpointId:_}),u({type:r(`channel`),channel:s().min(1).max(64)}),u({type:r(`system`),source:c([`cli`,`automation`,`heartbeat`,`task`,`internal`,`task_update`])})]).options[0].extend({token:v});var y=f(),b=d().int().nonnegative(),x=a(s(),t()),S=u({name:s().regex(/^[a-z][a-z0-9_]*(?:\.[a-z][a-z0-9_]*)+$/).max(120),title:s().min(1).max(120),description:s().min(1).max(2e3),inputSchema:x,outputSchema:x,policyId:s().regex(/^[a-z][a-z0-9_.-]+$/).max(120),sensitivity:ae,effect:ne,confirmation:re,requiresForeground:n(),requiredPermissions:o(s().min(1).max(120)).max(20),timeoutMs:d().int().min(1e3).max(3e5),maxConcurrency:d().int().min(1).max(4),supportsCancellation:n(),idempotent:n(),resultKinds:o(ie).min(1).max(3)});u({principalId:_,displayName:s().min(1).max(120),kind:h,platform:s().min(1).max(80),publicKey:s().min(32).max(2048)}),u({endpointId:_});var C=s().regex(/^[a-z][a-z0-9_]*(?:\.[a-z][a-z0-9_]*)+$/).max(120);u({jobId:f(),endpointId:_,capability:C,input:x,idempotencyKey:_,consentGrantId:_,createdAt:b,expiresAt:b}),u({jobId:f(),status:c([`queued`,`running`,`succeeded`,`failed`,`cancelled`]),updatedAt:b,output:x.optional(),error:u({code:_,message:s().min(1).max(2e3)}).optional()}),u({eventId:f(),endpointId:_,subscriptionId:_,eventType:C,data:x,occurredAt:b});var oe=u({principalId:_,endpointId:_,connectionInstanceId:f(),displayName:s().min(1).max(120),kind:h,platform:s().min(1).max(80),appVersion:s().min(1).max(80),availability:g,nonce:_,signedAt:b,signature:s().min(16).max(1024),tools:o(S).max(100)}),se=u({invocationId:f(),toolCallId:_,toolName:S.shape.name,arguments:x,descriptorRevision:s().min(1).max(128),confirmationRequired:n(),deadlineAt:b,uploadGrant:u({path:s().startsWith(`/`).max(500),token:_,maxBytes:d().int().positive(),maxFiles:d().int().min(1).max(20),expiresAt:b}).optional()}),ce=u({invocationId:f(),reason:s().min(1).max(500)}),w=u({invocationId:f()}),T=l(`type`,[u({type:r(`text`),text:s().max(256*1024)}),u({type:r(`json`),value:t()}),u({type:r(`file`),fileId:_,name:s().min(1).max(255),mimeType:s().min(1).max(255),size:d().int().nonnegative(),sha256:s().regex(/^[a-f0-9]{64}$/)})]),le=c([`ENDPOINT_OFFLINE`,`ENDPOINT_NOT_FOREGROUND`,`ENDPOINT_DISCONNECTED`,`TOOL_NOT_FOUND`,`TOOL_REVISION_MISMATCH`,`INVALID_ARGUMENTS`,`PERMISSION_DENIED`,`USER_DENIED`,`TOOL_BUSY`,`TOOL_TIMEOUT`,`TOOL_CANCELLED`,`RESULT_TOO_LARGE`,`PROTOCOL_ERROR`]),E=(e,t)=>u({protocolVersion:r(2),messageId:y,type:r(e),sentAt:b,payload:t}),ue=l(`type`,[E(`endpoint.availability_changed`,u({availability:g})),E(`tool.received`,w),E(`tool.progress`,u({invocationId:f(),message:s().max(500).optional(),percent:d().min(0).max(100).optional()})),E(`tool.result`,u({invocationId:f(),content:o(T).min(1).max(20),details:x.optional()})),E(`tool.error`,u({invocationId:f(),code:le,message:s().min(1).max(2e3)})),E(`tool.cancelled`,w)]),de=l(`type`,[E(`tool.invoke`,se),E(`tool.cancel`,ce)]),fe={type:`array`,minItems:1,maxItems:20,items:{type:`object`,additionalProperties:!1,required:[`type`,`text`],properties:{type:{const:`text`},text:{type:`string`,maxLength:256*1024}}}};function D(e){if(e===null)return`null`;if(typeof e==`string`||typeof e==`boolean`)return JSON.stringify(e);if(typeof e==`number`){if(!Number.isFinite(e))throw Error(`Canonical JSON only supports finite numbers`);return JSON.stringify(e)}if(typeof e!=`object`)throw Error(`Canonical JSON does not support ${typeof e}`);if(Array.isArray(e))return`[${e.map(D).join(`,`)}]`;let t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)throw Error(`Canonical JSON only supports plain objects`);let n=e;return`{${Object.keys(n).sort().map(e=>`${JSON.stringify(e)}:${D(n[e])}`).join(`,`)}}`}function O(e){let{signature:t,...n}=e;return D(n)}var k={type:`array`,minItems:1,maxItems:1,items:{type:`object`,additionalProperties:!1,required:[`type`,`value`],properties:{type:{const:`json`},value:{type:`object`,additionalProperties:!1,required:[`capturedAt`,`platform`,`systemVersion`,`locale`,`timezone`],properties:{capturedAt:{type:`integer`,minimum:0},platform:{type:`string`,minLength:1,maxLength:40},systemVersion:{type:`string`,maxLength:80},locale:{type:`string`,maxLength:80},timezone:{type:`string`,maxLength:80},online:{type:`boolean`}}}}}},A={type:`array`,minItems:1,maxItems:1,items:{type:`object`,additionalProperties:!1,required:[`type`,`value`],properties:{type:{const:`json`},value:{type:`object`,additionalProperties:!1,required:[`capturedAt`,`levelPercent`,`charging`],properties:{capturedAt:{type:`integer`,minimum:0},levelPercent:{type:[`number`,`null`],minimum:0,maximum:100},charging:{type:[`boolean`,`null`]}}}}}};function j(e,t){return{name:`${e}.device.get_${t}`,title:t===`power`?`Read this device’s battery`:`Read this device’s environment`,description:t===`power`?`Read a fresh battery sample from the device that sent this user message. Unknown readings are null.`:`Read bounded platform, system version, language and timezone from the device that sent this user message. No files, page content, network addresses or identifiers are collected.`,inputSchema:ee,outputSchema:t===`power`?A:k,policyId:`public.background-read`,sensitivity:`public`,effect:`read`,confirmation:`never`,requiresForeground:!1,requiredPermissions:[],timeoutMs:1e4,maxConcurrency:1,supportsCancellation:!0,idempotent:!0,resultKinds:[`json`]}}var M=256*1024,N=15e3,P=45e3,F=[`realtime.capability-negotiation.v1`],I=c([`web`,`desktop`,`mobile`,`browser_extension`,`tui`,`mcp`]),L=s().min(1).max(512),R=s().regex(/^[a-z][a-z0-9_.-]*$/).max(160),z=f(),B=d().int().nonnegative(),V=d().int().positive(),H=s().min(1).max(160),U=(e,t)=>i({protocolVersion:r(2),messageId:z,kind:r(e),sentAt:B,payload:t}),W=i({topic:L,afterSeq:d().int().nonnegative().optional(),view:r(`compact`).optional()});l(`kind`,[U(`realtime.hello`,i({ticket:s().min(32).max(512),connectionProof:s().min(1).max(256).optional(),clientId:s().min(1).max(160),clientKind:I,subscriptions:o(W).max(100).default([]),capabilities:o(H).max(64).optional(),endpoint:oe.optional()})),U(`realtime.subscribe`,i({subscriptions:o(W).min(1).max(100)})),U(`realtime.unsubscribe`,i({topics:o(L).min(1).max(100)})),U(`realtime.ping`,i({})),U(`endpoint.message`,ue)]);var pe=i({topic:L,seq:V,event:R,data:t()}),me=l(`kind`,[U(`realtime.ready`,i({connectionId:f(),heartbeatIntervalMs:r(N),heartbeatTimeoutMs:r(P),negotiatedCapabilities:o(H).max(64).optional(),endpoint:i({endpointId:s().min(1).max(160),turnToken:s().min(32).max(160)}).optional()})),U(`realtime.event`,pe),U(`realtime.subscribed`,i({topic:L,cursor:d().int().nonnegative()})),U(`realtime.gap`,i({topic:L,requestedSeq:d().int().nonnegative(),earliestSeq:V,recoverable:n()})),U(`realtime.pong`,i({})),U(`realtime.error`,i({code:s().min(1).max(80),message:s().min(1).max(500)})),U(`endpoint.message`,de)]);function he(e){return me.parse(e)}var G=class extends Error{retryable;constructor(e,t){super(e),this.retryable=t,this.name=`RealtimeConnectionError`}},ge=class extends Error{bytes;maxBytes;constructor(e,t){super(`Realtime client frame is ${e} bytes; maximum is ${t} bytes`),this.bytes=e,this.maxBytes=t,this.name=`RealtimeFrameTooLargeError`}};function _e(e){if(typeof e==`string`)return e;if(e instanceof ArrayBuffer)return new TextDecoder().decode(e);if(ArrayBuffer.isView(e)){let t=Uint8Array.from(new Uint8Array(e.buffer,e.byteOffset,e.byteLength));return new TextDecoder().decode(t)}throw Error(`Realtime server sent a non-text frame`)}function ve(e){return e===1009||e===4400||e===4401||e===4409||e===4413}var ye=class{options;desiredSubscriptions=new Map;cursors=new Map;socket;reconnectTimer;heartbeatTimer;connectionTimer;ticketAbort;generation=0;reconnectAttempts=0;shouldReconnect=!1;ready=!1;lastServerMessageAt=0;endpointBinding;reconnectWhenSocketOpens=!1;offeredCapabilities=new Set;constructor(e){this.options=e}connect(){this.shouldReconnect||(this.shouldReconnect=!0,this.open(!1))}disconnect(){this.shouldReconnect=!1,this.reconnectWhenSocketOpens=!1,this.generation+=1,this.clearTimers(),this.ready=!1,this.offeredCapabilities.clear(),this.endpointBinding?.onDisconnected?.(),this.socket?.close(1e3,`Client disconnected`),this.socket=void 0,this.options.onStateChange?.(`disconnected`)}reconnect(){this.reconnectWhenSocketOpens=!1,this.generation+=1,this.clearTimers(),this.ready=!1,this.endpointBinding?.onDisconnected?.(),this.socket?.close(1e3,`Client reconnecting`),this.socket=void 0,this.reconnectAttempts=0,this.shouldReconnect=!0,this.open(!0)}subscribe(e,t){this.desiredSubscriptions.set(e,t),t!==void 0&&this.cursors.set(e,t),this.ready&&this.sendSubscriptions([{topic:e,afterSeq:this.cursors.get(e)??t}])}unsubscribe(e){this.desiredSubscriptions.delete(e),this.ready&&this.send(this.clientMessage(`realtime.unsubscribe`,{topics:[e]}))}sendEndpointMessage(e){if(!this.ready)throw Error(`Realtime connection is not ready`);this.send(this.clientMessage(`endpoint.message`,e))}setEndpoint(e){this.endpointBinding=e,this.refreshEndpointConnection()}clearEndpoint(e){if(e&&this.endpointBinding!==e)return;let t=this.endpointBinding;this.endpointBinding=void 0,t?.onDisconnected?.(),this.refreshEndpointConnection()}refreshEndpointConnection(){if(this.shouldReconnect){if(this.socket?.readyState===0){this.reconnectWhenSocketOpens=!0;return}this.reconnect()}}async open(e){let t=++this.generation,n=this.options.connectionTimeoutMs??15e3,r=new AbortController;this.ticketAbort?.abort(),this.ticketAbort=r;let i,a=!1,o,s=(e,n=!0)=>{a||t!==this.generation||(a=!0,this.clearConnectionTimer(),r.abort(),this.ticketAbort===r&&(this.ticketAbort=void 0),this.ready=!1,this.offeredCapabilities.clear(),this.endpointBinding?.onDisconnected?.(),this.clearHeartbeat(),this.socket===i&&(this.socket=void 0),i&&(i.onopen=null,i.onmessage=null,i.onerror=null,i.onclose=null,i.close(4e3,e.slice(0,120))),this.shouldReconnect&&n?this.scheduleReconnect(e):this.shouldReconnect?(this.shouldReconnect=!1,this.options.onStateChange?.(`error`,e)):this.options.onStateChange?.(`disconnected`))};this.connectionTimer=setTimeout(()=>s(`Realtime connection timed out`),n),this.options.onStateChange?.(e?`reconnecting`:`connecting`);try{let[e,n]=await Promise.all([this.options.issueTicket(r.signal),this.endpointBinding?.createHello()]),c=e.ticket;if(2<e.realtime.minVersion)throw new G(`CLIENT_UPDATE_REQUIRED`,!1);if(2>e.realtime.maxVersion)throw new G(`GATEWAY_UPDATE_REQUIRED`,!1);let l=F.filter(t=>e.realtime.capabilities.includes(t));if(a||!this.shouldReconnect||t!==this.generation)return;this.offeredCapabilities=new Set(l??[]),i=this.options.createWebSocket(this.options.getWebSocketUrl()),this.socket=i,i.onopen=()=>{if(t!==this.generation)return;if(this.reconnectWhenSocketOpens){this.reconnect();return}let r=[...this.desiredSubscriptions].map(([e,t])=>({topic:e,afterSeq:this.cursors.get(e)??t}));this.send(this.clientMessage(`realtime.hello`,{ticket:c,...e.connectionProof?{connectionProof:e.connectionProof}:{},clientId:this.options.clientId,clientKind:this.options.clientKind,subscriptions:r,...l?.length?{capabilities:l}:{},...n?{endpoint:n}:{}}))},i.onmessage=e=>{if(t!==this.generation)return;let n=()=>{if(!(a||t!==this.generation))return this.handleServerMessage(_e(e.data))};if(!o){try{let e=n();if(!e)return;let t=e.catch(e=>s(e instanceof Error?e.message:`Invalid realtime server message`)).then(()=>void 0);o=t,t.finally(()=>{o===t&&(o=void 0)})}catch(e){s(e instanceof Error?e.message:`Invalid realtime server message`)}return}let r=o.then(n).catch(e=>s(e instanceof Error?e.message:`Invalid realtime server message`)).then(()=>void 0);o=r,r.finally(()=>{o===r&&(o=void 0)})},i.onerror=()=>{},i.onclose=e=>{s(e.reason||`WebSocket closed (${e.code??0})`,!ve(e.code))}}catch(e){s(e instanceof Error?e.message:`Realtime connection failed`,!(e instanceof G)||e.retryable)}}handleServerMessage(e){let t=he(JSON.parse(e));if(this.lastServerMessageAt=Date.now(),t.kind===`realtime.ready`){let e=t.payload.negotiatedCapabilities??[];if(e.some(e=>!this.offeredCapabilities.has(e)))throw Error(`Realtime server negotiated a capability the client did not offer`);this.ready=!0,this.reconnectAttempts=0,this.clearConnectionTimer(),this.ticketAbort=void 0,this.options.onStateChange?.(`connected`),this.options.onCapabilities?.(e),t.payload.endpoint&&this.endpointBinding?.onReady(t.payload.endpoint),this.clearHeartbeat(),this.heartbeatTimer=setInterval(()=>{if(this.ready){if(Date.now()-this.lastServerMessageAt>=t.payload.heartbeatTimeoutMs){this.reconnect();return}this.send(this.clientMessage(`realtime.ping`,{}))}},t.payload.heartbeatIntervalMs)}else if(t.kind===`realtime.event`){let e=this.cursors.get(t.payload.topic);if(e!==void 0&&t.payload.seq<=e)return;this.options.onEvent?.(t.payload),this.cursors.set(t.payload.topic,t.payload.seq)}else if(t.kind===`realtime.subscribed`)this.cursors.set(t.payload.topic,t.payload.cursor),this.options.onSubscribed?.(t.payload);else if(t.kind===`realtime.gap`)return this.cursors.set(t.payload.topic,t.payload.earliestSeq-1),this.options.onGap?.(t.payload);else t.kind===`realtime.error`?this.options.onStateChange?.(`error`,t.payload.message):t.kind===`endpoint.message`&&(this.endpointBinding?.onMessage(t.payload),this.options.onEndpointMessage?.(t.payload))}sendSubscriptions(e){this.send(this.clientMessage(`realtime.subscribe`,{subscriptions:e}))}clientMessage(e,t){let n=this.options.createMessageId?.()??globalThis.crypto?.randomUUID?.();if(!n)throw Error(`RealtimeClient requires createMessageId when crypto.randomUUID is unavailable`);return{protocolVersion:2,messageId:n,kind:e,sentAt:Date.now(),payload:t}}send(e){if(!this.socket||this.socket.readyState!==1)return;let t=JSON.stringify(e),n=new TextEncoder().encode(t).byteLength;if(n>262144)throw new ge(n,M);this.socket.send(t)}scheduleReconnect(e){if(!this.shouldReconnect)return;this.reconnectAttempts+=1;let t=this.options.maxReconnectAttempts;if(t!==void 0&&this.reconnectAttempts>t){this.shouldReconnect=!1,this.options.onStateChange?.(`error`,e);return}this.options.onStateChange?.(`reconnecting`,e);let n=Math.min(3e4,1e3*2**Math.min(this.reconnectAttempts-1,5)),r=Math.round(n*(.5+Math.random()*.5));this.reconnectTimer&&clearTimeout(this.reconnectTimer),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.open(!0)},r)}clearHeartbeat(){this.heartbeatTimer&&clearInterval(this.heartbeatTimer),this.heartbeatTimer=void 0}clearTimers(){this.reconnectTimer&&clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0,this.clearConnectionTimer(),this.ticketAbort?.abort(),this.ticketAbort=void 0,this.clearHeartbeat()}clearConnectionTimer(){this.connectionTimer&&clearTimeout(this.connectionTimer),this.connectionTimer=void 0}},be=500,K=null,q;function J(e){q=e,K!==null&&clearTimeout(K),K=setTimeout(()=>{K=null;let e=q;q=void 0,window.dispatchEvent(new CustomEvent(`config-reload`,{detail:e}))},be)}function xe(e,t){if(e===`config.reload`){J(t);return}window.dispatchEvent(new CustomEvent(e.replace(/[._]/g,`-`),{detail:t}))}var Y=new Map,X=new Map,Z,Q;function Se(){let e=`xopc:realtime-client-id`,t=sessionStorage.getItem(e);if(t)return t;let n=crypto.randomUUID();return sessionStorage.setItem(e,n),n}function Ce(){let t=new URL(e(`/api/realtime/v1/ws`));return t.protocol=t.protocol===`https:`?`wss:`:`ws:`,t.toString()}function $(){let t=Se(),n=window.electronAPI?`desktop`:`web`,r=new ye({clientId:t,clientKind:n,getWebSocketUrl:Ce,issueTicket:async r=>{let i=await fetch(e(`/api/realtime/tickets`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({clientId:t,clientKind:n,protocolVersion:2}),signal:r}),a=await i.json().catch(()=>null);if(!i.ok||!a?.payload?.ticket||!a.payload.realtime)throw Error(a?.error?.message??`Realtime ticket failed (${i.status})`);return{ticket:a.payload.ticket,realtime:a.payload.realtime}},createWebSocket:e=>new WebSocket(e),onStateChange:(e,t)=>{p({connectionState:e,error:t??null}),e===`connected`&&window.dispatchEvent(new CustomEvent(`gateway-realtime-connected`))},onEvent:e=>{(e.topic===`gateway`||e.topic===`sessions`)&&xe(e.event,e.data);let t=X.get(e.topic);(t===void 0||e.seq>t)&&X.set(e.topic,e.seq);for(let t of Y.get(e.topic)??[])if(!(t.cursor!==void 0&&e.seq<=t.cursor))try{t.listener.onEvent(e)}catch(e){console.error(`[realtime] topic listener failed:`,e)}finally{t.cursor=Math.max(t.cursor??0,e.seq)}},onGap:async e=>{window.dispatchEvent(new CustomEvent(`realtime-gap`,{detail:e}));let t=[...Y.get(e.topic)??[]].filter(t=>!e.recoverable||t.cursor===void 0||t.cursor<e.earliestSeq-1),n=await Promise.allSettled(t.map(t=>t.listener.onGap?.(e)));for(let e of n)e.status===`rejected`&&console.error(`[realtime] topic gap handler failed:`,e.reason)}});Z?.disconnect(),Z=r,Q&&r.setEndpoint(Q),r.subscribe(`gateway`,X.get(`gateway`)),r.subscribe(`sessions`,X.get(`sessions`));for(let e of Y.keys())r.subscribe(e,X.get(e));return p({connectionState:`connecting`,error:null}),r.connect(),()=>{Z===r&&(r.disconnect(),Z=void 0)}}function we(e){return Q=e,Z?.setEndpoint(e),()=>{Q===e&&(Q=void 0,Z?.clearEndpoint(e))}}function Te(e){Z?.sendEndpointMessage(e)}function Ee(){Z?.reconnect()}function De(e,t,n){let r=Y.get(e)??new Set,i=r.size===0,a=X.get(e),o={listener:t,cursor:n??a};if(r.add(o),Y.set(e,r),i){let t=n??a;X.set(e,t),Z?.subscribe(e,t)}else n!==void 0&&(a===void 0||n<a)&&Z?.subscribe(e,n);return()=>{let t=Y.get(e);t?.delete(o),(!t||t.size===0)&&(Y.delete(e),X.delete(e),Z?.unsubscribe(e))}}export{De as a,fe as c,O as d,T as f,$ as i,D as l,Ee as n,J as o,m as p,Te as r,te as s,we as t,j as u};
@@ -0,0 +1 @@
1
+ import{p as e}from"./locale-store-5Hf8J8-_.js";var t=e(()=>({connectionState:`idle`,error:null}));function n(e){t.setState(e)}export{t as n,n as t};
@@ -0,0 +1 @@
1
+ import{c as e,i as t,o as n}from"./locale-store-5Hf8J8-_.js";import{t as r}from"./createLucideIcon-DPHK1VkS.js";import{n as i}from"./electron-env-DHOGevH3.js";var a=r(`route`,[[`circle`,{cx:`6`,cy:`19`,r:`3`,key:`1kj8tv`}],[`path`,{d:`M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15`,key:`1d8sl`}],[`circle`,{cx:`18`,cy:`5`,r:`3`,key:`gq8acd`}]]);async function o(){if(i()&&window.electronAPI?.gateway?.restart){let t=await window.electronAPI.gateway.restart();return t.ok&&t.token&&await e(),t}let r=await n(t(`/api/gateway/restart`),{method:`POST`,body:JSON.stringify({})});return r.ok===!1?{ok:!1,message:r.message??r.error??`Gateway restart failed`}:{ok:!0}}export{a as n,o as t};