@opengeni/react 4.6.1 → 4.6.2-canary.39853438886001

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 (467) hide show
  1. package/dist/app/app-state.js +13 -13
  2. package/dist/app/components/Composer.js +14 -14
  3. package/dist/app/components/artifacts/artifact-library.js +5 -5
  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 +16 -16
  7. package/dist/app/components/artifacts/retained-text-preview.js +2 -2
  8. package/dist/app/components/artifacts/site-conversations.js +5 -4
  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 +15 -15
  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 +32 -31
  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 +14 -14
  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 +16 -15
  31. package/dist/app/components/command-menu/command-menu.js.map +1 -1
  32. package/dist/app/components/command-menu/shortcut-sheet.js +8 -8
  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 +4 -4
  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 +3 -3
  46. package/dist/app/components/rail/rail-sections.js +28 -27
  47. package/dist/app/components/rail/session-header.d.ts +6 -5
  48. package/dist/app/components/rail/session-header.js +20 -19
  49. package/dist/app/components/rail/session-list.js +27 -26
  50. package/dist/app/components/rail/session-row-hover-details.js +7 -6
  51. package/dist/app/components/rail/session-shell.js +51 -53
  52. package/dist/app/components/rail/site-session-group-heading.js +2 -1
  53. package/dist/app/components/session/agent-configuration-panel.js +6 -6
  54. package/dist/app/components/session/banners.js +6 -6
  55. package/dist/app/components/session/conversation-find.js +3 -3
  56. package/dist/app/components/session/editable-artifacts-workspace.js +17 -17
  57. package/dist/app/components/session/failed-session-banner.js +5 -5
  58. package/dist/app/components/session/human-input.js +26 -26
  59. package/dist/app/components/session/inspector.js +37 -37
  60. package/dist/app/components/session/message-actions.js +3 -3
  61. package/dist/app/components/session/message-resource-attachments.js +5 -5
  62. package/dist/app/components/session/model-recovery-notice.js +3 -3
  63. package/dist/app/components/session/new-session-settings-menu.js +4 -4
  64. package/dist/app/components/session/sandbox-switcher.js +8 -8
  65. package/dist/app/components/session/sandbox-workspace.js +36 -36
  66. package/dist/app/components/session/search-markdown-highlight.js +5 -5
  67. package/dist/app/components/session/search-results-view.js +6 -6
  68. package/dist/app/components/session/session-admission-notice.js +4 -4
  69. package/dist/app/components/session/session-machine-access-notice.js +4 -4
  70. package/dist/app/components/session/session-search-dialog.js +6 -6
  71. package/dist/app/components/session/session-tenancy-control.js +4 -4
  72. package/dist/app/components/session/session-usage-limit-section.js +3 -3
  73. package/dist/app/components/session/session-wait-status.js +2 -1
  74. package/dist/app/components/session/session-wait-status.js.map +1 -1
  75. package/dist/app/components/session/subagents.js +6 -5
  76. package/dist/app/components/session/subscription-account-indicator.d.ts +35 -0
  77. package/dist/app/components/session/{codex-account-indicator.js → subscription-account-indicator.js} +23 -10
  78. package/dist/app/components/session/subscription-account-menu.d.ts +11 -12
  79. package/dist/app/components/session/subscription-account-menu.js +1 -1
  80. package/dist/app/components/session/subscription-account.d.ts +105 -0
  81. package/dist/app/components/usage/usage-entry.js +3 -3
  82. package/dist/app/components/workspace-composer-plus.js +10 -10
  83. package/dist/app/embed/session-app.js +154 -156
  84. package/dist/app/lib/actions/actions-provider.js +8 -8
  85. package/dist/app/lib/actions/chat-switcher.d.ts +19 -7
  86. package/dist/app/lib/codex-usage-query.js +2 -2
  87. package/dist/app/lib/composer-connectors.js +8 -8
  88. package/dist/app/lib/console-text.js +2 -2
  89. package/dist/app/lib/drive-connect-return.d.ts +26 -0
  90. package/dist/app/lib/drive-connect-return.js +16 -0
  91. package/dist/app/lib/events.js +7 -7
  92. package/dist/app/lib/failed-session-copy.js +3 -3
  93. package/dist/app/lib/model-access-onboarding.js +3 -3
  94. package/dist/app/lib/move-chat-to-machine.js +3 -3
  95. package/dist/app/lib/session-branch-cache.js +6 -5
  96. package/dist/app/lib/session-group-pagination.js +6 -5
  97. package/dist/app/lib/session-hover-facts.js +6 -5
  98. package/dist/app/lib/session-rail.js +2 -1
  99. package/dist/app/lib/sessions-group.js +5 -4
  100. package/dist/app/lib/turn-failure-analytics.js +5 -5
  101. package/dist/app/lib/use-workspace-machines.js +4 -4
  102. package/dist/app/lib/use-workspace-model-catalog.js +3 -3
  103. package/dist/app/lib/use-workspace-rigs.js +2 -2
  104. package/dist/app/lib/workspace-navigation-preference.js +4 -4
  105. package/dist/app/lib/workspace-scope-context.js +3 -3
  106. package/dist/app/routes/artifacts.js +50 -49
  107. package/dist/app/routes/artifacts.js.map +1 -1
  108. package/dist/app/routes/retained-artifact.js +23 -23
  109. package/dist/app/routes/session.js +92 -91
  110. package/dist/app/routes/sessions-index.js +52 -52
  111. package/dist/app/routes/site-view.js +35 -34
  112. package/dist/app/routes/site-view.js.map +1 -1
  113. package/dist/artifacts-document.js +4 -4
  114. package/dist/artifacts-presentation.js +4 -4
  115. package/dist/artifacts-spreadsheet.js +4 -4
  116. package/dist/artifacts.js +10 -10
  117. package/dist/{browser-viewer-YQC6BFMS.js → browser-viewer-VKIAULG7.js} +4 -4
  118. package/dist/{chat-interactive-block-Z22YHDRU.js → chat-interactive-block-JGYSW4KB.js} +5 -5
  119. package/dist/{chunk-WN2MIB4Q.js → chunk-22V2QCEM.js} +2 -2
  120. package/dist/{chunk-SJPAKWWP.js → chunk-2BISI664.js} +2 -2
  121. package/dist/{chunk-O5UOCMH4.js → chunk-2LPJVEWY.js} +3 -3
  122. package/dist/{chunk-NPDL4W4Y.js → chunk-2MLJHNKJ.js} +108 -109
  123. package/dist/chunk-2MLJHNKJ.js.map +1 -0
  124. package/dist/{chunk-JI6WPLZB.js → chunk-2SBCOGQN.js} +4 -4
  125. package/dist/{chunk-6JF7C3U3.js → chunk-2WERWWSS.js} +2 -2
  126. package/dist/{chunk-4XKT4ENZ.js → chunk-2Y3QL3DA.js} +4 -4
  127. package/dist/{chunk-KVMFT6FN.js → chunk-3FL3F4WF.js} +2 -2
  128. package/dist/{chunk-4VJOZJDV.js → chunk-3JPQAIYJ.js} +2 -2
  129. package/dist/{chunk-27EORKJ4.js → chunk-3N4LNBJF.js} +2 -2
  130. package/dist/{chunk-7JZSFJHB.js → chunk-3OJU3RUR.js} +2 -2
  131. package/dist/{chunk-NV5OYV3G.js → chunk-3U6K36QA.js} +5 -5
  132. package/dist/{chunk-MDRLP5DO.js → chunk-3W7ROHN4.js} +3 -3
  133. package/dist/{chunk-3MQM4ZOC.js → chunk-3Y6ZR2VN.js} +3 -3
  134. package/dist/{chunk-HXZIX7MR.js → chunk-47AB65IO.js} +4 -4
  135. package/dist/{chunk-DNYD7AUG.js → chunk-4BOLIZ7Y.js} +3 -3
  136. package/dist/{chunk-4XO346BW.js → chunk-4FBJFQFU.js} +2 -2
  137. package/dist/{chunk-BWKZEW6K.js → chunk-4T3E56NT.js} +3 -3
  138. package/dist/{chunk-4PC7LIQK.js → chunk-4ZMUWRFF.js} +3 -3
  139. package/dist/{chunk-TM2ZLY3Q.js → chunk-5OLFYSVG.js} +13 -13
  140. package/dist/{chunk-D4QOZXPM.js → chunk-5WBRM7V4.js} +5 -5
  141. package/dist/{chunk-GXK4CUAB.js → chunk-5WQKTT5Z.js} +2 -2
  142. package/dist/{chunk-6N7W3TOV.js → chunk-63BPMTBM.js} +2 -2
  143. package/dist/{chunk-R5YZ3ROM.js → chunk-63PQKTTT.js} +2 -2
  144. package/dist/{chunk-WLZVXCPZ.js → chunk-6GO6WN22.js} +3 -3
  145. package/dist/{chunk-6PQBKMUL.js → chunk-6IIA63VD.js} +11 -7
  146. package/dist/chunk-6IIA63VD.js.map +1 -0
  147. package/dist/{chunk-XDCZBOEY.js → chunk-6LGBGPBU.js} +1 -1
  148. package/dist/{chunk-FMATVQFW.js → chunk-6XXMG5YP.js} +9 -9
  149. package/dist/{chunk-M5E3CKSE.js → chunk-7QWWE5XL.js} +2 -2
  150. package/dist/{chunk-RABKQFTA.js → chunk-A2HCAMRH.js} +2 -2
  151. package/dist/{chunk-6K3WNTRI.js → chunk-AODISQO6.js} +2 -2
  152. package/dist/{chunk-C6JL6PBL.js → chunk-AQDRH6VF.js} +3 -3
  153. package/dist/{chunk-72XEFLMD.js → chunk-ASWINLSW.js} +2 -2
  154. package/dist/{chunk-ZPZYYSHW.js → chunk-BVMDON5T.js} +8 -8
  155. package/dist/{chunk-EURDMOXZ.js → chunk-BYJZUCOQ.js} +2 -2
  156. package/dist/{chunk-BQWUXC55.js → chunk-CAVAVT5S.js} +9 -9
  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-65K5LV4L.js → chunk-CTCOVPZU.js} +51 -50
  162. package/dist/{chunk-65K5LV4L.js.map → chunk-CTCOVPZU.js.map} +1 -1
  163. package/dist/{chunk-HJTTDLF6.js → chunk-CY3NO4JN.js} +4 -4
  164. package/dist/{chunk-OLUG4IFF.js → chunk-D2RLPRSG.js} +2 -2
  165. package/dist/{chunk-74NIHMAT.js → chunk-D653JH6D.js} +3 -3
  166. package/dist/{chunk-2LUO22FR.js → chunk-DAI5CTQF.js} +4 -4
  167. package/dist/{chunk-HTKVYEVB.js → chunk-DBM4ZXDN.js} +2 -2
  168. package/dist/{chunk-MB2DTUEG.js → chunk-DNYKLU3K.js} +4 -4
  169. package/dist/{chunk-26P7B46A.js → chunk-DXYARXK3.js} +3 -3
  170. package/dist/{chunk-JQKURO3S.js → chunk-E4MQRQ6Z.js} +2 -2
  171. package/dist/{chunk-KW53DBY7.js → chunk-EBW2E32G.js} +2 -2
  172. package/dist/{chunk-O73DRA77.js → chunk-ENKBO7FC.js} +4 -4
  173. package/dist/{chunk-FVCLVASD.js → chunk-FI3KRVOF.js} +24 -24
  174. package/dist/{chunk-WWM7WVD2.js → chunk-GABFKHQE.js} +2 -2
  175. package/dist/chunk-GLCOKWLH.js +42 -0
  176. package/dist/chunk-GLCOKWLH.js.map +1 -0
  177. package/dist/{chunk-32HA7DXJ.js → chunk-GNBRB3DH.js} +25 -25
  178. package/dist/{chunk-CEQUNJJY.js → chunk-HPALK6LD.js} +2 -2
  179. package/dist/{chunk-LR7U3HCD.js → chunk-HPSATFLQ.js} +4 -4
  180. package/dist/{chunk-O4AWXTZQ.js → chunk-HUYLQW75.js} +6 -6
  181. package/dist/{chunk-PQCFW2KT.js → chunk-IDDHH5AQ.js} +29 -24
  182. package/dist/chunk-IDDHH5AQ.js.map +1 -0
  183. package/dist/{chunk-ZZUKJ5HQ.js → chunk-IG2ERMSB.js} +2 -2
  184. package/dist/{chunk-2SZ3KC5S.js → chunk-IMKIIS4Y.js} +2 -2
  185. package/dist/{chunk-CA64OZLZ.js → chunk-IRXPXDY5.js} +4 -4
  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-X7Z4B5GK.js → chunk-KPL7EXS6.js} +2 -2
  191. package/dist/{chunk-GTR2WUBA.js → chunk-KX6M5CJI.js} +1 -1
  192. package/dist/{chunk-CYO5HL4C.js → chunk-KYL2BPS2.js} +2 -2
  193. package/dist/{chunk-QLDMF7MH.js → chunk-LC5HE7PZ.js} +2 -2
  194. package/dist/{chunk-3SMJ2BIQ.js → chunk-LGD5RESZ.js} +7 -33
  195. package/dist/chunk-LGD5RESZ.js.map +1 -0
  196. package/dist/{chunk-4ICPJZAB.js → chunk-LMYSYG6U.js} +2 -2
  197. package/dist/{chunk-3ZZOE4SN.js → chunk-LOCDYMD6.js} +4 -4
  198. package/dist/{chunk-DNWBLT4U.js → chunk-MASBMJ2M.js} +2 -2
  199. package/dist/{chunk-NZMQDUOD.js → chunk-MU6HYDNF.js} +5 -5
  200. package/dist/{chunk-GMVKCEBG.js → chunk-MY6QEDZ2.js} +2 -2
  201. package/dist/{chunk-SK57RWSA.js → chunk-MZGKQ5WV.js} +2 -2
  202. package/dist/{chunk-HSQRYJ4P.js → chunk-N52SFH2K.js} +2 -2
  203. package/dist/{chunk-MY6VZVCP.js → chunk-OAJX5CEL.js} +4 -4
  204. package/dist/{chunk-IWIMIRV3.js → chunk-OSJTLQXA.js} +9 -4
  205. package/dist/chunk-OSJTLQXA.js.map +1 -0
  206. package/dist/{chunk-FH75NNLB.js → chunk-OZ5NAXCP.js} +2 -2
  207. package/dist/{chunk-PEGNFZ3F.js → chunk-P5S777YI.js} +2 -2
  208. package/dist/{chunk-LY6727IF.js → chunk-PPSVFNEA.js} +1 -1
  209. package/dist/{chunk-K4FDZVMQ.js → chunk-PR42VIVY.js} +2 -2
  210. package/dist/{chunk-I74J2UZ2.js → chunk-PWMZCW4H.js} +8 -8
  211. package/dist/{chunk-6YDXUE5H.js → chunk-PYA2O3WS.js} +2 -2
  212. package/dist/{chunk-GUIZDI5T.js → chunk-Q2PA4KZS.js} +2 -2
  213. package/dist/{chunk-JJ7VMIEQ.js → chunk-QCANSTLU.js} +64 -64
  214. package/dist/{chunk-DZH2HTTB.js → chunk-R27GW5WV.js} +1 -1
  215. package/dist/chunk-R4U4EWZG.js +414 -0
  216. package/dist/chunk-R4U4EWZG.js.map +1 -0
  217. package/dist/{chunk-DAQG3C4W.js → chunk-R6JY22SG.js} +29 -29
  218. package/dist/{chunk-7OIBLMDP.js → chunk-RAQISW42.js} +2 -2
  219. package/dist/{chunk-DNLXQUBX.js → chunk-RLS6PTL4.js} +32 -44
  220. package/dist/chunk-RLS6PTL4.js.map +1 -0
  221. package/dist/{chunk-CPKD2YGK.js → chunk-RNU5CUPI.js} +2 -2
  222. package/dist/{chunk-467VRP4E.js → chunk-RO5YZQHZ.js} +3 -3
  223. package/dist/{chunk-SSZROOOI.js → chunk-ROLXYGT5.js} +2 -2
  224. package/dist/{chunk-6VITVQ23.js → chunk-SHJ5SQOW.js} +7 -7
  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-GTR5NLVP.js → chunk-VCRQPLKS.js} +2 -2
  232. package/dist/{chunk-MHIYYHCL.js → chunk-VJU3ET7N.js} +12 -12
  233. package/dist/{chunk-RXMIXKB3.js → chunk-WGJUARF3.js} +13 -13
  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-OHG2UQ2O.js → chunk-YWP2H7SX.js} +60 -22
  249. package/dist/chunk-YWP2H7SX.js.map +1 -0
  250. package/dist/{chunk-24POWVUY.js → chunk-ZDJNRRVS.js} +4 -4
  251. package/dist/{chunk-S6WJ6TUT.js → chunk-ZEVJGMNB.js} +2 -2
  252. package/dist/chunk-ZEVJGMNB.js.map +1 -0
  253. package/dist/{chunk-M7YEZR6X.js → chunk-ZITMDA4C.js} +2 -2
  254. package/dist/components/model-policy-picker.d.ts +2 -0
  255. package/dist/composer.js +6 -6
  256. package/dist/{computer-viewer-BWVNDFTO.js → computer-viewer-6CRLWQHP.js} +5 -5
  257. package/dist/connect.js +6 -6
  258. package/dist/connection-service-presentation.d.ts +1 -4
  259. package/dist/desktop.js +2 -2
  260. package/dist/editor.js +2 -2
  261. package/dist/{embedded-new-voice-GBXSZ3TO.js → embedded-new-voice-KILV3RYM.js} +5 -5
  262. package/dist/{embedded-voice-MGI7EK7C.js → embedded-voice-GHDRLCFX.js} +5 -5
  263. package/dist/{fleet-decision-row-35S3GAUN.js → fleet-decision-row-DQXRRBT7.js} +2 -2
  264. package/dist/index.js +44 -44
  265. package/dist/interaction.js +5 -5
  266. package/dist/machines.js +3 -3
  267. package/dist/messages/en.d.ts +1 -1
  268. package/dist/messages.js +1 -1
  269. package/dist/{model-policy-picker-menu-KP53N6UJ.js → model-policy-picker-menu-5ALKUJMR.js} +4 -4
  270. package/dist/{platform-activity-row-ISMXR7NJ.js → platform-activity-row-227C764Z.js} +2 -2
  271. package/dist/{queue-surface-implementation-ULW7DDJA.js → queue-surface-implementation-H3NOBXU5.js} +5 -5
  272. package/dist/realtime.js +4 -4
  273. package/dist/{sandbox-files-QYSD4XCZ.js → sandbox-files-5FEOHUMD.js} +6 -6
  274. package/dist/session-app.js +155 -157
  275. package/dist/{session-realtime-JXRLPNUH.js → session-realtime-OHBMODNX.js} +3 -3
  276. package/dist/session-realtime.js +2 -2
  277. package/dist/session-ui.js +26 -26
  278. package/dist/session.js +6 -6
  279. package/dist/sites.js +2 -2
  280. package/dist/terminal.js +2 -2
  281. package/dist/this-computer.js +3 -3
  282. package/dist/timeline/connector-logo-index.d.ts +19 -0
  283. package/dist/{timeline-annotation-markers-OJYKHBEO.js → timeline-annotation-markers-NDHS7MCK.js} +2 -2
  284. package/dist/{timeline-annotation-selection-6OAZLXFU.js → timeline-annotation-selection-DRQSTJOV.js} +2 -2
  285. package/dist/{timeline-annotations-dialog-5M6DP5FX.js → timeline-annotations-dialog-G6J5ZJKN.js} +3 -3
  286. package/dist/timeline-model.d.ts +2 -0
  287. package/dist/timeline-model.js +9 -1
  288. package/dist/ui/list-row.js +1 -1
  289. package/dist/usage.js +2 -2
  290. package/dist/workbench.js +4 -4
  291. package/package.json +4 -4
  292. package/src/app/components/capabilities/native-connect-readiness.tsx +1 -0
  293. package/src/app/components/capabilities/perform-capability-action.test.ts +67 -0
  294. package/src/app/components/capabilities/perform-capability-action.tsx +28 -0
  295. package/src/app/components/command-menu/chat-switcher.tsx +25 -4
  296. package/src/app/components/rail/session-header.test.tsx +73 -2
  297. package/src/app/components/rail/session-header.tsx +20 -12
  298. package/src/app/components/rail/session-shell.tsx +10 -18
  299. package/src/app/components/session/subscription-account-indicator.test.ts +239 -0
  300. package/src/app/components/session/subscription-account-indicator.tsx +361 -0
  301. package/src/app/components/session/subscription-account-menu.tsx +21 -43
  302. package/src/app/components/session/subscription-account.test.ts +314 -0
  303. package/src/app/components/session/subscription-account.ts +354 -0
  304. package/src/app/lib/actions/actions-provider.tsx +11 -0
  305. package/src/app/lib/actions/actions.test.ts +59 -4
  306. package/src/app/lib/actions/chat-switcher.ts +73 -20
  307. package/src/app/lib/drive-connect-return.test.ts +183 -0
  308. package/src/app/lib/drive-connect-return.tsx +116 -0
  309. package/src/app/routes/session.tsx +12 -14
  310. package/src/app/routes/sessions-index.tsx +1 -0
  311. package/src/components/model-policy-picker-menu.tsx +25 -4
  312. package/src/components/model-policy-picker.tsx +2 -0
  313. package/src/components/session-mcp-capability-card.tsx +13 -4
  314. package/src/connection-service-presentation.ts +6 -1
  315. package/src/messages/en.ts +1 -1
  316. package/src/timeline/connector-logo-index.test.ts +46 -0
  317. package/src/timeline/connector-logo-index.ts +68 -0
  318. package/src/timeline-model.ts +6 -0
  319. package/src/ui/list-row.tsx +38 -10
  320. package/styles/compiled.css +13 -0
  321. package/dist/app/components/session/codex-account-indicator.d.ts +0 -9
  322. package/dist/app/components/session/model-account-indicator.d.ts +0 -10
  323. package/dist/app/components/session/model-account-indicator.js +0 -34
  324. package/dist/app/components/session/model-account-usage.d.ts +0 -8
  325. package/dist/app/components/session/model-account-usage.js +0 -8
  326. package/dist/chunk-2K27S6LK.js.map +0 -1
  327. package/dist/chunk-3SMJ2BIQ.js.map +0 -1
  328. package/dist/chunk-6PQBKMUL.js.map +0 -1
  329. package/dist/chunk-7H2D4VNU.js +0 -150
  330. package/dist/chunk-7H2D4VNU.js.map +0 -1
  331. package/dist/chunk-DNLXQUBX.js.map +0 -1
  332. package/dist/chunk-HCCSAECI.js +0 -132
  333. package/dist/chunk-HCCSAECI.js.map +0 -1
  334. package/dist/chunk-IWIMIRV3.js.map +0 -1
  335. package/dist/chunk-M77ZQE5T.js +0 -58
  336. package/dist/chunk-M77ZQE5T.js.map +0 -1
  337. package/dist/chunk-MM7OKOTE.js.map +0 -1
  338. package/dist/chunk-NPDL4W4Y.js.map +0 -1
  339. package/dist/chunk-NWSAF6P5.js.map +0 -1
  340. package/dist/chunk-OHG2UQ2O.js.map +0 -1
  341. package/dist/chunk-PQCFW2KT.js.map +0 -1
  342. package/dist/chunk-S6WJ6TUT.js.map +0 -1
  343. package/dist/chunk-ZWACUOU5.js.map +0 -1
  344. package/dist/session-realtime-JXRLPNUH.js.map +0 -1
  345. package/src/app/components/session/codex-account-indicator.tsx +0 -207
  346. package/src/app/components/session/model-account-indicator.tsx +0 -189
  347. package/src/app/components/session/model-account-usage.test.ts +0 -59
  348. package/src/app/components/session/model-account-usage.tsx +0 -89
  349. /package/dist/app/components/session/{codex-account-indicator.js.map → subscription-account-indicator.js.map} +0 -0
  350. /package/dist/app/{components/session/model-account-indicator.js.map → lib/drive-connect-return.js.map} +0 -0
  351. /package/dist/{app/components/session/model-account-usage.js.map → browser-viewer-VKIAULG7.js.map} +0 -0
  352. /package/dist/{browser-viewer-YQC6BFMS.js.map → chat-interactive-block-JGYSW4KB.js.map} +0 -0
  353. /package/dist/{chunk-WN2MIB4Q.js.map → chunk-22V2QCEM.js.map} +0 -0
  354. /package/dist/{chunk-SJPAKWWP.js.map → chunk-2BISI664.js.map} +0 -0
  355. /package/dist/{chunk-O5UOCMH4.js.map → chunk-2LPJVEWY.js.map} +0 -0
  356. /package/dist/{chunk-JI6WPLZB.js.map → chunk-2SBCOGQN.js.map} +0 -0
  357. /package/dist/{chunk-6JF7C3U3.js.map → chunk-2WERWWSS.js.map} +0 -0
  358. /package/dist/{chunk-4XKT4ENZ.js.map → chunk-2Y3QL3DA.js.map} +0 -0
  359. /package/dist/{chunk-KVMFT6FN.js.map → chunk-3FL3F4WF.js.map} +0 -0
  360. /package/dist/{chunk-4VJOZJDV.js.map → chunk-3JPQAIYJ.js.map} +0 -0
  361. /package/dist/{chunk-27EORKJ4.js.map → chunk-3N4LNBJF.js.map} +0 -0
  362. /package/dist/{chunk-7JZSFJHB.js.map → chunk-3OJU3RUR.js.map} +0 -0
  363. /package/dist/{chunk-NV5OYV3G.js.map → chunk-3U6K36QA.js.map} +0 -0
  364. /package/dist/{chunk-MDRLP5DO.js.map → chunk-3W7ROHN4.js.map} +0 -0
  365. /package/dist/{chunk-3MQM4ZOC.js.map → chunk-3Y6ZR2VN.js.map} +0 -0
  366. /package/dist/{chunk-HXZIX7MR.js.map → chunk-47AB65IO.js.map} +0 -0
  367. /package/dist/{chunk-DNYD7AUG.js.map → chunk-4BOLIZ7Y.js.map} +0 -0
  368. /package/dist/{chunk-4XO346BW.js.map → chunk-4FBJFQFU.js.map} +0 -0
  369. /package/dist/{chunk-BWKZEW6K.js.map → chunk-4T3E56NT.js.map} +0 -0
  370. /package/dist/{chunk-4PC7LIQK.js.map → chunk-4ZMUWRFF.js.map} +0 -0
  371. /package/dist/{chunk-TM2ZLY3Q.js.map → chunk-5OLFYSVG.js.map} +0 -0
  372. /package/dist/{chunk-D4QOZXPM.js.map → chunk-5WBRM7V4.js.map} +0 -0
  373. /package/dist/{chunk-GXK4CUAB.js.map → chunk-5WQKTT5Z.js.map} +0 -0
  374. /package/dist/{chunk-6N7W3TOV.js.map → chunk-63BPMTBM.js.map} +0 -0
  375. /package/dist/{chunk-R5YZ3ROM.js.map → chunk-63PQKTTT.js.map} +0 -0
  376. /package/dist/{chunk-WLZVXCPZ.js.map → chunk-6GO6WN22.js.map} +0 -0
  377. /package/dist/{chunk-XDCZBOEY.js.map → chunk-6LGBGPBU.js.map} +0 -0
  378. /package/dist/{chunk-FMATVQFW.js.map → chunk-6XXMG5YP.js.map} +0 -0
  379. /package/dist/{chunk-M5E3CKSE.js.map → chunk-7QWWE5XL.js.map} +0 -0
  380. /package/dist/{chunk-RABKQFTA.js.map → chunk-A2HCAMRH.js.map} +0 -0
  381. /package/dist/{chunk-6K3WNTRI.js.map → chunk-AODISQO6.js.map} +0 -0
  382. /package/dist/{chunk-C6JL6PBL.js.map → chunk-AQDRH6VF.js.map} +0 -0
  383. /package/dist/{chunk-72XEFLMD.js.map → chunk-ASWINLSW.js.map} +0 -0
  384. /package/dist/{chunk-ZPZYYSHW.js.map → chunk-BVMDON5T.js.map} +0 -0
  385. /package/dist/{chunk-EURDMOXZ.js.map → chunk-BYJZUCOQ.js.map} +0 -0
  386. /package/dist/{chunk-BQWUXC55.js.map → chunk-CAVAVT5S.js.map} +0 -0
  387. /package/dist/{chunk-BPD4IJBG.js.map → chunk-CG6CJMIS.js.map} +0 -0
  388. /package/dist/{chunk-B254JG72.js.map → chunk-CQX24PT7.js.map} +0 -0
  389. /package/dist/{chunk-HJTTDLF6.js.map → chunk-CY3NO4JN.js.map} +0 -0
  390. /package/dist/{chunk-OLUG4IFF.js.map → chunk-D2RLPRSG.js.map} +0 -0
  391. /package/dist/{chunk-74NIHMAT.js.map → chunk-D653JH6D.js.map} +0 -0
  392. /package/dist/{chunk-2LUO22FR.js.map → chunk-DAI5CTQF.js.map} +0 -0
  393. /package/dist/{chunk-HTKVYEVB.js.map → chunk-DBM4ZXDN.js.map} +0 -0
  394. /package/dist/{chunk-MB2DTUEG.js.map → chunk-DNYKLU3K.js.map} +0 -0
  395. /package/dist/{chunk-26P7B46A.js.map → chunk-DXYARXK3.js.map} +0 -0
  396. /package/dist/{chunk-JQKURO3S.js.map → chunk-E4MQRQ6Z.js.map} +0 -0
  397. /package/dist/{chunk-KW53DBY7.js.map → chunk-EBW2E32G.js.map} +0 -0
  398. /package/dist/{chunk-O73DRA77.js.map → chunk-ENKBO7FC.js.map} +0 -0
  399. /package/dist/{chunk-FVCLVASD.js.map → chunk-FI3KRVOF.js.map} +0 -0
  400. /package/dist/{chunk-WWM7WVD2.js.map → chunk-GABFKHQE.js.map} +0 -0
  401. /package/dist/{chunk-32HA7DXJ.js.map → chunk-GNBRB3DH.js.map} +0 -0
  402. /package/dist/{chunk-CEQUNJJY.js.map → chunk-HPALK6LD.js.map} +0 -0
  403. /package/dist/{chunk-LR7U3HCD.js.map → chunk-HPSATFLQ.js.map} +0 -0
  404. /package/dist/{chunk-O4AWXTZQ.js.map → chunk-HUYLQW75.js.map} +0 -0
  405. /package/dist/{chunk-ZZUKJ5HQ.js.map → chunk-IG2ERMSB.js.map} +0 -0
  406. /package/dist/{chunk-2SZ3KC5S.js.map → chunk-IMKIIS4Y.js.map} +0 -0
  407. /package/dist/{chunk-CA64OZLZ.js.map → chunk-IRXPXDY5.js.map} +0 -0
  408. /package/dist/{chunk-I57HZMMA.js.map → chunk-IXIE3H43.js.map} +0 -0
  409. /package/dist/{chunk-OWJD3V4V.js.map → chunk-J3YQ3554.js.map} +0 -0
  410. /package/dist/{chunk-BCFHMBMK.js.map → chunk-J5HZBHU4.js.map} +0 -0
  411. /package/dist/{chunk-UHMMRQGU.js.map → chunk-KD7GNHOP.js.map} +0 -0
  412. /package/dist/{chunk-X7Z4B5GK.js.map → chunk-KPL7EXS6.js.map} +0 -0
  413. /package/dist/{chunk-GTR2WUBA.js.map → chunk-KX6M5CJI.js.map} +0 -0
  414. /package/dist/{chunk-CYO5HL4C.js.map → chunk-KYL2BPS2.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-NZMQDUOD.js.map → chunk-MU6HYDNF.js.map} +0 -0
  420. /package/dist/{chunk-GMVKCEBG.js.map → chunk-MY6QEDZ2.js.map} +0 -0
  421. /package/dist/{chunk-SK57RWSA.js.map → chunk-MZGKQ5WV.js.map} +0 -0
  422. /package/dist/{chunk-HSQRYJ4P.js.map → chunk-N52SFH2K.js.map} +0 -0
  423. /package/dist/{chunk-MY6VZVCP.js.map → chunk-OAJX5CEL.js.map} +0 -0
  424. /package/dist/{chunk-FH75NNLB.js.map → chunk-OZ5NAXCP.js.map} +0 -0
  425. /package/dist/{chunk-PEGNFZ3F.js.map → chunk-P5S777YI.js.map} +0 -0
  426. /package/dist/{chunk-LY6727IF.js.map → chunk-PPSVFNEA.js.map} +0 -0
  427. /package/dist/{chunk-K4FDZVMQ.js.map → chunk-PR42VIVY.js.map} +0 -0
  428. /package/dist/{chunk-I74J2UZ2.js.map → chunk-PWMZCW4H.js.map} +0 -0
  429. /package/dist/{chunk-6YDXUE5H.js.map → chunk-PYA2O3WS.js.map} +0 -0
  430. /package/dist/{chunk-GUIZDI5T.js.map → chunk-Q2PA4KZS.js.map} +0 -0
  431. /package/dist/{chunk-JJ7VMIEQ.js.map → chunk-QCANSTLU.js.map} +0 -0
  432. /package/dist/{chunk-DZH2HTTB.js.map → chunk-R27GW5WV.js.map} +0 -0
  433. /package/dist/{chunk-DAQG3C4W.js.map → chunk-R6JY22SG.js.map} +0 -0
  434. /package/dist/{chunk-7OIBLMDP.js.map → chunk-RAQISW42.js.map} +0 -0
  435. /package/dist/{chunk-CPKD2YGK.js.map → chunk-RNU5CUPI.js.map} +0 -0
  436. /package/dist/{chunk-467VRP4E.js.map → chunk-RO5YZQHZ.js.map} +0 -0
  437. /package/dist/{chunk-SSZROOOI.js.map → chunk-ROLXYGT5.js.map} +0 -0
  438. /package/dist/{chunk-6VITVQ23.js.map → chunk-SHJ5SQOW.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-MHIYYHCL.js.map → chunk-VJU3ET7N.js.map} +0 -0
  445. /package/dist/{chunk-RXMIXKB3.js.map → chunk-WGJUARF3.js.map} +0 -0
  446. /package/dist/{chunk-LG67ZNRU.js.map → chunk-WK2ZCTUF.js.map} +0 -0
  447. /package/dist/{chunk-XGE75VPK.js.map → chunk-WNARM3LY.js.map} +0 -0
  448. /package/dist/{chunk-RNBH5TSM.js.map → chunk-WQ2RTQYO.js.map} +0 -0
  449. /package/dist/{chunk-W57QFLQD.js.map → chunk-X6JIGNLI.js.map} +0 -0
  450. /package/dist/{chunk-CKA4SJRK.js.map → chunk-XIQDCQX7.js.map} +0 -0
  451. /package/dist/{chunk-AJ7PY4FJ.js.map → chunk-Y3GCG6CA.js.map} +0 -0
  452. /package/dist/{chunk-ZRB4M3GG.js.map → chunk-YC5KH7ZB.js.map} +0 -0
  453. /package/dist/{chunk-4RY64KQY.js.map → chunk-YJUKLLNP.js.map} +0 -0
  454. /package/dist/{chunk-24POWVUY.js.map → chunk-ZDJNRRVS.js.map} +0 -0
  455. /package/dist/{chunk-M7YEZR6X.js.map → chunk-ZITMDA4C.js.map} +0 -0
  456. /package/dist/{chat-interactive-block-Z22YHDRU.js.map → computer-viewer-6CRLWQHP.js.map} +0 -0
  457. /package/dist/{computer-viewer-BWVNDFTO.js.map → embedded-new-voice-KILV3RYM.js.map} +0 -0
  458. /package/dist/{embedded-new-voice-GBXSZ3TO.js.map → embedded-voice-GHDRLCFX.js.map} +0 -0
  459. /package/dist/{fleet-decision-row-35S3GAUN.js.map → fleet-decision-row-DQXRRBT7.js.map} +0 -0
  460. /package/dist/{embedded-voice-MGI7EK7C.js.map → model-policy-picker-menu-5ALKUJMR.js.map} +0 -0
  461. /package/dist/{platform-activity-row-ISMXR7NJ.js.map → platform-activity-row-227C764Z.js.map} +0 -0
  462. /package/dist/{queue-surface-implementation-ULW7DDJA.js.map → queue-surface-implementation-H3NOBXU5.js.map} +0 -0
  463. /package/dist/{model-policy-picker-menu-KP53N6UJ.js.map → sandbox-files-5FEOHUMD.js.map} +0 -0
  464. /package/dist/{sandbox-files-QYSD4XCZ.js.map → session-realtime-OHBMODNX.js.map} +0 -0
  465. /package/dist/{timeline-annotation-markers-OJYKHBEO.js.map → timeline-annotation-markers-NDHS7MCK.js.map} +0 -0
  466. /package/dist/{timeline-annotation-selection-6OAZLXFU.js.map → timeline-annotation-selection-DRQSTJOV.js.map} +0 -0
  467. /package/dist/{timeline-annotations-dialog-5M6DP5FX.js.map → timeline-annotations-dialog-G6J5ZJKN.js.map} +0 -0
@@ -1,47 +1,36 @@
1
1
  "use client";
2
2
  import {
3
- SessionHeader
4
- } from "./chunk-PQCFW2KT.js";
3
+ SubscriptionAccountIndicator,
4
+ subscriptionAccountProvider
5
+ } from "./chunk-R4U4EWZG.js";
6
+ import {
7
+ PrivateSessionIndicator
8
+ } from "./chunk-PLIOAQT4.js";
5
9
  import {
6
10
  PrimaryNav,
7
11
  RailHeader,
8
12
  SessionShellSlotsContext
9
- } from "./chunk-CA64OZLZ.js";
13
+ } from "./chunk-IRXPXDY5.js";
10
14
  import {
11
15
  CollapsedSessionsButton,
12
16
  SessionList
13
- } from "./chunk-JJ7VMIEQ.js";
14
- import {
15
- CodexAccountIndicator
16
- } from "./chunk-7H2D4VNU.js";
17
+ } from "./chunk-QCANSTLU.js";
17
18
  import {
18
- ModelAccountIndicator
19
- } from "./chunk-HCCSAECI.js";
19
+ SessionHeader
20
+ } from "./chunk-IDDHH5AQ.js";
20
21
  import {
21
22
  useSessionAdminAccess
22
23
  } from "./chunk-O4DYOSOL.js";
23
- import {
24
- PrivateSessionIndicator
25
- } from "./chunk-PLIOAQT4.js";
26
- import {
27
- notifySessionListChanged
28
- } from "./chunk-O5S57N6H.js";
29
- import {
30
- applySessionArchiveProjection
31
- } from "./chunk-OSI2QWSL.js";
32
24
  import {
33
25
  SessionComputeIndicator,
34
26
  sessionSupportsFleetSwitching
35
- } from "./chunk-4XKT4ENZ.js";
27
+ } from "./chunk-2Y3QL3DA.js";
36
28
  import {
37
29
  RAIL_DEFAULT_WIDTH,
38
30
  RAIL_MAX_WIDTH,
39
31
  RAIL_MIN_WIDTH,
40
32
  useRail
41
- } from "./chunk-6VITVQ23.js";
42
- import {
43
- useSessionRepliesMute
44
- } from "./chunk-TSQCKC34.js";
33
+ } from "./chunk-SHJ5SQOW.js";
45
34
  import {
46
35
  useUiEventTarget
47
36
  } from "./chunk-WGPLDFEC.js";
@@ -49,12 +38,21 @@ import {
49
38
  requestSessionUsageLimitEditor,
50
39
  sessionUsageLimitCapability
51
40
  } from "./chunk-RBRX5ZS3.js";
41
+ import {
42
+ useWorkspaceModelCatalog
43
+ } from "./chunk-EBW2E32G.js";
44
+ import {
45
+ notifySessionListChanged
46
+ } from "./chunk-O5S57N6H.js";
47
+ import {
48
+ applySessionArchiveProjection
49
+ } from "./chunk-OSI2QWSL.js";
50
+ import {
51
+ useSessionRepliesMute
52
+ } from "./chunk-TSQCKC34.js";
52
53
  import {
53
54
  useSessionUiFeature
54
55
  } from "./chunk-H5M33DAL.js";
55
- import {
56
- useWorkspaceModelCatalog
57
- } from "./chunk-KW53DBY7.js";
58
56
  import {
59
57
  BrandMark,
60
58
  Wordmark
@@ -103,9 +101,6 @@ import {
103
101
  import {
104
102
  SessionStartupProvider
105
103
  } from "./chunk-EMIVOS73.js";
106
- import {
107
- isCodexProductModel
108
- } from "./chunk-F2RMKGDQ.js";
109
104
  import {
110
105
  findPickerRow
111
106
  } from "./chunk-CFEFYPNR.js";
@@ -492,8 +487,10 @@ function SessionRouteHeader({
492
487
  const catalog = useWorkspaceModelCatalog(session.workspaceId);
493
488
  const selectedRow = findPickerRow(catalog.rows, displayModelId);
494
489
  const policyLoading = lastStarted.loading || catalog.loading;
495
- const credentialSource = selectedRow?.catalog.credentialSource;
496
- const subscriptionProvider = credentialSource?.kind === "connected_subscription" ? credentialSource.provider : null;
490
+ const accountProvider = subscriptionAccountProvider(
491
+ displayModelId,
492
+ selectedRow?.catalog.credentialSource
493
+ );
497
494
  const repliesMute = useSessionRepliesMute(session);
498
495
  const sessionAdminAccess = useSessionAdminAccess(session);
499
496
  const adminAccess = useSessionUiFeature("adminAccess") ? sessionAdminAccess : null;
@@ -578,22 +575,13 @@ function SessionRouteHeader({
578
575
  /* @__PURE__ */ jsx(PrivateSessionIndicator, {})
579
576
  ) : null,
580
577
  sandboxSlot: sessionSupportsFleetSwitching(session.sandboxBackend) ? /* @__PURE__ */ jsx(SessionComputeIndicator, { sessionId: session.id, sandboxBackend: session.sandboxBackend }) : null,
581
- codexSlot: policyReady && isCodexProductModel(displayModelId) ? /* @__PURE__ */ jsx(
582
- CodexAccountIndicator,
583
- {
584
- workspaceId: session.workspaceId,
585
- sessionId: session.id,
586
- model: displayModelId,
587
- modelReady: policyReady,
588
- events
589
- }
590
- ) : policyReady && subscriptionProvider ? /* @__PURE__ */ jsx(
591
- ModelAccountIndicator,
578
+ accountSlot: policyReady && accountProvider ? /* @__PURE__ */ jsx(
579
+ SubscriptionAccountIndicator,
592
580
  {
593
581
  workspaceId: session.workspaceId,
594
582
  sessionId: session.id,
595
583
  organizationId: context.workspaces.find((candidate) => candidate.id === session.workspaceId)?.accountId ?? null,
596
- provider: subscriptionProvider,
584
+ provider: accountProvider,
597
585
  servingTurnId: lastStarted.policy?.turnId,
598
586
  events
599
587
  }
@@ -606,4 +594,4 @@ export {
606
594
  RailBody,
607
595
  SessionShell
608
596
  };
609
- //# sourceMappingURL=chunk-DNLXQUBX.js.map
597
+ //# sourceMappingURL=chunk-RLS6PTL4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/components/rail/session-shell.tsx"],"sourcesContent":["// The session shell every session surface renders: the left rail (fixed and\n// resizable on desktop, an overlay drawer on phones), the canvas top strip with\n// the session header on session routes, and the canvas itself. Surface-owned\n// sections (workspace switcher, navigation extras, footer, banners) come in as\n// slots, so the web app and embeds share one shell and differ only in what they\n// put in it.\nimport type { SessionSummary } from \"@opengeni/sdk\";\nimport { MenuIcon, MessagesSquareIcon, Settings2Icon } from \"lucide-react\";\nimport {\n useCallback,\n useContext,\n useEffect,\n lazy,\n useId,\n useRef,\n useState,\n useSyncExternalStore,\n Suspense,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { toast } from \"../../lib/toast\";\n\nimport { findPickerRow } from \"../../../model-policy\";\nimport { useLastStartedTurnPolicy } from \"../../../hooks/use-last-started-turn-policy\";\nimport { useSessionLineage } from \"../../../hooks/use-session-lineage\";\nimport { BrandMark, Wordmark } from \"../brand-mark\";\nimport { SessionHeader } from \"./session-header\";\nimport { SessionStartupProvider } from \"../../../lib/session-startup\";\nimport {\n requestSessionUsageLimitEditor,\n sessionUsageLimitCapability,\n} from \"../../lib/session-usage-limit\";\nimport { RAIL_DEFAULT_WIDTH, RAIL_MAX_WIDTH, RAIL_MIN_WIDTH, useRail } from \"./rail-context\";\nimport { CollapsedSessionsButton, SessionList } from \"./session-list\";\nimport {\n PrimaryNav,\n RailHeader,\n SessionShellSlotsContext,\n type SessionShellSlots,\n} from \"./rail-sections\";\n\nexport {\n PrimaryNav,\n RailHeader,\n SessionShellSlotsProvider,\n type SessionShellSlots,\n} from \"./rail-sections\";\nimport {\n SessionComputeIndicator,\n sessionSupportsFleetSwitching,\n} from \"../session/sandbox-switcher\";\nimport { SubscriptionAccountIndicator } from \"../session/subscription-account-indicator\";\nimport { subscriptionAccountProvider } from \"../session/subscription-account\";\nimport { PrivateSessionIndicator } from \"../session/private-session-indicator\";\nimport { Button } from \"../../../ui/button\";\nimport { Sheet, SheetContent, SheetDescription, SheetTitle } from \"../../../ui/sheet\";\nimport { TooltipProvider } from \"../../../ui/tooltip\";\nimport { Link, useNavigate, useRouterState } from \"../../lib/navigation\";\nimport { useWorkspaceModelCatalog } from \"../../lib/use-workspace-model-catalog\";\nimport { useAppContext } from \"../../app-context\";\nimport { isPersonalWorkspace } from \"../../lib/managed-self-context\";\nimport { isIntelligenceEffort } from \"../../lib/session-tools\";\nimport { useSessionRepliesMute } from \"../../lib/inbox\";\nimport { useSessionAdminAccess } from \"../session/session-admin-access\";\nimport { applySessionArchiveProjection } from \"../../lib/session-pagination\";\nimport { notifySessionListChanged } from \"../../lib/session-list-invalidation\";\nimport type { Session } from \"../../types\";\nimport { cn } from \"../../lib/utils\";\nimport { windowControlsInPage } from \"../../lib/desktop\";\nimport { useSessionUiFeature } from \"../../lib/session-ui-features\";\nimport { useUiEventTarget } from \"../../lib/ui-events\";\n\nconst LazySessionTenancyRouteControl = lazy(() =>\n import(\"../session/session-tenancy-control\").then(({ SessionTenancyRouteControl }) => ({\n default: SessionTenancyRouteControl,\n })),\n);\n\n/** The rail body — shared between the fixed desktop column and the mobile drawer. */\nexport function RailBody() {\n const rail = useRail();\n const { switcher, mobileWorkspacePanel, railFooter } = useContext(SessionShellSlotsContext);\n const [mobileSection, setMobileSection] = useState<\"sessions\" | \"workspace\">(\"sessions\");\n const sessionsTabRef = useRef<HTMLButtonElement>(null);\n const workspaceTabRef = useRef<HTMLButtonElement>(null);\n // Unique per app, so two apps on one page never share these ids.\n const mobileNavId = `mobile-nav-${useId().replaceAll(\":\", \"\")}`;\n useEffect(() => {\n if (rail.drawerOpen) setMobileSection(\"sessions\");\n }, [rail.drawerOpen]);\n const moveMobileTab = (section: \"sessions\" | \"workspace\") => {\n setMobileSection(section);\n window.requestAnimationFrame(() =>\n (section === \"sessions\" ? sessionsTabRef : workspaceTabRef).current?.focus(),\n );\n };\n return (\n <div\n data-rail\n className=\"og-rail-glow isolate flex h-full min-h-0 flex-col overflow-hidden pt-[env(safe-area-inset-top)]\"\n >\n {/* Native macOS controls sit over this row. Keep it outside the clipped\n viewport so navigation cannot scroll underneath them. */}\n {windowControlsInPage ? (\n <div data-rail-window-controls className=\"relative z-10 shrink-0 pb-3\">\n <RailHeader showSwitcher={false} />\n </div>\n ) : null}\n <div\n data-rail-scroll-viewport\n className=\"relative z-0 min-h-0 flex-1 overflow-x-hidden overflow-y-auto overscroll-y-contain\"\n >\n <div className=\"flex min-h-full flex-col\">\n {!windowControlsInPage ? <RailHeader /> : null}\n\n {rail.collapsed || windowControlsInPage ? switcher : null}\n\n {rail.isMobile && mobileWorkspacePanel ? (\n <>\n <div\n role=\"tablist\"\n aria-label=\"Navigation section\"\n onKeyDown={(event) => {\n if (event.key === \"ArrowLeft\" || event.key === \"Home\") {\n event.preventDefault();\n moveMobileTab(\"sessions\");\n } else if (event.key === \"ArrowRight\" || event.key === \"End\") {\n event.preventDefault();\n moveMobileTab(\"workspace\");\n }\n }}\n className=\"mx-3 mt-3 grid shrink-0 grid-cols-2 rounded-lg bg-surface-2/70 p-1\"\n >\n <button\n ref={sessionsTabRef}\n id={`${mobileNavId}-tab-sessions`}\n type=\"button\"\n role=\"tab\"\n aria-selected={mobileSection === \"sessions\"}\n aria-controls={`${mobileNavId}-panel-sessions`}\n tabIndex={mobileSection === \"sessions\" ? 0 : -1}\n onClick={() => setMobileSection(\"sessions\")}\n className={cn(\n \"flex h-10 items-center justify-center gap-2 rounded-md text-sm font-normal transition-colors\",\n mobileSection === \"sessions\"\n ? \"bg-surface-3 text-fg shadow-sm\"\n : \"text-fg-label hover:text-fg\",\n )}\n >\n <MessagesSquareIcon className=\"size-4\" />\n Sessions\n </button>\n <button\n ref={workspaceTabRef}\n id={`${mobileNavId}-tab-workspace`}\n type=\"button\"\n role=\"tab\"\n aria-selected={mobileSection === \"workspace\"}\n aria-controls={`${mobileNavId}-panel-workspace`}\n tabIndex={mobileSection === \"workspace\" ? 0 : -1}\n onClick={() => setMobileSection(\"workspace\")}\n className={cn(\n \"flex h-10 items-center justify-center gap-2 rounded-md text-sm font-normal transition-colors\",\n mobileSection === \"workspace\"\n ? \"bg-surface-3 text-fg shadow-sm\"\n : \"text-fg-label hover:text-fg\",\n )}\n >\n <Settings2Icon className=\"size-4\" />\n Workspace\n </button>\n </div>\n {mobileSection === \"sessions\" ? (\n <div\n id={`${mobileNavId}-panel-sessions`}\n role=\"tabpanel\"\n aria-labelledby={`${mobileNavId}-tab-sessions`}\n className=\"mt-2 flex shrink-0 flex-col\"\n >\n <PrimaryNav />\n <SessionList />\n </div>\n ) : (\n <div\n id={`${mobileNavId}-panel-workspace`}\n role=\"tabpanel\"\n aria-labelledby={`${mobileNavId}-tab-workspace`}\n className=\"mt-2 flex shrink-0 flex-col border-t border-border pt-2\"\n >\n {mobileWorkspacePanel}\n </div>\n )}\n </>\n ) : (\n <>\n {/* Sessions are the primary object. Workspace administration remains\n secondary on desktop and becomes its own screen on phones. */}\n <PrimaryNav />\n <div className=\"mt-2 flex shrink-0 flex-col\">\n {rail.collapsed ? <CollapsedSessionsButton /> : <SessionList />}\n </div>\n </>\n )}\n </div>\n </div>\n {/* Keep the persistent controls above the scroll viewport, including\n session-row actions with their own stacking levels. The footer is a\n sibling of the clipped viewport, so it can stay transparent and let\n the rail glow run to the bottom edge. */}\n {railFooter ? (\n <div data-rail-footer className=\"relative z-10 shrink-0 border-t border-border\">\n {railFooter}\n </div>\n ) : null}\n </div>\n );\n}\n\n/**\n * The drag handle on the expanded rail's right edge. A quiet, wide-ish hit area\n * straddling the border: at rest it's invisible (the border is the only line);\n * on hover it thickens into a stronger line, and while dragging it wears the\n * brand tint. Double-click snaps back to the default width. Keyboard users get\n * the collapse toggle elsewhere; this is a pointer affordance (hidden from the\n * a11y tree beyond its separator role + label).\n */\nfunction RailResizeHandle({\n onStart,\n active,\n}: {\n onStart: (event: ReactPointerEvent) => void;\n active: boolean;\n}) {\n const rail = useRail();\n return (\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Resize sidebar\"\n onPointerDown={onStart}\n onDoubleClick={() => rail.setWidth(RAIL_DEFAULT_WIDTH)}\n className=\"group absolute inset-y-0 -right-1 z-20 w-2 cursor-col-resize touch-none select-none\"\n >\n <span\n className={cn(\n \"absolute inset-y-0 right-1 w-px transition-[width,background-color] duration-150\",\n active\n ? \"w-0.5 bg-brand/70\"\n : \"bg-transparent group-hover:w-0.5 group-hover:bg-border-strong\",\n )}\n />\n </div>\n );\n}\n\nconst NO_SLOTS: SessionShellSlots = {};\n\nexport function SessionShell({\n children,\n slots = NO_SLOTS,\n}: {\n children: ReactNode;\n slots?: SessionShellSlots | undefined;\n}) {\n return (\n <SessionShellSlotsContext.Provider value={slots}>\n <SessionShellFrame>{children}</SessionShellFrame>\n </SessionShellSlotsContext.Provider>\n );\n}\n\nfunction SessionShellFrame({ children }: { children: ReactNode }) {\n const rail = useRail();\n const chatList = useSessionUiFeature(\"chatList\");\n const context = useAppContext();\n const { canvasBanners } = useContext(SessionShellSlotsContext);\n const pathname = useRouterState({\n select: (state) => state.location.pathname,\n });\n // Focus returns here when the mobile drawer closes (D9.1): the drawer is a\n // controlled Sheet with no in-tree trigger, so radix can't restore focus on\n // its own — we point it back at the hamburger that opened it.\n const hamburgerRef = rail.drawerTriggerRef;\n\n // Live width while the reader drags the resize handle. Held locally (not in\n // context) so we don't write localStorage on every pointer move — the chosen\n // width is committed once on pointer-up. `null` means \"not resizing\".\n const [liveWidth, setLiveWidth] = useState<number | null>(null);\n const resizing = liveWidth !== null;\n // Teardown for an in-progress drag (remove window listeners + reset body\n // styles). Held in a ref so an unmount / route change MID-DRAG can run it —\n // otherwise the listeners and the col-resize cursor / no-select body styles\n // linger until an unrelated pointer release elsewhere.\n const endResizeRef = useRef<(() => void) | null>(null);\n const startResize = useCallback(\n (event: ReactPointerEvent) => {\n // Ignore anything but a primary-button / touch drag.\n if (event.button !== 0) {\n return;\n }\n event.preventDefault();\n const startX = event.clientX;\n const startWidth = rail.width;\n const clamp = (w: number) =>\n Math.min(RAIL_MAX_WIDTH, Math.max(RAIL_MIN_WIDTH, Math.round(w)));\n setLiveWidth(startWidth);\n document.body.style.userSelect = \"none\";\n document.body.style.cursor = \"col-resize\";\n const onMove = (moveEvent: PointerEvent) =>\n setLiveWidth(clamp(startWidth + (moveEvent.clientX - startX)));\n const teardown = () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n document.body.style.userSelect = \"\";\n document.body.style.cursor = \"\";\n endResizeRef.current = null;\n };\n const onUp = (upEvent: PointerEvent) => {\n rail.setWidth(clamp(startWidth + (upEvent.clientX - startX)));\n setLiveWidth(null);\n teardown();\n };\n endResizeRef.current = teardown;\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n },\n [rail],\n );\n // Unmount / route-change mid-drag: run the drag teardown so listeners and\n // body styles never leak.\n useEffect(() => () => endResizeRef.current?.(), []);\n\n // Close the mobile drawer on route change.\n useEffect(() => {\n if (rail.drawerOpen) {\n rail.setDrawerOpen(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pathname]);\n\n return (\n <TooltipProvider delayDuration={300}>\n <div\n className=\"flex h-full min-h-0 w-full flex-1 overflow-hidden\"\n // Lets page chrome (the desktop title bar) follow the rail without a\n // document-wide `:has()` selector.\n data-rail-collapsed={chatList && !rail.isMobile && rail.collapsed ? \"true\" : undefined}\n >\n {/* Fixed desktop rail — user-resizable when expanded. */}\n {chatList && !rail.isMobile ? (\n <nav\n aria-label=\"Primary\"\n data-collapsed={rail.collapsed}\n style={rail.collapsed ? undefined : { width: resizing ? liveWidth! : rail.width }}\n className={cn(\n \"relative shrink-0 border-r border-border\",\n // Animate the collapse/expand toggle, but never while dragging — a\n // transition there would lag the handle behind the pointer.\n !resizing && \"motion-safe:transition-[width] motion-safe:duration-150\",\n rail.collapsed && \"w-[56px]\",\n )}\n >\n <RailBody />\n {/* The drag handle only exists on the expanded desktop rail; the\n collapsed strip and the mobile drawer are fixed-width. */}\n {!rail.collapsed ? <RailResizeHandle onStart={startResize} active={resizing} /> : null}\n </nav>\n ) : null}\n\n {/* Mobile overlay drawer. */}\n {chatList && rail.isMobile ? (\n <Sheet open={rail.drawerOpen} onOpenChange={rail.setDrawerOpen}>\n <SheetContent\n side=\"left\"\n showCloseButton={false}\n aria-label=\"Session navigation\"\n className=\"w-screen max-w-none gap-0 p-0 sm:w-[380px] sm:max-w-[90vw]\"\n onCloseAutoFocus={(event) => {\n event.preventDefault();\n rail.restoreDrawerFocus();\n }}\n >\n <SheetTitle className=\"sr-only\">Session navigation</SheetTitle>\n <SheetDescription className=\"sr-only\">\n Browse workspace sessions or open Workspace.\n </SheetDescription>\n <nav aria-label=\"Primary\" className=\"h-full\">\n <RailBody />\n </nav>\n </SheetContent>\n </Sheet>\n ) : null}\n\n {/* Main canvas. */}\n <div data-canvas className=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden\">\n <SessionStartupProvider session={context.session}>\n <CanvasTopStrip hamburgerRef={hamburgerRef} />\n {canvasBanners}\n <div className=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden\">{children}</div>\n </SessionStartupProvider>\n </div>\n </div>\n </TooltipProvider>\n );\n}\n\n/**\n * The slim canvas top strip. On mobile it always shows (hamburger + brand). On\n * session routes it also carries the session title/status, the connection and\n * lock pills, and the inspector toggle — moved here from the old top header.\n */\nfunction CanvasTopStrip({ hamburgerRef }: { hamburgerRef: RefObject<HTMLButtonElement | null> }) {\n const rail = useRail();\n const chatList = useSessionUiFeature(\"chatList\");\n const brand = useSessionUiFeature(\"brand\");\n const context = useAppContext();\n const pathname = useRouterState({\n select: (state) => state.location.pathname,\n });\n const isSessionRoute = /\\/sessions\\/[^/]+/.test(pathname);\n const showSessionActions = Boolean(context.session) && isSessionRoute;\n const sharedFeed = useSyncExternalStore(\n context.sessionEventFeedStore.subscribe,\n context.sessionEventFeedStore.getSnapshot,\n context.sessionEventFeedStore.getSnapshot,\n );\n const sessionEvents =\n sharedFeed && sharedFeed.sessionId === context.session?.id ? sharedFeed.events : [];\n // The route owns the only session stream. An empty shared feed is still an\n // authoritative shared feed, so this header can never fall back to self-streaming.\n const lineage = useSessionLineage(context.session?.id ?? null, {\n events: sessionEvents,\n pollIntervalMs: 30_000,\n });\n const ancestors = lineage.lineage?.ancestors ?? [];\n\n // On desktop, the strip only renders when there is something to show.\n if (!rail.isMobile && !showSessionActions) {\n return null;\n }\n\n const hamburger =\n chatList && rail.isMobile ? (\n <Button\n ref={hamburgerRef}\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label=\"Open navigation\"\n onClick={() => {\n // On phones the workspace inspector is also a full-screen surface.\n // Make the two overlays mutually exclusive instead of stacking one\n // modal beneath another and trapping the navigation out of sight.\n context.setInspectorOpen(false);\n rail.setDrawerOpen(true);\n }}\n className=\"size-11\"\n >\n <MenuIcon className=\"size-4\" />\n </Button>\n ) : null;\n\n // Session route: the full identity + status header (its own bar). The live\n // sandbox switcher and codex indicator flow in as slots so the header stays a\n // pure, screenshot-testable component.\n if (showSessionActions && context.session) {\n // Both schedule facts come from one read, so a newer lineage never pairs\n // with an older session read (an older server sends no upcoming flag).\n const lineageSchedules = lineage.lineage?.sessionHasSchedules;\n return (\n <SessionRouteHeader\n session={{\n ...context.session,\n ...(lineageSchedules === undefined\n ? {}\n : {\n hasSchedules: lineageSchedules,\n hasUpcomingSchedules:\n lineage.lineage?.sessionHasUpcomingSchedules ?? lineageSchedules,\n }),\n }}\n ancestors={ancestors}\n lineageLoading={lineage.loading}\n lineageError={lineage.error}\n events={sessionEvents}\n hamburger={hamburger}\n />\n );\n }\n\n // Mobile, off a session route: the slim brand strip. A host without\n // Opengeni's brand keeps only the menu button, or no strip at all.\n if (!brand && !hamburger) return null;\n return (\n <header className=\"flex h-12 shrink-0 items-center gap-3 border-b border-border bg-canvas/75 px-3 backdrop-blur sm:px-4\">\n {hamburger}\n {brand ? (\n <Link\n to=\"/workspaces/$workspaceId/sessions\"\n params={{ workspaceId: rail.workspaceId }}\n className=\"flex items-center gap-2 text-fg\"\n >\n <BrandMark className=\"w-5\" />\n <Wordmark className=\"text-[17px]\" />\n </Link>\n ) : null}\n </header>\n );\n}\n\n/** Session-route header: last-admitted model·effort, not the composer next pick. */\nfunction SessionRouteHeader({\n session,\n ancestors,\n lineageLoading,\n lineageError,\n events,\n hamburger,\n}: {\n session: Session;\n ancestors: SessionSummary[];\n lineageLoading: boolean;\n lineageError: Error | null;\n events: import(\"@opengeni/sdk\").SessionEvent[];\n hamburger: ReactNode;\n}) {\n const uiEvents = useUiEventTarget(\"document\");\n const rail = useRail();\n const context = useAppContext();\n const lastStarted = useLastStartedTurnPolicy(session.id, {\n events,\n pollIntervalMs: 15_000,\n includeServingModel: true,\n });\n const lastStartedModel = lastStarted.policy?.model;\n const lastStartedReasoningEffort = isIntelligenceEffort(lastStarted.policy?.reasoningEffort)\n ? lastStarted.policy.reasoningEffort\n : undefined;\n const lastStartedLatencyMode = lastStarted.policy?.latencyMode;\n // Wait for last-started fetch before trusting session.model — creation default\n // can be a different rail than the newest admitted turn.\n const policyReady = !lastStarted.loading;\n const displayModelId = policyReady ? lastStartedModel || session.model : session.model;\n const navigate = useNavigate();\n const catalog = useWorkspaceModelCatalog(session.workspaceId);\n const selectedRow = findPickerRow(catalog.rows, displayModelId);\n const policyLoading = lastStarted.loading || catalog.loading;\n const accountProvider = subscriptionAccountProvider(\n displayModelId,\n selectedRow?.catalog.credentialSource,\n );\n const repliesMute = useSessionRepliesMute(session);\n const sessionAdminAccess = useSessionAdminAccess(session);\n const adminAccess = useSessionUiFeature(\"adminAccess\") ? sessionAdminAccess : null;\n const dock = useSessionUiFeature(\"dock\");\n const archiveInFlight = useRef(false);\n const onArchive = useCallback(\n async (target: Session, archived: boolean) => {\n if (archiveInFlight.current) return;\n const accepted = context.captureWorkspaceInvocation(target.workspaceId);\n if (!accepted) return;\n archiveInFlight.current = true;\n try {\n const updated = await context.client.updateSessionArchive(target.workspaceId, target.id, {\n archived,\n expectedVersion: target.archiveVersion ?? 0,\n });\n if (!context.ownsWorkspaceInvocation(target.workspaceId, accepted)) return;\n context.setSession((current) =>\n current?.id === updated.id && current.workspaceId === updated.workspaceId\n ? applySessionArchiveProjection(current, updated)\n : current,\n );\n notifySessionListChanged({\n workspaceId: target.workspaceId,\n sessionId: target.id,\n archived: updated.archived,\n });\n toast.success(updated.archived ? \"Chat archived.\" : \"Chat restored.\");\n } catch (error) {\n if (!context.ownsWorkspaceInvocation(target.workspaceId, accepted)) return;\n toast.error(archived ? \"Couldn't archive the chat.\" : \"Couldn't restore the chat.\", {\n description: error instanceof Error ? error.message : String(error),\n });\n } finally {\n archiveInFlight.current = false;\n }\n },\n [context],\n );\n\n return (\n <SessionHeader\n session={session}\n ancestors={ancestors}\n onOpenSchedule={\n session.hasSchedules\n ? () =>\n void navigate({\n to: \"/workspaces/$workspaceId/schedules\",\n params: { workspaceId: session.workspaceId },\n search: { targetSessionId: session.id },\n })\n : null\n }\n lineageLoading={lineageLoading}\n lineageError={lineageError}\n connectionState={context.connectionState}\n status={session.status}\n keyAuthRequired={context.keyAuthRequired}\n onForgetAccessKey={context.forgetAccessKey}\n inspectorOpen={context.inspectorOpen}\n onToggleInspector={\n dock\n ? () => {\n if (!context.inspectorOpen && rail.isMobile) rail.setDrawerOpen(false);\n context.setInspectorOpen((open) => !open);\n }\n : undefined\n }\n onRename={context.updateSessionTitle}\n onPin={(target, pinned) =>\n context.updateSessionPin(target.workspaceId, target.id, pinned, target.pinVersion ?? 0)\n }\n onArchive={onArchive}\n repliesMute={repliesMute}\n adminAccess={adminAccess}\n onOpenUsageLimit={\n // The editor lives in the session panel's Agent tab.\n sessionUsageLimitCapability(context.clientConfig) === \"absent\" || !dock\n ? null\n : () => requestSessionUsageLimitEditor(uiEvents)\n }\n leading={hamburger}\n lastStartedModel={lastStartedModel}\n lastStartedReasoningEffort={lastStartedReasoningEffort}\n lastStartedLatencyMode={lastStartedLatencyMode}\n billingClass={selectedRow?.billingClass}\n modelLabel={selectedRow?.label}\n modelLogoUrl={selectedRow?.catalog.logoUrl}\n policyLoading={policyLoading}\n accessSlot={\n session.tenancy ? (\n <Suspense fallback={null}>\n <LazySessionTenancyRouteControl session={session} events={events} />\n </Suspense>\n ) : isPersonalWorkspace(\n context.workspaces.find((candidate) => candidate.id === session.workspaceId) ?? null,\n context.managedSelfContext,\n ) ? (\n // Without a tenancy record there is no access control to show, but a\n // Personal workspace chat is still private: say so, read-only.\n <PrivateSessionIndicator />\n ) : null\n }\n sandboxSlot={\n sessionSupportsFleetSwitching(session.sandboxBackend) ? (\n <SessionComputeIndicator sessionId={session.id} sandboxBackend={session.sandboxBackend} />\n ) : null\n }\n accountSlot={\n policyReady && accountProvider ? (\n <SubscriptionAccountIndicator\n workspaceId={session.workspaceId}\n sessionId={session.id}\n organizationId={\n context.workspaces.find((candidate) => candidate.id === session.workspaceId)\n ?.accountId ?? null\n }\n provider={accountProvider}\n servingTurnId={lastStarted.policy?.turnId}\n events={events}\n />\n ) : null\n }\n />\n );\n}\n"],"mappings":"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","names":[]}
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-K3TJNJSU.js";
8
8
  import {
9
9
  t
10
- } from "./chunk-BPD4IJBG.js";
10
+ } from "./chunk-CG6CJMIS.js";
11
11
  import {
12
12
  formatWaitingSince
13
13
  } from "./chunk-6NXQCOLD.js";
@@ -912,4 +912,4 @@ export {
912
912
  visibleForestRows,
913
913
  channelRailSections
914
914
  };
915
- //# sourceMappingURL=chunk-CPKD2YGK.js.map
915
+ //# sourceMappingURL=chunk-RNU5CUPI.js.map
@@ -14,13 +14,13 @@ import {
14
14
  editableArtifactStatusLabel,
15
15
  useArtifactSubmissions,
16
16
  useEditableArtifactView
17
- } from "./chunk-G3FU2IF7.js";
17
+ } from "./chunk-TB7UW5BB.js";
18
18
  import {
19
19
  cn
20
20
  } from "./chunk-TXS65BB2.js";
21
21
  import {
22
22
  useOpenGeniText
23
- } from "./chunk-S6WJ6TUT.js";
23
+ } from "./chunk-ZEVJGMNB.js";
24
24
 
25
25
  // src/components/artifacts/document-editor.tsx
26
26
  import {
@@ -2314,4 +2314,4 @@ export {
2314
2314
  DocumentProjectionArtifactSurface,
2315
2315
  EditableDocumentArtifactSurface
2316
2316
  };
2317
- //# sourceMappingURL=chunk-467VRP4E.js.map
2317
+ //# sourceMappingURL=chunk-RO5YZQHZ.js.map
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-TXS65BB2.js";
12
12
  import {
13
13
  useOpenGeniText
14
- } from "./chunk-S6WJ6TUT.js";
14
+ } from "./chunk-ZEVJGMNB.js";
15
15
 
16
16
  // src/types/machines.ts
17
17
  function connectionStatusForState(state) {
@@ -2551,4 +2551,4 @@ export {
2551
2551
  EnrollmentDeviceFlow,
2552
2552
  EnrollmentConsent
2553
2553
  };
2554
- //# sourceMappingURL=chunk-SSZROOOI.js.map
2554
+ //# sourceMappingURL=chunk-ROLXYGT5.js.map
@@ -1,16 +1,16 @@
1
1
  "use client";
2
+ import {
3
+ requestCreateComposerFocus
4
+ } from "./chunk-HQA6FUM5.js";
5
+ import {
6
+ useUiEventTarget
7
+ } from "./chunk-WGPLDFEC.js";
2
8
  import {
3
9
  OPEN_SESSION_SEARCH_EVENT
4
10
  } from "./chunk-TXIIBNCA.js";
5
11
  import {
6
12
  workspaceManagementLocation
7
13
  } from "./chunk-3RWVKGQM.js";
8
- import {
9
- useUiEventTarget
10
- } from "./chunk-WGPLDFEC.js";
11
- import {
12
- requestCreateComposerFocus
13
- } from "./chunk-HQA6FUM5.js";
14
14
  import {
15
15
  desktopBridge,
16
16
  desktopCapability
@@ -333,4 +333,4 @@ export {
333
333
  useRail,
334
334
  RailProvider
335
335
  };
336
- //# sourceMappingURL=chunk-6VITVQ23.js.map
336
+ //# sourceMappingURL=chunk-SHJ5SQOW.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  TimelineAnnotationsChip
4
- } from "./chunk-3ZZOE4SN.js";
4
+ } from "./chunk-LOCDYMD6.js";
5
5
  import {
6
6
  Actions,
7
7
  AlternateSendButton,
@@ -26,7 +26,7 @@ import {
26
26
  StopButton,
27
27
  Surface,
28
28
  useChatComposerController
29
- } from "./chunk-MB2DTUEG.js";
29
+ } from "./chunk-DNYKLU3K.js";
30
30
 
31
31
  // src/components/chat-composer.tsx
32
32
  import { LayoutGroup, motion } from "motion/react";
@@ -191,4 +191,4 @@ function ChatComposer({
191
191
  export {
192
192
  ChatComposer
193
193
  };
194
- //# sourceMappingURL=chunk-F4B2YYCN.js.map
194
+ //# sourceMappingURL=chunk-TAWFXRXB.js.map
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  import {
3
3
  ArtifactButton
4
- } from "./chunk-6N7W3TOV.js";
4
+ } from "./chunk-63BPMTBM.js";
5
5
  import {
6
6
  cn
7
7
  } from "./chunk-TXS65BB2.js";
8
8
  import {
9
9
  useOpenGeniText
10
- } from "./chunk-S6WJ6TUT.js";
10
+ } from "./chunk-ZEVJGMNB.js";
11
11
 
12
12
  // src/components/artifacts/artifact-surface.tsx
13
13
  import {
@@ -336,4 +336,4 @@ export {
336
336
  asEditableArtifactError,
337
337
  EditableArtifactDownloadButton
338
338
  };
339
- //# sourceMappingURL=chunk-G3FU2IF7.js.map
339
+ //# sourceMappingURL=chunk-TB7UW5BB.js.map
@@ -4,14 +4,14 @@ import {
4
4
  } from "./chunk-HUKUDAIP.js";
5
5
  import {
6
6
  composerConnectorOptions
7
- } from "./chunk-7JZSFJHB.js";
7
+ } from "./chunk-3OJU3RUR.js";
8
8
  import {
9
9
  capabilityReconnectPlan,
10
10
  connectionHealth
11
11
  } from "./chunk-22NENBA3.js";
12
12
  import {
13
13
  ComposerMobilePlus
14
- } from "./chunk-GTR2WUBA.js";
14
+ } from "./chunk-KX6M5CJI.js";
15
15
  import {
16
16
  hasWorkspacePermission,
17
17
  isWorkspacePermissionDenied
@@ -264,4 +264,4 @@ function WorkspaceComposerPlus(props) {
264
264
  export {
265
265
  WorkspaceComposerPlus
266
266
  };
267
- //# sourceMappingURL=chunk-NF6Q4XTN.js.map
267
+ //# sourceMappingURL=chunk-TQF2I5SY.js.map
@@ -334,6 +334,7 @@ function ListRow({
334
334
  const gridded = !catalog;
335
335
  const hasColumns = gridded && columns.length > 0;
336
336
  const expandable = !table && expanded !== void 0;
337
+ const singleLine = !catalog;
337
338
  const presentFacts = columns.filter((column) => cells[column.id] != null);
338
339
  const facts = [
339
340
  ...presentFacts.filter((column) => column.leadsWhenFolded),
@@ -346,6 +347,7 @@ function ListRow({
346
347
  {
347
348
  order,
348
349
  keep: leads,
350
+ oneLine: singleLine,
349
351
  className: cn(
350
352
  hasColumns && "@[640px]/list:hidden",
351
353
  // A phone-width line has room for one folded fact (none next to a
@@ -368,16 +370,21 @@ function ListRow({
368
370
  ...facts.slice(0, leadingFacts).map((column, index) => foldedFact(column, index, index, true)),
369
371
  ...metaItems.map((item, index) => {
370
372
  const last = index === metaItems.length - 1;
371
- return (
372
- // oxlint-disable-next-line react/no-array-index-key -- meta items are positional
373
- /* @__PURE__ */ jsx(MetaPart, { order: leadingFacts + index, keep: !last, children: item }, `meta-${index}`)
373
+ return /* @__PURE__ */ jsx(
374
+ MetaPart,
375
+ {
376
+ order: leadingFacts + index,
377
+ keep: !last,
378
+ oneLine: singleLine,
379
+ children: item
380
+ },
381
+ `meta-${index}`
374
382
  );
375
383
  }),
376
384
  ...facts.slice(leadingFacts).map(
377
385
  (column, index) => foldedFact(column, leadingFacts + index, leadingFacts + metaItems.length + index, false)
378
386
  )
379
387
  ];
380
- const singleLine = !catalog;
381
388
  const statusPart = status ? /* @__PURE__ */ jsx(MetaPart, { keep: true, className: "@[480px]/list:hidden", children: status }, "status") : null;
382
389
  const narrowStatePart = singleLine && narrowState ? /* @__PURE__ */ jsx(
383
390
  MetaPart,
@@ -558,16 +565,25 @@ function ListRow({
558
565
  children: [
559
566
  secondary && !(disabled && disabledReason) ? /* @__PURE__ */ jsx("span", { id: secondaryId, className: "min-w-0 shrink truncate text-fg-muted", children: secondary }) : null,
560
567
  keptLeadParts.length > 0 ? /* @__PURE__ */ jsx("span", { className: "flex shrink-0 items-center", children: keptLeadParts }) : null,
561
- restLineParts.length > 0 ? /* @__PURE__ */ jsx(
562
- "span",
563
- {
564
- className: cn(
565
- "flex min-w-0 shrink-[2] items-center overflow-hidden",
566
- // No description: drop the first part's leading dot.
567
- !(secondary && !(disabled && disabledReason)) && "-ml-4"
568
- ),
569
- children: restLineParts
570
- }
568
+ restLineParts.length > 0 ? (
569
+ // One line tall and wrapping: a part with no room for a few
570
+ // letters wraps onto the clipped second line and disappears
571
+ // whole, instead of staying behind as a lone dot. The empty
572
+ // first item lets even the first part wrap away.
573
+ /* @__PURE__ */ jsxs(
574
+ "span",
575
+ {
576
+ className: cn(
577
+ "flex h-4.5 min-w-0 shrink-[2] flex-wrap content-start items-center overflow-hidden",
578
+ // No description: drop the first part's leading dot.
579
+ !(secondary && !(disabled && disabledReason)) && "-ml-4"
580
+ ),
581
+ children: [
582
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "h-4.5 w-0 shrink-0" }),
583
+ restLineParts
584
+ ]
585
+ }
586
+ )
571
587
  ) : null,
572
588
  trailingParts.length > 0 ? /* @__PURE__ */ jsx(
573
589
  "span",
@@ -697,15 +713,24 @@ function MetaPart({
697
713
  children,
698
714
  hidden = false,
699
715
  order = 0,
700
- keep = false
716
+ keep = false,
717
+ oneLine = false
701
718
  }) {
719
+ const sizing = keep ? { flexShrink: 0 } : oneLine ? (
720
+ // Earlier parts fill to their full width before later ones grow past
721
+ // their few letters, so the line still gives way from the end.
722
+ { flexBasis: "3.5rem", flexGrow: 64 ** (4 - Math.min(order, 4)), flexShrink: 0 }
723
+ ) : { flexShrink: 64 ** Math.min(order, 4) };
702
724
  return /* @__PURE__ */ jsxs(
703
725
  "span",
704
726
  {
705
727
  "aria-hidden": hidden || void 0,
706
- style: { flexShrink: keep ? 0 : 64 ** Math.min(order, 4) },
728
+ style: sizing,
707
729
  className: cn(
708
- "flex max-w-full min-w-0 items-center overflow-hidden whitespace-nowrap",
730
+ "flex min-w-0 items-center overflow-hidden whitespace-nowrap",
731
+ // max-content caps the growth; the 3.5rem basis is the most a part
732
+ // asks for before it fits, so a short fact never gains empty space.
733
+ oneLine && !keep ? "max-w-max" : "max-w-full",
709
734
  className
710
735
  ),
711
736
  children: [
@@ -779,4 +804,4 @@ export {
779
804
  ListRow,
780
805
  ListRowSkeleton
781
806
  };
782
- //# sourceMappingURL=chunk-MM7OKOTE.js.map
807
+ //# sourceMappingURL=chunk-UBXHP224.js.map