@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
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-TVQCDDSZ.js";
5
5
  import {
6
6
  useOpenGeniText
7
- } from "./chunk-S6WJ6TUT.js";
7
+ } from "./chunk-ZEVJGMNB.js";
8
8
 
9
9
  // src/realtime/session-realtime.ts
10
10
  import {
@@ -596,4 +596,4 @@ export {
596
596
  sessionRealtimeLifecycleIsActive,
597
597
  useRealtimeModelSelection
598
598
  };
599
- //# sourceMappingURL=chunk-GTR5NLVP.js.map
599
+ //# sourceMappingURL=chunk-VCRQPLKS.js.map
@@ -1,4 +1,8 @@
1
1
  "use client";
2
+ import {
3
+ DRIVE_MCP_URL,
4
+ beginDriveConnect
5
+ } from "./chunk-X5XEYQ4B.js";
2
6
  import {
3
7
  beginIntegrationConnect,
4
8
  integrationClassFromDomain,
@@ -87,6 +91,23 @@ async function performCapabilityActionUntracked({
87
91
  "Existing connections could not be checked. Refresh and retry before saving credentials."
88
92
  );
89
93
  }
94
+ if (["oauth", "add_oauth_account", "reconnect_oauth"].includes(action.type) && (item.mcpUrl ?? item.endpointUrl) === DRIVE_MCP_URL) {
95
+ if (!("ownership" in action) || action.ownership !== "personal")
96
+ throw new Error("Google Drive connections must be personal-owned.");
97
+ const persisted2 = await persistIfRegistry(item, registry);
98
+ const target = new URL(returnPathFor(persisted2.id), connectReturnUrl ?? window.location.href);
99
+ const authorizationUrl = await beginDriveConnect({
100
+ client,
101
+ workspaceId,
102
+ itemId: persisted2.id,
103
+ returnUrl: target.toString(),
104
+ ...action.type === "reconnect_oauth" && action.connectionId ? { reconnectAccountId: action.connectionId } : {},
105
+ ...action.type === "reconnect_oauth" && action.connectionWorkspaceId ? { connectionWorkspaceId: action.connectionWorkspaceId } : {},
106
+ storage: window.sessionStorage
107
+ });
108
+ redirect(authorizationUrl);
109
+ return;
110
+ }
90
111
  if (action.type === "install_skill") {
91
112
  if (!canManageSkills) {
92
113
  throw new Error("You need permission to manage workspace documents to install Skills.");
@@ -355,4 +376,4 @@ function installedSkillVersion(item) {
355
376
  export {
356
377
  performCapabilityAction
357
378
  };
358
- //# sourceMappingURL=chunk-NWSAF6P5.js.map
379
+ //# sourceMappingURL=chunk-WJDH7CH5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/components/capabilities/perform-capability-action.tsx"],"sourcesContent":["import type { OpenGeniBrowserClient } from \"@opengeni/sdk/browser\";\nimport type { CapabilityCatalogItem, ConnectionMetadata, SkillUninstallPreview } from \"../../types\";\nimport type { ConnectAction } from \"./capability-detail-sheet\";\nimport {\n apiKeyConnectionRef,\n catalogConnectionAccountSelection,\n capabilityConnectPlan,\n connectionToReuseForApiKey,\n createInputFromCatalogItem,\n} from \"../../lib/capabilities\";\nimport {\n beginIntegrationConnect,\n integrationClassFromDomain,\n integrationConnectErrorOutcome,\n type IntegrationClass,\n type IntegrationConnectMethod,\n} from \"../../lib/integration-connect-analytics\";\nimport { beginDriveConnect, DRIVE_MCP_URL } from \"../../lib/drive-connect-return\";\nimport { startMcpOAuthWithTimeout } from \"../../lib/mcp-oauth\";\nimport { toast } from \"../../lib/toast\";\n\ntype PerformCapabilityActionOptions = Parameters<typeof performCapabilityActionUntracked>[0];\n\nconst CONNECT_JOURNEY_METHODS: Partial<Record<ConnectAction[\"type\"], IntegrationConnectMethod>> = {\n oauth: \"oauth\",\n reconnect_oauth: \"oauth\",\n add_oauth_account: \"oauth\",\n social_oauth: \"oauth\",\n fiken_oauth: \"oauth\",\n api_key: \"api_key\",\n reconnect_api_key: \"api_key\",\n fiken_api_token: \"api_key\",\n};\n\n/** The closed provider class of a catalog connect, never its domain or id. */\nfunction connectJourneyClass(item: CapabilityCatalogItem, action: ConnectAction): IntegrationClass {\n if (action.type === \"social_oauth\") return action.provider === \"x\" ? \"x\" : \"other\";\n if (action.type === \"fiken_oauth\" || action.type === \"fiken_api_token\") return \"other\";\n const plan = capabilityConnectPlan(item);\n return integrationClassFromDomain(\n (\"providerDomain\" in plan ? plan.providerDomain : null) ||\n item.connectionRef?.providerDomain ||\n item.mcpUrl ||\n item.endpointUrl,\n );\n}\n\n/**\n * One connection lifecycle for catalog sheets and conversation cards, with\n * the consent-gated connect journey around every credential or OAuth action.\n */\nexport async function performCapabilityAction(\n options: PerformCapabilityActionOptions,\n action: ConnectAction,\n): Promise<void> {\n const method = CONNECT_JOURNEY_METHODS[action.type];\n if (!method) return await performCapabilityActionUntracked(options, action);\n const journey = beginIntegrationConnect(connectJourneyClass(options.item, action), method);\n let redirected = false;\n try {\n await performCapabilityActionUntracked(\n {\n ...options,\n redirect: (url) => {\n redirected = true;\n // An exact-return Connect redirect comes back without outcome parameters.\n journey.redirecting({\n returnsWithOutcome: !(action.type === \"social_oauth\" && options.connectReturnUrl),\n });\n options.redirect(url);\n },\n },\n action,\n );\n if (!redirected) journey.finish(\"connected\");\n } catch (error) {\n journey.finish(integrationConnectErrorOutcome(error));\n throw error;\n }\n}\n\n/** One connection lifecycle for catalog sheets and conversation cards. The caller\n * resolves the live item and owns busy/error state; credentials never enter chat. */\nasync function performCapabilityActionUntracked(\n {\n client,\n workspaceId,\n item,\n registry = false,\n connections,\n canManageSkills,\n refresh,\n onRuntimeChanged,\n onComplete,\n onSkillRemoval,\n returnPathFor,\n connectReturnUrl,\n redirect,\n }: {\n client: OpenGeniBrowserClient;\n workspaceId: string;\n item: CapabilityCatalogItem;\n registry?: boolean | undefined;\n connections: ConnectionMetadata[] | null;\n canManageSkills: boolean;\n refresh: () => Promise<unknown>;\n onRuntimeChanged: () => void;\n onComplete: () => void | Promise<void>;\n onSkillRemoval: (value: {\n item: CapabilityCatalogItem;\n preview: SkillUninstallPreview;\n }) => void;\n returnPathFor: (id: string) => string;\n /** Exact-return Connect surfaces; conversation cards retain their native\n * callback parameters for completing session tool selection. */\n connectReturnUrl?: string | undefined;\n redirect: (url: string) => void;\n },\n action: ConnectAction,\n): Promise<void> {\n if (action.item !== item) throw new Error(\"The selected capability changed. Review it again.\");\n async function persistIfRegistry(candidate: CapabilityCatalogItem, fromRegistry: boolean) {\n return fromRegistry\n ? client.createCapability(workspaceId, createInputFromCatalogItem(candidate))\n : candidate;\n }\n // The plan is derived from the current catalog/registry item (it carries\n // authKind/mcpUrl/providerDomain); connect calls use the persisted id.\n const plan = capabilityConnectPlan(item);\n if ((action.type === \"api_key\" || action.type === \"reconnect_api_key\") && connections === null) {\n throw new Error(\n \"Existing connections could not be checked. Refresh and retry before saving credentials.\",\n );\n }\n\n // The built-in Drive action uses a server-owned Connect provider identity.\n // Custom MCP requests continue through the generic OAuth route below.\n if (\n [\"oauth\", \"add_oauth_account\", \"reconnect_oauth\"].includes(action.type) &&\n (item.mcpUrl ?? item.endpointUrl) === DRIVE_MCP_URL\n ) {\n if (!(\"ownership\" in action) || action.ownership !== \"personal\")\n throw new Error(\"Google Drive connections must be personal-owned.\");\n const persisted = await persistIfRegistry(item, registry);\n const target = new URL(returnPathFor(persisted.id), connectReturnUrl ?? window.location.href);\n const authorizationUrl = await beginDriveConnect({\n client,\n workspaceId,\n itemId: persisted.id,\n returnUrl: target.toString(),\n ...(action.type === \"reconnect_oauth\" && action.connectionId\n ? { reconnectAccountId: action.connectionId }\n : {}),\n ...(action.type === \"reconnect_oauth\" && action.connectionWorkspaceId\n ? { connectionWorkspaceId: action.connectionWorkspaceId }\n : {}),\n storage: window.sessionStorage,\n });\n redirect(authorizationUrl);\n return;\n }\n\n if (action.type === \"install_skill\") {\n if (!canManageSkills) {\n throw new Error(\"You need permission to manage workspace documents to install Skills.\");\n }\n const libraryId = metadataString(item.metadata.libraryId);\n const expectedVersion = metadataString(item.metadata.version);\n const expectedContentSha256 = metadataString(item.metadata.contentSha256);\n if (!libraryId || !expectedVersion || !expectedContentSha256) {\n throw new Error(\n \"This Skill is missing its reviewed library identity. Refresh and try again.\",\n );\n }\n const installationVersion = installedSkillVersion(item);\n const installed = await client.installLibrarySkill(workspaceId, libraryId, {\n expectedVersion,\n expectedContentSha256,\n ...(installationVersion !== null ? { expectedInstallationVersion: installationVersion } : {}),\n });\n await refresh();\n onRuntimeChanged();\n if (installed.skillReceipt?.outcome === \"pending\") {\n throw new Error(\"This Skill is awaiting review and has not been activated.\");\n }\n await onComplete();\n toast.success(item.enabled ? `Updated ${item.name}` : `Installed ${item.name}`, {\n description:\n installed.skillReceipt?.outcome === \"preserved\"\n ? \"Your customized Skill was preserved.\"\n : `Pinned to reviewed Skill version ${expectedVersion}.`,\n });\n return;\n }\n\n if (action.type === \"remove_skill\") {\n if (!canManageSkills) {\n throw new Error(\"Workspace administrator permission is required to remove Skills.\");\n }\n const preview = await client.previewSkillUninstall(workspaceId, item.id);\n if (!preview.installed || preview.installationVersion === null || !preview.directOwner) {\n throw new Error(\"This Skill is no longer directly installed. Refresh and try again.\");\n }\n onSkillRemoval({ item, preview });\n return;\n }\n\n if (action.type === \"disconnect\") {\n if (item.kind !== \"mcp\" || !item.actions.includes(\"disconnect\")) {\n throw new Error(`${item.name} must be managed through its dedicated controls.`);\n }\n await client.disableCapability(workspaceId, item.id);\n await refresh();\n onRuntimeChanged();\n await onComplete();\n toast.success(`Turned off ${item.name} for this workspace`, {\n description: \"Connected accounts are kept.\",\n });\n return;\n }\n\n if (action.type === \"social_oauth\" && plan.mode === \"social_oauth\") {\n if (connectReturnUrl) {\n const response = await client.beginConnect(workspaceId, {\n providerId: action.provider,\n ownership: action.ownership,\n returnUrl: connectReturnUrl,\n idempotencyKey: crypto.randomUUID(),\n });\n if (response.nextAction.type !== \"authorize\") {\n throw new Error(\"The provider did not return an authorization link.\");\n }\n redirect(response.nextAction.url);\n return;\n }\n const returnPath = returnPathFor(item.id);\n const response = await client.startSocialOAuth(workspaceId, {\n provider: action.provider,\n ownership: action.ownership,\n returnPath,\n });\n if (!response.authorizationUrl) {\n throw new Error(\"The provider did not return an authorization link.\");\n }\n redirect(response.authorizationUrl);\n return;\n }\n\n if (action.type === \"disconnect_social\") {\n await client.disconnectSocialConnection(workspaceId, action.connectionId);\n await refresh();\n await onComplete();\n toast.success(`Disconnected ${item.name}`);\n return;\n }\n\n // First-party Fiken connect / token replacement. The install route\n // verifies the token against Fiken before storing it, so a bad paste\n // fails here with a specific message instead of at first tool use.\n if (action.type === \"fiken_api_token\") {\n await client.installFikenConnection(workspaceId, {\n apiToken: action.apiToken,\n ...(action.connectionId ? { connectionId: action.connectionId } : {}),\n });\n await refresh();\n onRuntimeChanged();\n await onComplete();\n toast.success(`Connected ${item.name}`);\n return;\n }\n\n // Full-page redirect into Fiken's consent screen; the API callback\n // stores the workspace connection and returns to this page with a\n // `fiken` query param handled by the return effect below.\n if (action.type === \"fiken_oauth\") {\n const response = await client.startFikenOAuth(workspaceId, {\n returnPath: returnPathFor(item.id),\n ...(action.connectionId ? { connectionId: action.connectionId } : {}),\n });\n if (!response.authorizationUrl) {\n throw new Error(\"Fiken did not return an authorization link.\");\n }\n redirect(response.authorizationUrl);\n return;\n }\n\n if (action.type === \"fiken_disconnect\") {\n await client.deleteConnection(workspaceId, action.connectionId);\n await refresh();\n onRuntimeChanged();\n await onComplete();\n toast.success(`Disconnected ${item.name}`);\n return;\n }\n\n // Reconnect an already-enabled item whose credential lapsed. When the\n // connection row survives, OAuth reuses it (pass connectionId) and the\n // return handler just refreshes; when it was deleted (null id), OAuth\n // mints a fresh row and the return handler re-enables against it. API-key\n // reactivates the surviving row in place, or mints + re-enables if gone.\n if (action.type === \"reconnect_oauth\") {\n // Trust the installation's connectionRef.kind (the sheet already chose this\n // branch from it), not the catalog plan - on drift plan.mode can read\n // \"enable\", so fall back to the ref's domain and the item's own MCP URL.\n const providerDomain =\n plan.mode === \"oauth\" ? plan.providerDomain : (item.connectionRef?.providerDomain ?? null);\n const mcpUrl = plan.mode === \"oauth\" ? plan.mcpUrl : (item.mcpUrl ?? item.endpointUrl ?? null);\n const returnPath = returnPathFor(item.id);\n const response = await startMcpOAuthWithTimeout(\n client,\n action.connectionWorkspaceId ?? workspaceId,\n {\n ...(mcpUrl ? { mcpUrl } : {}),\n ...(providerDomain ? { providerDomain } : {}),\n // Reuse the existing row when it survives; a null id means the row was\n // deleted, so OAuth mints a fresh connection and the return handler\n // re-enables against it.\n ...(action.connectionId ? { connectionId: action.connectionId } : {}),\n ownership: action.ownership,\n returnPath,\n },\n );\n if (!response.authorizationUrl) {\n throw new Error(\"The provider did not return an authorization link.\");\n }\n redirect(response.authorizationUrl);\n return;\n }\n\n if (action.type === \"add_oauth_account\") {\n const providerDomain =\n plan.mode === \"oauth\" ? plan.providerDomain : (item.connectionRef?.providerDomain ?? null);\n const mcpUrl = plan.mode === \"oauth\" ? plan.mcpUrl : (item.mcpUrl ?? item.endpointUrl ?? null);\n if (!mcpUrl) throw new Error(`${item.name} has no sign-in endpoint.`);\n const response = await startMcpOAuthWithTimeout(client, workspaceId, {\n mcpUrl,\n ...(providerDomain ? { providerDomain } : {}),\n newAccount: true,\n ownership: action.ownership,\n returnPath: returnPathFor(item.id),\n });\n if (!response.authorizationUrl) {\n throw new Error(\"The provider did not return an authorization link.\");\n }\n redirect(response.authorizationUrl);\n return;\n }\n\n if (action.type === \"remove_connection\") {\n // The account's own workspace owns the row (a personal account can come\n // from another workspace); the API re-checks ownership and permission.\n await client.deleteConnection(action.connection.workspaceId, action.connection.id);\n await refresh();\n onRuntimeChanged();\n await onComplete();\n toast.success(`Removed the ${item.name} account`);\n return;\n }\n\n if (action.type === \"reconnect_api_key\") {\n if (action.connectionId) {\n // The existing row went inactive - rewrite its credential and\n // reactivate it in place; the installation ref already points at it.\n await client.updateConnection(workspaceId, action.connectionId, {\n credential: { headers: action.headers },\n status: \"active\",\n });\n } else {\n // The row was deleted - mint a fresh connection and re-enable the\n // installation against it (enable upserts the installation config). Domain\n // comes from the plan, or the installation's ref when the catalog drifted.\n const providerDomain =\n plan.mode === \"api_key\" ? plan.providerDomain : (item.connectionRef?.providerDomain ?? \"\");\n const connection = await client.createConnection(workspaceId, {\n providerDomain,\n kind: \"api_key\",\n ownership: action.ownership,\n credential: { headers: action.headers },\n });\n await client.enableCapability(workspaceId, item.id, {\n connectionRef: apiKeyConnectionRef(\n action.ownership,\n connection.id,\n connection.providerDomain,\n catalogConnectionAccountSelection(item),\n ),\n });\n }\n await refresh();\n onRuntimeChanged();\n await onComplete();\n toast.success(`Reconnected ${item.name}`);\n return;\n }\n\n if (item.kind !== \"mcp\") {\n throw new Error(`${item.name} must be installed through its dedicated controls.`);\n }\n const persisted = await persistIfRegistry(item, registry);\n\n if (action.type === \"oauth\" && plan.mode === \"oauth\") {\n const returnPath = returnPathFor(persisted.id);\n const response = await startMcpOAuthWithTimeout(client, workspaceId, {\n ...(plan.mcpUrl ? { mcpUrl: plan.mcpUrl } : {}),\n ...(plan.providerDomain ? { providerDomain: plan.providerDomain } : {}),\n ownership: action.ownership,\n returnPath,\n });\n if (!response.authorizationUrl) {\n throw new Error(\"The provider did not return an authorization link.\");\n }\n // Full-page redirect into the provider's consent screen; we return to\n // returnPath and resume in the OAuth-return effect below.\n redirect(response.authorizationUrl);\n return;\n }\n\n if (action.type === \"api_key\" && plan.mode === \"api_key\") {\n // Reuse only a connection with the selected ownership rather than creating\n // a duplicate on retry; workspace and personal rows never cross-reuse.\n const reuseId = connectionToReuseForApiKey(\n item,\n connections ?? [],\n plan.providerDomain,\n action.ownership,\n );\n const connection = reuseId\n ? await client.updateConnection(workspaceId, reuseId, {\n credential: { headers: action.headers },\n status: \"active\",\n })\n : await client.createConnection(workspaceId, {\n providerDomain: plan.providerDomain,\n kind: \"api_key\",\n ownership: action.ownership,\n credential: { headers: action.headers },\n });\n // Build the enable ref from the connection row the API returns, never the\n // catalog domain - the API may canonicalize providerDomain, and the row\n // is the authoritative match the enable path validates against.\n await client.enableCapability(workspaceId, persisted.id, {\n connectionRef: apiKeyConnectionRef(\n action.ownership,\n connection.id,\n connection.providerDomain,\n catalogConnectionAccountSelection(item),\n ),\n });\n await refresh();\n onRuntimeChanged();\n await onComplete();\n toast.success(`Connected and enabled ${persisted.name}`);\n return;\n }\n\n // A stale form must not fall through from a credentialed action to enable.\n if (action.type !== \"enable\" || plan.mode !== \"enable\") {\n throw new Error(\n \"The connection requirements changed. Close this form and review the current setup.\",\n );\n }\n // Plain enable (no credentials).\n await client.enableCapability(workspaceId, persisted.id);\n await refresh();\n if (persisted.kind === \"mcp\") onRuntimeChanged();\n await onComplete();\n toast.success(`Enabled ${persisted.name}`);\n}\n\nfunction metadataString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : null;\n}\n\nfunction installedSkillVersion(item: CapabilityCatalogItem): number | null {\n const installedSkill = item.metadata.installedSkill;\n if (!installedSkill || typeof installedSkill !== \"object\" || Array.isArray(installedSkill)) {\n return null;\n }\n const value = (installedSkill as Record<string, unknown>).installationVersion;\n return typeof value === \"number\" && Number.isInteger(value) && value > 0 ? value : null;\n}\n"],"mappings":"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","names":["persisted","response"]}
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-IIFO2H3P.js";
5
5
  import {
6
6
  t
7
- } from "./chunk-BPD4IJBG.js";
7
+ } from "./chunk-CG6CJMIS.js";
8
8
  import {
9
9
  buildTimeline
10
10
  } from "./chunk-6MRY2RUZ.js";
@@ -298,4 +298,4 @@ export {
298
298
  sandboxProvisionInFlight,
299
299
  eventLabel
300
300
  };
301
- //# sourceMappingURL=chunk-LG67ZNRU.js.map
301
+ //# sourceMappingURL=chunk-WK2ZCTUF.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-XVVJBNUQ.js";
5
5
  import {
6
6
  scheduledTaskIdOf
7
- } from "./chunk-CPKD2YGK.js";
7
+ } from "./chunk-RNU5CUPI.js";
8
8
  import {
9
9
  sessionSiteOrigin
10
10
  } from "./chunk-K3TJNJSU.js";
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-E36IC3LU.js";
14
14
  import {
15
15
  t
16
- } from "./chunk-BPD4IJBG.js";
16
+ } from "./chunk-CG6CJMIS.js";
17
17
  import {
18
18
  formatAbsoluteTime,
19
19
  inSentence
@@ -196,4 +196,4 @@ export {
196
196
  sessionHoverFacts,
197
197
  sessionHoverDescription
198
198
  };
199
- //# sourceMappingURL=chunk-XGE75VPK.js.map
199
+ //# sourceMappingURL=chunk-WNARM3LY.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  capabilityLogoFallback
4
- } from "./chunk-IWIMIRV3.js";
4
+ } from "./chunk-OSJTLQXA.js";
5
5
 
6
6
  // src/app/components/capabilities/capability-logo-source.tsx
7
7
  var FIRST_PARTY_CAPABILITY_LOGOS = {
@@ -21,4 +21,4 @@ export {
21
21
  FIRST_PARTY_CAPABILITY_LOGOS,
22
22
  capabilityLogoSource
23
23
  };
24
- //# sourceMappingURL=chunk-RNBH5TSM.js.map
24
+ //# sourceMappingURL=chunk-WQ2RTQYO.js.map
@@ -0,0 +1,84 @@
1
+ "use client";
2
+
3
+ // src/app/lib/drive-connect-return.tsx
4
+ var DRIVE_MCP_URL = "https://drivemcp.googleapis.com/mcp/v1";
5
+ var DRIVE_CONNECT_RETURN_PARAM = "drive_connect_return";
6
+ var storageKey = (workspaceId) => `opengeni.drive-connect.v1:${workspaceId}`;
7
+ async function beginDriveConnect(input) {
8
+ const nonce = crypto.randomUUID();
9
+ const returnUrl = new URL(input.returnUrl);
10
+ returnUrl.searchParams.set(DRIVE_CONNECT_RETURN_PARAM, nonce);
11
+ const connectionWorkspaceId = input.connectionWorkspaceId ?? input.workspaceId;
12
+ const created = await input.client.beginConnect(connectionWorkspaceId, {
13
+ providerId: "google-drive",
14
+ ownership: "personal",
15
+ returnUrl: returnUrl.toString(),
16
+ idempotencyKey: crypto.randomUUID(),
17
+ ...input.reconnectAccountId ? { reconnectAccountId: input.reconnectAccountId } : {}
18
+ });
19
+ if (created.state !== "credential_input")
20
+ throw new Error("Google Drive setup did not start. Try again.");
21
+ const attempt = await input.client.connectTransport().advance(connectionWorkspaceId, created.id, {
22
+ expectedRevision: created.revision,
23
+ idempotencyKey: crypto.randomUUID(),
24
+ action: { type: "credentials", values: {} }
25
+ });
26
+ if (attempt.nextAction.type !== "authorize")
27
+ throw new Error(attempt.error?.message ?? "Google Drive did not return an authorization link.");
28
+ input.storage.setItem(
29
+ storageKey(input.workspaceId),
30
+ JSON.stringify({
31
+ nonce,
32
+ attemptId: attempt.id,
33
+ connectionWorkspaceId,
34
+ itemId: input.itemId
35
+ })
36
+ );
37
+ return attempt.nextAction.url;
38
+ }
39
+ async function resolveDriveConnectReturn(input) {
40
+ const key = storageKey(input.workspaceId);
41
+ const raw = input.storage.getItem(key);
42
+ let receipt;
43
+ try {
44
+ receipt = JSON.parse(raw ?? "null");
45
+ if (!receipt || receipt.nonce !== input.nonce || ![receipt.attemptId, receipt.connectionWorkspaceId, receipt.itemId].every(
46
+ (value) => typeof value === "string" && value.length > 0 && value.length <= 4096
47
+ ))
48
+ throw new Error();
49
+ } catch {
50
+ throw new Error(
51
+ "The Google Drive setup return could not be matched. Open Drive to check your connection."
52
+ );
53
+ }
54
+ const attempt = await input.client.connectTransport().get(receipt.connectionWorkspaceId, receipt.attemptId);
55
+ if (attempt.id !== receipt.attemptId || attempt.providerId !== "google-drive" || attempt.ownership !== "personal") {
56
+ throw new Error("The Google Drive setup account changed. Open Drive to try again.");
57
+ }
58
+ if (["failed", "expired", "cancelled"].includes(attempt.state)) {
59
+ input.storage.removeItem(key);
60
+ throw new Error(
61
+ attempt.error?.message ?? "Google Drive connection was not completed. Open Drive to try again."
62
+ );
63
+ }
64
+ if (attempt.state !== "complete" || !attempt.credentialsCommitted || attempt.account?.providerId !== "google-drive" || attempt.account.ownership !== "personal" || !attempt.account.id) {
65
+ throw new Error("Google Drive setup is still incomplete. Reload to check it again.");
66
+ }
67
+ return { itemId: receipt.itemId, connectionId: attempt.account.id };
68
+ }
69
+ function completeDriveConnectReturn(workspaceId, nonce, storage) {
70
+ const key = storageKey(workspaceId);
71
+ try {
72
+ if (JSON.parse(storage.getItem(key) ?? "null")?.nonce === nonce) storage.removeItem(key);
73
+ } catch {
74
+ }
75
+ }
76
+
77
+ export {
78
+ DRIVE_MCP_URL,
79
+ DRIVE_CONNECT_RETURN_PARAM,
80
+ beginDriveConnect,
81
+ resolveDriveConnectReturn,
82
+ completeDriveConnectReturn
83
+ };
84
+ //# sourceMappingURL=chunk-X5XEYQ4B.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/lib/drive-connect-return.tsx"],"sourcesContent":["import type { OpenGeniBrowserClient } from \"@opengeni/sdk/browser\";\n\nexport const DRIVE_MCP_URL = \"https://drivemcp.googleapis.com/mcp/v1\";\nexport const DRIVE_CONNECT_RETURN_PARAM = \"drive_connect_return\";\nconst storageKey = (workspaceId: string) => `opengeni.drive-connect.v1:${workspaceId}`;\ntype Receipt = { nonce: string; attemptId: string; connectionWorkspaceId: string; itemId: string };\ntype Storage = Pick<globalThis.Storage, \"getItem\" | \"setItem\" | \"removeItem\">;\n\n/** Browser state is only a locator. Completion and the account come from Connect. */\nexport async function beginDriveConnect(input: {\n client: Pick<OpenGeniBrowserClient, \"beginConnect\" | \"connectTransport\">;\n workspaceId: string;\n connectionWorkspaceId?: string;\n itemId: string;\n reconnectAccountId?: string;\n returnUrl: string;\n storage: Storage;\n}): Promise<string> {\n const nonce = crypto.randomUUID();\n const returnUrl = new URL(input.returnUrl);\n returnUrl.searchParams.set(DRIVE_CONNECT_RETURN_PARAM, nonce);\n const connectionWorkspaceId = input.connectionWorkspaceId ?? input.workspaceId;\n const created = await input.client.beginConnect(connectionWorkspaceId, {\n providerId: \"google-drive\",\n ownership: \"personal\",\n returnUrl: returnUrl.toString(),\n idempotencyKey: crypto.randomUUID(),\n ...(input.reconnectAccountId ? { reconnectAccountId: input.reconnectAccountId } : {}),\n });\n if (created.state !== \"credential_input\")\n throw new Error(\"Google Drive setup did not start. Try again.\");\n const attempt = await input.client.connectTransport().advance(connectionWorkspaceId, created.id, {\n expectedRevision: created.revision,\n idempotencyKey: crypto.randomUUID(),\n action: { type: \"credentials\", values: {} },\n });\n if (attempt.nextAction.type !== \"authorize\")\n throw new Error(attempt.error?.message ?? \"Google Drive did not return an authorization link.\");\n input.storage.setItem(\n storageKey(input.workspaceId),\n JSON.stringify({\n nonce,\n attemptId: attempt.id,\n connectionWorkspaceId,\n itemId: input.itemId,\n } satisfies Receipt),\n );\n return attempt.nextAction.url;\n}\n\nexport async function resolveDriveConnectReturn(input: {\n client: Pick<OpenGeniBrowserClient, \"connectTransport\">;\n workspaceId: string;\n nonce: string;\n storage: Storage;\n}): Promise<{ itemId: string; connectionId: string }> {\n const key = storageKey(input.workspaceId);\n const raw = input.storage.getItem(key);\n let receipt: Receipt;\n try {\n receipt = JSON.parse(raw ?? \"null\");\n if (\n !receipt ||\n receipt.nonce !== input.nonce ||\n ![receipt.attemptId, receipt.connectionWorkspaceId, receipt.itemId].every(\n (value) => typeof value === \"string\" && value.length > 0 && value.length <= 4096,\n )\n )\n throw new Error();\n } catch {\n throw new Error(\n \"The Google Drive setup return could not be matched. Open Drive to check your connection.\",\n );\n }\n const attempt = await input.client\n .connectTransport()\n .get(receipt.connectionWorkspaceId, receipt.attemptId);\n if (\n attempt.id !== receipt.attemptId ||\n attempt.providerId !== \"google-drive\" ||\n attempt.ownership !== \"personal\"\n ) {\n throw new Error(\"The Google Drive setup account changed. Open Drive to try again.\");\n }\n if ([\"failed\", \"expired\", \"cancelled\"].includes(attempt.state)) {\n input.storage.removeItem(key);\n throw new Error(\n attempt.error?.message ??\n \"Google Drive connection was not completed. Open Drive to try again.\",\n );\n }\n if (\n attempt.state !== \"complete\" ||\n !attempt.credentialsCommitted ||\n attempt.account?.providerId !== \"google-drive\" ||\n attempt.account.ownership !== \"personal\" ||\n !attempt.account.id\n ) {\n throw new Error(\"Google Drive setup is still incomplete. Reload to check it again.\");\n }\n return { itemId: receipt.itemId, connectionId: attempt.account.id };\n}\n\n/** Clear only after the UI has finished enabling; never consume a newer attempt. */\nexport function completeDriveConnectReturn(\n workspaceId: string,\n nonce: string,\n storage: Storage,\n): void {\n const key = storageKey(workspaceId);\n try {\n if (JSON.parse(storage.getItem(key) ?? \"null\")?.nonce === nonce) storage.removeItem(key);\n } catch {\n /* An absent or replaced browser locator grants no authority. */\n }\n}\n"],"mappings":";;;AAEO,IAAM,gBAAgB;AACtB,IAAM,6BAA6B;AAC1C,IAAM,aAAa,CAAC,gBAAwB,6BAA6B,WAAW;AAKpF,eAAsB,kBAAkB,OAQpB;AAClB,QAAM,QAAQ,OAAO,WAAW;AAChC,QAAM,YAAY,IAAI,IAAI,MAAM,SAAS;AACzC,YAAU,aAAa,IAAI,4BAA4B,KAAK;AAC5D,QAAM,wBAAwB,MAAM,yBAAyB,MAAM;AACnE,QAAM,UAAU,MAAM,MAAM,OAAO,aAAa,uBAAuB;AAAA,IACrE,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,WAAW,UAAU,SAAS;AAAA,IAC9B,gBAAgB,OAAO,WAAW;AAAA,IAClC,GAAI,MAAM,qBAAqB,EAAE,oBAAoB,MAAM,mBAAmB,IAAI,CAAC;AAAA,EACrF,CAAC;AACD,MAAI,QAAQ,UAAU;AACpB,UAAM,IAAI,MAAM,8CAA8C;AAChE,QAAM,UAAU,MAAM,MAAM,OAAO,iBAAiB,EAAE,QAAQ,uBAAuB,QAAQ,IAAI;AAAA,IAC/F,kBAAkB,QAAQ;AAAA,IAC1B,gBAAgB,OAAO,WAAW;AAAA,IAClC,QAAQ,EAAE,MAAM,eAAe,QAAQ,CAAC,EAAE;AAAA,EAC5C,CAAC;AACD,MAAI,QAAQ,WAAW,SAAS;AAC9B,UAAM,IAAI,MAAM,QAAQ,OAAO,WAAW,oDAAoD;AAChG,QAAM,QAAQ;AAAA,IACZ,WAAW,MAAM,WAAW;AAAA,IAC5B,KAAK,UAAU;AAAA,MACb;AAAA,MACA,WAAW,QAAQ;AAAA,MACnB;AAAA,MACA,QAAQ,MAAM;AAAA,IAChB,CAAmB;AAAA,EACrB;AACA,SAAO,QAAQ,WAAW;AAC5B;AAEA,eAAsB,0BAA0B,OAKM;AACpD,QAAM,MAAM,WAAW,MAAM,WAAW;AACxC,QAAM,MAAM,MAAM,QAAQ,QAAQ,GAAG;AACrC,MAAI;AACJ,MAAI;AACF,cAAU,KAAK,MAAM,OAAO,MAAM;AAClC,QACE,CAAC,WACD,QAAQ,UAAU,MAAM,SACxB,CAAC,CAAC,QAAQ,WAAW,QAAQ,uBAAuB,QAAQ,MAAM,EAAE;AAAA,MAClE,CAAC,UAAU,OAAO,UAAU,YAAY,MAAM,SAAS,KAAK,MAAM,UAAU;AAAA,IAC9E;AAEA,YAAM,IAAI,MAAM;AAAA,EACpB,QAAQ;AACN,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,QAAM,UAAU,MAAM,MAAM,OACzB,iBAAiB,EACjB,IAAI,QAAQ,uBAAuB,QAAQ,SAAS;AACvD,MACE,QAAQ,OAAO,QAAQ,aACvB,QAAQ,eAAe,kBACvB,QAAQ,cAAc,YACtB;AACA,UAAM,IAAI,MAAM,kEAAkE;AAAA,EACpF;AACA,MAAI,CAAC,UAAU,WAAW,WAAW,EAAE,SAAS,QAAQ,KAAK,GAAG;AAC9D,UAAM,QAAQ,WAAW,GAAG;AAC5B,UAAM,IAAI;AAAA,MACR,QAAQ,OAAO,WACb;AAAA,IACJ;AAAA,EACF;AACA,MACE,QAAQ,UAAU,cAClB,CAAC,QAAQ,wBACT,QAAQ,SAAS,eAAe,kBAChC,QAAQ,QAAQ,cAAc,cAC9B,CAAC,QAAQ,QAAQ,IACjB;AACA,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AACA,SAAO,EAAE,QAAQ,QAAQ,QAAQ,cAAc,QAAQ,QAAQ,GAAG;AACpE;AAGO,SAAS,2BACd,aACA,OACA,SACM;AACN,QAAM,MAAM,WAAW,WAAW;AAClC,MAAI;AACF,QAAI,KAAK,MAAM,QAAQ,QAAQ,GAAG,KAAK,MAAM,GAAG,UAAU,MAAO,SAAQ,WAAW,GAAG;AAAA,EACzF,QAAQ;AAAA,EAER;AACF;","names":[]}
@@ -17,7 +17,7 @@ import {
17
17
  ListRow,
18
18
  ListRowSkeleton,
19
19
  RowList
20
- } from "./chunk-MM7OKOTE.js";
20
+ } from "./chunk-UBXHP224.js";
21
21
  import {
22
22
  clearGitHubInstallRequest,
23
23
  readGitHubInstallRequest,
@@ -25,7 +25,7 @@ import {
25
25
  } from "./chunk-PVNI2KHS.js";
26
26
  import {
27
27
  capabilityLogoSource
28
- } from "./chunk-RNBH5TSM.js";
28
+ } from "./chunk-WQ2RTQYO.js";
29
29
  import {
30
30
  cn
31
31
  } from "./chunk-A3MTTRCX.js";
@@ -61,7 +61,7 @@ import {
61
61
  } from "./chunk-HMU5IELG.js";
62
62
  import {
63
63
  SessionCapabilityFrame
64
- } from "./chunk-X7Z4B5GK.js";
64
+ } from "./chunk-KPL7EXS6.js";
65
65
 
66
66
  // src/app/components/capabilities/session-github-card.tsx
67
67
  import { ArrowUpRightIcon, BookMarkedIcon, CheckIcon, Loader2Icon, LockIcon } from "lucide-react";
@@ -740,4 +740,4 @@ function repositoryGroups(rows, accountLabel) {
740
740
  export {
741
741
  SessionGitHubCapabilityCard
742
742
  };
743
- //# sourceMappingURL=chunk-W57QFLQD.js.map
743
+ //# sourceMappingURL=chunk-X6JIGNLI.js.map
@@ -20,7 +20,7 @@ import {
20
20
  import {
21
21
  OpenGeniMessagesProvider,
22
22
  useOpenGeniText
23
- } from "./chunk-S6WJ6TUT.js";
23
+ } from "./chunk-ZEVJGMNB.js";
24
24
 
25
25
  // src/provider.tsx
26
26
  import {
@@ -384,4 +384,4 @@ function reloadForContractMismatchOnce(mismatch) {
384
384
  export {
385
385
  OpenGeniProvider
386
386
  };
387
- //# sourceMappingURL=chunk-CKA4SJRK.js.map
387
+ //# sourceMappingURL=chunk-XIQDCQX7.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-CM7LVUKC.js";
5
5
  import {
6
6
  useOpenGeniText
7
- } from "./chunk-S6WJ6TUT.js";
7
+ } from "./chunk-ZEVJGMNB.js";
8
8
 
9
9
  // src/components/queue-surface-state.tsx
10
10
  import { Loader2Icon, RotateCwIcon } from "lucide-react";
@@ -100,4 +100,4 @@ export {
100
100
  QueueStoppingStatus,
101
101
  QueueErrorAlert
102
102
  };
103
- //# sourceMappingURL=chunk-AJ7PY4FJ.js.map
103
+ //# sourceMappingURL=chunk-Y3GCG6CA.js.map
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  BillingClassMark,
4
4
  PickerNavRow
5
- } from "./chunk-ZWACUOU5.js";
5
+ } from "./chunk-CDBGAAJY.js";
6
6
  import {
7
7
  MENU_CHECK_CLASS,
8
8
  MENU_LABEL_CLASS,
@@ -30,7 +30,7 @@ import {
30
30
  } from "./chunk-TXS65BB2.js";
31
31
  import {
32
32
  useOpenGeniText
33
- } from "./chunk-S6WJ6TUT.js";
33
+ } from "./chunk-ZEVJGMNB.js";
34
34
 
35
35
  // src/components/model-policy-picker-menu.tsx
36
36
  import { ArrowRightIcon, CheckIcon, SearchIcon, ZapIcon } from "lucide-react";
@@ -154,7 +154,14 @@ function ModelPolicyPickerMenu(props) {
154
154
  group.billingClass
155
155
  )),
156
156
  view.matchCount === 0 ? /* @__PURE__ */ jsx("p", { className: MENU_NOTE_CLASS, children: view.searching ? messages.noMatches : messages.noModels }) : null
157
- ] }) : props.connectModelsHref || rows.length > 0 ? /* @__PURE__ */ jsx(ConnectModelsPanel, { href: props.connectModelsHref, messages }) : /* @__PURE__ */ jsx("p", { className: MENU_NOTE_CLASS, children: messages.noModels })
157
+ ] }) : props.connectModelsHref || rows.length > 0 ? /* @__PURE__ */ jsx(
158
+ ConnectModelsPanel,
159
+ {
160
+ href: props.connectModelsHref,
161
+ claude: props.claudeSubscriptionAvailable === true,
162
+ messages
163
+ }
164
+ ) : /* @__PURE__ */ jsx("p", { className: MENU_NOTE_CLASS, children: messages.noModels })
158
165
  }
159
166
  ),
160
167
  view.anySelectable && selected && (view.unsupportedAttachments || props.allowModelOptions !== false && view.thinking) ? /* @__PURE__ */ jsxs("div", { className: "border-t border-og-border px-2.5 py-2.5", children: [
@@ -165,12 +172,19 @@ function ModelPolicyPickerMenu(props) {
165
172
  }
166
173
  );
167
174
  }
168
- var CONNECT_MODEL_OPTIONS = (t) => [
175
+ var CONNECT_MODEL_OPTIONS = (t, claude) => [
169
176
  {
170
177
  billingClass: "codex_subscription",
171
178
  title: t("modelPolicyPickerMenu.codex"),
172
179
  detail: "ChatGPT"
173
180
  },
181
+ ...claude ? [
182
+ {
183
+ billingClass: "claude_subscription",
184
+ title: t("modelPolicyPicker.claude"),
185
+ detail: "Anthropic"
186
+ }
187
+ ] : [],
174
188
  { billingClass: "supergrok_subscription", title: "SuperGrok", detail: "xAI" },
175
189
  {
176
190
  billingClass: "byok",
@@ -186,7 +200,7 @@ function ConnectModelsPanel(props) {
186
200
  /* @__PURE__ */ jsx("p", { className: "text-og-menu font-medium tracking-tight text-og-fg", children: props.messages.connectTitle }),
187
201
  /* @__PURE__ */ jsx("p", { className: "mt-1 text-og-control leading-snug text-og-fg-subtle", children: props.messages.connectBody })
188
202
  ] }),
189
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-1", children: CONNECT_MODEL_OPTIONS(t).map((option) => {
203
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-1", children: CONNECT_MODEL_OPTIONS(t, props.claude).map((option) => {
190
204
  const content = /* @__PURE__ */ jsxs(Fragment, { children: [
191
205
  /* @__PURE__ */ jsx("span", { className: "flex size-8 shrink-0 items-center justify-center rounded-og-md bg-og-surface-2 text-og-fg", children: /* @__PURE__ */ jsx(
192
206
  BillingClassMark,
@@ -201,7 +215,10 @@ function ConnectModelsPanel(props) {
201
215
  /* @__PURE__ */ jsx("span", { className: "block truncate text-og-control text-og-fg-subtle", children: option.detail })
202
216
  ] })
203
217
  ] });
204
- const className = "flex min-w-0 items-center gap-2 rounded-og-md px-1.5 py-1.5 outline-hidden transition-colors hover:bg-og-hover focus-visible:ring-2 focus-visible:ring-og-accent/40";
218
+ const className = (
219
+ // An odd last tile spans both columns instead of sitting alone.
220
+ "flex min-w-0 items-center gap-2 rounded-og-md px-1.5 py-1.5 outline-hidden transition-colors odd:last:col-span-2 hover:bg-og-hover focus-visible:ring-2 focus-visible:ring-og-accent/40"
221
+ );
205
222
  return props.href ? /* @__PURE__ */ jsx("a", { href: props.href, className, children: content }, option.title) : /* @__PURE__ */ jsx("div", { className, children: content }, option.title);
206
223
  }) }),
207
224
  props.href ? /* @__PURE__ */ jsxs(
@@ -353,4 +370,4 @@ export {
353
370
  ModelPolicyPickerMenu,
354
371
  ModelPolicyPickerPopover
355
372
  };
356
- //# sourceMappingURL=chunk-2K27S6LK.js.map
373
+ //# sourceMappingURL=chunk-Y565N5ZJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/model-policy-picker-menu.tsx"],"sourcesContent":["import type { ClientModel, LatencyMode, ReasoningEffort } from \"@opengeni/sdk\";\nimport { ArrowRightIcon, CheckIcon, SearchIcon, ZapIcon } from \"lucide-react\";\nimport { useRef, useState, type RefObject, type CSSProperties } from \"react\";\nimport { Popover, RadioGroup } from \"radix-ui\";\nimport { containedPortal } from \"../ui/portal-container\";\nimport { cn } from \"../lib/cn\";\nimport {\n MENU_CHECK_CLASS,\n MENU_LABEL_CLASS,\n MENU_NOTE_CLASS,\n MENU_SURFACE_CLASS,\n} from \"../lib/menu-styles\";\nimport { labelReasoningEffort, type PickerModelRow } from \"../model-policy\";\nimport {\n compactEffortLabel,\n groupPresentationFor,\n modelPickerChoice,\n modelPickerMenuView,\n} from \"../model-picker-model\";\nimport {\n BillingClassMark,\n defaultModelPolicyPickerMessages,\n PickerNavRow,\n type ModelPolicyPickerProps,\n} from \"./model-policy-picker\";\nimport { ModelMark } from \"./model-mark\";\nimport { useOpenGeniText, type OpenGeniText } from \"../messages/runtime\";\n\nconst PopoverContainedPortal = containedPortal(Popover.Portal);\ntype ClientPickerModelRow = PickerModelRow<ClientModel>;\n\n/** Model selection stays flat; reasoning never becomes a navigation destination. */\nexport function ModelPolicyPickerMenu(props: ModelPolicyPickerProps) {\n const t = useOpenGeniText();\n const [query, setQuery] = useState(\"\");\n const view = modelPickerMenuView(t, props, query);\n const { messages, rows, groups } = view;\n const selected = view.selected;\n const choose = (row: ClientPickerModelRow) => {\n if (props.disabled) return;\n const choice = modelPickerChoice(props, row);\n if (!choice) return;\n if (choice.model !== null) props.onModelChange(choice.model);\n // Hosts may commit the combined model/effort draft through this callback.\n props.onEffortChange(choice.effort);\n if (choice.latencyMode !== null) props.onLatencyModeChange(choice.latencyMode);\n };\n const modelRow = (row: ClientPickerModelRow) => (\n <PickerNavRow\n key={row.id}\n icon={\n props.collapseScopes === false ? undefined : (\n <ModelMark model={row.catalog} className=\"size-4 text-og-fg-muted\" />\n )\n }\n label={row.label}\n hint={row.unavailableReason ?? row.fundingHint}\n disabled={props.disabled || !row.selectable}\n title={[row.label, row.unavailableReason ?? row.fundingHint].filter(Boolean).join(\" · \")}\n active={row.selectable && row.id === props.model}\n showChevron={false}\n trailing={\n row.catalog.cost === \"free\" || row.id === props.model ? (\n <span className=\"flex items-center gap-2\">\n {row.catalog.cost === \"free\" ? (\n <span className=\"rounded-full bg-og-surface-2 px-1.5 py-0.5 text-og-control text-og-fg-muted\">\n {messages.free}\n </span>\n ) : null}\n {row.id === props.model ? (\n <CheckIcon className={MENU_CHECK_CLASS} aria-label={messages.selected} />\n ) : null}\n </span>\n ) : null\n }\n testId={`model-picker-choice-${row.id}`}\n onClick={() => choose(row)}\n />\n );\n return (\n <div\n data-testid=\"model-picker-menu\"\n className=\"flex min-h-0 flex-col\"\n onKeyDown={(event) => {\n if (\n !(event.target instanceof HTMLButtonElement) ||\n ![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(event.key)\n )\n return;\n const buttons = Array.from(\n event.currentTarget.querySelectorAll<HTMLButtonElement>(\n '[data-testid^=\"model-picker-choice-\"]:not(:disabled)',\n ),\n );\n const index = buttons.indexOf(event.target);\n if (index < 0) return;\n event.preventDefault();\n const next =\n event.key === \"Home\"\n ? 0\n : event.key === \"End\"\n ? buttons.length - 1\n : (index + (event.key === \"ArrowDown\" ? 1 : -1) + buttons.length) % buttons.length;\n buttons[next]?.focus();\n }}\n >\n {rows.some((row) => row.selectable) ? (\n <div className=\"border-b border-og-border py-1\">\n <label className=\"og-model-policy-search flex items-center gap-2 px-2.5 py-0.5\">\n <SearchIcon className=\"size-4 shrink-0 text-og-fg-subtle\" aria-hidden />\n <input\n aria-label={messages.searchLabel}\n placeholder={messages.searchPlaceholder}\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={(event) => {\n if (event.key !== \"Escape\" && event.key !== \"Tab\") event.stopPropagation();\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n event.currentTarget\n .closest('[data-testid=\"model-picker-menu\"]')\n ?.querySelector<HTMLButtonElement>(\"button:not(:disabled)\")\n ?.focus();\n }\n }}\n className=\"og-model-policy-search-input h-8 min-w-0 flex-1 bg-transparent text-og-menu text-og-fg outline-hidden placeholder:text-og-fg-subtle\"\n />\n </label>\n </div>\n ) : null}\n {props.error ? (\n <p className={cn(MENU_NOTE_CLASS, \"text-og-sm text-og-status-failed\")} role=\"alert\">\n {props.error}\n </p>\n ) : null}\n <div\n className=\"min-h-0 flex-1 overflow-y-auto overscroll-contain py-1\"\n data-testid=\"model-picker-models\"\n >\n {props.loading ? (\n // Rows at the menu's row height, never a sentence, so nothing jumps.\n <div role=\"status\" aria-label={messages.loading}>\n {[58, 44, 66, 50].map((width) => (\n <div key={width} aria-hidden=\"true\" className=\"flex h-8 items-center gap-3 px-2.5\">\n <span className=\"size-4 shrink-0 animate-pulse rounded bg-og-surface-2\" />\n <span\n className=\"h-2.5 animate-pulse rounded bg-og-surface-2\"\n style={{ width: `${width}%` }}\n />\n </div>\n ))}\n </div>\n ) : rows.some((row) => row.selectable) ? (\n <>\n {groups.map((group) => (\n <section\n key={group.billingClass}\n aria-label={group.label}\n className=\"[&+section]:mt-1.5 [&+section]:border-t [&+section]:border-og-border [&+section]:pt-1.5\"\n >\n <div className={cn(MENU_LABEL_CLASS, \"flex items-center gap-2\")}>\n <BillingClassMark\n billingClass={group.billingClass}\n presentation={groupPresentationFor(props, group.billingClass)}\n aria-label=\"\"\n />\n <span className=\"min-w-0 break-words\">{group.label}</span>\n </div>\n {group.description ? (\n <p className=\"break-words px-2.5 pb-1 text-og-sm text-og-fg-muted\">\n {group.description}\n </p>\n ) : null}\n {group.rows.map(modelRow)}\n </section>\n ))}\n {view.matchCount === 0 ? (\n <p className={MENU_NOTE_CLASS}>\n {view.searching ? messages.noMatches : messages.noModels}\n </p>\n ) : null}\n </>\n ) : props.connectModelsHref || rows.length > 0 ? (\n <ConnectModelsPanel\n href={props.connectModelsHref}\n claude={props.claudeSubscriptionAvailable === true}\n messages={messages}\n />\n ) : (\n <p className={MENU_NOTE_CLASS}>{messages.noModels}</p>\n )}\n </div>\n {view.anySelectable &&\n selected &&\n (view.unsupportedAttachments || (props.allowModelOptions !== false && view.thinking)) ? (\n <div className=\"border-t border-og-border px-2.5 py-2.5\">\n {view.unsupportedAttachments ? (\n <p className=\"pb-1.5 text-og-control leading-relaxed text-og-fg-subtle\">\n {messages.unsupportedAttachments}\n </p>\n ) : null}\n {props.allowModelOptions !== false ? <ModelThinkingControls {...props} /> : null}\n </div>\n ) : null}\n </div>\n );\n}\n\nconst CONNECT_MODEL_OPTIONS = (\n t: OpenGeniText,\n claude: boolean,\n): Array<{\n billingClass:\n | \"codex_subscription\"\n | \"claude_subscription\"\n | \"supergrok_subscription\"\n | \"byok\"\n | \"external\";\n title: string;\n detail: string;\n}> => [\n {\n billingClass: \"codex_subscription\",\n title: t(\"modelPolicyPickerMenu.codex\"),\n detail: \"ChatGPT\",\n },\n ...(claude\n ? [\n {\n billingClass: \"claude_subscription\" as const,\n title: t(\"modelPolicyPicker.claude\"),\n detail: \"Anthropic\",\n },\n ]\n : []),\n { billingClass: \"supergrok_subscription\", title: \"SuperGrok\", detail: \"xAI\" },\n {\n billingClass: \"byok\",\n title: t(\"modelPolicyPickerMenu.aiGateway\"),\n detail: t(\"modelPolicyPickerMenu.vercel\"),\n },\n { billingClass: \"external\", title: \"OpenRouter\", detail: t(\"modelPolicyPickerMenu.apiKey\") },\n];\n\nfunction ConnectModelsPanel(props: {\n href: string | undefined;\n claude: boolean;\n messages: ReturnType<typeof defaultModelPolicyPickerMessages>;\n}) {\n const t = useOpenGeniText();\n return (\n <div className=\"px-1.5 pb-1.5 pt-2\" data-testid=\"model-picker-connect\">\n <div className=\"px-1.5 pb-3\">\n <p className=\"text-og-menu font-medium tracking-tight text-og-fg\">\n {props.messages.connectTitle}\n </p>\n <p className=\"mt-1 text-og-control leading-snug text-og-fg-subtle\">\n {props.messages.connectBody}\n </p>\n </div>\n <div className=\"grid grid-cols-2 gap-1\">\n {CONNECT_MODEL_OPTIONS(t, props.claude).map((option) => {\n const content = (\n <>\n <span className=\"flex size-8 shrink-0 items-center justify-center rounded-og-md bg-og-surface-2 text-og-fg\">\n <BillingClassMark\n billingClass={option.billingClass}\n aria-label=\"\"\n className=\"size-4 text-og-fg\"\n />\n </span>\n <span className=\"min-w-0\">\n <span className=\"block truncate text-og-control font-medium text-og-fg\">\n {option.title}\n </span>\n <span className=\"block truncate text-og-control text-og-fg-subtle\">\n {option.detail}\n </span>\n </span>\n </>\n );\n const className =\n // An odd last tile spans both columns instead of sitting alone.\n \"flex min-w-0 items-center gap-2 rounded-og-md px-1.5 py-1.5 outline-hidden transition-colors odd:last:col-span-2 hover:bg-og-hover focus-visible:ring-2 focus-visible:ring-og-accent/40\";\n return props.href ? (\n <a key={option.title} href={props.href} className={className}>\n {content}\n </a>\n ) : (\n <div key={option.title} className={className}>\n {content}\n </div>\n );\n })}\n </div>\n {props.href ? (\n <a\n href={props.href}\n className=\"mt-2 flex h-9 w-full items-center justify-center gap-1.5 rounded-og-md border border-og-primary-border bg-og-primary text-og-primary-fg hover:bg-og-primary-hover text-og-control font-medium outline-hidden transition-colors focus-visible:ring-2 focus-visible:ring-og-accent/40\"\n >\n {props.messages.connectAction}\n <ArrowRightIcon className=\"size-3.5\" aria-hidden />\n </a>\n ) : (\n <p className=\"px-1.5 pt-3 text-og-control text-og-fg-subtle\">{props.messages.noModels}</p>\n )}\n </div>\n );\n}\n\nfunction ModelThinkingControls(props: ModelPolicyPickerProps) {\n const t = useOpenGeniText();\n const view = modelPickerMenuView(t, props, \"\");\n const thinking = view.thinking;\n if (!view.selected || !thinking) return null;\n const messages = view.messages;\n const efforts = thinking.efforts;\n const showThinking = thinking.showThinking;\n const showFast = thinking.showFast;\n const speeds = thinking.speeds;\n const selectedSpeed = speeds?.find((speed) => speed.id === props.latencyMode) ?? speeds?.[0];\n return (\n <div className=\"space-y-2 text-og-control\" data-testid=\"model-picker-reasoning\">\n {showThinking || showFast ? (\n <div className=\"flex min-h-7 items-center justify-between gap-3\">\n {showThinking ? <span className=\"text-og-fg-subtle\">{messages.thinking}</span> : <span />}\n {showFast ? (\n <button\n type=\"button\"\n data-testid=\"model-picker-fast\"\n disabled={props.disabled || thinking.disabled}\n aria-pressed={props.latencyMode === \"fast\"}\n title={messages.fast + \" · \" + messages.fastRateHint}\n onClick={() =>\n props.onLatencyModeChange(props.latencyMode === \"fast\" ? \"standard\" : \"fast\")\n }\n className=\"flex min-h-8 shrink-0 items-center gap-1.5 whitespace-nowrap rounded-og-sm px-2 text-og-fg-muted hover:bg-og-hover focus-visible:ring-2 focus-visible:ring-og-accent/40 disabled:opacity-50\"\n >\n <ZapIcon className={cn(\"size-3.5\", props.latencyMode === \"fast\" && \"fill-current\")} />\n {messages.fast}\n <span className=\"text-og-fg-subtle\">{messages.fastRateHint}</span>\n </button>\n ) : null}\n </div>\n ) : null}\n {showThinking ? (\n <RadioGroup.Root\n aria-label={messages.thinkingEffort}\n value={thinking.value}\n disabled={props.disabled || thinking.disabled}\n onValueChange={(value) => props.onEffortChange(value as ReasoningEffort)}\n orientation=\"horizontal\"\n className=\"flex flex-wrap gap-0.5 rounded-og-md bg-og-surface-2 p-0.5\"\n >\n {efforts.map((effort) => (\n <RadioGroup.Item\n key={effort}\n value={effort}\n aria-label={labelReasoningEffort(t, effort)}\n title={labelReasoningEffort(t, effort)}\n className=\"min-h-8 min-w-10 flex-1 cursor-pointer whitespace-nowrap rounded-og-sm px-1.5 text-og-control text-og-fg-muted outline-hidden transition-colors hover:text-og-fg focus-visible:ring-2 focus-visible:ring-og-accent/40 data-[state=checked]:bg-og-surface-1 data-[state=checked]:text-og-fg data-[state=checked]:shadow-sm disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {compactEffortLabel(t, effort, labelReasoningEffort(t, effort))}\n </RadioGroup.Item>\n ))}\n </RadioGroup.Root>\n ) : null}\n {speeds && selectedSpeed ? (\n <div className=\"space-y-2 pt-1\" data-testid=\"model-picker-speed\">\n <div className=\"flex min-h-7 items-center justify-between gap-3\">\n <span className=\"text-og-fg-subtle\">{messages.speed}</span>\n {selectedSpeed.hint ? (\n <span className=\"text-og-fg-subtle\">{selectedSpeed.hint}</span>\n ) : null}\n </div>\n <RadioGroup.Root\n aria-label={messages.speed}\n value={selectedSpeed.id}\n disabled={props.disabled || thinking.disabled}\n onValueChange={(value) => props.onLatencyModeChange(value as LatencyMode)}\n orientation=\"horizontal\"\n className=\"flex flex-wrap gap-0.5 rounded-og-md bg-og-surface-2 p-0.5\"\n >\n {speeds.map((speed) => (\n <RadioGroup.Item\n key={speed.id}\n value={speed.id}\n aria-label={speed.hint ? `${speed.label} · ${speed.hint}` : speed.label}\n title={speed.hint ? `${speed.label} · ${speed.hint}` : speed.label}\n className=\"flex min-h-8 min-w-10 flex-1 cursor-pointer items-center justify-center gap-1 whitespace-nowrap rounded-og-sm px-1.5 text-og-control text-og-fg-muted outline-hidden transition-colors hover:text-og-fg focus-visible:ring-2 focus-visible:ring-og-accent/40 data-[state=checked]:bg-og-surface-1 data-[state=checked]:text-og-fg data-[state=checked]:shadow-sm disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {speed.id === \"standard\" ? null : (\n <ZapIcon\n aria-hidden\n className={cn(\n \"size-3.5 shrink-0\",\n speed.id === selectedSpeed.id && \"fill-current\",\n )}\n />\n )}\n {speed.label}\n </RadioGroup.Item>\n ))}\n </RadioGroup.Root>\n </div>\n ) : null}\n </div>\n );\n}\n\nexport function ModelPolicyPickerPopover(\n props: ModelPolicyPickerProps & {\n anchor: RefObject<HTMLButtonElement | null>;\n contentId: string;\n portalStyle: CSSProperties;\n },\n) {\n const t = useOpenGeniText();\n const outside = useRef(false);\n const messages = { ...defaultModelPolicyPickerMessages(t), ...props.messages };\n return (\n <Popover.Root open onOpenChange={(open) => props.onOpenChange?.(open)}>\n <Popover.Anchor virtualRef={props.anchor} />\n <PopoverContainedPortal>\n <Popover.Content\n id={props.contentId}\n aria-label={messages.label}\n align=\"start\"\n side={props.menuSide ?? \"bottom\"}\n sideOffset={8}\n collisionPadding={12}\n onInteractOutside={(event) => {\n if (props.anchor.current?.contains(event.target as Node)) event.preventDefault();\n else outside.current = true;\n }}\n onCloseAutoFocus={(event) => {\n event.preventDefault();\n if (!outside.current) props.anchor.current?.focus();\n }}\n className={cn(\n MENU_SURFACE_CLASS,\n \"og-root og-model-policy-menu z-50 flex max-h-[min(32rem,var(--radix-popover-content-available-height))] w-[22rem] max-w-[calc(100vw-16px)] flex-col overflow-hidden p-[var(--og-model-picker-menu-padding)]\",\n props.contentClassName,\n )}\n style={{ ...props.portalStyle, ...props.contentStyle }}\n data-testid=\"model-picker-content\"\n >\n <ModelPolicyPickerMenu {...props} />\n </Popover.Content>\n </PopoverContainedPortal>\n </Popover.Root>\n );\n}\n"],"mappings":"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","names":[]}
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-LT2CPZRB.js";
6
6
  import {
7
7
  MarkdownText
8
- } from "./chunk-GMVKCEBG.js";
8
+ } from "./chunk-MY6QEDZ2.js";
9
9
  import {
10
10
  formatTimestamp
11
11
  } from "./chunk-IKQMSROV.js";
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-HMU5IELG.js";
15
15
  import {
16
16
  UserMessageBody
17
- } from "./chunk-DNYD7AUG.js";
17
+ } from "./chunk-4BOLIZ7Y.js";
18
18
 
19
19
  // src/app/components/session/banners.tsx
20
20
  import { AlertTriangleIcon, ArrowLeftIcon, AudioLinesIcon, TerminalIcon } from "lucide-react";
@@ -109,4 +109,4 @@ export {
109
109
  TerminalSessionArchive,
110
110
  UserMessageBody2 as UserMessageBody
111
111
  };
112
- //# sourceMappingURL=chunk-ZRB4M3GG.js.map
112
+ //# sourceMappingURL=chunk-YC5KH7ZB.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  t
4
- } from "./chunk-BPD4IJBG.js";
4
+ } from "./chunk-CG6CJMIS.js";
5
5
  import {
6
6
  orgLabel
7
7
  } from "./chunk-NRP4REXE.js";
@@ -47,4 +47,4 @@ export {
47
47
  authorizedWorkspaceFromList,
48
48
  resolveWorkspaceScopeContext
49
49
  };
50
- //# sourceMappingURL=chunk-4RY64KQY.js.map
50
+ //# sourceMappingURL=chunk-YJUKLLNP.js.map
@@ -7,13 +7,13 @@ import {
7
7
  useInteractionInterventions,
8
8
  useInteractionInvalidation,
9
9
  useViewerMenuDismiss
10
- } from "./chunk-PEGNFZ3F.js";
10
+ } from "./chunk-P5S777YI.js";
11
11
  import {
12
12
  copyTextToClipboard
13
13
  } from "./chunk-PEHTX3V7.js";
14
14
  import {
15
15
  DesktopViewer
16
- } from "./chunk-WN2MIB4Q.js";
16
+ } from "./chunk-22V2QCEM.js";
17
17
  import {
18
18
  usePageLiveActivity
19
19
  } from "./chunk-2KO2G3RI.js";
@@ -34,7 +34,7 @@ import {
34
34
  } from "./chunk-TXS65BB2.js";
35
35
  import {
36
36
  useOpenGeniText
37
- } from "./chunk-S6WJ6TUT.js";
37
+ } from "./chunk-ZEVJGMNB.js";
38
38
 
39
39
  // src/components/computer-viewer.tsx
40
40
  import { interactionControlFailureFromError } from "@opengeni/sdk/interaction";
@@ -2980,4 +2980,4 @@ export {
2980
2980
  ComputerViewer,
2981
2981
  computerKey
2982
2982
  };
2983
- //# sourceMappingURL=chunk-24POWVUY.js.map
2983
+ //# sourceMappingURL=chunk-ZDJNRRVS.js.map
@@ -1572,7 +1572,7 @@ var englishMessages = {
1572
1572
  "modelPolicy.billedToTheWorkspaceProvider": "Billed to the workspace provider account",
1573
1573
  "modelPolicy.billedToTheWorkspaceVercel": "Billed to the workspace Vercel account",
1574
1574
  "modelPolicy.blockedByWorkspacePolicy": "Blocked by workspace policy",
1575
- "modelPolicy.claudeSubscription": "Claude subscription",
1575
+ "modelPolicy.claudeSubscription": "Claude",
1576
1576
  "modelPolicy.claudeSubscriptionExternalBilling": "Claude subscription \xB7 external billing",
1577
1577
  "modelPolicy.codex": "Codex",
1578
1578
  "modelPolicy.codexSubscriptionExternalBilling": "Codex subscription \xB7 external billing",
@@ -3870,4 +3870,4 @@ export {
3870
3870
  SingleSendWording,
3871
3871
  useOpenGeniLocale
3872
3872
  };
3873
- //# sourceMappingURL=chunk-S6WJ6TUT.js.map
3873
+ //# sourceMappingURL=chunk-ZEVJGMNB.js.map