@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
@@ -0,0 +1,19 @@
1
+ /** The catalog fields that name a connector's domains and logo. */
2
+ export type ConnectorLogoSource = {
3
+ providerDomain?: string | null | undefined;
4
+ mcpUrl?: string | null | undefined;
5
+ connectionRef?: {
6
+ providerDomain?: string | null | undefined;
7
+ } | null | undefined;
8
+ logoAssetPath?: string | null | undefined;
9
+ };
10
+ /** "WWW.Linear.app " → "linear.app". */
11
+ export declare function normalizeConnectorDomain(domain: string): string;
12
+ /**
13
+ * Every domain each catalog entry is known by, mapped to its logo URL. The
14
+ * provider's own domain is claimed first across the whole catalog, so another
15
+ * entry's server host never takes over a provider's logo.
16
+ */
17
+ export declare function connectorLogoIndex(catalog: readonly ConnectorLogoSource[], logoUrl: (logoAssetPath: string | null | undefined) => string | null | undefined): ReadonlyMap<string, string>;
18
+ /** The logo for a connector domain from an index built by `connectorLogoIndex`. */
19
+ export declare function connectorLogo(index: ReadonlyMap<string, string>, domain: string | null | undefined): string | null;
@@ -23,7 +23,7 @@ import {
23
23
  } from "./chunk-TXS65BB2.js";
24
24
  import {
25
25
  useOpenGeniText
26
- } from "./chunk-S6WJ6TUT.js";
26
+ } from "./chunk-ZEVJGMNB.js";
27
27
 
28
28
  // src/components/timeline-annotation-markers.tsx
29
29
  import { useLayoutEffect, useState } from "react";
@@ -173,4 +173,4 @@ export {
173
173
  TimelineAnnotationMarkers,
174
174
  timeline_annotation_markers_default as default
175
175
  };
176
- //# sourceMappingURL=timeline-annotation-markers-OJYKHBEO.js.map
176
+ //# sourceMappingURL=timeline-annotation-markers-NDHS7MCK.js.map
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-XEA5BCMA.js";
18
18
  import {
19
19
  useOpenGeniText
20
- } from "./chunk-S6WJ6TUT.js";
20
+ } from "./chunk-ZEVJGMNB.js";
21
21
 
22
22
  // src/components/timeline-annotation-selection.tsx
23
23
  import { QuoteIcon } from "lucide-react";
@@ -201,4 +201,4 @@ export {
201
201
  TimelineAnnotationSelection,
202
202
  timeline_annotation_selection_default as default
203
203
  };
204
- //# sourceMappingURL=timeline-annotation-selection-6OAZLXFU.js.map
204
+ //# sourceMappingURL=timeline-annotation-selection-DRQSTJOV.js.map
@@ -4,7 +4,7 @@ import {
4
4
  AnnotationNoteField,
5
5
  AnnotationNotePreview,
6
6
  AnnotationQuoteSourceButton
7
- } from "./chunk-QLDMF7MH.js";
7
+ } from "./chunk-LC5HE7PZ.js";
8
8
  import {
9
9
  cssEscapeAttribute
10
10
  } from "./chunk-H3LIIAGE.js";
@@ -25,7 +25,7 @@ import {
25
25
  import "./chunk-TXS65BB2.js";
26
26
  import {
27
27
  useOpenGeniText
28
- } from "./chunk-S6WJ6TUT.js";
28
+ } from "./chunk-ZEVJGMNB.js";
29
29
 
30
30
  // src/components/timeline-annotations-dialog.tsx
31
31
  import { XIcon } from "lucide-react";
@@ -280,4 +280,4 @@ export {
280
280
  TimelineAnnotationsDialog,
281
281
  timeline_annotations_dialog_default as default
282
282
  };
283
- //# sourceMappingURL=timeline-annotations-dialog-5M6DP5FX.js.map
283
+ //# sourceMappingURL=timeline-annotations-dialog-G6J5ZJKN.js.map
@@ -4,6 +4,8 @@ export { clusterIsSettled, compactedLandmarkCount, durationBetween, flattenActiv
4
4
  export type { ActivityGroup, ReadableWorkOptions, TurnGroup } from "./timeline/work-presentation.js";
5
5
  export { timelineGroupContainsPresentedImage } from "./timeline/presented-image.js";
6
6
  export { mcpToolLeaf, toolDisplayName } from "./timeline/tool-display-name.js";
7
+ export { connectorLogo, connectorLogoIndex, normalizeConnectorDomain, } from "./timeline/connector-logo-index.js";
8
+ export type { ConnectorLogoSource } from "./timeline/connector-logo-index.js";
7
9
  export { BUILT_IN_TOOL_STEP_NAMES, builtInToolStep, builtInToolStepLabel, TOOL_STEP_IDS, toolStepLabel, toolStepPhase, } from "./timeline/tool-steps.js";
8
10
  export type { ToolStepId, ToolStepPhase } from "./timeline/tool-steps.js";
9
11
  export { rawTypeOf } from "./timeline/registry.js";
@@ -3,7 +3,12 @@ import {
3
3
  notificationPlainText,
4
4
  parseNotificationInline,
5
5
  parseNotificationText
6
- } from "./chunk-LY6727IF.js";
6
+ } from "./chunk-PPSVFNEA.js";
7
+ import {
8
+ connectorLogo,
9
+ connectorLogoIndex,
10
+ normalizeConnectorDomain
11
+ } from "./chunk-GLCOKWLH.js";
7
12
  import {
8
13
  QUESTION_NAV_HIDDEN_PX,
9
14
  QUESTION_NAV_MARGIN_PX,
@@ -168,6 +173,8 @@ export {
168
173
  callStepPhase,
169
174
  clusterIsSettled,
170
175
  compactedLandmarkCount,
176
+ connectorLogo,
177
+ connectorLogoIndex,
171
178
  createTurnSummaryContext,
172
179
  defaultHumanInputFormMessages,
173
180
  durationBetween,
@@ -190,6 +197,7 @@ export {
190
197
  matchingQuoteInSource,
191
198
  mcpToolLeaf,
192
199
  namedAgentTitle,
200
+ normalizeConnectorDomain,
193
201
  noticeDisplayText,
194
202
  noticeIsResolvedApproval,
195
203
  noticeTone,
@@ -5,7 +5,7 @@ import {
5
5
  RowIndicator,
6
6
  RowList,
7
7
  useRowListVariant
8
- } from "../chunk-MM7OKOTE.js";
8
+ } from "../chunk-UBXHP224.js";
9
9
  import "../chunk-FQQEZUSN.js";
10
10
  import "../chunk-ZMBJPN4T.js";
11
11
  import "../chunk-HY7EYWIG.js";
package/dist/usage.js CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  summarizeUsage,
14
14
  usagePercentLabel,
15
15
  useUsage
16
- } from "./chunk-7OIBLMDP.js";
16
+ } from "./chunk-RAQISW42.js";
17
17
  import {
18
18
  DEFAULT_ALLOWANCE_LABELS,
19
19
  DEFAULT_SESSION_USAGE_LIMIT_LABELS,
@@ -30,7 +30,7 @@ import "./chunk-2KO2G3RI.js";
30
30
  import "./chunk-CM7LVUKC.js";
31
31
  import "./chunk-TVQCDDSZ.js";
32
32
  import "./chunk-TXS65BB2.js";
33
- import "./chunk-S6WJ6TUT.js";
33
+ import "./chunk-ZEVJGMNB.js";
34
34
  export {
35
35
  DEFAULT_ALLOWANCE_LABELS,
36
36
  DEFAULT_SESSION_USAGE_LIMIT_LABELS,
package/dist/workbench.js CHANGED
@@ -6,21 +6,21 @@ import {
6
6
  enableCodeEditor
7
7
  } from "./chunk-TOTNIUZK.js";
8
8
  import "./chunk-YSRBFJMQ.js";
9
- import "./chunk-SJPAKWWP.js";
9
+ import "./chunk-2BISI664.js";
10
10
  import {
11
11
  enableDesktopViewer
12
12
  } from "./chunk-QIOARE4I.js";
13
- import "./chunk-WN2MIB4Q.js";
13
+ import "./chunk-22V2QCEM.js";
14
14
  import "./chunk-ZUWF4NF7.js";
15
15
  import {
16
16
  enableSandboxTerminal
17
17
  } from "./chunk-FPS7ARET.js";
18
- import "./chunk-4XO346BW.js";
18
+ import "./chunk-4FBJFQFU.js";
19
19
  import "./chunk-QV3DJVRZ.js";
20
20
  import "./chunk-TNEZNMSN.js";
21
21
  import "./chunk-5I4VRWBB.js";
22
22
  import "./chunk-TXS65BB2.js";
23
- import "./chunk-S6WJ6TUT.js";
23
+ import "./chunk-ZEVJGMNB.js";
24
24
 
25
25
  // src/workbench.ts
26
26
  function enableWorkbench() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeni/react",
3
- "version": "4.6.1",
3
+ "version": "4.6.2-canary.39854174564001",
4
4
  "description": "React hooks and styled components for Opengeni: live session streaming, chat composer, message timeline, session status, and fleet views — token-themed (CSS variables), dark-first, built on Tailwind v4 + Radix + Motion.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -251,9 +251,9 @@
251
251
  "@dnd-kit/utilities": "3.2.2",
252
252
  "@fontsource-variable/noto-sans-arabic": "5.2.10",
253
253
  "@fontsource-variable/noto-sans-jp": "5.2.10",
254
- "@opengeni/connect": "4.6.1",
255
- "@opengeni/contracts": "4.6.1",
256
- "@opengeni/sdk": "4.6.1",
254
+ "@opengeni/connect": "4.6.2-canary.39854174564001",
255
+ "@opengeni/contracts": "4.6.2-canary.39854174564001",
256
+ "@opengeni/sdk": "4.6.2-canary.39854174564001",
257
257
  "@tanstack/react-virtual": "^3.14.11",
258
258
  "class-variance-authority": "^0.7.1",
259
259
  "clsx": "^2.1.1",
@@ -34,6 +34,7 @@ export function nativeCatalogProviderId(
34
34
  if (item.kind !== "mcp") return null;
35
35
  const url = item.mcpUrl ?? item.endpointUrl;
36
36
  if (url === "https://gmailmcp.googleapis.com/mcp/v1") return "gmail";
37
+ if (url === "https://drivemcp.googleapis.com/mcp/v1") return "google-drive";
37
38
  if (url === "https://mcp.slack.com/mcp") return "slack-personal";
38
39
  return null;
39
40
  }
@@ -270,3 +270,70 @@ describe("shared capability connection lifecycle", () => {
270
270
  });
271
271
  });
272
272
  });
273
+
274
+ test("Drive actions use the dedicated Connect attempt and never generic OAuth or early enable", async () => {
275
+ const originalWindow = Object.getOwnPropertyDescriptor(globalThis, "window");
276
+ const saved = new Map<string, string>();
277
+ Object.defineProperty(globalThis, "window", {
278
+ configurable: true,
279
+ value: {
280
+ location: { href: "https://app.example/capabilities" },
281
+ sessionStorage: {
282
+ setItem: (key: string, value: string) => saved.set(key, value),
283
+ getItem: (key: string) => saved.get(key) ?? null,
284
+ removeItem: (key: string) => saved.delete(key),
285
+ },
286
+ },
287
+ });
288
+ try {
289
+ const drive = CapabilityCatalogItem.parse({
290
+ ...item,
291
+ id: "drive",
292
+ authKind: "oauth2",
293
+ mcpUrl: "https://drivemcp.googleapis.com/mcp/v1",
294
+ providerDomain: "drivemcp.googleapis.com",
295
+ });
296
+ const beginConnect = mock(async () => ({
297
+ id: "drive-attempt",
298
+ revision: 1,
299
+ state: "credential_input",
300
+ }));
301
+ const advanceConnectAttempt = mock(async () => ({
302
+ id: "drive-attempt",
303
+ nextAction: { type: "authorize", url: "https://accounts.google.com/consent" },
304
+ }));
305
+ const startConnectionOAuth = mock(async () => {
306
+ throw new Error("Generic OAuth must not run");
307
+ });
308
+ const h = harness({
309
+ beginConnect,
310
+ connectTransport: () => ({ advance: advanceConnectAttempt }),
311
+ startConnectionOAuth,
312
+ });
313
+ await performCapabilityAction(
314
+ { ...h.options, item: drive, connectReturnUrl: "https://app.example/capabilities" },
315
+ {
316
+ type: "reconnect_oauth",
317
+ item: drive,
318
+ ownership: "personal",
319
+ connectionId: "existing",
320
+ connectionWorkspaceId: "account-workspace",
321
+ },
322
+ );
323
+ expect(beginConnect).toHaveBeenCalledWith(
324
+ "account-workspace",
325
+ expect.objectContaining({
326
+ providerId: "google-drive",
327
+ reconnectAccountId: "existing",
328
+ ownership: "personal",
329
+ }),
330
+ );
331
+ expect(startConnectionOAuth).not.toHaveBeenCalled();
332
+ expect(h.enableCapability).not.toHaveBeenCalled();
333
+ expect(h.options.redirect).toHaveBeenCalledWith("https://accounts.google.com/consent");
334
+ expect(saved.size).toBe(1);
335
+ } finally {
336
+ if (originalWindow) Object.defineProperty(globalThis, "window", originalWindow);
337
+ else Reflect.deleteProperty(globalThis, "window");
338
+ }
339
+ });
@@ -15,6 +15,7 @@ import {
15
15
  type IntegrationClass,
16
16
  type IntegrationConnectMethod,
17
17
  } from "../../lib/integration-connect-analytics";
18
+ import { beginDriveConnect, DRIVE_MCP_URL } from "../../lib/drive-connect-return";
18
19
  import { startMcpOAuthWithTimeout } from "../../lib/mcp-oauth";
19
20
  import { toast } from "../../lib/toast";
20
21
 
@@ -132,6 +133,33 @@ async function performCapabilityActionUntracked(
132
133
  );
133
134
  }
134
135
 
136
+ // The built-in Drive action uses a server-owned Connect provider identity.
137
+ // Custom MCP requests continue through the generic OAuth route below.
138
+ if (
139
+ ["oauth", "add_oauth_account", "reconnect_oauth"].includes(action.type) &&
140
+ (item.mcpUrl ?? item.endpointUrl) === DRIVE_MCP_URL
141
+ ) {
142
+ if (!("ownership" in action) || action.ownership !== "personal")
143
+ throw new Error("Google Drive connections must be personal-owned.");
144
+ const persisted = await persistIfRegistry(item, registry);
145
+ const target = new URL(returnPathFor(persisted.id), connectReturnUrl ?? window.location.href);
146
+ const authorizationUrl = await beginDriveConnect({
147
+ client,
148
+ workspaceId,
149
+ itemId: persisted.id,
150
+ returnUrl: target.toString(),
151
+ ...(action.type === "reconnect_oauth" && action.connectionId
152
+ ? { reconnectAccountId: action.connectionId }
153
+ : {}),
154
+ ...(action.type === "reconnect_oauth" && action.connectionWorkspaceId
155
+ ? { connectionWorkspaceId: action.connectionWorkspaceId }
156
+ : {}),
157
+ storage: window.sessionStorage,
158
+ });
159
+ redirect(authorizationUrl);
160
+ return;
161
+ }
162
+
135
163
  if (action.type === "install_skill") {
136
164
  if (!canManageSkills) {
137
165
  throw new Error("You need permission to manage workspace documents to install Skills.");
@@ -5,7 +5,7 @@
5
5
  * Control (and the chat being switched to) behaves exactly as without it.
6
6
  */
7
7
  import { MessageSquareIcon, PinIcon, type LucideIcon } from "lucide-react";
8
- import { useEffect, useRef } from "react";
8
+ import { Fragment, useEffect, useRef } from "react";
9
9
  import { createPortal } from "react-dom";
10
10
  import type { ChatRecord } from "../../lib/actions/chat-directory";
11
11
  import { readChatDirectory, useChatDirectoryVersion } from "../../lib/actions/chat-directory";
@@ -31,11 +31,13 @@ export default function ChatSwitcher(props: {
31
31
  currentChatId: string | null;
32
32
  platform: ChordPlatform;
33
33
  onHover(index: number): void;
34
+ /** The app learned about more chats; the list may grow at its end. */
35
+ onDirectoryChange(): void;
34
36
  onPick(index: number): void;
35
37
  onDismiss(): void;
36
38
  }) {
37
39
  const listRef = useRef<HTMLDivElement>(null);
38
- const { index, visible } = props.state;
40
+ const { index, visible, viewed } = props.state;
39
41
  // Read statuses as soon as Control+Tab is pressed, before the list shows.
40
42
  useChatStatusRefresh({
41
43
  subjectId: props.subjectId,
@@ -43,7 +45,12 @@ export default function ChatSwitcher(props: {
43
45
  ids: props.state.ids,
44
46
  active: true,
45
47
  });
46
- useChatDirectoryVersion(props.subjectId);
48
+ const version = useChatDirectoryVersion(props.subjectId);
49
+ const onDirectoryChange = useRef(props.onDirectoryChange);
50
+ onDirectoryChange.current = props.onDirectoryChange;
51
+ useEffect(() => {
52
+ onDirectoryChange.current();
53
+ }, [version]);
47
54
  useEffect(() => {
48
55
  if (!visible) return;
49
56
  listRef.current
@@ -100,7 +107,7 @@ export default function ChatSwitcher(props: {
100
107
  record && record.workspaceId !== props.workspaceId
101
108
  ? (workspaceNames.get(record.workspaceId) ?? null)
102
109
  : null;
103
- return (
110
+ const row = (
104
111
  <div
105
112
  key={id}
106
113
  id={`og-chat-switcher-${position}`}
@@ -135,6 +142,20 @@ export default function ChatSwitcher(props: {
135
142
  ) : null}
136
143
  </div>
137
144
  );
145
+ // Past the chats the person opened, the list goes on by activity.
146
+ return position === viewed && viewed > 0 ? (
147
+ <Fragment key={id}>
148
+ <div
149
+ role="presentation"
150
+ className="mt-1 border-t border-border px-2.5 pt-2.5 pb-1 text-xs leading-4.5 font-medium text-fg-muted"
151
+ >
152
+ Recently active
153
+ </div>
154
+ {row}
155
+ </Fragment>
156
+ ) : (
157
+ row
158
+ );
138
159
  })}
139
160
  </div>
140
161
  <div className="flex shrink-0 items-center gap-4 border-t border-border px-4 py-2 text-xs text-fg-muted">
@@ -316,8 +316,11 @@ test("names the model cleanly for org- and workspace-connected copies alike", as
316
316
  const text = container.querySelector("header")?.textContent ?? "";
317
317
  expect(text).toContain("Opus 5.5");
318
318
  expect(text).not.toContain("claude-subscription");
319
- expect(container.querySelector('[data-model-vendor="anthropic"]')).not.toBeNull();
320
- seen.push(container.querySelector("[data-model-vendor]")?.parentElement?.textContent ?? "");
319
+ const mark = container.querySelector(
320
+ '[data-testid="billing-class-icon-claude_subscription"]',
321
+ );
322
+ expect(mark).not.toBeNull();
323
+ seen.push(mark?.parentElement?.textContent ?? "");
321
324
  }
322
325
  expect(seen[0]).toBe(seen[1]);
323
326
  } finally {
@@ -325,3 +328,71 @@ test("names the model cleanly for org- and workspace-connected copies alike", as
325
328
  container.remove();
326
329
  }
327
330
  });
331
+
332
+ // Bendik's report: a Claude chat showed a static Claude logo where a Codex chat
333
+ // shows its account control. Every subscription rail gets the same control.
334
+ test.each([
335
+ ["codex_subscription", "codex/gpt-6-astra"],
336
+ ["claude_subscription", "organization-claude-subscription/claude-opus-5-5"],
337
+ ["supergrok_subscription", "supergrok/grok-4.6"],
338
+ ] as const)("the %s header shows the account control", async (billingClass, model) => {
339
+ const container = document.createElement("div");
340
+ document.body.append(container);
341
+ const root = createRoot(container);
342
+ try {
343
+ await act(async () =>
344
+ root.render(
345
+ <SessionHeader
346
+ session={{ ...session, model }}
347
+ ancestors={[]}
348
+ connectionState="live"
349
+ status="idle"
350
+ keyAuthRequired={false}
351
+ onForgetAccessKey={() => undefined}
352
+ inspectorOpen={false}
353
+ onToggleInspector={() => undefined}
354
+ onRename={async () => null}
355
+ onPin={async () => null}
356
+ billingClass={billingClass}
357
+ accountSlot={<button type="button" data-testid="account-control" />}
358
+ />,
359
+ ),
360
+ );
361
+ expect(container.querySelector('[data-testid="account-control"]')).not.toBeNull();
362
+ expect(container.querySelector("[data-model-vendor]")).toBeNull();
363
+ } finally {
364
+ await act(async () => root.unmount());
365
+ container.remove();
366
+ }
367
+ });
368
+
369
+ test("other payment rails keep the maker's logo and never show an account control", async () => {
370
+ const container = document.createElement("div");
371
+ document.body.append(container);
372
+ const root = createRoot(container);
373
+ try {
374
+ await act(async () =>
375
+ root.render(
376
+ <SessionHeader
377
+ session={{ ...session, model: "opper/aws/claude-opus-5-5" }}
378
+ ancestors={[]}
379
+ connectionState="live"
380
+ status="idle"
381
+ keyAuthRequired={false}
382
+ onForgetAccessKey={() => undefined}
383
+ inspectorOpen={false}
384
+ onToggleInspector={() => undefined}
385
+ onRename={async () => null}
386
+ onPin={async () => null}
387
+ billingClass="opengeni_credits"
388
+ accountSlot={<button type="button" data-testid="account-control" />}
389
+ />,
390
+ ),
391
+ );
392
+ expect(container.querySelector('[data-testid="account-control"]')).toBeNull();
393
+ expect(container.querySelector('[data-model-vendor="anthropic"]')).not.toBeNull();
394
+ } finally {
395
+ await act(async () => root.unmount());
396
+ container.remove();
397
+ }
398
+ });
@@ -4,7 +4,7 @@
4
4
  // (breadcrumb → title) on the left and the action cluster on the right
5
5
  // (provider+model·effort·speed, sandbox, pin, connection, status, panel).
6
6
  // The live children that need their own hooks — the sandbox switcher and the
7
- // codex account indicator — arrive as slots so the whole bar can be rendered
7
+ // subscription account control — arrive as slots so the whole bar can be rendered
8
8
  // (and screenshotted) in isolation. `CanvasTopStrip` in session-shell owns the
9
9
  // data wiring and passes the real slots.
10
10
  import { t } from "../../lib/console-text";
@@ -87,6 +87,12 @@ import type { LatencyMode, Session } from "../../types";
87
87
  import { usePage } from "../../lib/navigation";
88
88
  import { useUiEventTarget } from "../../lib/ui-events";
89
89
 
90
+ const SUBSCRIPTION_RAILS: ReadonlySet<BillingClass> = new Set([
91
+ "codex_subscription",
92
+ "claude_subscription",
93
+ "supergrok_subscription",
94
+ ]);
95
+
90
96
  export function SessionHeader({
91
97
  session,
92
98
  ancestors,
@@ -106,7 +112,7 @@ export function SessionHeader({
106
112
  adminAccess,
107
113
  onOpenUsageLimit,
108
114
  sandboxSlot,
109
- codexSlot,
115
+ accountSlot,
110
116
  accessSlot,
111
117
  leading,
112
118
  lastStartedModel,
@@ -156,10 +162,11 @@ export function SessionHeader({
156
162
  /** The "Run on <machine>" control — a live component in production. */
157
163
  sandboxSlot?: ReactNode | undefined;
158
164
  /**
159
- * Replaces the static provider mark when the session is on Codex — same icon,
160
- * clickable for account status/switch. Absent for host-credit sessions.
165
+ * Replaces the static provider mark when the session runs on a subscription
166
+ * (Codex, Claude, SuperGrok): the same mark, clickable for the account and
167
+ * its usage. Absent for other payment rails.
161
168
  */
162
- codexSlot?: ReactNode | undefined;
169
+ accountSlot?: ReactNode | undefined;
163
170
  /** Compact session access state/menu, lazy-mounted by the route shell. */
164
171
  accessSlot?: ReactNode | undefined;
165
172
  /** Leading control (the mobile hamburger); absent on desktop. */
@@ -172,7 +179,7 @@ export function SessionHeader({
172
179
  lastStartedModel?: string | undefined;
173
180
  lastStartedReasoningEffort?: IntelligenceEffort | undefined;
174
181
  lastStartedLatencyMode?: LatencyMode | undefined;
175
- /** Billing rail: Codex account chip, or the mark for makers without a logo. */
182
+ /** Billing rail: subscription account chip, or the mark for makers without a logo. */
176
183
  billingClass?: BillingClass | undefined;
177
184
  /** Product model label (e.g. GPT-5.6 Luna). */
178
185
  modelLabel?: string | undefined;
@@ -206,9 +213,10 @@ export function SessionHeader({
206
213
  const resolvedModel = modelLabel?.trim() || modelDisplayName(modelId);
207
214
  const displayEffort: IntelligenceEffort = lastStartedReasoningEffort ?? session.reasoningEffort;
208
215
  const displayLatency: LatencyMode = lastStartedLatencyMode ?? session.latencyMode;
209
- // Codex → clickable account chip. Other rails → static provider icon only
210
- // (never invent a text "Opengeni"/"BYOK" word). Don't key off `codexSlot != null`.
211
- const isCodexRail = resolvedBilling === "codex_subscription";
216
+ // Subscription rails → clickable account chip, the same for every provider.
217
+ // Other rails → static provider icon only (never invent a text
218
+ // "Opengeni"/"BYOK" word). Don't key off `accountSlot != null`.
219
+ const isSubscriptionRail = SUBSCRIPTION_RAILS.has(resolvedBilling);
212
220
  const policyBits = [
213
221
  resolvedModel,
214
222
  labelEffort(displayEffort),
@@ -240,10 +248,10 @@ export function SessionHeader({
240
248
  uiEvents.addEventListener(RENAME_CURRENT_CHAT_EVENT, start);
241
249
  return () => uiEvents.removeEventListener(RENAME_CURRENT_CHAT_EVENT, start);
242
250
  }, [uiEvents, startRenaming]);
243
- const providerControl = isCodexRail ? (
244
- (codexSlot ?? (
251
+ const providerControl = isSubscriptionRail ? (
252
+ (accountSlot ?? (
245
253
  <BillingClassMark
246
- billingClass="codex_subscription"
254
+ billingClass={resolvedBilling}
247
255
  className="size-3.5 shrink-0 text-fg-muted"
248
256
  aria-label=""
249
257
  />
@@ -51,8 +51,8 @@ import {
51
51
  SessionComputeIndicator,
52
52
  sessionSupportsFleetSwitching,
53
53
  } from "../session/sandbox-switcher";
54
- import { CodexAccountIndicator } from "../session/codex-account-indicator";
55
- import { ModelAccountIndicator } from "../session/model-account-indicator";
54
+ import { SubscriptionAccountIndicator } from "../session/subscription-account-indicator";
55
+ import { subscriptionAccountProvider } from "../session/subscription-account";
56
56
  import { PrivateSessionIndicator } from "../session/private-session-indicator";
57
57
  import { Button } from "../../../ui/button";
58
58
  import { Sheet, SheetContent, SheetDescription, SheetTitle } from "../../../ui/sheet";
@@ -61,7 +61,6 @@ import { Link, useNavigate, useRouterState } from "../../lib/navigation";
61
61
  import { useWorkspaceModelCatalog } from "../../lib/use-workspace-model-catalog";
62
62
  import { useAppContext } from "../../app-context";
63
63
  import { isPersonalWorkspace } from "../../lib/managed-self-context";
64
- import { isCodexProductModel } from "../../lib/session-model";
65
64
  import { isIntelligenceEffort } from "../../lib/session-tools";
66
65
  import { useSessionRepliesMute } from "../../lib/inbox";
67
66
  import { useSessionAdminAccess } from "../session/session-admin-access";
@@ -548,9 +547,10 @@ function SessionRouteHeader({
548
547
  const catalog = useWorkspaceModelCatalog(session.workspaceId);
549
548
  const selectedRow = findPickerRow(catalog.rows, displayModelId);
550
549
  const policyLoading = lastStarted.loading || catalog.loading;
551
- const credentialSource = selectedRow?.catalog.credentialSource;
552
- const subscriptionProvider =
553
- credentialSource?.kind === "connected_subscription" ? credentialSource.provider : null;
550
+ const accountProvider = subscriptionAccountProvider(
551
+ displayModelId,
552
+ selectedRow?.catalog.credentialSource,
553
+ );
554
554
  const repliesMute = useSessionRepliesMute(session);
555
555
  const sessionAdminAccess = useSessionAdminAccess(session);
556
556
  const adminAccess = useSessionUiFeature("adminAccess") ? sessionAdminAccess : null;
@@ -660,24 +660,16 @@ function SessionRouteHeader({
660
660
  <SessionComputeIndicator sessionId={session.id} sandboxBackend={session.sandboxBackend} />
661
661
  ) : null
662
662
  }
663
- codexSlot={
664
- policyReady && isCodexProductModel(displayModelId) ? (
665
- <CodexAccountIndicator
666
- workspaceId={session.workspaceId}
667
- sessionId={session.id}
668
- model={displayModelId}
669
- modelReady={policyReady}
670
- events={events}
671
- />
672
- ) : policyReady && subscriptionProvider ? (
673
- <ModelAccountIndicator
663
+ accountSlot={
664
+ policyReady && accountProvider ? (
665
+ <SubscriptionAccountIndicator
674
666
  workspaceId={session.workspaceId}
675
667
  sessionId={session.id}
676
668
  organizationId={
677
669
  context.workspaces.find((candidate) => candidate.id === session.workspaceId)
678
670
  ?.accountId ?? null
679
671
  }
680
- provider={subscriptionProvider}
672
+ provider={accountProvider}
681
673
  servingTurnId={lastStarted.policy?.turnId}
682
674
  events={events}
683
675
  />