@opengeni/react 4.6.1 → 4.6.2-canary.39854174564001

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 (465) hide show
  1. package/dist/app/app-state.js +5 -5
  2. package/dist/app/components/Composer.js +14 -14
  3. package/dist/app/components/artifacts/artifact-library.js +2 -2
  4. package/dist/app/components/artifacts/chat-interactive-block.js +10 -10
  5. package/dist/app/components/artifacts/inline-chat-image.js +14 -14
  6. package/dist/app/components/artifacts/retained-file-preview.js +15 -15
  7. package/dist/app/components/artifacts/retained-text-preview.js +2 -2
  8. package/dist/app/components/artifacts/site-conversations.js +4 -3
  9. package/dist/app/components/artifacts/site-data.js +2 -2
  10. package/dist/app/components/artifacts/site-publishing.js +11 -11
  11. package/dist/app/components/artifacts/site-settings.js +12 -12
  12. package/dist/app/components/billing-class-mark.js +3 -3
  13. package/dist/app/components/capabilities/capability-detail-sheet.js +2 -2
  14. package/dist/app/components/capabilities/capability-logo-source.js +7 -7
  15. package/dist/app/components/capabilities/native-connect-readiness.js +1 -0
  16. package/dist/app/components/capabilities/native-connect-readiness.js.map +1 -1
  17. package/dist/app/components/capabilities/native-connect-setup.js +6 -6
  18. package/dist/app/components/capabilities/perform-capability-action.js +2 -1
  19. package/dist/app/components/capabilities/prepared-mcp-setup-card.js +8 -8
  20. package/dist/app/components/capabilities/session-capability-card.js +28 -27
  21. package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
  22. package/dist/app/components/capabilities/session-chrome-card.js +14 -14
  23. package/dist/app/components/capabilities/session-custom-mcp-card.js +9 -9
  24. package/dist/app/components/capabilities/session-github-card.js +9 -9
  25. package/dist/app/components/capabilities/session-machine-card.js +13 -13
  26. package/dist/app/components/command-menu/chat-status.js +6 -5
  27. package/dist/app/components/command-menu/chat-switcher.d.ts +2 -0
  28. package/dist/app/components/command-menu/chat-switcher.js +26 -9
  29. package/dist/app/components/command-menu/chat-switcher.js.map +1 -1
  30. package/dist/app/components/command-menu/command-menu.js +9 -8
  31. package/dist/app/components/command-menu/command-menu.js.map +1 -1
  32. package/dist/app/components/command-menu/shortcut-sheet.js +4 -4
  33. package/dist/app/components/composer-mobile-plus-panel.js +5 -5
  34. package/dist/app/components/composer-mobile-plus.js +1 -1
  35. package/dist/app/components/credit-required-gate.js +1 -1
  36. package/dist/app/components/credit-required-prompt.js +3 -3
  37. package/dist/app/components/desktop/app-shots.js +5 -5
  38. package/dist/app/components/desktop/this-computer.js +4 -4
  39. package/dist/app/components/feedback.js +3 -3
  40. package/dist/app/components/github-app-connect-launcher.js +1 -1
  41. package/dist/app/components/machines/connect-machine-dialog.js +3 -3
  42. package/dist/app/components/markdown.js +4 -4
  43. package/dist/app/components/models/models-ui.js +2 -2
  44. package/dist/app/components/pickers.js +5 -5
  45. package/dist/app/components/rail/rail-context.js +1 -1
  46. package/dist/app/components/rail/rail-sections.js +15 -14
  47. package/dist/app/components/rail/session-header.d.ts +6 -5
  48. package/dist/app/components/rail/session-header.js +11 -10
  49. package/dist/app/components/rail/session-list.js +14 -13
  50. package/dist/app/components/rail/session-row-hover-details.js +7 -6
  51. package/dist/app/components/rail/session-shell.js +30 -32
  52. package/dist/app/components/rail/site-session-group-heading.js +2 -1
  53. package/dist/app/components/session/agent-configuration-panel.js +3 -3
  54. package/dist/app/components/session/banners.js +6 -6
  55. package/dist/app/components/session/editable-artifacts-workspace.js +12 -12
  56. package/dist/app/components/session/failed-session-banner.js +4 -4
  57. package/dist/app/components/session/human-input.js +24 -24
  58. package/dist/app/components/session/inspector.js +30 -30
  59. package/dist/app/components/session/message-actions.js +3 -3
  60. package/dist/app/components/session/message-resource-attachments.js +5 -5
  61. package/dist/app/components/session/model-recovery-notice.js +3 -3
  62. package/dist/app/components/session/new-session-settings-menu.js +4 -4
  63. package/dist/app/components/session/sandbox-switcher.js +7 -7
  64. package/dist/app/components/session/sandbox-workspace.js +33 -33
  65. package/dist/app/components/session/search-markdown-highlight.js +5 -5
  66. package/dist/app/components/session/search-results-view.js +6 -6
  67. package/dist/app/components/session/session-admission-notice.js +4 -4
  68. package/dist/app/components/session/session-machine-access-notice.js +4 -4
  69. package/dist/app/components/session/session-search-dialog.js +6 -6
  70. package/dist/app/components/session/session-usage-limit-section.js +3 -3
  71. package/dist/app/components/session/session-wait-status.js +2 -1
  72. package/dist/app/components/session/session-wait-status.js.map +1 -1
  73. package/dist/app/components/session/subagents.js +5 -4
  74. package/dist/app/components/session/subscription-account-indicator.d.ts +35 -0
  75. package/dist/app/components/session/{codex-account-indicator.js → subscription-account-indicator.js} +23 -10
  76. package/dist/app/components/session/subscription-account-menu.d.ts +11 -12
  77. package/dist/app/components/session/subscription-account-menu.js +1 -1
  78. package/dist/app/components/session/subscription-account.d.ts +105 -0
  79. package/dist/app/components/usage/usage-entry.js +3 -3
  80. package/dist/app/components/workspace-composer-plus.js +10 -10
  81. package/dist/app/embed/session-app.js +92 -94
  82. package/dist/app/lib/actions/actions-provider.js +4 -4
  83. package/dist/app/lib/actions/chat-switcher.d.ts +19 -7
  84. package/dist/app/lib/codex-usage-query.js +2 -2
  85. package/dist/app/lib/composer-connectors.js +8 -8
  86. package/dist/app/lib/console-text.js +2 -2
  87. package/dist/app/lib/drive-connect-return.d.ts +26 -0
  88. package/dist/app/lib/drive-connect-return.js +16 -0
  89. package/dist/app/lib/events.js +7 -7
  90. package/dist/app/lib/failed-session-copy.js +3 -3
  91. package/dist/app/lib/model-access-onboarding.js +3 -3
  92. package/dist/app/lib/move-chat-to-machine.js +3 -3
  93. package/dist/app/lib/session-branch-cache.js +6 -5
  94. package/dist/app/lib/session-group-pagination.js +6 -5
  95. package/dist/app/lib/session-hover-facts.js +6 -5
  96. package/dist/app/lib/session-rail.js +2 -1
  97. package/dist/app/lib/sessions-group.js +5 -4
  98. package/dist/app/lib/turn-failure-analytics.js +4 -4
  99. package/dist/app/lib/use-workspace-machines.js +4 -4
  100. package/dist/app/lib/use-workspace-model-catalog.js +3 -3
  101. package/dist/app/lib/use-workspace-rigs.js +2 -2
  102. package/dist/app/lib/workspace-navigation-preference.js +4 -4
  103. package/dist/app/lib/workspace-scope-context.js +3 -3
  104. package/dist/app/routes/artifacts.js +26 -25
  105. package/dist/app/routes/artifacts.js.map +1 -1
  106. package/dist/app/routes/retained-artifact.js +15 -15
  107. package/dist/app/routes/session.js +64 -63
  108. package/dist/app/routes/sessions-index.js +41 -41
  109. package/dist/app/routes/site-view.js +30 -29
  110. package/dist/app/routes/site-view.js.map +1 -1
  111. package/dist/artifacts-document.js +4 -4
  112. package/dist/artifacts-presentation.js +4 -4
  113. package/dist/artifacts-spreadsheet.js +4 -4
  114. package/dist/artifacts.js +10 -10
  115. package/dist/{browser-viewer-YQC6BFMS.js → browser-viewer-VKIAULG7.js} +4 -4
  116. package/dist/{chat-interactive-block-Z22YHDRU.js → chat-interactive-block-JGYSW4KB.js} +5 -5
  117. package/dist/{chunk-WN2MIB4Q.js → chunk-22V2QCEM.js} +2 -2
  118. package/dist/{chunk-SJPAKWWP.js → chunk-2BISI664.js} +2 -2
  119. package/dist/{chunk-O5UOCMH4.js → chunk-2LPJVEWY.js} +3 -3
  120. package/dist/{chunk-JI6WPLZB.js → chunk-2SBCOGQN.js} +4 -4
  121. package/dist/{chunk-6JF7C3U3.js → chunk-2WERWWSS.js} +2 -2
  122. package/dist/{chunk-4XKT4ENZ.js → chunk-2Y3QL3DA.js} +4 -4
  123. package/dist/{chunk-KVMFT6FN.js → chunk-3FL3F4WF.js} +2 -2
  124. package/dist/{chunk-4VJOZJDV.js → chunk-3JPQAIYJ.js} +2 -2
  125. package/dist/{chunk-27EORKJ4.js → chunk-3N4LNBJF.js} +2 -2
  126. package/dist/{chunk-7JZSFJHB.js → chunk-3OJU3RUR.js} +2 -2
  127. package/dist/{chunk-NV5OYV3G.js → chunk-3U6K36QA.js} +5 -5
  128. package/dist/{chunk-MDRLP5DO.js → chunk-3W7ROHN4.js} +3 -3
  129. package/dist/{chunk-3MQM4ZOC.js → chunk-3Y6ZR2VN.js} +3 -3
  130. package/dist/{chunk-HXZIX7MR.js → chunk-47AB65IO.js} +4 -4
  131. package/dist/{chunk-DNYD7AUG.js → chunk-4BOLIZ7Y.js} +3 -3
  132. package/dist/{chunk-4XO346BW.js → chunk-4FBJFQFU.js} +2 -2
  133. package/dist/{chunk-DAQG3C4W.js → chunk-4HM6YDBX.js} +3 -3
  134. package/dist/{chunk-BWKZEW6K.js → chunk-4T3E56NT.js} +3 -3
  135. package/dist/{chunk-4PC7LIQK.js → chunk-4ZMUWRFF.js} +3 -3
  136. package/dist/{chunk-O4AWXTZQ.js → chunk-52XIYULR.js} +3 -3
  137. package/dist/{chunk-GXK4CUAB.js → chunk-5WQKTT5Z.js} +2 -2
  138. package/dist/{chunk-MHIYYHCL.js → chunk-5ZAHAUWD.js} +10 -10
  139. package/dist/{chunk-6N7W3TOV.js → chunk-63BPMTBM.js} +2 -2
  140. package/dist/{chunk-R5YZ3ROM.js → chunk-63PQKTTT.js} +2 -2
  141. package/dist/{chunk-WLZVXCPZ.js → chunk-6GO6WN22.js} +3 -3
  142. package/dist/{chunk-6PQBKMUL.js → chunk-6IIA63VD.js} +11 -7
  143. package/dist/chunk-6IIA63VD.js.map +1 -0
  144. package/dist/{chunk-PQCFW2KT.js → chunk-6IRDW7K3.js} +18 -13
  145. package/dist/chunk-6IRDW7K3.js.map +1 -0
  146. package/dist/{chunk-XDCZBOEY.js → chunk-6LGBGPBU.js} +1 -1
  147. package/dist/{chunk-D4QOZXPM.js → chunk-7ITDATTP.js} +2 -2
  148. package/dist/{chunk-M5E3CKSE.js → chunk-7QWWE5XL.js} +2 -2
  149. package/dist/{chunk-RABKQFTA.js → chunk-A2HCAMRH.js} +2 -2
  150. package/dist/{chunk-6K3WNTRI.js → chunk-AODISQO6.js} +2 -2
  151. package/dist/{chunk-C6JL6PBL.js → chunk-AQDRH6VF.js} +3 -3
  152. package/dist/{chunk-72XEFLMD.js → chunk-ASWINLSW.js} +2 -2
  153. package/dist/{chunk-DNLXQUBX.js → chunk-B746OUJC.js} +24 -36
  154. package/dist/chunk-B746OUJC.js.map +1 -0
  155. package/dist/{chunk-FVCLVASD.js → chunk-B7ZKSROO.js} +24 -24
  156. package/dist/{chunk-EURDMOXZ.js → chunk-BYJZUCOQ.js} +2 -2
  157. package/dist/{chunk-ZWACUOU5.js → chunk-CDBGAAJY.js} +3 -3
  158. package/dist/chunk-CDBGAAJY.js.map +1 -0
  159. package/dist/{chunk-BPD4IJBG.js → chunk-CG6CJMIS.js} +2 -2
  160. package/dist/{chunk-B254JG72.js → chunk-CQX24PT7.js} +2 -2
  161. package/dist/{chunk-HJTTDLF6.js → chunk-CY3NO4JN.js} +4 -4
  162. package/dist/{chunk-OLUG4IFF.js → chunk-D2RLPRSG.js} +2 -2
  163. package/dist/{chunk-74NIHMAT.js → chunk-D653JH6D.js} +3 -3
  164. package/dist/{chunk-FMATVQFW.js → chunk-DA6EQDFR.js} +6 -6
  165. package/dist/{chunk-2LUO22FR.js → chunk-DAI5CTQF.js} +4 -4
  166. package/dist/{chunk-HTKVYEVB.js → chunk-DBM4ZXDN.js} +2 -2
  167. package/dist/{chunk-MB2DTUEG.js → chunk-DNYKLU3K.js} +4 -4
  168. package/dist/{chunk-NPDL4W4Y.js → chunk-DT53LBQN.js} +44 -45
  169. package/dist/chunk-DT53LBQN.js.map +1 -0
  170. package/dist/{chunk-26P7B46A.js → chunk-DXYARXK3.js} +3 -3
  171. package/dist/{chunk-JQKURO3S.js → chunk-E4MQRQ6Z.js} +2 -2
  172. package/dist/{chunk-KW53DBY7.js → chunk-EBW2E32G.js} +2 -2
  173. package/dist/{chunk-O73DRA77.js → chunk-ENKBO7FC.js} +4 -4
  174. package/dist/{chunk-32HA7DXJ.js → chunk-EQNGX77H.js} +11 -11
  175. package/dist/{chunk-CA64OZLZ.js → chunk-FAPYRTG6.js} +4 -4
  176. package/dist/{chunk-WWM7WVD2.js → chunk-GABFKHQE.js} +2 -2
  177. package/dist/chunk-GLCOKWLH.js +42 -0
  178. package/dist/chunk-GLCOKWLH.js.map +1 -0
  179. package/dist/{chunk-OHG2UQ2O.js → chunk-GNM3OY36.js} +51 -13
  180. package/dist/chunk-GNM3OY36.js.map +1 -0
  181. package/dist/{chunk-JJ7VMIEQ.js → chunk-H2GTWX4D.js} +14 -14
  182. package/dist/{chunk-LR7U3HCD.js → chunk-HPSATFLQ.js} +4 -4
  183. package/dist/{chunk-TM2ZLY3Q.js → chunk-I56TUH3Z.js} +13 -13
  184. package/dist/{chunk-ZZUKJ5HQ.js → chunk-IG2ERMSB.js} +2 -2
  185. package/dist/{chunk-2SZ3KC5S.js → chunk-IMKIIS4Y.js} +2 -2
  186. package/dist/{chunk-I57HZMMA.js → chunk-IXIE3H43.js} +2 -2
  187. package/dist/{chunk-OWJD3V4V.js → chunk-J3YQ3554.js} +2 -2
  188. package/dist/{chunk-BCFHMBMK.js → chunk-J5HZBHU4.js} +7 -7
  189. package/dist/{chunk-UHMMRQGU.js → chunk-KD7GNHOP.js} +3 -3
  190. package/dist/{chunk-RXMIXKB3.js → chunk-KIKAVZOW.js} +2 -2
  191. package/dist/{chunk-X7Z4B5GK.js → chunk-KPL7EXS6.js} +2 -2
  192. package/dist/{chunk-GTR2WUBA.js → chunk-KX6M5CJI.js} +1 -1
  193. package/dist/{chunk-CYO5HL4C.js → chunk-KYL2BPS2.js} +2 -2
  194. package/dist/{chunk-ZPZYYSHW.js → chunk-L7EAQGWN.js} +5 -5
  195. package/dist/{chunk-QLDMF7MH.js → chunk-LC5HE7PZ.js} +2 -2
  196. package/dist/{chunk-3SMJ2BIQ.js → chunk-LGD5RESZ.js} +7 -33
  197. package/dist/chunk-LGD5RESZ.js.map +1 -0
  198. package/dist/{chunk-4ICPJZAB.js → chunk-LMYSYG6U.js} +2 -2
  199. package/dist/{chunk-3ZZOE4SN.js → chunk-LOCDYMD6.js} +4 -4
  200. package/dist/{chunk-DNWBLT4U.js → chunk-MASBMJ2M.js} +2 -2
  201. package/dist/{chunk-6VITVQ23.js → chunk-MTYE2PPR.js} +1 -1
  202. package/dist/{chunk-NZMQDUOD.js → chunk-MU6HYDNF.js} +5 -5
  203. package/dist/{chunk-GMVKCEBG.js → chunk-MY6QEDZ2.js} +2 -2
  204. package/dist/{chunk-SK57RWSA.js → chunk-MZGKQ5WV.js} +2 -2
  205. package/dist/{chunk-HSQRYJ4P.js → chunk-N52SFH2K.js} +2 -2
  206. package/dist/{chunk-CEQUNJJY.js → chunk-NDCP5TVN.js} +2 -2
  207. package/dist/{chunk-MY6VZVCP.js → chunk-OAJX5CEL.js} +4 -4
  208. package/dist/{chunk-BQWUXC55.js → chunk-OBBLVC2W.js} +9 -9
  209. package/dist/{chunk-IWIMIRV3.js → chunk-OSJTLQXA.js} +9 -4
  210. package/dist/chunk-OSJTLQXA.js.map +1 -0
  211. package/dist/{chunk-FH75NNLB.js → chunk-OZ5NAXCP.js} +2 -2
  212. package/dist/{chunk-PEGNFZ3F.js → chunk-P5S777YI.js} +2 -2
  213. package/dist/{chunk-LY6727IF.js → chunk-PPSVFNEA.js} +1 -1
  214. package/dist/{chunk-K4FDZVMQ.js → chunk-PR42VIVY.js} +2 -2
  215. package/dist/{chunk-I74J2UZ2.js → chunk-PWMZCW4H.js} +8 -8
  216. package/dist/{chunk-6YDXUE5H.js → chunk-PYA2O3WS.js} +2 -2
  217. package/dist/{chunk-GUIZDI5T.js → chunk-Q2PA4KZS.js} +2 -2
  218. package/dist/{chunk-DZH2HTTB.js → chunk-R27GW5WV.js} +1 -1
  219. package/dist/chunk-R4U4EWZG.js +414 -0
  220. package/dist/chunk-R4U4EWZG.js.map +1 -0
  221. package/dist/{chunk-7OIBLMDP.js → chunk-RAQISW42.js} +2 -2
  222. package/dist/{chunk-CPKD2YGK.js → chunk-RNU5CUPI.js} +2 -2
  223. package/dist/{chunk-467VRP4E.js → chunk-RO5YZQHZ.js} +3 -3
  224. package/dist/{chunk-SSZROOOI.js → chunk-ROLXYGT5.js} +2 -2
  225. package/dist/{chunk-F4B2YYCN.js → chunk-TAWFXRXB.js} +3 -3
  226. package/dist/{chunk-G3FU2IF7.js → chunk-TB7UW5BB.js} +3 -3
  227. package/dist/{chunk-NF6Q4XTN.js → chunk-TQF2I5SY.js} +3 -3
  228. package/dist/{chunk-MM7OKOTE.js → chunk-UBXHP224.js} +43 -18
  229. package/dist/chunk-UBXHP224.js.map +1 -0
  230. package/dist/{chunk-M7A226EQ.js → chunk-UL44R3W2.js} +2 -2
  231. package/dist/{chunk-65K5LV4L.js → chunk-UQKBV22P.js} +21 -20
  232. package/dist/{chunk-65K5LV4L.js.map → chunk-UQKBV22P.js.map} +1 -1
  233. package/dist/{chunk-GTR5NLVP.js → chunk-VCRQPLKS.js} +2 -2
  234. package/dist/{chunk-NWSAF6P5.js → chunk-WJDH7CH5.js} +22 -1
  235. package/dist/chunk-WJDH7CH5.js.map +1 -0
  236. package/dist/{chunk-LG67ZNRU.js → chunk-WK2ZCTUF.js} +2 -2
  237. package/dist/{chunk-XGE75VPK.js → chunk-WNARM3LY.js} +3 -3
  238. package/dist/{chunk-RNBH5TSM.js → chunk-WQ2RTQYO.js} +2 -2
  239. package/dist/chunk-X5XEYQ4B.js +84 -0
  240. package/dist/chunk-X5XEYQ4B.js.map +1 -0
  241. package/dist/{chunk-W57QFLQD.js → chunk-X6JIGNLI.js} +4 -4
  242. package/dist/{chunk-CKA4SJRK.js → chunk-XIQDCQX7.js} +2 -2
  243. package/dist/{chunk-AJ7PY4FJ.js → chunk-Y3GCG6CA.js} +2 -2
  244. package/dist/{chunk-2K27S6LK.js → chunk-Y565N5ZJ.js} +24 -7
  245. package/dist/chunk-Y565N5ZJ.js.map +1 -0
  246. package/dist/{chunk-ZRB4M3GG.js → chunk-YC5KH7ZB.js} +3 -3
  247. package/dist/{chunk-4RY64KQY.js → chunk-YJUKLLNP.js} +2 -2
  248. package/dist/{chunk-24POWVUY.js → chunk-ZDJNRRVS.js} +4 -4
  249. package/dist/{chunk-S6WJ6TUT.js → chunk-ZEVJGMNB.js} +2 -2
  250. package/dist/chunk-ZEVJGMNB.js.map +1 -0
  251. package/dist/{chunk-M7YEZR6X.js → chunk-ZITMDA4C.js} +2 -2
  252. package/dist/components/model-policy-picker.d.ts +2 -0
  253. package/dist/composer.js +6 -6
  254. package/dist/{computer-viewer-BWVNDFTO.js → computer-viewer-6CRLWQHP.js} +5 -5
  255. package/dist/connect.js +6 -6
  256. package/dist/connection-service-presentation.d.ts +1 -4
  257. package/dist/desktop.js +2 -2
  258. package/dist/editor.js +2 -2
  259. package/dist/{embedded-new-voice-GBXSZ3TO.js → embedded-new-voice-KILV3RYM.js} +5 -5
  260. package/dist/{embedded-voice-MGI7EK7C.js → embedded-voice-GHDRLCFX.js} +5 -5
  261. package/dist/{fleet-decision-row-35S3GAUN.js → fleet-decision-row-DQXRRBT7.js} +2 -2
  262. package/dist/index.js +36 -36
  263. package/dist/interaction.js +5 -5
  264. package/dist/machines.js +3 -3
  265. package/dist/messages/en.d.ts +1 -1
  266. package/dist/messages.js +1 -1
  267. package/dist/{model-policy-picker-menu-KP53N6UJ.js → model-policy-picker-menu-5ALKUJMR.js} +4 -4
  268. package/dist/{platform-activity-row-ISMXR7NJ.js → platform-activity-row-227C764Z.js} +2 -2
  269. package/dist/{queue-surface-implementation-ULW7DDJA.js → queue-surface-implementation-H3NOBXU5.js} +5 -5
  270. package/dist/realtime.js +4 -4
  271. package/dist/{sandbox-files-QYSD4XCZ.js → sandbox-files-5FEOHUMD.js} +6 -6
  272. package/dist/session-app.js +92 -94
  273. package/dist/{session-realtime-JXRLPNUH.js → session-realtime-OHBMODNX.js} +3 -3
  274. package/dist/session-realtime.js +2 -2
  275. package/dist/session-ui.js +24 -24
  276. package/dist/session.js +5 -5
  277. package/dist/sites.js +2 -2
  278. package/dist/terminal.js +2 -2
  279. package/dist/this-computer.js +3 -3
  280. package/dist/timeline/connector-logo-index.d.ts +19 -0
  281. package/dist/{timeline-annotation-markers-OJYKHBEO.js → timeline-annotation-markers-NDHS7MCK.js} +2 -2
  282. package/dist/{timeline-annotation-selection-6OAZLXFU.js → timeline-annotation-selection-DRQSTJOV.js} +2 -2
  283. package/dist/{timeline-annotations-dialog-5M6DP5FX.js → timeline-annotations-dialog-G6J5ZJKN.js} +3 -3
  284. package/dist/timeline-model.d.ts +2 -0
  285. package/dist/timeline-model.js +9 -1
  286. package/dist/ui/list-row.js +1 -1
  287. package/dist/usage.js +2 -2
  288. package/dist/workbench.js +4 -4
  289. package/package.json +4 -4
  290. package/src/app/components/capabilities/native-connect-readiness.tsx +1 -0
  291. package/src/app/components/capabilities/perform-capability-action.test.ts +67 -0
  292. package/src/app/components/capabilities/perform-capability-action.tsx +28 -0
  293. package/src/app/components/command-menu/chat-switcher.tsx +25 -4
  294. package/src/app/components/rail/session-header.test.tsx +73 -2
  295. package/src/app/components/rail/session-header.tsx +20 -12
  296. package/src/app/components/rail/session-shell.tsx +10 -18
  297. package/src/app/components/session/subscription-account-indicator.test.ts +239 -0
  298. package/src/app/components/session/subscription-account-indicator.tsx +361 -0
  299. package/src/app/components/session/subscription-account-menu.tsx +21 -43
  300. package/src/app/components/session/subscription-account.test.ts +314 -0
  301. package/src/app/components/session/subscription-account.ts +354 -0
  302. package/src/app/lib/actions/actions-provider.tsx +11 -0
  303. package/src/app/lib/actions/actions.test.ts +59 -4
  304. package/src/app/lib/actions/chat-switcher.ts +73 -20
  305. package/src/app/lib/drive-connect-return.test.ts +183 -0
  306. package/src/app/lib/drive-connect-return.tsx +116 -0
  307. package/src/app/routes/session.tsx +12 -14
  308. package/src/app/routes/sessions-index.tsx +1 -0
  309. package/src/components/model-policy-picker-menu.tsx +25 -4
  310. package/src/components/model-policy-picker.tsx +2 -0
  311. package/src/components/session-mcp-capability-card.tsx +13 -4
  312. package/src/connection-service-presentation.ts +6 -1
  313. package/src/messages/en.ts +1 -1
  314. package/src/timeline/connector-logo-index.test.ts +46 -0
  315. package/src/timeline/connector-logo-index.ts +68 -0
  316. package/src/timeline-model.ts +6 -0
  317. package/src/ui/list-row.tsx +38 -10
  318. package/styles/compiled.css +13 -0
  319. package/dist/app/components/session/codex-account-indicator.d.ts +0 -9
  320. package/dist/app/components/session/model-account-indicator.d.ts +0 -10
  321. package/dist/app/components/session/model-account-indicator.js +0 -34
  322. package/dist/app/components/session/model-account-usage.d.ts +0 -8
  323. package/dist/app/components/session/model-account-usage.js +0 -8
  324. package/dist/chunk-2K27S6LK.js.map +0 -1
  325. package/dist/chunk-3SMJ2BIQ.js.map +0 -1
  326. package/dist/chunk-6PQBKMUL.js.map +0 -1
  327. package/dist/chunk-7H2D4VNU.js +0 -150
  328. package/dist/chunk-7H2D4VNU.js.map +0 -1
  329. package/dist/chunk-DNLXQUBX.js.map +0 -1
  330. package/dist/chunk-HCCSAECI.js +0 -132
  331. package/dist/chunk-HCCSAECI.js.map +0 -1
  332. package/dist/chunk-IWIMIRV3.js.map +0 -1
  333. package/dist/chunk-M77ZQE5T.js +0 -58
  334. package/dist/chunk-M77ZQE5T.js.map +0 -1
  335. package/dist/chunk-MM7OKOTE.js.map +0 -1
  336. package/dist/chunk-NPDL4W4Y.js.map +0 -1
  337. package/dist/chunk-NWSAF6P5.js.map +0 -1
  338. package/dist/chunk-OHG2UQ2O.js.map +0 -1
  339. package/dist/chunk-PQCFW2KT.js.map +0 -1
  340. package/dist/chunk-S6WJ6TUT.js.map +0 -1
  341. package/dist/chunk-ZWACUOU5.js.map +0 -1
  342. package/dist/session-realtime-JXRLPNUH.js.map +0 -1
  343. package/src/app/components/session/codex-account-indicator.tsx +0 -207
  344. package/src/app/components/session/model-account-indicator.tsx +0 -189
  345. package/src/app/components/session/model-account-usage.test.ts +0 -59
  346. package/src/app/components/session/model-account-usage.tsx +0 -89
  347. /package/dist/app/components/session/{codex-account-indicator.js.map → subscription-account-indicator.js.map} +0 -0
  348. /package/dist/app/{components/session/model-account-indicator.js.map → lib/drive-connect-return.js.map} +0 -0
  349. /package/dist/{app/components/session/model-account-usage.js.map → browser-viewer-VKIAULG7.js.map} +0 -0
  350. /package/dist/{browser-viewer-YQC6BFMS.js.map → chat-interactive-block-JGYSW4KB.js.map} +0 -0
  351. /package/dist/{chunk-WN2MIB4Q.js.map → chunk-22V2QCEM.js.map} +0 -0
  352. /package/dist/{chunk-SJPAKWWP.js.map → chunk-2BISI664.js.map} +0 -0
  353. /package/dist/{chunk-O5UOCMH4.js.map → chunk-2LPJVEWY.js.map} +0 -0
  354. /package/dist/{chunk-JI6WPLZB.js.map → chunk-2SBCOGQN.js.map} +0 -0
  355. /package/dist/{chunk-6JF7C3U3.js.map → chunk-2WERWWSS.js.map} +0 -0
  356. /package/dist/{chunk-4XKT4ENZ.js.map → chunk-2Y3QL3DA.js.map} +0 -0
  357. /package/dist/{chunk-KVMFT6FN.js.map → chunk-3FL3F4WF.js.map} +0 -0
  358. /package/dist/{chunk-4VJOZJDV.js.map → chunk-3JPQAIYJ.js.map} +0 -0
  359. /package/dist/{chunk-27EORKJ4.js.map → chunk-3N4LNBJF.js.map} +0 -0
  360. /package/dist/{chunk-7JZSFJHB.js.map → chunk-3OJU3RUR.js.map} +0 -0
  361. /package/dist/{chunk-NV5OYV3G.js.map → chunk-3U6K36QA.js.map} +0 -0
  362. /package/dist/{chunk-MDRLP5DO.js.map → chunk-3W7ROHN4.js.map} +0 -0
  363. /package/dist/{chunk-3MQM4ZOC.js.map → chunk-3Y6ZR2VN.js.map} +0 -0
  364. /package/dist/{chunk-HXZIX7MR.js.map → chunk-47AB65IO.js.map} +0 -0
  365. /package/dist/{chunk-DNYD7AUG.js.map → chunk-4BOLIZ7Y.js.map} +0 -0
  366. /package/dist/{chunk-4XO346BW.js.map → chunk-4FBJFQFU.js.map} +0 -0
  367. /package/dist/{chunk-DAQG3C4W.js.map → chunk-4HM6YDBX.js.map} +0 -0
  368. /package/dist/{chunk-BWKZEW6K.js.map → chunk-4T3E56NT.js.map} +0 -0
  369. /package/dist/{chunk-4PC7LIQK.js.map → chunk-4ZMUWRFF.js.map} +0 -0
  370. /package/dist/{chunk-O4AWXTZQ.js.map → chunk-52XIYULR.js.map} +0 -0
  371. /package/dist/{chunk-GXK4CUAB.js.map → chunk-5WQKTT5Z.js.map} +0 -0
  372. /package/dist/{chunk-MHIYYHCL.js.map → chunk-5ZAHAUWD.js.map} +0 -0
  373. /package/dist/{chunk-6N7W3TOV.js.map → chunk-63BPMTBM.js.map} +0 -0
  374. /package/dist/{chunk-R5YZ3ROM.js.map → chunk-63PQKTTT.js.map} +0 -0
  375. /package/dist/{chunk-WLZVXCPZ.js.map → chunk-6GO6WN22.js.map} +0 -0
  376. /package/dist/{chunk-XDCZBOEY.js.map → chunk-6LGBGPBU.js.map} +0 -0
  377. /package/dist/{chunk-D4QOZXPM.js.map → chunk-7ITDATTP.js.map} +0 -0
  378. /package/dist/{chunk-M5E3CKSE.js.map → chunk-7QWWE5XL.js.map} +0 -0
  379. /package/dist/{chunk-RABKQFTA.js.map → chunk-A2HCAMRH.js.map} +0 -0
  380. /package/dist/{chunk-6K3WNTRI.js.map → chunk-AODISQO6.js.map} +0 -0
  381. /package/dist/{chunk-C6JL6PBL.js.map → chunk-AQDRH6VF.js.map} +0 -0
  382. /package/dist/{chunk-72XEFLMD.js.map → chunk-ASWINLSW.js.map} +0 -0
  383. /package/dist/{chunk-FVCLVASD.js.map → chunk-B7ZKSROO.js.map} +0 -0
  384. /package/dist/{chunk-EURDMOXZ.js.map → chunk-BYJZUCOQ.js.map} +0 -0
  385. /package/dist/{chunk-BPD4IJBG.js.map → chunk-CG6CJMIS.js.map} +0 -0
  386. /package/dist/{chunk-B254JG72.js.map → chunk-CQX24PT7.js.map} +0 -0
  387. /package/dist/{chunk-HJTTDLF6.js.map → chunk-CY3NO4JN.js.map} +0 -0
  388. /package/dist/{chunk-OLUG4IFF.js.map → chunk-D2RLPRSG.js.map} +0 -0
  389. /package/dist/{chunk-74NIHMAT.js.map → chunk-D653JH6D.js.map} +0 -0
  390. /package/dist/{chunk-FMATVQFW.js.map → chunk-DA6EQDFR.js.map} +0 -0
  391. /package/dist/{chunk-2LUO22FR.js.map → chunk-DAI5CTQF.js.map} +0 -0
  392. /package/dist/{chunk-HTKVYEVB.js.map → chunk-DBM4ZXDN.js.map} +0 -0
  393. /package/dist/{chunk-MB2DTUEG.js.map → chunk-DNYKLU3K.js.map} +0 -0
  394. /package/dist/{chunk-26P7B46A.js.map → chunk-DXYARXK3.js.map} +0 -0
  395. /package/dist/{chunk-JQKURO3S.js.map → chunk-E4MQRQ6Z.js.map} +0 -0
  396. /package/dist/{chunk-KW53DBY7.js.map → chunk-EBW2E32G.js.map} +0 -0
  397. /package/dist/{chunk-O73DRA77.js.map → chunk-ENKBO7FC.js.map} +0 -0
  398. /package/dist/{chunk-32HA7DXJ.js.map → chunk-EQNGX77H.js.map} +0 -0
  399. /package/dist/{chunk-CA64OZLZ.js.map → chunk-FAPYRTG6.js.map} +0 -0
  400. /package/dist/{chunk-WWM7WVD2.js.map → chunk-GABFKHQE.js.map} +0 -0
  401. /package/dist/{chunk-JJ7VMIEQ.js.map → chunk-H2GTWX4D.js.map} +0 -0
  402. /package/dist/{chunk-LR7U3HCD.js.map → chunk-HPSATFLQ.js.map} +0 -0
  403. /package/dist/{chunk-TM2ZLY3Q.js.map → chunk-I56TUH3Z.js.map} +0 -0
  404. /package/dist/{chunk-ZZUKJ5HQ.js.map → chunk-IG2ERMSB.js.map} +0 -0
  405. /package/dist/{chunk-2SZ3KC5S.js.map → chunk-IMKIIS4Y.js.map} +0 -0
  406. /package/dist/{chunk-I57HZMMA.js.map → chunk-IXIE3H43.js.map} +0 -0
  407. /package/dist/{chunk-OWJD3V4V.js.map → chunk-J3YQ3554.js.map} +0 -0
  408. /package/dist/{chunk-BCFHMBMK.js.map → chunk-J5HZBHU4.js.map} +0 -0
  409. /package/dist/{chunk-UHMMRQGU.js.map → chunk-KD7GNHOP.js.map} +0 -0
  410. /package/dist/{chunk-RXMIXKB3.js.map → chunk-KIKAVZOW.js.map} +0 -0
  411. /package/dist/{chunk-X7Z4B5GK.js.map → chunk-KPL7EXS6.js.map} +0 -0
  412. /package/dist/{chunk-GTR2WUBA.js.map → chunk-KX6M5CJI.js.map} +0 -0
  413. /package/dist/{chunk-CYO5HL4C.js.map → chunk-KYL2BPS2.js.map} +0 -0
  414. /package/dist/{chunk-ZPZYYSHW.js.map → chunk-L7EAQGWN.js.map} +0 -0
  415. /package/dist/{chunk-QLDMF7MH.js.map → chunk-LC5HE7PZ.js.map} +0 -0
  416. /package/dist/{chunk-4ICPJZAB.js.map → chunk-LMYSYG6U.js.map} +0 -0
  417. /package/dist/{chunk-3ZZOE4SN.js.map → chunk-LOCDYMD6.js.map} +0 -0
  418. /package/dist/{chunk-DNWBLT4U.js.map → chunk-MASBMJ2M.js.map} +0 -0
  419. /package/dist/{chunk-6VITVQ23.js.map → chunk-MTYE2PPR.js.map} +0 -0
  420. /package/dist/{chunk-NZMQDUOD.js.map → chunk-MU6HYDNF.js.map} +0 -0
  421. /package/dist/{chunk-GMVKCEBG.js.map → chunk-MY6QEDZ2.js.map} +0 -0
  422. /package/dist/{chunk-SK57RWSA.js.map → chunk-MZGKQ5WV.js.map} +0 -0
  423. /package/dist/{chunk-HSQRYJ4P.js.map → chunk-N52SFH2K.js.map} +0 -0
  424. /package/dist/{chunk-CEQUNJJY.js.map → chunk-NDCP5TVN.js.map} +0 -0
  425. /package/dist/{chunk-MY6VZVCP.js.map → chunk-OAJX5CEL.js.map} +0 -0
  426. /package/dist/{chunk-BQWUXC55.js.map → chunk-OBBLVC2W.js.map} +0 -0
  427. /package/dist/{chunk-FH75NNLB.js.map → chunk-OZ5NAXCP.js.map} +0 -0
  428. /package/dist/{chunk-PEGNFZ3F.js.map → chunk-P5S777YI.js.map} +0 -0
  429. /package/dist/{chunk-LY6727IF.js.map → chunk-PPSVFNEA.js.map} +0 -0
  430. /package/dist/{chunk-K4FDZVMQ.js.map → chunk-PR42VIVY.js.map} +0 -0
  431. /package/dist/{chunk-I74J2UZ2.js.map → chunk-PWMZCW4H.js.map} +0 -0
  432. /package/dist/{chunk-6YDXUE5H.js.map → chunk-PYA2O3WS.js.map} +0 -0
  433. /package/dist/{chunk-GUIZDI5T.js.map → chunk-Q2PA4KZS.js.map} +0 -0
  434. /package/dist/{chunk-DZH2HTTB.js.map → chunk-R27GW5WV.js.map} +0 -0
  435. /package/dist/{chunk-7OIBLMDP.js.map → chunk-RAQISW42.js.map} +0 -0
  436. /package/dist/{chunk-CPKD2YGK.js.map → chunk-RNU5CUPI.js.map} +0 -0
  437. /package/dist/{chunk-467VRP4E.js.map → chunk-RO5YZQHZ.js.map} +0 -0
  438. /package/dist/{chunk-SSZROOOI.js.map → chunk-ROLXYGT5.js.map} +0 -0
  439. /package/dist/{chunk-F4B2YYCN.js.map → chunk-TAWFXRXB.js.map} +0 -0
  440. /package/dist/{chunk-G3FU2IF7.js.map → chunk-TB7UW5BB.js.map} +0 -0
  441. /package/dist/{chunk-NF6Q4XTN.js.map → chunk-TQF2I5SY.js.map} +0 -0
  442. /package/dist/{chunk-M7A226EQ.js.map → chunk-UL44R3W2.js.map} +0 -0
  443. /package/dist/{chunk-GTR5NLVP.js.map → chunk-VCRQPLKS.js.map} +0 -0
  444. /package/dist/{chunk-LG67ZNRU.js.map → chunk-WK2ZCTUF.js.map} +0 -0
  445. /package/dist/{chunk-XGE75VPK.js.map → chunk-WNARM3LY.js.map} +0 -0
  446. /package/dist/{chunk-RNBH5TSM.js.map → chunk-WQ2RTQYO.js.map} +0 -0
  447. /package/dist/{chunk-W57QFLQD.js.map → chunk-X6JIGNLI.js.map} +0 -0
  448. /package/dist/{chunk-CKA4SJRK.js.map → chunk-XIQDCQX7.js.map} +0 -0
  449. /package/dist/{chunk-AJ7PY4FJ.js.map → chunk-Y3GCG6CA.js.map} +0 -0
  450. /package/dist/{chunk-ZRB4M3GG.js.map → chunk-YC5KH7ZB.js.map} +0 -0
  451. /package/dist/{chunk-4RY64KQY.js.map → chunk-YJUKLLNP.js.map} +0 -0
  452. /package/dist/{chunk-24POWVUY.js.map → chunk-ZDJNRRVS.js.map} +0 -0
  453. /package/dist/{chunk-M7YEZR6X.js.map → chunk-ZITMDA4C.js.map} +0 -0
  454. /package/dist/{chat-interactive-block-Z22YHDRU.js.map → computer-viewer-6CRLWQHP.js.map} +0 -0
  455. /package/dist/{computer-viewer-BWVNDFTO.js.map → embedded-new-voice-KILV3RYM.js.map} +0 -0
  456. /package/dist/{embedded-new-voice-GBXSZ3TO.js.map → embedded-voice-GHDRLCFX.js.map} +0 -0
  457. /package/dist/{fleet-decision-row-35S3GAUN.js.map → fleet-decision-row-DQXRRBT7.js.map} +0 -0
  458. /package/dist/{embedded-voice-MGI7EK7C.js.map → model-policy-picker-menu-5ALKUJMR.js.map} +0 -0
  459. /package/dist/{platform-activity-row-ISMXR7NJ.js.map → platform-activity-row-227C764Z.js.map} +0 -0
  460. /package/dist/{queue-surface-implementation-ULW7DDJA.js.map → queue-surface-implementation-H3NOBXU5.js.map} +0 -0
  461. /package/dist/{model-policy-picker-menu-KP53N6UJ.js.map → sandbox-files-5FEOHUMD.js.map} +0 -0
  462. /package/dist/{sandbox-files-QYSD4XCZ.js.map → session-realtime-OHBMODNX.js.map} +0 -0
  463. /package/dist/{timeline-annotation-markers-OJYKHBEO.js.map → timeline-annotation-markers-NDHS7MCK.js.map} +0 -0
  464. /package/dist/{timeline-annotation-selection-6OAZLXFU.js.map → timeline-annotation-selection-DRQSTJOV.js.map} +0 -0
  465. /package/dist/{timeline-annotations-dialog-5M6DP5FX.js.map → timeline-annotations-dialog-G6J5ZJKN.js.map} +0 -0
@@ -1,22 +1,22 @@
1
1
  "use client";
2
2
  import {
3
3
  useAttachedChrome
4
- } from "./chunk-MHIYYHCL.js";
4
+ } from "./chunk-5ZAHAUWD.js";
5
5
  import {
6
6
  ConnectMachineDialog
7
- } from "./chunk-4ICPJZAB.js";
7
+ } from "./chunk-LMYSYG6U.js";
8
8
  import {
9
9
  useWorkspaceMachines
10
- } from "./chunk-M7A226EQ.js";
10
+ } from "./chunk-UL44R3W2.js";
11
11
  import {
12
12
  useDesktopThisComputer
13
- } from "./chunk-3MQM4ZOC.js";
13
+ } from "./chunk-3Y6ZR2VN.js";
14
14
  import {
15
15
  useAppApi
16
16
  } from "./chunk-L5HJ4UYB.js";
17
17
  import {
18
18
  t
19
- } from "./chunk-BPD4IJBG.js";
19
+ } from "./chunk-CG6CJMIS.js";
20
20
  import {
21
21
  hasWorkspacePermission
22
22
  } from "./chunk-FIDD34ZF.js";
@@ -37,14 +37,14 @@ import {
37
37
  } from "./chunk-CPLCSM6K.js";
38
38
  import {
39
39
  MACHINES_SESSION_POLL_MS
40
- } from "./chunk-WWM7WVD2.js";
40
+ } from "./chunk-GABFKHQE.js";
41
41
  import {
42
42
  SessionCapabilityFrame
43
- } from "./chunk-X7Z4B5GK.js";
43
+ } from "./chunk-KPL7EXS6.js";
44
44
  import {
45
45
  thisComputerNeedsPermissions,
46
46
  thisComputerReady
47
- } from "./chunk-BWKZEW6K.js";
47
+ } from "./chunk-4T3E56NT.js";
48
48
  import {
49
49
  machineDisplayName
50
50
  } from "./chunk-BOG2FED3.js";
@@ -201,4 +201,4 @@ export {
201
201
  CHROME_CONNECTED_MESSAGE,
202
202
  SessionChromeCapabilityCard
203
203
  };
204
- //# sourceMappingURL=chunk-BQWUXC55.js.map
204
+ //# sourceMappingURL=chunk-OBBLVC2W.js.map
@@ -3,16 +3,16 @@ import {
3
3
  McpConnectionCard,
4
4
  mcpConnectionDiscoveryState,
5
5
  useConnect
6
- } from "./chunk-6PQBKMUL.js";
6
+ } from "./chunk-6IIA63VD.js";
7
7
  import {
8
8
  Markdown
9
- } from "./chunk-26P7B46A.js";
9
+ } from "./chunk-DXYARXK3.js";
10
10
  import {
11
11
  copyTextToClipboard
12
12
  } from "./chunk-PEHTX3V7.js";
13
13
  import {
14
14
  useOpenGeniText
15
- } from "./chunk-S6WJ6TUT.js";
15
+ } from "./chunk-ZEVJGMNB.js";
16
16
 
17
17
  // src/capability-catalog-row.tsx
18
18
  import { AlertTriangleIcon, CheckIcon, Loader2Icon, PlusIcon } from "lucide-react";
@@ -595,6 +595,11 @@ var outlook_default = "data:image/x-icon;base64,AAABAAMAICAAAAEAIACoEAAANgAAABgY
595
595
 
596
596
  // src/connection-service-presentation.ts
597
597
  var services = {
598
+ "google-drive": {
599
+ name: "Google Drive",
600
+ logo: null,
601
+ mcpUrl: "https://drivemcp.googleapis.com/mcp/v1"
602
+ },
598
603
  gmail: { name: "Gmail", logo: gmail_default, mcpUrl: "https://gmailmcp.googleapis.com/mcp/v1" },
599
604
  "microsoft-outlook-mail": { name: "Outlook Mail", logo: outlook_default },
600
605
  "microsoft-outlook-calendar": { name: "Outlook Calendar", logo: outlook_default },
@@ -2273,4 +2278,4 @@ export {
2273
2278
  PluginDiscovery,
2274
2279
  PluginDetails
2275
2280
  };
2276
- //# sourceMappingURL=chunk-IWIMIRV3.js.map
2281
+ //# sourceMappingURL=chunk-OSJTLQXA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/capability-catalog-row.tsx","../src/skill-discovery.tsx","../src/discovery-cache.ts","../src/connect-setup.tsx","../src/connection-service-presentation.ts","../src/connection-catalog.tsx","../src/connection-logo.tsx","../src/connect-chooser.tsx","../src/connect-accounts.tsx","../src/connection-service-logo.tsx","../src/capability-logo-fallback.ts","../src/connect-account-identity.tsx","../src/connection-skeleton.tsx","../src/connect-panel.tsx","../src/connection-discovery.tsx","../src/device-authorization.tsx","../src/identity-link-consent.tsx","../src/identity-link-accounts.tsx","../src/connection-installed.tsx","../src/connection-type-picker.tsx","../src/plugin-discovery.tsx","../src/plugin-details.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { AlertTriangleIcon, CheckIcon, Loader2Icon, PlusIcon } from \"lucide-react\";\nimport { useOpenGeniText, type OpenGeniText } from \"./messages/runtime\";\n\nexport type CapabilityCatalogStatus =\n | \"available\"\n | \"added\"\n | \"attention\"\n | \"unavailable\"\n | \"loading\";\n\nexport type CapabilityCatalogRowProps = Omit<\n ComponentPropsWithoutRef<\"button\">,\n \"children\" | \"onClick\" | \"name\"\n> & {\n name: string;\n description?: string | undefined;\n icon?: ReactNode;\n status?: CapabilityCatalogStatus;\n statusLabel?: string | undefined;\n /** Preserve opaque host status text when adopting this row without typed health. */\n showStatusLabel?: boolean;\n onOpen: () => void;\n};\n\nconst labels = (t: OpenGeniText): Record<CapabilityCatalogStatus, string> => ({\n available: t(\"capabilityCatalogRow.availableToAdd\"),\n added: t(\"capabilityCatalogRow.added\"),\n attention: t(\"capabilityCatalogRow.needsAttention\"),\n unavailable: t(\"capabilityCatalogRow.unavailable\"),\n loading: t(\"capabilityCatalogRow.working\"),\n});\n\n/** A display-only state. The entire catalog row is the action, never this glyph. */\nexport function CapabilityCatalogIndicator({\n status = \"available\",\n label,\n showLabel = false,\n}: {\n status?: CapabilityCatalogStatus;\n label?: string | undefined;\n showLabel?: boolean;\n}) {\n const t = useOpenGeniText();\n const Icon =\n status === \"added\"\n ? CheckIcon\n : status === \"attention\" || status === \"unavailable\"\n ? AlertTriangleIcon\n : status === \"loading\"\n ? Loader2Icon\n : PlusIcon;\n return (\n <span className=\"og-capability-catalog-indicator\" data-status={status}>\n <Icon aria-hidden=\"true\" />\n <span\n className={\n showLabel || status === \"attention\" || status === \"unavailable\"\n ? \"og-capability-catalog-notice\"\n : \"og-capability-catalog-sr-only\"\n }\n >\n {label ?? labels(t)[status]}\n </span>\n </span>\n );\n}\n\n/** Shared by connections, skills, and plugins: one row, one focus target, one action. */\nexport function CapabilityCatalogRow({\n name,\n description,\n icon,\n status = \"available\",\n statusLabel,\n showStatusLabel = false,\n onOpen,\n className = \"\",\n ...props\n}: CapabilityCatalogRowProps) {\n return (\n <button\n {...props}\n type=\"button\"\n className={`og-capability-catalog-row ${className}`}\n onClick={onOpen}\n >\n {icon ? <span className=\"og-capability-catalog-icon\">{icon}</span> : null}\n <span className=\"og-capability-catalog-copy\">\n <strong>{name}</strong>\n {description ? <span>{description}</span> : null}\n </span>\n <CapabilityCatalogIndicator status={status} label={statusLabel} showLabel={showStatusLabel} />\n </button>\n );\n}\n","import { useEffect, useState, type ReactNode } from \"react\";\nimport { createDiscoveryCache } from \"./discovery-cache\";\nimport { BookOpenIcon } from \"lucide-react\";\nimport { CapabilityCatalogRow, type CapabilityCatalogStatus } from \"./capability-catalog-row\";\nimport { useOpenGeniText } from \"./messages/runtime\";\n\nexport type SkillDiscoveryItem = {\n id: string;\n name: string;\n source: string;\n installs: number;\n url: string;\n};\nexport type SkillDiscoveryPage = { items: SkillDiscoveryItem[]; nextCursor: null };\nconst discoveryCache = createDiscoveryCache<SkillDiscoveryPage>();\n\nexport type SkillDiscoveryClient = {\n searchPublicSkills(workspaceId: string, query: string): Promise<SkillDiscoveryPage>;\n};\nexport type SkillDiscoveryProps = {\n installedSkills?: readonly { name: string; repositoryUrl: string; sourceUrl: string }[];\n client: SkillDiscoveryClient;\n workspaceId: string;\n query: string;\n onImport: (url: string) => void;\n canManage: boolean;\n localSkills?: readonly {\n id: string;\n name: string;\n description?: string;\n status?: CapabilityCatalogStatus;\n statusLabel?: string;\n onOpen: () => void;\n }[];\n resultLimit?: number;\n onShowMore?: () => void;\n onSearch?: (() => void) | undefined;\n /** Display name for a registry slug (\"agent-browser\" -> \"Agent browser\"). Defaults to the slug. */\n formatName?: (name: string) => string;\n /** The line under a remote skill (\"From vercel-labs on skills.sh\"). Defaults to the source. */\n formatSource?: (source: string) => string;\n /** The row tile. Defaults to a bare book glyph. */\n icon?: ReactNode;\n};\n\n/** Host-owned query and import flow; browse presentation is reusable independently. */\nexport function SkillDiscovery(props: SkillDiscoveryProps) {\n const t = useOpenGeniText();\n const query = props.query.trim();\n const discoveryQuery = query || \"agent\";\n return (\n <section className=\"og-skill-discovery\" aria-label={t(\"skillDiscovery.discoverSkills\")}>\n <header>\n <h3>\n {props.resultLimit\n ? t(\"skillDiscovery.skills\")\n : query\n ? t(\"skillDiscovery.searchSkills\")\n : t(\"skillDiscovery.browseSkills\")}\n </h3>\n {!props.resultLimit ? (\n <a\n href=\"https://skills.sh/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"og-skill-discovery-browse\"\n >\n {t(\"skillDiscovery.browseSkillsSh\")}\n </a>\n ) : null}\n </header>\n {!query ? (\n <p>{t(\"skillDiscovery.popularOnSkillsSh\")}</p>\n ) : query.length < 2 ? (\n <p>{t(\"skillDiscovery.enterAtLeastTwoCharacters\")}</p>\n ) : null}\n <DiscoveryResults\n key={`${props.workspaceId}:${discoveryQuery}`}\n {...props}\n query={discoveryQuery}\n />\n </section>\n );\n}\n\nconst keepText = (value: string) => value;\nconst DEFAULT_ICON = <BookOpenIcon aria-hidden=\"true\" />;\nconst EMPTY_LOCAL_SKILLS: NonNullable<SkillDiscoveryProps[\"localSkills\"]> = [];\nconst EMPTY_INSTALLED_SKILLS: NonNullable<SkillDiscoveryProps[\"installedSkills\"]> = [];\n\nfunction DiscoveryResults({\n client,\n workspaceId,\n query,\n canManage,\n onImport,\n resultLimit,\n onShowMore,\n localSkills = EMPTY_LOCAL_SKILLS,\n installedSkills = EMPTY_INSTALLED_SKILLS,\n formatName = keepText,\n formatSource = keepText,\n icon = DEFAULT_ICON,\n}: SkillDiscoveryProps) {\n const t = useOpenGeniText();\n const cacheKey = JSON.stringify([workspaceId, query]);\n const cached = discoveryCache.peek(client, cacheKey);\n const [result, setResult] = useState<SkillDiscoveryPage | null>(cached ?? null);\n const [loading, setLoading] = useState(query.length >= 2 && !cached);\n const [error, setError] = useState(false);\n const [retry, setRetry] = useState(0);\n useEffect(() => {\n let active = true;\n setError(false);\n if (query.length < 2) return;\n const existing = discoveryCache.peek(client, cacheKey);\n setLoading(!existing);\n let timer: ReturnType<typeof setTimeout>;\n const search = async (attempt: number) => {\n try {\n const data = await discoveryCache.read(client, cacheKey, () =>\n client.searchPublicSkills(workspaceId, query),\n );\n if (!active) return;\n setResult(data);\n setLoading(false);\n } catch (cause) {\n if (!active) return;\n const status =\n typeof cause === \"object\" && cause !== null && \"status\" in cause\n ? cause.status\n : undefined;\n const transient =\n cause instanceof TypeError ||\n (typeof status === \"number\" && status >= 500 && status <= 599);\n if (attempt === 0 && transient) {\n timer = setTimeout(() => void search(1), 750);\n return;\n }\n setError(true);\n setLoading(false);\n }\n };\n timer = setTimeout(() => void search(0), existing ? 0 : 300);\n return () => {\n active = false;\n clearTimeout(timer);\n };\n }, [client, workspaceId, query, cacheKey, retry]);\n const remoteSkills =\n result?.items.filter(\n (skill) =>\n !localSkills.some((local) => local.name.toLowerCase() === skill.name.toLowerCase()),\n ) ?? [];\n return (\n <div aria-busy={loading}>\n <div className=\"og-skill-discovery-grid\">\n {localSkills.slice(0, resultLimit).map((skill) => (\n <CapabilityCatalogRow\n key={skill.id}\n name={skill.name}\n description={skill.description}\n icon={icon}\n status={skill.status ?? \"added\"}\n statusLabel={skill.statusLabel}\n onOpen={skill.onOpen}\n />\n ))}\n {remoteSkills\n .slice(\n 0,\n resultLimit === undefined ? undefined : Math.max(0, resultLimit - localSkills.length),\n )\n .map((skill) => {\n const installed = installedSkills.some(\n (entry) =>\n entry.sourceUrl.replace(/\\/$/, \"\").toLowerCase() === skill.url.toLowerCase() ||\n (entry.repositoryUrl.replace(/\\/$/, \"\").toLowerCase() ===\n `https://github.com/${skill.source}`.toLowerCase() &&\n entry.name.toLowerCase() === skill.name.toLowerCase()),\n );\n return (\n <CapabilityCatalogRow\n key={skill.id}\n disabled={!canManage}\n name={formatName(skill.name)}\n description={formatSource(skill.source)}\n icon={icon}\n status={!canManage ? \"unavailable\" : installed ? \"added\" : \"available\"}\n statusLabel={\n !canManage\n ? t(\"skillDiscovery.adminRequired\")\n : installed\n ? t(\"skillDiscovery.installed\")\n : t(\"skillDiscovery.availableToAdd\")\n }\n onOpen={() => onImport(skill.url)}\n />\n );\n })}\n </div>\n {resultLimit && remoteSkills.length + localSkills.length > resultLimit && !loading ? (\n <button className=\"og-catalog-more\" type=\"button\" onClick={onShowMore}>\n {t(\"skillDiscovery.viewAllSkills\")}\n </button>\n ) : null}\n {loading ? <p role=\"status\">{t(\"skillDiscovery.loadingSkills\")}</p> : null}\n {error ? (\n <div role=\"alert\" className=\"og-skill-discovery-error\">\n {t(\"skillDiscovery.couldNotLoadSkills\")}\n <button type=\"button\" onClick={() => setRetry((value) => value + 1)}>\n {t(\"skillDiscovery.retry\")}\n </button>\n </div>\n ) : null}\n {result && !remoteSkills.length && !localSkills.length && !loading && !error ? (\n <p role=\"status\">{t(\"skillDiscovery.noMatchesForQuery\", { query })}</p>\n ) : null}\n </div>\n );\n}\n","/** Short-lived presentation data only. Never cache installation or authorization state. */\nexport function createDiscoveryCache<T>(ttlMs = 60_000, capacity = 64) {\n const clients = new WeakMap<\n object,\n Map<string, { expires: number; value: T | undefined; pending: Promise<T> }>\n >();\n return {\n peek(client: object, key: string): T | undefined {\n const entry = clients.get(client)?.get(key);\n return entry && entry.expires > Date.now() ? entry.value : undefined;\n },\n read(client: object, key: string, fetch: () => Promise<T>): Promise<T> {\n let entries = clients.get(client);\n if (!entries) {\n entries = new Map();\n clients.set(client, entries);\n }\n const existing = entries.get(key);\n if (existing && existing.expires > Date.now()) return existing.pending;\n entries.delete(key);\n while (entries.size >= capacity) entries.delete(entries.keys().next().value!);\n const entry = {\n expires: Date.now() + ttlMs,\n value: undefined as T | undefined,\n pending: Promise.resolve().then(fetch),\n };\n entries.set(key, entry);\n entry.pending = entry.pending.then(\n (value) => {\n entry.value = value;\n entry.expires = Date.now() + ttlMs;\n return value;\n },\n (error) => {\n if (entries.get(key) === entry) entries.delete(key);\n throw error;\n },\n );\n return entry.pending;\n },\n };\n}\n","import { useEffect, useRef, useState, type FormEvent } from \"react\";\nimport type { ConnectAdvance, ConnectAttempt, ConnectController } from \"@opengeni/connect\";\nimport { copyTextToClipboard } from \"./lib/clipboard\";\nimport { useConnect } from \"./hooks/use-connect\";\nimport { useOpenGeniText, type OpenGeniText } from \"./messages/runtime\";\n\nconst setupStatus = (t: OpenGeniText): Record<ConnectAttempt[\"state\"], string> => ({\n ready: t(\"connectSetup.readyToConnect\"),\n requires_user_action: t(\"connectSetup.authorizeYourAccount\"),\n credential_input: t(\"connectSetup.enterConnectionDetails\"),\n provider_wait: t(\"connectSetup.waitingForAuthorization2\"),\n account_selection: t(\"connectSetup.chooseAnAccount\"),\n resource_selection: t(\"connectSetup.chooseResources\"),\n preview: t(\"connectSetup.chooseTools\"),\n installing: t(\"connectSetup.addingSelectedTools\"),\n connected_but_incomplete: t(\"connectSetup.chooseWhichToolsToAdd\"),\n complete: t(\"connectSetup.connectionReady\"),\n cancelled: t(\"connectSetup.setupCancelled\"),\n expired: t(\"connectSetup.setupExpired\"),\n failed: t(\"connectSetup.setupCouldNotFinish\"),\n uncertain: t(\"connectSetup.setupOutcomeNeedsChecking\"),\n});\n\n/** GitHub returned from a non-owner's install request: an organization owner must approve. */\nexport function isOwnerApprovalPending(attempt: Pick<ConnectAttempt, \"error\">): boolean {\n return attempt.error?.code === \"owner_approval_pending\";\n}\n\n/**\n * A built-in integration (Outlook, Gmail, ...) has one reviewed tool set, so\n * after the person signs in there is nothing left for them to choose: setup\n * continues to the preview and installs every reviewed tool by itself. Custom\n * OpenAPI or GraphQL sources keep the explicit tool review.\n */\nexport function isCuratedDefinitionAttempt(\n attempt: Pick<ConnectAttempt, \"source\" | \"completionRequirement\" | \"mcpSetup\">,\n): boolean {\n return (\n attempt.completionRequirement === \"integration\" &&\n !attempt.mcpSetup &&\n (attempt.source === undefined || attempt.source.kind === \"definition\")\n );\n}\n\n/** The next step a built-in integration takes by itself, or null when the\n * person must act (or an error needs their attention). */\nexport function curatedAutoAdvance(attempt: ConnectAttempt): ConnectAdvance | null {\n if (!isCuratedDefinitionAttempt(attempt) || attempt.error) return null;\n const next = attempt.nextAction;\n if (attempt.state === \"connected_but_incomplete\" && next.type === \"none\")\n return { type: \"retry\" };\n if (attempt.state === \"preview\" && next.type === \"preview\")\n return {\n type: \"install\",\n previewId: next.previewId,\n contentHash: next.contentHash,\n operationIds: next.operations.map((operation) => operation.id),\n };\n return null;\n}\n\nconst MICROSOFT_APPROVAL_LINK = /https:\\/\\/login\\.microsoftonline\\.com\\/[^\\s]+/;\n\n/** Microsoft said, or may have said, that an administrator must approve the app first. */\nexport function adminApprovalLink(\n attempt: Pick<ConnectAttempt, \"error\">,\n): { url: string; required: boolean } | null {\n const error = attempt.error;\n if (!error || ![\"admin_consent_required\", \"provider_denied\"].includes(error.code)) return null;\n const match = MICROSOFT_APPROVAL_LINK.exec(error.message)?.[0];\n if (!match) return null;\n try {\n const url = new URL(match);\n if (url.protocol !== \"https:\" || url.username || url.password) return null;\n return { url: url.toString(), required: error.code === \"admin_consent_required\" };\n } catch {\n return null;\n }\n}\n\nfunction CopyLinkButton({ url }: { url: string }) {\n const t = useOpenGeniText();\n const [copied, setCopied] = useState(false);\n return (\n <button\n type=\"button\"\n className=\"og-connect-setup-secondary\"\n onClick={() =>\n void copyTextToClipboard(url).then((ok) => {\n if (!ok) return;\n setCopied(true);\n setTimeout(() => setCopied(false), 1600);\n })\n }\n >\n {copied ? t(\"copyButton.copied\") : t(\"connectSetup.copyAdminApprovalLink\")}\n </button>\n );\n}\n\nfunction deviceVerificationUrl(action: ConnectAttempt[\"nextAction\"]): string | null {\n if (action.type !== \"wait\" || !action.verificationUrl) return null;\n try {\n const url = new URL(action.verificationUrl);\n return url.protocol === \"https:\" && !url.username && !url.password\n ? action.verificationUrl\n : null;\n } catch {\n return null;\n }\n}\n\nexport type ConnectSetupProps = {\n controller: ConnectController;\n /** Called synchronously in the click handler so a host can open a popup. */\n onAuthorize: (attempt: ConnectAttempt) => void | Promise<unknown>;\n /** Called synchronously on Continue; hosts can reserve a popup before advancing. */\n onSelectAccount?: (accountId: string) => void | Promise<unknown>;\n /** Host pagination must retain selections across pages and submit the final set. */\n onBrowseResources?: (attempt: ConnectAttempt) => void | Promise<unknown>;\n className?: string;\n /** Provider-specific label supplied by the embedding host. */\n authorizeLabel?: string | undefined;\n};\n\n/** Controller-backed setup surface, styled by opt-in connect.css. No provider secrets enter React state. Host owns\n * chooser, controller lifetime, navigation and recovery after full redirect. */\nexport function ConnectSetup(props: ConnectSetupProps) {\n // Attempt IDs/revisions are not a substitute for actor scope. A host can\n // recover the same attempt through a replacement controller; never preserve\n // a previous actor's unsent credential DOM or local errors across that swap.\n const [scope, setScope] = useState(props.controller);\n const [generation, setGeneration] = useState(0);\n if (scope !== props.controller) {\n setScope(props.controller);\n setGeneration(generation + 1);\n }\n return <ScopedSetup key={generation} {...props} />;\n}\n\nfunction ScopedSetup({\n controller,\n onAuthorize,\n onBrowseResources,\n onSelectAccount,\n className,\n authorizeLabel: authorizeLabelProp,\n}: ConnectSetupProps) {\n const t = useOpenGeniText();\n const authorizeLabel =\n authorizeLabelProp === undefined ? t(\"connectSetup.authorizeConnection\") : authorizeLabelProp;\n const view = useConnect(controller);\n const [localError, setLocalError] = useState(false);\n const [navigating, setNavigating] = useState(false);\n // One automatic step per attempt revision; a failure falls back to the\n // manual controls below instead of retrying in a loop.\n const autoStep = useRef<string | null>(null);\n const invoke = (operation: () => unknown | Promise<unknown>) => {\n setLocalError(false);\n try {\n void Promise.resolve(operation()).catch(() => setLocalError(true));\n } catch {\n setLocalError(true);\n }\n };\n const attempt = view.attempt;\n useEffect(() => {\n if (!attempt || view.busy || localError || view.error) return;\n const step = `${attempt.id}:${attempt.revision}`;\n if (autoStep.current === step) return;\n const advance = curatedAutoAdvance(attempt);\n if (!advance) return;\n autoStep.current = step;\n invoke(() => view.advance(advance, crypto.randomUUID()));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [attempt, view.busy, localError, view.error]);\n if (!attempt)\n return (\n <section\n className={[\"og-connect-setup\", className].filter(Boolean).join(\" \")}\n aria-label={t(\"connectSetup.connectionSetup\")}\n >\n <p role=\"status\">{t(\"connectSetup.chooseAConnectionToBegin\")}</p>\n </section>\n );\n const action = attempt.nextAction;\n const verificationUrl = deviceVerificationUrl(action);\n const terminal = [\"complete\", \"cancelled\", \"expired\"].includes(attempt.state);\n const awaitingOwner = isOwnerApprovalPending(attempt);\n // While a built-in integration finishes by itself, show progress instead of\n // the manual tool chooser; any error brings the manual controls back.\n const autoFinishing =\n !localError &&\n !view.error &&\n (curatedAutoAdvance(attempt) !== null ||\n (attempt.state === \"installing\" && isCuratedDefinitionAttempt(attempt) && !attempt.error));\n const adminApproval = adminApprovalLink(attempt);\n const offersGitHubRequest =\n action.type === \"select_account\" &&\n attempt.providerId.startsWith(\"github\") &&\n action.accounts.some((account) => account.id === \"new\");\n const submit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const form = event.currentTarget;\n const data = new FormData(form);\n if (view.busy || navigating) return;\n const key = crypto.randomUUID();\n if (action.type === \"credentials\") {\n const values = Object.fromEntries(\n action.fields.map((field, i) => [field.name, String(data.get(`field-${i}`) ?? \"\")]),\n );\n // Clear the DOM before awaiting remote work; controller never retains values.\n form.reset();\n invoke(() => view.advance({ type: \"credentials\", values }, key));\n } else if (action.type === \"select_account\") {\n const accountId = String(data.get(\"account\") ?? \"\");\n if (\n action.accounts.some((account) => account.id === accountId && account.status !== \"disabled\")\n )\n invoke(async () => {\n if (!onSelectAccount) return view.advance({ type: \"account\", accountId }, key);\n setNavigating(true);\n try {\n await onSelectAccount(accountId);\n } finally {\n setNavigating(false);\n }\n });\n } else if (action.type === \"select_resources\") {\n if (action.cursor) return;\n const resourceIds = data.getAll(\"resource\").map(String);\n invoke(() => view.advance({ type: \"resources\", resourceIds }, key));\n } else if (action.type === \"preview\") {\n const operationIds = data.getAll(\"operation\").map(String);\n invoke(() =>\n view.advance(\n {\n type: \"install\",\n previewId: action.previewId,\n contentHash: action.contentHash,\n operationIds,\n },\n key,\n ),\n );\n }\n };\n return (\n <section\n className={[\"og-connect-setup\", className].filter(Boolean).join(\" \")}\n aria-label={t(\"connectSetup.connectionSetup\")}\n aria-busy={view.busy || navigating}\n >\n <div className=\"og-connect-setup-summary\">\n <p className=\"og-connect-setup-scope\">\n {attempt.ownership === \"personal\"\n ? t(\"connectSetup.personalConnection\")\n : t(\"connectSetup.workspaceConnection\")}\n </p>\n <p role=\"status\" className=\"og-connect-setup-status\">\n {awaitingOwner\n ? t(\"connectSetup.waitingForAnOrganizationOwner\")\n : attempt.mcpSetup && attempt.state === \"credential_input\"\n ? t(\"connectSetup.enterTheRequestedKey\")\n : autoFinishing\n ? t(\"connectSetup.finishingSetup\")\n : setupStatus(t)[attempt.state]}\n </p>\n <p className=\"og-connect-setup-description\">\n {attempt.ownership === \"personal\"\n ? t(\"connectSetup.onlyYourWorkCanUse\")\n : t(\"connectSetup.workInThisWorkspaceCan\")}\n </p>\n </div>\n {attempt.account && <p>{t(\"connectSetup.accountLabel\", { label: attempt.account.label })}</p>}\n {awaitingOwner && (\n <div className=\"og-connect-setup-pending\">\n <p>{t(\"connectSetup.yourRequestWasSentGithub\")}</p>\n <ol>\n <li>{t(\"connectSetup.anOrganizationOwnerApprovesThe\")}</li>\n <li>{t(\"connectSetup.anOwnerThenConnectsThe\")}</li>\n </ol>\n <p>{t(\"connectSetup.nothingIsConnectedUntilThen\")}</p>\n </div>\n )}\n {adminApproval && (\n <div className=\"og-connect-setup-pending\" role=\"alert\">\n <p>\n {adminApproval.required\n ? t(\"connectSetup.microsoftAdminApprovalRequired\")\n : t(\"connectSetup.microsoftAdminApprovalMaybe\")}\n </p>\n <ol>\n <li>{t(\"connectSetup.sendTheApprovalLinkTo\")}</li>\n <li>{t(\"connectSetup.afterTheyApproveConnectAgain\")}</li>\n </ol>\n <p className=\"og-connect-setup-approval-link\">\n <a href={adminApproval.url} target=\"_blank\" rel=\"noreferrer noopener\">\n {t(\"connectSetup.adminApprovalLink\")}\n </a>\n <CopyLinkButton url={adminApproval.url} />\n </p>\n </div>\n )}\n {(localError || view.error || (attempt.error && !awaitingOwner && !adminApproval)) && (\n <p role=\"alert\">\n {attempt.error?.code === \"source_changed\"\n ? t(\"connectSetup.theIntegrationSourceChangedReview\")\n : attempt.error?.code === \"mcp_verification_failed\"\n ? t(\"connectSetup.couldNotVerifyThisConnection\")\n : t(\"connectSetup.connectionSetupCouldNotContinue\")}\n </p>\n )}\n {!terminal && !autoFinishing && (\n <form key={`${attempt.id}:${attempt.revision}`} onSubmit={submit} autoComplete=\"off\">\n <fieldset disabled={view.busy || navigating}>\n {[\"credentials\", \"select_account\", \"select_resources\", \"preview\"].includes(\n action.type,\n ) ? (\n <legend className={attempt.mcpSetup ? \"og-capability-catalog-sr-only\" : undefined}>\n {t(\"connectSetup.connectionDetails\")}\n </legend>\n ) : null}\n {attempt.state === \"connected_but_incomplete\" &&\n action.type === \"none\" &&\n !awaitingOwner && (\n <button\n type=\"button\"\n className=\"og-connect-setup-primary\"\n onClick={() => invoke(() => view.advance({ type: \"retry\" }, crypto.randomUUID()))}\n >\n {t(\"connectSetup.chooseTools\")}\n </button>\n )}\n {action.type === \"credentials\" &&\n action.fields.map((field, i) => (\n <label key={field.name}>\n {field.label}\n {field.options ? (\n <select name={`field-${i}`} required={field.required} defaultValue=\"\">\n <option value=\"\">\n {field.required\n ? t(\"connectSetup.chooseAnOption\")\n : t(\"connectSetup.noAccountPublicService\")}\n </option>\n {field.options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n ) : (\n <input\n name={`field-${i}`}\n type={field.secret ? \"password\" : \"text\"}\n required={field.required}\n autoComplete=\"off\"\n />\n )}\n </label>\n ))}\n {action.type === \"select_account\" && (\n <label>\n {t(\"connectSetup.account\")}\n <select name=\"account\" required defaultValue=\"\">\n <option value=\"\" disabled>\n {t(\"connectSetup.chooseAnAccount\")}\n </option>\n {action.accounts.map((account) => (\n <option\n key={account.id}\n value={account.id}\n disabled={account.status === \"disabled\"}\n >\n {account.label} — {account.id} ({account.ownership})\n </option>\n ))}\n </select>\n </label>\n )}\n {offersGitHubRequest && (\n <p className=\"og-connect-setup-hint\">{t(\"connectSetup.donTSeeYourOrganization\")}</p>\n )}\n {action.type === \"select_resources\" &&\n action.resources.map((resource) => (\n <label key={resource.id}>\n <input type=\"checkbox\" name=\"resource\" value={resource.id} />\n {resource.label} ({resource.kind})\n </label>\n ))}\n {action.type === \"select_resources\" && action.cursor && (\n <>\n <p>{t(\"connectSetup.moreResourcesAreAvailableReview\")}</p>\n {onBrowseResources && (\n <button\n type=\"button\"\n onClick={() => invoke(() => onBrowseResources(structuredClone(attempt)))}\n >\n {t(\"connectSetup.browseAllResources\")}\n </button>\n )}\n </>\n )}\n {action.type === \"preview\" && (\n <>\n <p>{t(\"connectSetup.chooseTheToolsAgentsCan\")}</p>\n {action.operations.map((operation) => (\n <label key={operation.id}>\n <input type=\"checkbox\" name=\"operation\" value={operation.id} />\n {operation.label} ({operation.kind})\n </label>\n ))}\n </>\n )}\n {[\"credentials\", \"select_account\", \"select_resources\", \"preview\"].includes(\n action.type,\n ) && (\n <button\n type=\"submit\"\n className=\"og-connect-setup-primary\"\n disabled={action.type === \"select_resources\" && Boolean(action.cursor)}\n >\n {action.type === \"preview\"\n ? t(\"connectSetup.addSelectedTools\")\n : attempt.mcpSetup && action.type === \"credentials\"\n ? view.busy\n ? t(\"connectSetup.verifyingConnection\")\n : t(\"connectSetup.connect\")\n : t(\"connectSetup.continue\")}\n </button>\n )}\n {action.type === \"authorize\" && (\n <button\n type=\"button\"\n className=\"og-connect-setup-primary\"\n onClick={() => invoke(() => onAuthorize(structuredClone(attempt)))}\n >\n {navigating ? t(\"connectSetup.waitingForAuthorization\") : authorizeLabel}\n </button>\n )}\n {action.type === \"wait\" && (\n <>\n {action.userCode && (\n <p>\n {t(\"connectSetup.verificationCode\")} <code>{action.userCode}</code>\n </p>\n )}\n <p>{t(\"connectSetup.completeProviderAuthorizationThenCheck\")}</p>\n {verificationUrl && (\n <a href={verificationUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n {t(\"connectSetup.openProviderVerificationPageNew\")}\n </a>\n )}\n </>\n )}\n <div className=\"og-connect-setup-secondary\">\n <button type=\"button\" onClick={() => invoke(() => view.refresh())}>\n {t(\"connectSetup.checkStatus\")}\n </button>\n <button type=\"button\" onClick={() => invoke(() => view.cancel(crypto.randomUUID()))}>\n {t(\"connectSetup.cancelSetup\")}\n </button>\n </div>\n </fieldset>\n </form>\n )}\n </section>\n );\n}\n","import type { ConnectAccount, ConnectProvider } from \"@opengeni/connect\";\nimport type { CapabilityCatalogItem } from \"@opengeni/sdk\";\nimport gmailLogo from \"./assets/gmail.ico\";\nimport outlookLogo from \"./assets/outlook.ico\";\n\n/** Passive service identity only. Never selects an account or grants tool access. */\nconst services: Record<string, { name: string; logo: string | null; mcpUrl?: string }> = {\n \"google-drive\": {\n name: \"Google Drive\",\n logo: null,\n mcpUrl: \"https://drivemcp.googleapis.com/mcp/v1\",\n },\n gmail: { name: \"Gmail\", logo: gmailLogo, mcpUrl: \"https://gmailmcp.googleapis.com/mcp/v1\" },\n \"microsoft-outlook-mail\": { name: \"Outlook Mail\", logo: outlookLogo },\n \"microsoft-outlook-calendar\": { name: \"Outlook Calendar\", logo: outlookLogo },\n \"microsoft-outlook-contacts\": { name: \"Outlook Contacts\", logo: outlookLogo },\n};\n\nexport function connectionServicePresentation(provider: Pick<ConnectProvider, \"id\" | \"label\">) {\n return (\n (Object.hasOwn(services, provider.id) ? services[provider.id] : undefined) ?? {\n name: provider.label,\n logo: null,\n }\n );\n}\n\nexport function capabilityConnectProviderId(\n item: Partial<Pick<CapabilityCatalogItem, \"mcpUrl\">>,\n): string | undefined {\n return Object.entries(services).find(\n ([, service]) => service.mcpUrl && service.mcpUrl === item.mcpUrl,\n )?.[0];\n}\n\nexport function accountServiceCapability(account: ConnectAccount, items: CapabilityCatalogItem[]) {\n const exact = items.filter((item) => item.connectionRef?.connectionId === account.id);\n if (exact.length === 1) return exact[0];\n // Presentation may use the service definition even when a personal credential\n // has no workspace installation reference. The account id remains unchanged.\n return items.find((item) => capabilityConnectProviderId(item) === account.providerId);\n}\n\nexport function isServiceConnectProvider(provider: ConnectProvider): boolean {\n return (\n provider.readiness === \"available\" &&\n provider.ownership.length > 0 &&\n provider.family !== \"mcp\" &&\n !provider.setup.some((kind) => [\"installation\", \"openapi\", \"graphql\"].includes(kind))\n );\n}\n","import type { ReactNode } from \"react\";\nimport {\n CapabilityCatalogIndicator,\n CapabilityCatalogRow,\n type CapabilityCatalogStatus,\n} from \"./capability-catalog-row\";\nimport { useOpenGeniText } from \"./messages/runtime\";\n\n/** Status comes from the host/controller, never inferred from a display label. */\nexport type ConnectionCatalogOption = {\n id: string;\n name: string;\n description?: string | undefined;\n status: string;\n connected: boolean;\n /** Explicit health/availability. Omit to retain visible legacy status text. */\n state?: CapabilityCatalogStatus;\n onOpen: () => void;\n action?: ReactNode;\n};\nexport type ConnectionCatalogService = {\n id: string;\n name: string;\n logo?: ReactNode;\n options: ConnectionCatalogOption[];\n};\nexport type ConnectionCatalogProps = {\n services: ConnectionCatalogService[];\n query?: string;\n columns?: 1 | 2;\n resultLimit?: number;\n onShowMore?: () => void;\n /** Group capabilities by service, or show every capability independently. */\n grouped?: boolean;\n className?: string;\n emptyMessage?: string;\n};\n\nexport function ConnectionOptionRow({ option }: { option: ConnectionCatalogOption }) {\n return (\n <div className=\"og-connection-catalog-action-row og-connection-option\">\n <CapabilityCatalogRow\n name={option.name}\n description={option.description}\n status={option.state ?? (option.connected ? \"added\" : \"available\")}\n statusLabel={option.status}\n showStatusLabel={option.state === undefined}\n onOpen={option.onOpen}\n />\n {option.action ? <span className=\"og-connection-option-action\">{option.action}</span> : null}\n </div>\n );\n}\n\nexport function ConnectionServiceRow({ service }: { service: ConnectionCatalogService }) {\n const t = useOpenGeniText();\n if (!service.options.length) return null;\n const connected = service.options.filter((option) => option.connected).length;\n const attention = service.options.find(\n (option) => option.state === \"attention\" || option.state === \"unavailable\",\n );\n const groupState =\n attention?.state ??\n (service.options.some((option) => option.state === \"loading\")\n ? \"loading\"\n : connected === service.options.length\n ? \"added\"\n : \"available\");\n const identity = (\n <>\n <span className=\"og-capability-catalog-icon\">{service.logo}</span>\n <span className=\"og-capability-catalog-copy\">\n <strong>{service.name}</strong>\n <span>\n {service.options.length === 1\n ? service.options[0]?.description\n : service.options.map((option) => option.name).join(\" · \")}\n </span>\n </span>\n <CapabilityCatalogIndicator\n status={groupState}\n label={\n attention?.status ??\n t(\"connectionCatalog.connectedOfLengthAdded\", {\n connected,\n length: service.options.length,\n })\n }\n />\n </>\n );\n return service.options.length === 1 ? (\n <div className=\"og-connection-catalog-action-row\">\n <CapabilityCatalogRow\n name={service.name}\n description={service.options[0]!.description}\n icon={service.logo}\n status={service.options[0]!.state ?? (connected ? \"added\" : \"available\")}\n statusLabel={service.options[0]!.status}\n showStatusLabel={service.options[0]!.state === undefined}\n onOpen={service.options[0]!.onOpen}\n />\n {service.options[0]?.action}\n </div>\n ) : (\n <details className=\"og-connection-catalog-service\">\n <summary className=\"og-capability-catalog-row\">\n {identity}\n <span aria-hidden className=\"og-connection-group-chevron\">\n ⌄\n </span>\n </summary>\n <div className=\"og-connection-catalog-options\">\n {service.options.map((option) => (\n <ConnectionOptionRow key={option.id} option={option} />\n ))}\n </div>\n </details>\n );\n}\n\nexport function ConnectionCatalog({\n services,\n query = \"\",\n columns = 1,\n grouped = true,\n resultLimit,\n onShowMore,\n className = \"\",\n emptyMessage: emptyMessageProp,\n}: ConnectionCatalogProps) {\n const t = useOpenGeniText();\n const emptyMessage =\n emptyMessageProp === undefined\n ? t(\"connectionCatalog.noConnectionsMatchYourSearch\")\n : emptyMessageProp;\n const search = query.trim().toLowerCase();\n const entries = grouped\n ? services\n : services.flatMap((service) =>\n service.options.map((option) => ({\n ...service,\n id: `${service.id}/${option.id}`,\n name:\n service.options.length > 1 && option.name !== service.name\n ? `${service.name} · ${option.name}`\n : service.name,\n options: [option],\n })),\n );\n const visible = entries.filter((service) =>\n [service.name, ...service.options.flatMap((option) => [option.name, option.description ?? \"\"])]\n .join(\" \")\n .toLowerCase()\n .includes(search),\n );\n return (\n <>\n <div className={`og-connection-catalog ${className}`} data-columns={columns}>\n {visible.length ? (\n visible\n .slice(0, resultLimit)\n .map((service) => <ConnectionServiceRow key={service.id} service={service} />)\n ) : (\n <p role=\"status\">{emptyMessage}</p>\n )}\n </div>\n {resultLimit && visible.length > resultLimit ? (\n <button className=\"og-catalog-more\" type=\"button\" onClick={onShowMore}>\n {t(\"connectionCatalog.viewAllConnections\")}\n </button>\n ) : null}\n </>\n );\n}\n","import { useState, type ReactNode } from \"react\";\n/** Brand identifier; failed/missing assets use the supplied fallback or stable initials. */\nexport function ConnectionLogo({\n src,\n name,\n size = 40,\n fallback,\n loading = false,\n}: {\n src: string | null;\n name: string;\n size?: number;\n fallback?: ReactNode;\n loading?: boolean;\n}) {\n const [failedSrc, setFailedSrc] = useState<string | null>(null);\n return (\n <span className=\"og-connection-logo\" aria-hidden=\"true\" style={{ width: size, height: size }}>\n {src && src !== failedSrc ? (\n <img src={src} alt=\"\" loading=\"lazy\" decoding=\"async\" onError={() => setFailedSrc(src)} />\n ) : loading ? (\n <span className=\"og-connection-skeleton-mark\" />\n ) : (\n (fallback ?? (\n <span>\n {name\n .split(/\\s+/)\n .map((part) => part[0])\n .join(\"\")\n .slice(0, 2)\n .toUpperCase()}\n </span>\n ))\n )}\n </span>\n );\n}\n","import { connectionServicePresentation } from \"./connection-service-presentation\";\nimport { ConnectionCatalog } from \"./connection-catalog\";\nimport { ConnectionLogo } from \"./connection-logo\";\nimport { useEffect, useState, type FormEvent } from \"react\";\nimport type { ConnectAccount, ConnectController, ConnectProvider } from \"@opengeni/connect\";\nimport { useConnect } from \"./hooks/use-connect\";\nimport { useOpenGeniText } from \"./messages/runtime\";\n\nexport type ConnectChooserProps = {\n controller: ConnectController;\n /** Exact host return string; no completion parameters are added. */\n returnUrl: string;\n className?: string;\n presentation?: \"select\" | \"catalog\";\n /** Compact mechanism picker when service discovery is already shown by the host. */\n customOnly?: boolean;\n providerOnly?: boolean;\n compact?: boolean;\n /** Select a service from the unified discovery list. */\n initialProviderId?: string;\n};\n\n/** Catalog readiness is supplied by the authenticated backend, never inferred\n * from the existence of a provider definition. Host replaces the controller on\n * actor/workspace change. This form does not open OAuth windows itself. */\nexport function ConnectChooser(props: ConnectChooserProps) {\n // Remount scope-local selections synchronously when the controller changes,\n // before effects can expose a previous actor's inventory for one frame.\n const [scope, setScope] = useState(props.controller);\n const [generation, setGeneration] = useState(0);\n if (scope !== props.controller) {\n setScope(props.controller);\n setGeneration(generation + 1);\n }\n return <ScopedChooser key={generation} {...props} />;\n}\n\nfunction ScopedChooser({\n controller,\n returnUrl,\n className,\n presentation = \"select\",\n customOnly = false,\n providerOnly = false,\n compact = false,\n initialProviderId = \"\",\n}: ConnectChooserProps) {\n const t = useOpenGeniText();\n const view = useConnect(controller);\n const [catalog, setCatalog] = useState<ConnectProvider[] | null>(null);\n const [accounts, setAccounts] = useState<ConnectAccount[]>([]);\n const [failed, setFailed] = useState(false);\n const [load, setLoad] = useState(0);\n const [query, setQuery] = useState(\"\");\n const [providerId, setProviderId] = useState(initialProviderId);\n const [ownership, setOwnership] = useState(\"\");\n useEffect(() => {\n const abort = new AbortController();\n setCatalog(null);\n setAccounts([]);\n setFailed(false);\n setProviderId(initialProviderId);\n setOwnership(\"\");\n // Promise boundary also handles a synchronously throwing injected transport.\n void Promise.resolve()\n .then(() => {\n abort.signal.throwIfAborted();\n return Promise.all([\n controller.transport.catalog(controller.workspaceId, { signal: abort.signal }),\n presentation === \"catalog\"\n ? controller.transport.accounts(controller.workspaceId, { signal: abort.signal })\n : Promise.resolve([] as ConnectAccount[]),\n ]);\n })\n .then(([providers, inventory]) => {\n if (!abort.signal.aborted) {\n setCatalog(\n structuredClone(\n providers.filter(\n (entry) =>\n entry.readiness === \"available\" &&\n entry.ownership.length > 0 &&\n (!providerOnly ||\n (entry.family !== \"mcp\" &&\n !entry.setup.some((kind) =>\n [\"installation\", \"openapi\", \"graphql\"].includes(kind),\n ))) &&\n (!customOnly ||\n entry.family === \"mcp\" ||\n entry.setup.some((kind) =>\n [\"installation\", \"openapi\", \"graphql\"].includes(kind),\n )),\n ),\n ),\n );\n setAccounts(structuredClone(inventory));\n const initial = providers.find((entry) => entry.id === initialProviderId);\n if (initial)\n setOwnership(\n initial.ownership.includes(\"personal\") &&\n [\"google\", \"microsoft\"].includes(initial.family)\n ? \"personal\"\n : initial.ownership.includes(\"workspace\")\n ? \"workspace\"\n : (initial.ownership[0] ?? \"\"),\n );\n }\n })\n .catch(() => {\n if (!abort.signal.aborted) setFailed(true);\n });\n return () => abort.abort();\n }, [controller, load, presentation, customOnly, providerOnly, initialProviderId]);\n const provider = catalog?.find((entry) => entry.id === providerId);\n const canBegin =\n provider?.readiness === \"available\" &&\n (ownership === \"personal\" || ownership === \"workspace\") &&\n provider.ownership.includes(ownership);\n const submit = (event: FormEvent) => {\n event.preventDefault();\n if (!canBegin || view.busy || (ownership !== \"personal\" && ownership !== \"workspace\")) return;\n setFailed(false);\n try {\n void controller\n .begin({ providerId, ownership, returnUrl, idempotencyKey: crypto.randomUUID() })\n .catch(() => setFailed(true));\n } catch {\n setFailed(true);\n }\n };\n // Optional adapters must not add a temporary section that disappears once\n // readiness arrives. The primary discovery surface already owns loading.\n if (compact && (!catalog || catalog.length === 0) && !failed) return null;\n return (\n <section\n className={className}\n aria-label={t(\"connectChooser.chooseAConnection\")}\n aria-busy={view.busy || (!catalog && !failed)}\n >\n {failed && <p role=\"alert\">{t(\"connectChooser.connectionsCouldNotBeLoaded\")}</p>}\n {!catalog && !failed && <p role=\"status\">{t(\"connectChooser.loadingConnections\")}</p>}\n {catalog?.length === 0 && (\n <p role=\"status\">{t(\"connectChooser.noConnectionsAreAvailable\")}</p>\n )}\n {Boolean(catalog?.length) && (\n <form onSubmit={submit}>\n <fieldset disabled={view.busy}>\n <legend hidden={customOnly || compact}>\n {presentation === \"catalog\"\n ? t(\"connectChooser.addAConnection\")\n : t(\"connectChooser.providerAndOwnership\")}\n </legend>\n {presentation === \"catalog\" && !provider ? (\n <>\n <label hidden={customOnly || compact}>\n {t(\"connectChooser.searchConnections\")}\n <input\n type=\"search\"\n placeholder={t(\"connectChooser.findAService\")}\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n />\n </label>\n {[\n {\n name: t(\"connectChooser.services\"),\n entries: catalog!.filter(\n (entry) =>\n entry.readiness === \"available\" &&\n entry.family !== \"mcp\" &&\n !entry.setup.some((kind) =>\n [\"installation\", \"openapi\", \"graphql\"].includes(kind),\n ),\n ),\n secondary: false,\n },\n {\n name: t(\"connectChooser.customConnections\"),\n entries: catalog!.filter(\n (entry) =>\n entry.readiness === \"available\" &&\n (entry.family === \"mcp\" ||\n entry.setup.some((kind) =>\n [\"installation\", \"openapi\", \"graphql\"].includes(kind),\n )),\n ),\n secondary: true,\n },\n ].map((group) => {\n const entries = group.entries.filter((entry) =>\n entry.label.toLocaleLowerCase().includes(query.toLocaleLowerCase().trim()),\n );\n if (!entries.length) return null;\n const rows = (\n <ConnectionCatalog\n services={entries.map((entry) => {\n const connected = accounts.some(\n (account) =>\n account.providerId === entry.id && account.status === \"connected\",\n );\n return {\n id: entry.id,\n name: entry.label,\n logo: (\n <ConnectionLogo\n src={connectionServicePresentation(entry).logo}\n name={entry.label}\n />\n ),\n options: [\n {\n id: entry.id,\n name: entry.label,\n status: connected\n ? t(\"connectChooser.connected\")\n : entry.readiness === \"available\"\n ? t(\"connectChooser.connect\")\n : t(\"connectChooser.unavailable\"),\n state: connected\n ? \"added\"\n : entry.readiness === \"available\"\n ? \"available\"\n : \"unavailable\",\n connected,\n onOpen: () => {\n if (!view.busy) {\n setProviderId(entry.id);\n setOwnership(\n entry.ownership.length === 1 ? entry.ownership[0]! : \"\",\n );\n }\n },\n },\n ],\n };\n })}\n />\n );\n return group.secondary && !customOnly ? (\n <details\n className=\"og-connect-secondary\"\n key={group.name}\n open={query.trim() ? true : undefined}\n >\n <summary>\n {group.name}\n <span>{entries.length}</span>\n </summary>\n {rows}\n </details>\n ) : (\n <div key={group.name}>{rows}</div>\n );\n })}\n {!catalog!.some((entry) =>\n entry.label.toLocaleLowerCase().includes(query.toLocaleLowerCase().trim()),\n ) && <p role=\"status\">{t(\"connectChooser.noServicesMatchYourSearch\")}</p>}\n </>\n ) : null}\n {presentation === \"catalog\" && provider && !initialProviderId ? (\n <button\n type=\"button\"\n onClick={() => {\n setProviderId(\"\");\n setOwnership(\"\");\n }}\n >\n {t(\"connectChooser.backToConnections\")}\n </button>\n ) : null}\n <label hidden={presentation === \"catalog\"}>\n {t(\"connectChooser.provider\")}\n <select\n required\n value={providerId}\n onChange={(event) => {\n setProviderId(event.target.value);\n setOwnership(\"\");\n }}\n >\n <option value=\"\" disabled>\n {t(\"connectChooser.chooseAProvider\")}\n </option>\n {catalog!.map((entry) => (\n <option\n key={entry.id}\n value={entry.id}\n disabled={entry.readiness !== \"available\" || entry.ownership.length === 0}\n >\n {entry.label} — {entry.id} ({entry.readiness.replaceAll(\"_\", \" \")})\n </option>\n ))}\n </select>\n </label>\n {provider && (\n <>\n <strong>{presentation === \"catalog\" ? provider.label : null}</strong>\n {provider.readiness !== \"available\" && (\n <p role=\"status\">\n {provider.reason ?? t(\"connectChooser.thisServiceIsNotAvailable\")}\n </p>\n )}\n <label>\n {t(\"connectChooser.whoCanUseThisConnection\")}\n <select\n required\n value={ownership}\n onChange={(event) => setOwnership(event.target.value)}\n >\n <option value=\"\" disabled>\n {t(\"connectChooser.chooseOwnership\")}\n </option>\n {provider.ownership.map((choice) => (\n <option key={choice} value={choice}>\n {choice === \"personal\"\n ? t(\"connectChooser.onlyMe\")\n : t(\"connectChooser.everyoneInThisWorkspace\")}\n </option>\n ))}\n </select>\n </label>\n </>\n )}\n <button\n hidden={presentation === \"catalog\" && !provider}\n type=\"submit\"\n disabled={!canBegin}\n >\n {t(\"connectChooser.continue\")}\n </button>\n </fieldset>\n </form>\n )}\n <button hidden={!failed} type=\"button\" disabled={view.busy} onClick={() => setLoad(load + 1)}>\n {t(\"connectChooser.reloadProviders\")}\n </button>\n </section>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport type { ConnectAccount, ConnectController } from \"@opengeni/connect\";\nimport { useConnect } from \"./hooks/use-connect\";\nimport { ConnectAccountIdentity } from \"./connect-account-identity\";\nimport { ConnectionSkeleton } from \"./connection-skeleton\";\nimport type { CapabilityCatalogItem, OpenGeniClient } from \"@opengeni/sdk\";\nimport { useOpenGeniText } from \"./messages/runtime\";\n\nexport type ConnectAccountsProps = {\n controller: ConnectController;\n className?: string;\n /** Enables explicit account-bound reconnect. Host supplies the exact destination. */\n returnUrl?: string;\n /** Uses authenticated catalogue assets and exact connection references for service identity. */\n client?: OpenGeniClient | undefined;\n /** Reconcile surrounding service state after a confirmed account disconnect. */\n onDisconnected?: (() => void) | undefined;\n};\n\n/** Local credential revocation only. Unknown or changed versions must be\n * refreshed; this component never retries a destructive operation implicitly. */\nexport function ConnectAccounts(props: ConnectAccountsProps) {\n const [scope, setScope] = useState(props.controller);\n const [generation, setGeneration] = useState(0);\n if (scope !== props.controller) {\n setScope(props.controller);\n setGeneration(generation + 1);\n }\n return <ScopedAccounts key={generation} {...props} />;\n}\n\nfunction ScopedAccounts({\n controller,\n className,\n returnUrl,\n client,\n onDisconnected,\n}: ConnectAccountsProps) {\n const t = useOpenGeniText();\n const view = useConnect(controller);\n const [accounts, setAccounts] = useState<ConnectAccount[] | null>(null);\n const [selected, setSelected] = useState<string | null>(null);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState(false);\n const [reload, setReload] = useState(0);\n const [catalog, setCatalog] = useState<{\n client: OpenGeniClient;\n items: CapabilityCatalogItem[];\n } | null>(null);\n const mutation = useRef<AbortController | null>(null);\n useEffect(() => () => mutation.current?.abort(), []);\n useEffect(() => {\n const abort = new AbortController();\n setAccounts(null);\n setCatalog(null);\n setSelected(null);\n setError(false);\n void Promise.resolve()\n .then(() => {\n abort.signal.throwIfAborted();\n return Promise.all([\n controller.transport.accounts(controller.workspaceId, { signal: abort.signal }),\n client?.listCapabilities(controller.workspaceId).catch(() => null) ?? null,\n ]);\n })\n .then(([result, metadata]) => {\n if (!abort.signal.aborted) {\n setAccounts(structuredClone(result.filter((account) => account.status !== \"disabled\")));\n if (client && metadata) setCatalog({ client, items: metadata.items });\n }\n })\n .catch(() => {\n if (!abort.signal.aborted) setError(true);\n });\n return () => abort.abort();\n }, [client, controller, reload]);\n\n const disconnect = async (account: ConnectAccount) => {\n const expectedVersion = account.version;\n if (\n mutation.current ||\n view.busy ||\n expectedVersion === undefined ||\n !Number.isSafeInteger(expectedVersion) ||\n expectedVersion < 1\n )\n return;\n const abort = new AbortController();\n mutation.current = abort;\n setBusy(true);\n setError(false);\n try {\n await controller.transport.disconnect(controller.workspaceId, account.id, {\n expectedVersion,\n signal: abort.signal,\n });\n if (!abort.signal.aborted) {\n setReload((value) => value + 1);\n onDisconnected?.();\n }\n } catch {\n if (!abort.signal.aborted) {\n // Outcome may be unknown. Drop the inventory so a second click cannot\n // replay against the stale selection; let the host reload live state.\n setAccounts(null);\n setError(true);\n }\n } finally {\n if (!abort.signal.aborted) {\n mutation.current = null;\n setBusy(false);\n setSelected(null);\n }\n }\n };\n const reconnect = async (account: ConnectAccount) => {\n if (!returnUrl || mutation.current || view.busy) return;\n setError(false);\n try {\n await controller.begin({\n providerId: account.providerId,\n ownership: account.ownership,\n reconnectAccountId: account.id,\n returnUrl,\n idempotencyKey: crypto.randomUUID(),\n });\n } catch {\n setError(true);\n }\n };\n\n return (\n <section\n className={className}\n aria-label={t(\"connectAccounts.connectedAccounts\")}\n aria-busy={busy || view.busy || (!accounts && !error)}\n >\n <h3>{t(\"connectAccounts.yourConnections\")}</h3>\n {error && <p role=\"alert\">{t(\"connectAccounts.accountStateCouldNotBe\")}</p>}\n {!accounts && !error && <ConnectionSkeleton label={t(\"connectAccounts.loadingAccounts\")} />}\n {accounts?.length === 0 && <p role=\"status\">{t(\"connectAccounts.noConnectedAccounts\")}</p>}\n {accounts && accounts.length > 0 && (\n <ul>\n {accounts.map((account) => (\n <li className=\"og-connect-account\" key={`${account.providerId}:${account.id}`}>\n <details className=\"og-connect-account-details\">\n <summary className=\"og-connect-account-heading\">\n <ConnectAccountIdentity\n account={account}\n client={client}\n capabilities={catalog?.client === client ? (catalog?.items ?? []) : []}\n />\n <span className=\"og-connect-account-status\" data-status={account.status}>\n {account.status === \"connected\"\n ? t(\"connectAccounts.connected\")\n : account.status === \"auth_needed\"\n ? t(\"connectAccounts.reconnectNeeded\")\n : t(\"connectAccounts.disconnected\")}\n </span>\n <svg\n className=\"og-connect-account-chevron\"\n aria-hidden=\"true\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n >\n <path d=\"m9 6 6 6-6 6\" />\n </svg>\n </summary>\n <div className=\"og-connect-account-actions\">\n {returnUrl && account.status === \"auth_needed\" && (\n <button\n type=\"button\"\n aria-label={t(\"connectAccounts.reconnectLabel\", { label: account.label })}\n disabled={busy || view.busy}\n onClick={() => void reconnect(account)}\n >\n {t(\"connectAccounts.reconnect\")}\n </button>\n )}\n {selected === `${account.providerId}:${account.id}` ? (\n <div\n role=\"group\"\n aria-label={t(\"connectAccounts.disconnectLabel\", { label: account.label })}\n >\n <p>{t(\"connectAccounts.thisRemovesLocalOpengeniAccess\")}</p>\n <button\n type=\"button\"\n disabled={busy || view.busy}\n onClick={() => void disconnect(account)}\n >\n {t(\"connectAccounts.confirmDisconnect\")}\n </button>\n <button type=\"button\" disabled={busy} onClick={() => setSelected(null)}>\n {t(\"connectAccounts.keepAccount\")}\n </button>\n </div>\n ) : (\n <button\n type=\"button\"\n aria-label={t(\"connectAccounts.disconnectLabel\", { label: account.label })}\n disabled={\n busy ||\n view.busy ||\n account.status === \"disabled\" ||\n !Number.isSafeInteger(account.version) ||\n account.version! < 1\n }\n onClick={() => setSelected(`${account.providerId}:${account.id}`)}\n >\n {t(\"connectAccounts.disconnect\")}\n </button>\n )}\n </div>\n </details>\n </li>\n ))}\n </ul>\n )}\n <button\n hidden={!error}\n type=\"button\"\n disabled={busy}\n onClick={() => setReload((value) => value + 1)}\n >\n {t(\"connectAccounts.reloadAccounts\")}\n </button>\n </section>\n );\n}\n","import type { CapabilityCatalogItem, OpenGeniClient } from \"@opengeni/sdk\";\nimport { useEffect, useState } from \"react\";\nimport { ConnectionLogo } from \"./connection-logo\";\nimport { capabilityLogoFallback } from \"./capability-logo-fallback\";\n\n/** The same passive logo loading path for discovery and connected accounts. */\nexport function ConnectionServiceLogo({\n client,\n item,\n name,\n fallback = null,\n}: {\n client?: OpenGeniClient | undefined;\n item?: CapabilityCatalogItem | undefined;\n name: string;\n fallback?: string | null;\n}) {\n const path = item?.logoAssetPath;\n const [image, setImage] = useState<{\n client: OpenGeniClient;\n path: string;\n url: string | null;\n } | null>(null);\n useEffect(() => {\n if (!client || !path?.startsWith(\"catalog-assets/\")) return;\n const abort = new AbortController();\n let url: string | null = null;\n void client\n .downloadCatalogAsset(path, { signal: abort.signal })\n .then((blob) => {\n if (!abort.signal.aborted && blob.type.startsWith(\"image/\") && blob.size <= 2_000_000)\n url = URL.createObjectURL(blob);\n })\n .catch(() => {})\n .finally(() => {\n if (!abort.signal.aborted) setImage({ client, path, url });\n });\n return () => {\n abort.abort();\n if (url) URL.revokeObjectURL(url);\n };\n }, [client, path]);\n const current = image && image.client === client && image.path === path ? image : null;\n const loading = Boolean(client && path?.startsWith(\"catalog-assets/\") && !current);\n return (\n <ConnectionLogo\n name={name}\n loading={loading}\n src={\n current?.url ??\n (loading ? null : ((item ? capabilityLogoFallback(item) : null) ?? fallback))\n }\n />\n );\n}\n","import type { CapabilityCatalogItem } from \"@opengeni/sdk\";\nimport gmailLogo from \"./assets/gmail.ico\";\n\n/** Passive catalogue identity, shared by embedded and console surfaces. */\nexport function capabilityLogoFallback(\n item: Pick<CapabilityCatalogItem, \"id\"> &\n Partial<Pick<CapabilityCatalogItem, \"metadata\" | \"mcpUrl\">>,\n): string | null {\n if (\n item.id.startsWith(\"mcp:integrations-sh:gmailmcp-googleapis-com-\") ||\n item.mcpUrl === \"https://gmailmcp.googleapis.com/mcp/v1\"\n )\n return gmailLogo;\n const original = item.metadata?.originalLogoUrl;\n if (typeof original !== \"string\") return null;\n try {\n const url = new URL(original);\n return url.protocol === \"https:\" || url.protocol === \"http:\" ? url.href : null;\n } catch {\n return null;\n }\n}\n","import type { ConnectAccount } from \"@opengeni/connect\";\nimport type { CapabilityCatalogItem, OpenGeniClient } from \"@opengeni/sdk\";\nimport { ConnectionServiceLogo } from \"./connection-service-logo\";\nimport {\n accountServiceCapability,\n connectionServicePresentation,\n} from \"./connection-service-presentation\";\nimport { useOpenGeniText } from \"./messages/runtime\";\n\n/** Service presentation never changes which exact credential is acted on. */\nexport function ConnectAccountIdentity({\n account,\n client,\n capabilities,\n}: {\n account: ConnectAccount;\n client?: OpenGeniClient | undefined;\n capabilities: CapabilityCatalogItem[];\n}) {\n const t = useOpenGeniText();\n const item = accountServiceCapability(account, capabilities);\n const service = connectionServicePresentation({ id: account.providerId, label: account.label });\n const name = item?.name ?? service.name;\n return (\n <>\n <ConnectionServiceLogo client={client} item={item} name={name} fallback={service.logo} />\n <div>\n <strong>{name}</strong>\n <small>\n {account.ownership === \"personal\"\n ? t(\"connectAccountIdentity.onlyYou\")\n : t(\"connectAccountIdentity.workspaceConnection\")}\n {name !== account.label ? ` · ${account.label}` : \"\"}\n </small>\n </div>\n </>\n );\n}\n","/** Reserve the same row geometry as the loaded connection list. */\nexport function ConnectionSkeleton({ rows = 1, label }: { rows?: number; label: string }) {\n return (\n <div role=\"status\" aria-label={label} className=\"og-connection-skeleton\">\n {Array.from({ length: rows }, (_, index) => (\n <div className=\"og-connection-skeleton-row\" aria-hidden=\"true\" key={index}>\n <span className=\"og-connection-skeleton-mark\" />\n <span className=\"og-connection-skeleton-copy\">\n <span />\n <span />\n </span>\n </div>\n ))}\n </div>\n );\n}\n","import { ConnectAccounts } from \"./connect-accounts\";\nimport { ConnectChooser } from \"./connect-chooser\";\nimport { ConnectSetup, type ConnectSetupProps } from \"./connect-setup\";\nimport { useConnect } from \"./hooks/use-connect\";\nimport type { OpenGeniClient } from \"@opengeni/sdk\";\nimport { useState } from \"react\";\nimport { connectionServicePresentation } from \"./connection-service-presentation\";\nimport { ConnectionDiscovery } from \"./connection-discovery\";\nimport { useOpenGeniText } from \"./messages/runtime\";\n\nexport type ConnectPanelProps = ConnectSetupProps & {\n returnUrl: string;\n /** Null omits the heading when the host already supplies one. */\n title?: string | null;\n showAccounts?: boolean;\n /** Presentation only; the host backend owns acquisition admission. */\n showCustomConnections?: boolean;\n /** Include ready, non-custom adapters from the host's Connect catalogue. */\n showProviderConnections?: boolean;\n presentation?: \"select\" | \"catalog\";\n client?: OpenGeniClient | undefined;\n};\n\n/** Optional composition over the same unstyled surfaces. Import\n * @opengeni/react/connect.css for styling; the host retains navigation,\n * transport, actor admission, and controller lifetime. */\nexport function ConnectPanel({\n returnUrl,\n title: titleProp,\n showAccounts = true,\n showCustomConnections = true,\n showProviderConnections = false,\n presentation = \"select\",\n className,\n client,\n ...setup\n}: ConnectPanelProps) {\n const t = useOpenGeniText();\n const title = titleProp === undefined ? t(\"connectPanel.connections\") : titleProp;\n const { attempt } = useConnect(setup.controller);\n const [inventoryRevision, setInventoryRevision] = useState(0);\n // Unknown/failed outcomes still need reconciliation or cancellation, not a\n // competing new acquisition. Unmounting observers never cancels controller work.\n const activeSetup =\n attempt !== null && ![\"complete\", \"cancelled\", \"expired\"].includes(attempt.state);\n const serviceName = attempt\n ? connectionServicePresentation({ id: attempt.providerId, label: \"\" }).name\n : \"\";\n return (\n <div className={[\"og-connect\", className].filter(Boolean).join(\" \")}>\n {title !== null && <h2>{title}</h2>}\n {showAccounts && !activeSetup && (\n <ConnectAccounts\n key={inventoryRevision}\n controller={setup.controller}\n returnUrl={returnUrl}\n client={client}\n onDisconnected={() => setInventoryRevision((value) => value + 1)}\n />\n )}\n {!activeSetup &&\n (client && presentation === \"catalog\" ? (\n <>\n <ConnectionDiscovery\n key={inventoryRevision}\n controller={showProviderConnections ? setup.controller : undefined}\n client={client}\n workspaceId={setup.controller.workspaceId}\n returnUrl={returnUrl}\n onConfigured={() => setInventoryRevision((value) => value + 1)}\n />\n {showCustomConnections && (\n <details className=\"og-connect-secondary\">\n <summary>{t(\"connectPanel.customConnection\")}</summary>\n <ConnectChooser\n customOnly\n presentation={presentation}\n controller={setup.controller}\n returnUrl={returnUrl}\n />\n </details>\n )}\n </>\n ) : (\n <ConnectChooser\n presentation={presentation}\n controller={setup.controller}\n returnUrl={returnUrl}\n />\n ))}\n {activeSetup && (\n <ConnectSetup\n {...setup}\n authorizeLabel={\n setup.authorizeLabel ??\n (serviceName\n ? t(\"connectPanel.continueToServicename\", { serviceName })\n : t(\"connectPanel.authorizeConnection\"))\n }\n />\n )}\n </div>\n );\n}\n","import type { ConnectAccount, ConnectController, ConnectProvider } from \"@opengeni/connect\";\nimport { ConnectChooser } from \"./connect-chooser\";\nimport {\n capabilityConnectProviderId,\n connectionServicePresentation,\n isServiceConnectProvider,\n} from \"./connection-service-presentation\";\nimport type { CapabilityCatalogItem, ConnectionMetadata, OpenGeniClient } from \"@opengeni/sdk\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { CapabilityCatalogRow } from \"./capability-catalog-row\";\nimport { ConnectionLogo } from \"./connection-logo\";\nimport { ConnectionSkeleton } from \"./connection-skeleton\";\nimport { ConnectionServiceLogo } from \"./connection-service-logo\";\nimport { McpConnectionCard } from \"./components/session-mcp-capability-card\";\nimport { mcpConnectionDiscoveryState } from \"./mcp-connection-status\";\nimport { useOpenGeniText } from \"./messages/runtime\";\n\nexport type ConnectionDiscoveryProps = {\n client: OpenGeniClient;\n controller?: ConnectController | undefined;\n workspaceId: string;\n returnUrl: string;\n onConfigured?: (() => void | Promise<void>) | undefined;\n};\n\n/** Service discovery over the native catalogue. No host-owned OAuth state or\n * assumed account selection: details resolve current authority before acting. */\nexport function ConnectionDiscovery(props: ConnectionDiscoveryProps) {\n const [scope, setScope] = useState({ client: props.client, controller: props.controller });\n const [generation, setGeneration] = useState(0);\n if (scope.client !== props.client || scope.controller !== props.controller) {\n setScope({ client: props.client, controller: props.controller });\n setGeneration(generation + 1);\n }\n return <ScopedDiscovery key={`${generation}:${props.workspaceId}`} {...props} />;\n}\n\nfunction ScopedDiscovery({\n client,\n controller,\n workspaceId,\n returnUrl,\n onConfigured,\n}: ConnectionDiscoveryProps) {\n const t = useOpenGeniText();\n const [providers, setProviders] = useState<ConnectProvider[] | null>(null);\n const [accounts, setAccounts] = useState<ConnectAccount[]>([]);\n const [selectedProvider, setSelectedProvider] = useState<ConnectProvider | null>(null);\n const [providerFailed, setProviderFailed] = useState(false);\n const [items, setItems] = useState<CapabilityCatalogItem[] | null>(null);\n const [failed, setFailed] = useState(false);\n const [connections, setConnections] = useState<ConnectionMetadata[]>([]);\n const [reload, setReload] = useState(0);\n const [query, setQuery] = useState(\"\");\n const [limit, setLimit] = useState(12);\n const [selected, setSelected] = useState<CapabilityCatalogItem | null>(null);\n const opener = useRef<HTMLElement | null>(null);\n useEffect(() => {\n const abort = new AbortController();\n // Capture each read independently: even a synchronously throwing transport\n // is captured by Promise.all, and cannot strand another read's rejection.\n const read = async <T,>(operation: () => Promise<T>): Promise<T> => {\n abort.signal.throwIfAborted();\n return operation();\n };\n setFailed(false);\n setSelectedProvider(null);\n setProviders(null);\n setItems(null);\n setProviderFailed(false);\n if (controller)\n void Promise.all([\n read(() => controller.transport.catalog(workspaceId, { signal: abort.signal })),\n read(() => controller.transport.accounts(workspaceId, { signal: abort.signal })),\n ])\n .then(([catalog, inventory]) => {\n if (!abort.signal.aborted) {\n setProviders(catalog.filter(isServiceConnectProvider));\n setAccounts(inventory);\n }\n })\n .catch(() => {\n if (!abort.signal.aborted) setProviderFailed(true);\n });\n void Promise.all([\n read(() => client.listCapabilities(workspaceId)),\n read(() => client.listConnections(workspaceId)),\n ])\n .then(([catalog, inventory]) => {\n if (!abort.signal.aborted) {\n setConnections(inventory);\n setItems(\n catalog.items.filter(\n (item) =>\n item.kind === \"mcp\" &&\n item.authKind === \"oauth2\" &&\n Boolean(item.mcpUrl ?? item.endpointUrl) &&\n // The provider refuses self-registration and this deployment\n // has no operator client for it: Connect cannot succeed.\n (item.enabled || item.runtime?.operatorOAuthClient?.configured !== false),\n ),\n );\n }\n })\n .catch(() => {\n if (!abort.signal.aborted) setFailed(true);\n });\n return () => {\n abort.abort();\n };\n }, [client, controller, workspaceId, reload]);\n const matches =\n items?.filter((item) =>\n `${item.name} ${item.description ?? \"\"} ${item.providerDomain ?? \"\"}`\n .toLocaleLowerCase()\n .includes(query.trim().toLocaleLowerCase()),\n ) ?? [];\n const providerMatches = (providers ?? []).filter(\n (provider) =>\n !items?.some((item) => capabilityConnectProviderId(item) === provider.id) &&\n provider.label.toLocaleLowerCase().includes(query.trim().toLocaleLowerCase()),\n );\n const loading = (!items && !failed) || Boolean(controller && !providers && !providerFailed);\n if (selectedProvider && controller)\n return (\n <section\n aria-label={t(\"connectionDiscovery.connectLabel\", { label: selectedProvider.label })}\n >\n <button type=\"button\" onClick={() => setSelectedProvider(null)}>\n {t(\"connectionDiscovery.backToConnections\")}\n </button>\n <ConnectionLogo\n name={selectedProvider.label}\n src={connectionServicePresentation(selectedProvider).logo}\n />\n <ConnectChooser\n controller={controller}\n returnUrl={returnUrl}\n presentation=\"catalog\"\n providerOnly\n initialProviderId={selectedProvider.id}\n />\n </section>\n );\n return (\n <section\n className=\"og-connection-discovery\"\n aria-label={t(\"connectionDiscovery.findAConnection\")}\n >\n <h3>{t(\"connectionDiscovery.addAConnection\")}</h3>\n <label>\n <span className=\"og-capability-catalog-sr-only\">\n {t(\"connectionDiscovery.searchServices\")}\n </span>\n <input\n type=\"search\"\n placeholder={t(\"connectionDiscovery.searchServices2\")}\n value={query}\n onChange={(event) => {\n setQuery(event.target.value);\n setLimit(12);\n }}\n />\n </label>\n {(providerFailed || failed) && (\n <p role=\"alert\">\n {t(\"connectionDiscovery.someServicesCouldNotBe\")}{\" \"}\n <button type=\"button\" onClick={() => setReload((value) => value + 1)}>\n {t(\"connectionDiscovery.retry\")}\n </button>\n </p>\n )}\n <div className=\"og-connection-discovery-results\">\n {providerMatches.map((provider) => {\n const connected = accounts.some(\n (account) => account.providerId === provider.id && account.status === \"connected\",\n );\n return (\n <CapabilityCatalogRow\n key={provider.id}\n name={provider.label}\n icon={\n <ConnectionLogo\n name={provider.label}\n src={connectionServicePresentation(provider).logo}\n />\n }\n status={connected ? \"added\" : \"available\"}\n statusLabel={\n connected ? t(\"connectionDiscovery.connected\") : t(\"connectionDiscovery.connect\")\n }\n showStatusLabel\n onOpen={() => setSelectedProvider(provider)}\n />\n );\n })}\n {matches.slice(0, limit).map((item) => {\n const state = mcpConnectionDiscoveryState(t, item, connections);\n return (\n <CapabilityCatalogRow\n key={item.id}\n name={item.name}\n description={item.description ?? undefined}\n icon={<ConnectionServiceLogo client={client} item={item} name={item.name} />}\n status={state.status}\n statusLabel={state.label}\n showStatusLabel\n onOpen={() => {\n opener.current =\n document.activeElement instanceof HTMLElement ? document.activeElement : null;\n setSelected(item);\n }}\n />\n );\n })}\n\n {loading && (\n <ConnectionSkeleton rows={3} label={t(\"connectionDiscovery.loadingServices\")} />\n )}\n {!loading && !failed && !providerFailed && !matches.length && !providerMatches.length && (\n <p role=\"status\">{t(\"connectionDiscovery.noServicesMatchYourSearch\")}</p>\n )}\n {matches.length > limit && (\n <button type=\"button\" onClick={() => setLimit((value) => value + 12)}>\n {t(\"connectionDiscovery.showMoreServices\")}\n </button>\n )}\n </div>\n {selected ? (\n <McpConnectionCard\n client={client}\n workspaceId={workspaceId}\n capabilityId={selected.id}\n name={selected.name}\n returnUrl={returnUrl}\n dialogOnly\n onClose={() => {\n setSelected(null);\n queueMicrotask(() => {\n if (opener.current?.isConnected) opener.current.focus();\n });\n }}\n onConfigured={async () => {\n setReload((value) => value + 1);\n await onConfigured?.();\n }}\n />\n ) : null}\n </section>\n );\n}\n","import { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { copyTextToClipboard } from \"./clipboard\";\nimport { useOpenGeniText } from \"./messages/runtime\";\n\nexport type DeviceAuthorizationProps = {\n userCode: string;\n verificationUri: string;\n providerLabel?: string;\n description?: string;\n className?: string;\n codeAttributes?: Record<`data-${string}`, string>;\n loadClipboard?: () => Promise<{ copyTextToClipboard(text: string): Promise<boolean> }>;\n onCopyResult?: (copied: boolean) => void;\n /** Optional host presentation; clipboard state and URL validation remain shared. */\n render?: (state: {\n copied: boolean;\n copyError: boolean;\n copy: () => Promise<void>;\n verificationHref: string | undefined;\n }) => ReactNode;\n};\n\n/** Optional presentation for the existing model-account device APIs. It neither\n * owns provider state nor assumes that opening a verification page completed it. */\nexport function DeviceAuthorization(props: DeviceAuthorizationProps) {\n const t = useOpenGeniText();\n const [copied, setCopied] = useState(false);\n const [copyError, setCopyError] = useState(false);\n const generation = useRef(0);\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(() => {\n generation.current++;\n setCopied(false);\n setCopyError(false);\n return () => {\n // This is a live async-operation counter, not a captured DOM ref.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n generation.current++;\n if (timer.current) clearTimeout(timer.current);\n };\n }, [props.userCode]);\n async function copy() {\n const revision = ++generation.current;\n if (timer.current) clearTimeout(timer.current);\n setCopied(false);\n setCopyError(false);\n try {\n const clipboard = props.loadClipboard ? await props.loadClipboard() : { copyTextToClipboard };\n if (revision !== generation.current) return;\n const success = await clipboard.copyTextToClipboard(props.userCode);\n if (revision !== generation.current) return;\n setCopied(success);\n setCopyError(!success);\n props.onCopyResult?.(success);\n if (success)\n timer.current = setTimeout(() => {\n if (revision === generation.current) setCopied(false);\n }, 1600);\n } catch {\n if (revision !== generation.current) return;\n setCopyError(true);\n props.onCopyResult?.(false);\n }\n }\n let href: string | undefined;\n try {\n const url = new URL(props.verificationUri);\n if ([\"https:\", \"http:\"].includes(url.protocol) && !url.username && !url.password)\n href = props.verificationUri;\n } catch {\n /* A malformed provider URL must never become an executable link. */\n }\n if (props.render) return props.render({ copied, copyError, copy, verificationHref: href });\n return (\n <section\n className={`og-connect ${props.className ?? \"\"}`}\n aria-label={t(\"deviceAuthorization.deviceAuthorization\")}\n >\n <p>\n {props.description ??\n t(\"deviceAuthorization.enterThisCodeAtProviderlabel\", {\n providerLabel: props.providerLabel ?? t(\"deviceAuthorization.theProvider\"),\n })}\n </p>\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: \"0.5rem\", alignItems: \"center\" }}>\n <code {...props.codeAttributes} style={{ overflowWrap: \"anywhere\" }}>\n {props.userCode}\n </code>\n <button\n type=\"button\"\n aria-label={\n copied ? t(\"deviceAuthorization.codeCopied\") : t(\"deviceAuthorization.copyCode\")\n }\n onClick={() => void copy()}\n >\n {copied ? t(\"deviceAuthorization.copied\") : t(\"deviceAuthorization.copyCode\")}\n </button>\n {href ? (\n <a href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {t(\"deviceAuthorization.open\")}{\" \"}\n {props.providerLabel ?? t(\"deviceAuthorization.authPage\")}\n </a>\n ) : (\n <span role=\"alert\">{t(\"deviceAuthorization.authorizationAddressUnavailable\")}</span>\n )}\n </div>\n {copyError ? <p role=\"alert\">{t(\"deviceAuthorization.couldnTCopyTheCode\")}</p> : null}\n <p role=\"status\">{t(\"deviceAuthorization.waitingForAuthorization\")}</p>\n </section>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport type {\n ExternalIdentityLink,\n ConfirmExternalIdentityLinkRequest,\n ExternalIdentityLinkPreview,\n} from \"@opengeni/sdk\";\nimport { useOpenGeniText } from \"./messages/runtime\";\n\nexport type IdentityLinkClient = {\n previewIdentityLink(\n workspaceId: string,\n linkId: string,\n challenge: string,\n ): Promise<ExternalIdentityLinkPreview>;\n confirmIdentityLink(\n workspaceId: string,\n linkId: string,\n input: ConfirmExternalIdentityLinkRequest,\n ): Promise<ExternalIdentityLink>;\n revokeIdentityLink(\n workspaceId: string,\n linkId: string,\n expectedRevision: number,\n ): Promise<ExternalIdentityLink>;\n};\nexport type IdentityLinkConsentProps = {\n client: IdentityLinkClient;\n workspaceId: string;\n linkId: string;\n challenge: string;\n /** Host label is explanatory, never proof of the requesting application. */\n className?: string;\n onComplete?: (link: ExternalIdentityLink) => void;\n};\n\n/** Optional native-login consent. Ordinary Connect does not use this surface.\n * Permission choices only narrow the server's request; no automatic approval. */\nexport function IdentityLinkConsent({\n client,\n workspaceId,\n linkId,\n challenge,\n className,\n onComplete,\n}: IdentityLinkConsentProps) {\n const t = useOpenGeniText();\n const [link, setLink] = useState<ExternalIdentityLink | null>(null);\n const [preview, setPreview] = useState<ExternalIdentityLinkPreview | null>(null);\n const [selected, setSelected] = useState<ExternalIdentityLink[\"permissions\"]>([]);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState(false);\n const [retry, setRetry] = useState(0);\n const generation = useRef(0);\n useEffect(() => {\n const current = ++generation.current;\n setLink(null);\n setPreview(null);\n setSelected([]);\n setBusy(true);\n setError(false);\n void client\n .previewIdentityLink(workspaceId, linkId, challenge)\n .then(\n (result) => {\n if (generation.current !== current) return;\n setPreview(result);\n setLink(result.link);\n setSelected(result.link.permissions);\n },\n () => {\n if (generation.current === current) setError(true);\n },\n )\n .finally(() => {\n if (generation.current === current) setBusy(false);\n });\n return () => {\n // Invalidate live async work, rather than cleaning up a captured DOM node.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n generation.current++;\n };\n }, [client, workspaceId, linkId, challenge, retry]);\n async function mutate(revoke: boolean) {\n if (!link || busy) return;\n const current = generation.current;\n setBusy(true);\n setError(false);\n try {\n const result = revoke\n ? await client.revokeIdentityLink(workspaceId, linkId, link.revision)\n : await client.confirmIdentityLink(workspaceId, linkId, {\n challenge,\n expectedRevision: link.revision,\n permissions: selected,\n });\n if (generation.current !== current) return;\n setLink(result);\n onComplete?.(result);\n } catch {\n if (generation.current === current) setError(true);\n } finally {\n if (generation.current === current) setBusy(false);\n }\n }\n return (\n <section\n className={[\"og-connect og-identity-link\", className].filter(Boolean).join(\" \")}\n aria-label={t(\"identityLinkConsent.linkYourAccount\")}\n aria-busy={busy}\n >\n <h2>{t(\"identityLinkConsent.linkYourOpengeniAccount\")}</h2>\n <p>{t(\"identityLinkConsent.onlyContinueIfYouStarted\")}</p>\n {preview && (\n <dl>\n <dt>{t(\"identityLinkConsent.organization\")}</dt>\n <dd>{preview.organizationId}</dd>\n <dt>{t(\"identityLinkConsent.productUser\")}</dt>\n <dd>\n {preview.externalIdentity.externalId} ({preview.externalIdentity.source})\n </dd>\n <dt>{t(\"identityLinkConsent.yourOpengeniIdentity\")}</dt>\n <dd>{preview.nativeSubjectId}</dd>\n </dl>\n )}\n {error && (\n <div role=\"alert\">\n {t(\"identityLinkConsent.thisRequestCouldNotBe\")}\n {!link && (\n <button type=\"button\" disabled={busy} onClick={() => setRetry((value) => value + 1)}>\n {t(\"identityLinkConsent.tryAgain\")}\n </button>\n )}\n </div>\n )}\n {!link && busy && (\n <p role=\"status\">{t(\"identityLinkConsent.loadingTheAccountLinkRequest\")}</p>\n )}\n {link?.status === \"pending\" && (\n <>\n <p>\n {link.expiresAt\n ? t(\"identityLinkConsent.accessEndsLocalestring\", {\n localeString: new Date(link.expiresAt).toLocaleString(t.locale),\n })\n : t(\"identityLinkConsent.accessLastsUntilYouOr\")}{\" \"}\n {t(\"identityLinkConsent.yourCurrentPermissionsStillApply\")}\n </p>\n <fieldset disabled={busy}>\n <legend>{t(\"identityLinkConsent.allowThesePermissions\")}</legend>\n {link.permissions.map((permission) => (\n <label key={permission}>\n <input\n type=\"checkbox\"\n checked={selected.includes(permission)}\n onChange={(event) =>\n setSelected((values) =>\n event.target.checked\n ? [...values, permission]\n : values.filter((value) => value !== permission),\n )\n }\n />\n <span>{permission.replaceAll(\":\", \" · \")}</span>\n </label>\n ))}\n </fieldset>\n <button\n type=\"button\"\n disabled={busy || selected.length === 0}\n onClick={() => void mutate(false)}\n >\n {busy ? t(\"identityLinkConsent.saving\") : t(\"identityLinkConsent.allowSelectedAccess\")}\n </button>\n <p>{t(\"identityLinkConsent.youCanCloseThisPage\")}</p>\n </>\n )}\n {link?.status === \"active\" && (\n <>\n <p role=\"status\">{t(\"identityLinkConsent.accountLinkedReturnToYour\")}</p>\n <button type=\"button\" disabled={busy} onClick={() => void mutate(true)}>\n {t(\"identityLinkConsent.revokeThisLink\")}\n </button>\n </>\n )}\n {link?.status === \"revoked\" && (\n <p role=\"status\">{t(\"identityLinkConsent.linkRevokedYourOpengeniAccount\")}</p>\n )}\n {link?.status === \"expired\" && (\n <p role=\"status\">{t(\"identityLinkConsent.thisRequestHasExpiredStart\")}</p>\n )}\n </section>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport type { ExternalIdentityLink, ExternalIdentityLinkPage } from \"@opengeni/sdk\";\nimport { useOpenGeniText } from \"./messages/runtime\";\n\nexport type IdentityLinkAccountsClient = {\n listIdentityLinks(workspaceId: string, cursor?: string): Promise<ExternalIdentityLinkPage>;\n revokeIdentityLink(\n workspaceId: string,\n linkId: string,\n expectedRevision: number,\n ): Promise<ExternalIdentityLink>;\n};\n\n/** Participant-scoped inventory. Revocation never deletes native work or merges\n * identities. The caller remounts this component when the signed-in user changes. */\nexport function IdentityLinkAccounts({\n client,\n workspaceId,\n}: {\n client: IdentityLinkAccountsClient;\n workspaceId: string;\n}) {\n const t = useOpenGeniText();\n const [links, setLinks] = useState<ExternalIdentityLink[]>([]);\n const [cursor, setCursor] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [error, setError] = useState(false);\n const [revision, setRevision] = useState(0);\n const generation = useRef(0);\n const inFlight = useRef(false);\n useEffect(() => {\n const current = ++generation.current;\n inFlight.current = true;\n setLinks([]);\n setCursor(null);\n setBusy(true);\n setError(false);\n void client\n .listIdentityLinks(workspaceId)\n .then(\n (page) => {\n if (current !== generation.current) return;\n setLinks(page.links);\n setCursor(page.nextCursor);\n },\n () => {\n if (current === generation.current) setError(true);\n },\n )\n .finally(() => {\n if (current === generation.current) {\n inFlight.current = false;\n setBusy(false);\n }\n });\n return () => {\n // Invalidate live async work, rather than cleaning up a captured DOM node.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n generation.current++;\n };\n }, [client, workspaceId, revision]);\n\n async function act(link?: ExternalIdentityLink) {\n if (inFlight.current || (!link && !cursor)) return;\n const current = generation.current;\n inFlight.current = true;\n setBusy(true);\n setError(false);\n try {\n if (link) {\n const updated = await client.revokeIdentityLink(workspaceId, link.id, link.revision);\n if (current === generation.current)\n setLinks((values) =>\n values.map((value) => (value.id === updated.id ? { ...value, ...updated } : value)),\n );\n } else {\n const page = await client.listIdentityLinks(workspaceId, cursor!);\n if (current === generation.current) {\n setLinks((values) => [\n ...new Map([...values, ...page.links].map((value) => [value.id, value])).values(),\n ]);\n setCursor(page.nextCursor);\n }\n }\n } catch {\n if (current === generation.current) setError(true);\n } finally {\n if (current === generation.current) {\n inFlight.current = false;\n setBusy(false);\n }\n }\n }\n return (\n <section\n className=\"og-connect og-identity-link\"\n aria-label={t(\"identityLinkAccounts.linkedProductAccess\")}\n aria-busy={busy}\n >\n <h2>{t(\"identityLinkAccounts.linkedProductAccess\")}</h2>\n <p>{t(\"identityLinkAccounts.manageProductsAllowedToAct\")}</p>\n {/* The links sit in one card under the heading, like a settings section;\n the empty and loading lines are rows of that card. */}\n <div className=\"og-identity-link-card\">\n {error && (\n <div role=\"alert\">\n {t(\"identityLinkAccounts.couldNotUpdateAccountLinks\")}\n <button type=\"button\" disabled={busy} onClick={() => setRevision((value) => value + 1)}>\n {t(\"identityLinkAccounts.reloadLinks\")}\n </button>\n </div>\n )}\n {busy && <p role=\"status\">{t(\"identityLinkAccounts.loadingAccountLinks\")}</p>}\n {!busy && !error && links.length === 0 && (\n <p>{t(\"identityLinkAccounts.noProductsHaveLinkedAccess\")}</p>\n )}\n <ul>\n {links.map((link) => (\n <li key={link.id}>\n <p>\n {link.externalIdentity?.source || t(\"identityLinkAccounts.productIdentity\")}{\" \"}\n <code>{link.externalIdentity?.externalId ?? link.externalIdentityId}</code>\n </p>\n <p>\n {t(\"identityLinkAccounts.statusStatus\", { status: link.status })}{\" \"}\n {link.expiresAt\n ? t(\"identityLinkAccounts.expiresLocalestring\", {\n localeString: new Date(link.expiresAt).toLocaleString(t.locale),\n })\n : t(\"identityLinkAccounts.noAutomaticExpiry\")}\n </p>\n <p>{link.permissions.join(\", \")}</p>\n {(link.status === \"active\" || link.status === \"pending\") && (\n <button type=\"button\" disabled={busy} onClick={() => void act(link)}>\n {t(\"identityLinkAccounts.revokeAccess\")}\n </button>\n )}\n </li>\n ))}\n </ul>\n {cursor && (\n <button type=\"button\" disabled={busy} onClick={() => void act()}>\n {t(\"identityLinkAccounts.loadMoreLinks\")}\n </button>\n )}\n </div>\n </section>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { useOpenGeniText } from \"./messages/runtime\";\n\nexport type ConnectionInstalledItem = {\n id: string;\n name: string;\n status: string;\n showStatus?: boolean;\n icon?: ReactNode;\n needsAttention?: boolean;\n disabled?: boolean;\n onOpen: () => void;\n};\n\n/** Compact account/service shortcuts. The host supplies authoritative status. */\nexport function ConnectionInstalled({\n items,\n title: titleProp,\n className = \"\",\n}: {\n items: ConnectionInstalledItem[];\n title?: string;\n className?: string;\n}) {\n const t = useOpenGeniText();\n const title = titleProp === undefined ? t(\"connectionInstalled.connected\") : titleProp;\n if (!items.length) return null;\n return (\n <section aria-label={title} className={`og-connection-installed ${className}`}>\n <h2>\n {title} <span>{items.length}</span>\n </h2>\n <div>\n {items.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n onClick={item.onOpen}\n disabled={item.disabled}\n title={item.status}\n aria-label={`${item.name} · ${item.status}`}\n >\n {item.icon}\n <span>{item.name}</span>\n {item.showStatus ? (\n <span className=\"og-connection-installed-status\">{item.status}</span>\n ) : null}\n {item.needsAttention ? (\n <span aria-label={t(\"connectionInstalled.needsAttention\")}>!</span>\n ) : null}\n </button>\n ))}\n </div>\n </section>\n );\n}\n","import { useId } from \"react\";\nimport { useOpenGeniText } from \"./messages/runtime\";\nexport type ConnectionType = \"mcp\" | \"openapi\" | \"graphql\";\nexport function ConnectionTypePicker({\n value,\n onChange,\n disabled = false,\n}: {\n value: ConnectionType;\n onChange: (value: ConnectionType) => void;\n disabled?: boolean;\n}) {\n const t = useOpenGeniText();\n const name = useId();\n return (\n <fieldset className=\"og-connection-type-picker\" disabled={disabled}>\n <legend>{t(\"connectionTypePicker.connectionType\")}</legend>\n {(\n [\n [\"mcp\", t(\"connectionTypePicker.mcpServer\")],\n [\"openapi\", \"OpenAPI\"],\n [\"graphql\", \"GraphQL\"],\n ] as const\n ).map(([type, label]) => (\n <label key={type} data-selected={value === type}>\n <input\n type=\"radio\"\n name={name}\n value={type}\n checked={value === type}\n onChange={() => onChange(type)}\n />\n {label}\n </label>\n ))}\n </fieldset>\n );\n}\n","import { createDiscoveryCache } from \"./discovery-cache\";\nimport { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport type { PluginDiscoveryItem, PluginDiscoveryPage } from \"@opengeni/sdk\";\nimport { BoxesIcon } from \"lucide-react\";\nimport { CapabilityCatalogRow } from \"./capability-catalog-row\";\nimport { ConnectionLogo } from \"./connection-logo\";\nimport { useOpenGeniText } from \"./messages/runtime\";\n\nconst discoveryCache = createDiscoveryCache<PluginDiscoveryPage>();\nconst spacedName = (name: string) => name.replace(/-/g, \" \");\nconst EMPTY_INSTALLED_IDS: ReadonlySet<string> = new Set();\n\nexport type PluginDiscoveryProps = {\n client: {\n discoverPlugins(\n workspaceId: string,\n options?: { query?: string; provider?: string; offset?: number },\n ): Promise<PluginDiscoveryPage>;\n };\n workspaceId: string;\n query: string;\n /** Initially selected registry. Users can still switch registries or browse all. */\n defaultProvider?: \"\" | \"openai\" | \"anthropic\";\n /** Discovery identities already installed in the current workspace. */\n installedIds?: ReadonlySet<string>;\n resultLimit?: number;\n onShowMore?: () => void;\n onOpen: (item: PluginDiscoveryItem) => void;\n /** Display name for a registry slug. Defaults to the slug with dashes as spaces. */\n formatName?: (name: string) => string;\n /** The row tile. Defaults to the plugin logo with a glyph fallback. */\n renderIcon?: (item: PluginDiscoveryItem) => ReactNode;\n};\nexport function PluginDiscovery(props: PluginDiscoveryProps) {\n const t = useOpenGeniText();\n const [provider, setProvider] = useState(props.defaultProvider ?? \"\");\n return (\n <section\n className={`og-plugin-discovery ${props.resultLimit ? \"og-catalog-overview\" : \"\"}`}\n aria-label={t(\"pluginDiscovery.discoverPlugins\")}\n >\n <header>\n <h3>\n {props.resultLimit ? t(\"pluginDiscovery.plugins\") : t(\"pluginDiscovery.browsePlugins\")}\n </h3>\n {!props.resultLimit ? (\n <div\n className=\"og-plugin-filters\"\n role=\"group\"\n aria-label={t(\"pluginDiscovery.pluginRegistry\")}\n >\n {(\n [\n { value: \"\", label: t(\"pluginDiscovery.all\") },\n { value: \"openai\", label: t(\"pluginDiscovery.openaiPluginRegistry\") },\n { value: \"anthropic\", label: t(\"pluginDiscovery.anthropicPluginRegistry\") },\n ] as const\n ).map((option) => (\n <button\n key={option.value}\n type=\"button\"\n aria-pressed={provider === option.value}\n onClick={() => setProvider(option.value)}\n >\n {option.label}\n </button>\n ))}\n </div>\n ) : null}\n </header>\n <Results\n key={`${props.workspaceId}:${props.query}:${provider}`}\n {...props}\n provider={provider}\n />\n </section>\n );\n}\nfunction Results({\n client,\n workspaceId,\n query,\n provider,\n installedIds = EMPTY_INSTALLED_IDS,\n onOpen,\n resultLimit,\n onShowMore,\n formatName = spacedName,\n renderIcon,\n}: PluginDiscoveryProps & { provider: string }) {\n const t = useOpenGeniText();\n const initial = discoveryCache.peek(client, JSON.stringify([workspaceId, query, provider, 0]));\n const [items, setItems] = useState<PluginDiscoveryItem[]>(initial?.items ?? []);\n const [offset, setOffset] = useState(0);\n const [next, setNext] = useState<number | null>(initial?.nextOffset ?? null);\n const [total, setTotal] = useState(initial?.total ?? 0);\n const [loading, setLoading] = useState(!initial);\n const [error, setError] = useState(false);\n const [retry, setRetry] = useState(0);\n const sentinel = useRef<HTMLDivElement>(null);\n useEffect(() => {\n let active = true;\n const cacheKey = JSON.stringify([workspaceId, query, provider, offset]);\n const cached = discoveryCache.peek(client, cacheKey);\n setLoading(!cached);\n setError(false);\n const timer = setTimeout(\n () => {\n void discoveryCache\n .read(client, cacheKey, () =>\n client.discoverPlugins(workspaceId, { query, provider, offset }),\n )\n .then(\n (page) => {\n if (!active) return;\n setItems((previous) => (offset ? [...previous, ...page.items] : page.items));\n setTotal(page.total);\n setNext(page.nextOffset);\n setLoading(false);\n },\n () => {\n if (active) {\n setError(true);\n setLoading(false);\n }\n },\n );\n },\n cached || offset ? 0 : 200,\n );\n return () => {\n active = false;\n clearTimeout(timer);\n };\n }, [client, workspaceId, query, provider, offset, retry]);\n useEffect(() => {\n if (resultLimit || loading || error || next === null || !sentinel.current) return;\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) setOffset(next);\n },\n { rootMargin: \"200px\" },\n );\n observer.observe(sentinel.current);\n return () => observer.disconnect();\n }, [loading, error, next, resultLimit]);\n return (\n <>\n {!loading && !error ? (\n <p role=\"status\">\n {total\n ? t(\"pluginDiscovery.bundlesOfSkillsAndConnections\")\n : query.trim()\n ? t(\"pluginDiscovery.noMatchesForTrim\", { trim: query.trim() })\n : t(\"pluginDiscovery.noPluginsInThisRegistry\")}\n </p>\n ) : null}\n <div className=\"og-plugin-discovery-grid\">\n {items.slice(0, resultLimit).map((item) => (\n <CapabilityCatalogRow\n key={item.id}\n data-plugin-id={item.id}\n name={formatName(item.displayName)}\n description={item.description}\n status={installedIds.has(item.id) ? \"added\" : \"available\"}\n statusLabel={\n installedIds.has(item.id)\n ? t(\"pluginDiscovery.installed\")\n : t(\"pluginDiscovery.availableToInstall\")\n }\n onOpen={() => onOpen(item)}\n icon={\n renderIcon ? (\n renderIcon(item)\n ) : (\n <ConnectionLogo\n src={item.logoUrl}\n name={item.displayName}\n fallback={<BoxesIcon aria-hidden=\"true\" />}\n />\n )\n }\n />\n ))}\n </div>\n {loading ? <p role=\"status\">{t(\"pluginDiscovery.loadingPlugins\")}</p> : null}\n {error ? (\n <p role=\"alert\">\n {t(\"pluginDiscovery.couldnTLoadPlugins\")}{\" \"}\n <button type=\"button\" onClick={() => setRetry((value) => value + 1)}>\n {t(\"pluginDiscovery.retry\")}\n </button>\n </p>\n ) : null}\n {resultLimit && !loading && !error && total > resultLimit ? (\n <button className=\"og-catalog-more\" type=\"button\" onClick={onShowMore}>\n {t(\"pluginDiscovery.viewAllPlugins\")}\n </button>\n ) : null}\n <div ref={sentinel}>\n {!resultLimit && next !== null && !loading && !error ? (\n <button className=\"og-plugin-more\" type=\"button\" onClick={() => setOffset(next)}>\n {t(\"pluginDiscovery.showMorePlugins\")}\n </button>\n ) : null}\n </div>\n </>\n );\n}\n","import { useState } from \"react\";\nimport { pluginMcpUnavailableReason, type PluginDiscoveryItem } from \"@opengeni/sdk\";\nimport { BoxesIcon } from \"lucide-react\";\nimport { Markdown } from \"./components/markdown\";\nimport { ConnectionLogo } from \"./connection-logo\";\nimport { useOpenGeniText, type OpenGeniText } from \"./messages/runtime\";\n\nconst componentLabels = (t: OpenGeniText): Record<string, string> => ({\n skills: t(\"pluginDetails.skills\"),\n mcp: t(\"pluginDetails.mcpConnections\"),\n apps: t(\"pluginDetails.hostedApps\"),\n hooks: t(\"pluginDetails.hooks\"),\n agents: t(\"pluginDetails.agents\"),\n commands: t(\"pluginDetails.commands\"),\n lsp: t(\"pluginDetails.languageServers\"),\n});\n\nconst EMPTY_CONNECTIONS: Record<string, boolean> = {};\n\n/** Embeddable plugin overview. Hosts own the dialog and installation actions. */\nexport function PluginDetails({\n item,\n onInstall,\n busy = false,\n installed = false,\n error,\n connections = EMPTY_CONNECTIONS,\n onConnect,\n}: {\n item: PluginDiscoveryItem;\n onInstall?: () => void;\n busy?: boolean;\n installed?: boolean;\n error?: string | null;\n connections?: Record<string, boolean>;\n onConnect?: (server: { name: string; endpoint: string | null }) => void;\n}) {\n const t = useOpenGeniText();\n const supported = (server: NonNullable<PluginDiscoveryItem[\"mcpServers\"]>[number]) =>\n pluginMcpUnavailableReason(server) === null;\n const contentsUnknown = item.skills == null || item.mcpServers == null;\n const installableCount =\n (item.skills?.length ?? 0) + (item.mcpServers?.filter(supported).length ?? 0);\n const exceedsInstallLimit = installableCount > 64;\n const installable = !contentsUnknown && installableCount > 0 && !exceedsInstallLimit;\n const [expanded, setExpanded] = useState(false);\n const description = item.longDescription || item.description;\n const lengthy = description.length > 700;\n const registryLabel =\n item.provider === \"openai\"\n ? t(\"pluginDetails.openaiPluginRegistry\")\n : item.provider === \"anthropic\"\n ? t(\"pluginDetails.anthropicPluginRegistry\")\n : t(\"pluginDetails.customSource\");\n return (\n <article className=\"og-plugin-details\">\n <header className=\"og-plugin-details-header\">\n <ConnectionLogo\n src={item.logoUrl}\n name={item.displayName}\n fallback={<BoxesIcon aria-hidden=\"true\" />}\n />\n <div>\n <h2>{item.displayName.replace(/-/g, \" \")}</h2>\n {item.author?.name ? (\n <p>{t(\"pluginDetails.byName\", { name: item.author.name })}</p>\n ) : null}\n </div>\n </header>\n <div className=\"og-plugin-details-meta\">\n <span>{registryLabel}</span>\n {item.category ? <span>{item.category}</span> : null}\n {item.version ? <span>v{item.version}</span> : null}\n </div>\n <section className=\"og-plugin-details-members\">\n <h3>\n {t(\"pluginDetails.skills\")} <span>{item.skills?.length ?? \"—\"}</span>\n </h3>\n {item.skills?.length ? (\n <ul>\n {item.skills.map((skill) => (\n <li key={skill.sourceUrl}>\n <a href={skill.sourceUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n <strong>{skill.name}</strong>\n <span aria-hidden=\"true\">↗</span>\n </a>\n </li>\n ))}\n </ul>\n ) : (\n <p>\n {item.skills\n ? t(\"pluginDetails.noBundledSkills\")\n : t(\"pluginDetails.contentsHavenTBeenIndexed\")}\n </p>\n )}\n <h3>\n {t(\"pluginDetails.mcpServers\")} <span>{item.mcpServers?.length ?? \"—\"}</span>\n </h3>\n {item.mcpServers?.length ? (\n <ul>\n {item.mcpServers.map((server) => {\n const connected = Boolean(server.endpoint && connections[server.endpoint]);\n // Existing connections remain manageable regardless of the source manifest's setup requirements.\n const unavailableReason = connected ? null : pluginMcpUnavailableReason(server);\n return (\n <li\n key={server.name}\n className={unavailableReason ? \"og-plugin-member-disabled\" : undefined}\n >\n <div className=\"og-plugin-server-heading\">\n <strong>{server.name}</strong>\n {!unavailableReason && onConnect ? (\n <button type=\"button\" disabled={busy} onClick={() => onConnect(server)}>\n {connected ? t(\"pluginDetails.manage\") : t(\"pluginDetails.connect\")}\n </button>\n ) : null}\n </div>\n <small>\n {connected ? `${t(\"pluginDetails.connectedPrefix\")} ` : \"\"}\n {unavailableReason ?? server.endpoint}\n </small>\n </li>\n );\n })}\n </ul>\n ) : (\n <p>\n {item.mcpServers\n ? t(\"pluginDetails.noBundledMcpServers\")\n : t(\"pluginDetails.serverDetailsHavenTBeen\")}\n </p>\n )}\n {item.components?.some((component) => ![\"skills\", \"mcp\"].includes(component)) ? (\n <div className=\"og-plugin-details-other\">\n {t(\"pluginDetails.notInstalledHere\")}{\" \"}\n {item.components\n .filter((component) => ![\"skills\", \"mcp\"].includes(component))\n .map((component) => componentLabels(t)[component] ?? component)\n .join(\", \")}\n </div>\n ) : null}\n </section>\n <section className=\"og-plugin-details-overview\" aria-label={t(\"pluginDetails.overview\")}>\n <div className={lengthy && !expanded ? \"og-plugin-details-excerpt\" : undefined}>\n <Markdown>{description}</Markdown>\n </div>\n {lengthy ? (\n <button\n type=\"button\"\n className=\"og-plugin-details-more\"\n aria-expanded={expanded}\n onClick={() => setExpanded((value) => !value)}\n >\n {expanded ? t(\"pluginDetails.showLess\") : t(\"pluginDetails.readMore\")}\n </button>\n ) : null}\n </section>\n <footer>\n {item.sourceUrl ? (\n <a href={item.sourceUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n {t(\"pluginDetails.viewRepository\")} <span aria-hidden=\"true\">↗</span>\n </a>\n ) : null}\n {onInstall ? (\n <button\n className=\"og-plugin-install\"\n type=\"button\"\n disabled={!installable || busy || installed}\n onClick={onInstall}\n >\n {installed\n ? t(\"pluginDetails.installed\")\n : busy\n ? t(\"pluginDetails.installing\")\n : t(\"pluginDetails.installPlugin\")}\n </button>\n ) : null}\n {error ? <p role=\"alert\">{error}</p> : null}\n {exceedsInstallLimit ? (\n <p>{t(\"pluginDetails.thisPluginExceedsTheCurrent\")}</p>\n ) : contentsUnknown ? (\n <p>{t(\"pluginDetails.pluginContentsAreUnavailableInstallation\")}</p>\n ) : !installable ? (\n <p>{t(\"pluginDetails.noInstallableSkillsOrRemote\")}</p>\n ) : (\n <p>{t(\"pluginDetails.installsSkillsAndAddsConnection\")}</p>\n )}\n </footer>\n </article>\n );\n}\n"],"mappings":"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","names":["jsx","jsxs","useEffect","useState","jsx","jsxs","useState","useEffect","Fragment","jsx","jsxs","services","useState","jsx","useEffect","useState","Fragment","jsx","jsxs","useState","useEffect","useEffect","useRef","useState","useEffect","useState","jsx","useState","useEffect","Fragment","jsx","jsxs","jsx","jsxs","jsx","jsxs","useState","useRef","useEffect","useState","useEffect","useRef","useState","jsx","jsxs","useState","useRef","useEffect","Fragment","jsx","jsxs","useState","useEffect","useRef","useState","jsx","jsxs","useState","useRef","useEffect","useEffect","useRef","useState","Fragment","jsx","jsxs","useState","useRef","useEffect","useEffect","useRef","useState","jsx","jsxs","useState","useRef","useEffect","jsx","jsxs","jsx","jsxs","useEffect","useRef","useState","Fragment","jsx","jsxs","discoveryCache","useState","useRef","useEffect","useState","BoxesIcon","jsx","jsxs","useState","BoxesIcon"]}
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-TXS65BB2.js";
8
8
  import {
9
9
  useOpenGeniText
10
- } from "./chunk-S6WJ6TUT.js";
10
+ } from "./chunk-ZEVJGMNB.js";
11
11
 
12
12
  // src/components/session-status.tsx
13
13
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -108,4 +108,4 @@ export {
108
108
  SessionStatus,
109
109
  StatusDot
110
110
  };
111
- //# sourceMappingURL=chunk-FH75NNLB.js.map
111
+ //# sourceMappingURL=chunk-OZ5NAXCP.js.map
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-TXS65BB2.js";
11
11
  import {
12
12
  useOpenGeniText
13
- } from "./chunk-S6WJ6TUT.js";
13
+ } from "./chunk-ZEVJGMNB.js";
14
14
 
15
15
  // src/hooks/use-interaction-interventions.ts
16
16
  import { useCallback, useEffect as useEffect2, useRef as useRef2, useState } from "react";
@@ -373,4 +373,4 @@ export {
373
373
  InteractionInterventionBanner,
374
374
  useViewerMenuDismiss
375
375
  };
376
- //# sourceMappingURL=chunk-PEGNFZ3F.js.map
376
+ //# sourceMappingURL=chunk-P5S777YI.js.map
@@ -60,4 +60,4 @@ export {
60
60
  parseNotificationText,
61
61
  notificationPlainText
62
62
  };
63
- //# sourceMappingURL=chunk-LY6727IF.js.map
63
+ //# sourceMappingURL=chunk-PPSVFNEA.js.map
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  createOpenGeniText,
4
4
  useOpenGeniText
5
- } from "./chunk-S6WJ6TUT.js";
5
+ } from "./chunk-ZEVJGMNB.js";
6
6
 
7
7
  // src/components/this-computer/labels.ts
8
8
  function defaultThisComputerLabels(t = createOpenGeniText()) {
@@ -541,4 +541,4 @@ export {
541
541
  ThisComputerPanel,
542
542
  ThisComputerCard
543
543
  };
544
- //# sourceMappingURL=chunk-K4FDZVMQ.js.map
544
+ //# sourceMappingURL=chunk-PR42VIVY.js.map