@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
@@ -3,19 +3,31 @@ import {
3
3
  GrantSessionAdminAccessDialog,
4
4
  SessionAdminAccessIndicator
5
5
  } from "./chunk-O4DYOSOL.js";
6
+ import {
7
+ SessionAncestryBreadcrumb
8
+ } from "./chunk-KYL2BPS2.js";
6
9
  import {
7
10
  SiteOriginLink
8
11
  } from "./chunk-MVZYNZXE.js";
9
- import {
10
- SessionAncestryBreadcrumb
11
- } from "./chunk-CYO5HL4C.js";
12
12
  import {
13
13
  useActionShortcut,
14
14
  useChatOperations
15
- } from "./chunk-OHG2UQ2O.js";
15
+ } from "./chunk-YWP2H7SX.js";
16
+ import {
17
+ RENAME_CURRENT_CHAT_EVENT
18
+ } from "./chunk-SHJ5SQOW.js";
19
+ import {
20
+ useUiEventTarget
21
+ } from "./chunk-WGPLDFEC.js";
22
+ import {
23
+ useInlineRename
24
+ } from "./chunk-7J7PZB4S.js";
16
25
  import {
17
26
  pinLiveAnnouncement
18
27
  } from "./chunk-GLYJV66C.js";
28
+ import {
29
+ requestConversationFind
30
+ } from "./chunk-7ZEGSUR7.js";
19
31
  import {
20
32
  currentPhoneAppPlatform,
21
33
  openInAppUrl
@@ -23,27 +35,15 @@ import {
23
35
  import {
24
36
  sessionControlPaused
25
37
  } from "./chunk-E36IC3LU.js";
26
- import {
27
- RENAME_CURRENT_CHAT_EVENT
28
- } from "./chunk-6VITVQ23.js";
29
- import {
30
- requestConversationFind
31
- } from "./chunk-7ZEGSUR7.js";
32
- import {
33
- useUiEventTarget
34
- } from "./chunk-WGPLDFEC.js";
35
- import {
36
- useInlineRename
37
- } from "./chunk-7J7PZB4S.js";
38
38
  import {
39
39
  BillingClassMark
40
- } from "./chunk-M7YEZR6X.js";
40
+ } from "./chunk-ZITMDA4C.js";
41
41
  import {
42
42
  ConnectionPill
43
43
  } from "./chunk-G46333YC.js";
44
44
  import {
45
45
  t
46
- } from "./chunk-BPD4IJBG.js";
46
+ } from "./chunk-CG6CJMIS.js";
47
47
  import {
48
48
  labelEffort
49
49
  } from "./chunk-L6Y4ALSM.js";
@@ -69,7 +69,7 @@ import {
69
69
  SESSION_STATUS_META,
70
70
  SessionStatus,
71
71
  StatusDot
72
- } from "./chunk-FH75NNLB.js";
72
+ } from "./chunk-OZ5NAXCP.js";
73
73
  import {
74
74
  useSessionStartup
75
75
  } from "./chunk-EMIVOS73.js";
@@ -115,6 +115,11 @@ import {
115
115
  } from "lucide-react";
116
116
  import { useCallback, useEffect, useRef, useState } from "react";
117
117
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
118
+ var SUBSCRIPTION_RAILS = /* @__PURE__ */ new Set([
119
+ "codex_subscription",
120
+ "claude_subscription",
121
+ "supergrok_subscription"
122
+ ]);
118
123
  function SessionHeader({
119
124
  session,
120
125
  ancestors,
@@ -134,7 +139,7 @@ function SessionHeader({
134
139
  adminAccess,
135
140
  onOpenUsageLimit,
136
141
  sandboxSlot,
137
- codexSlot,
142
+ accountSlot,
138
143
  accessSlot,
139
144
  leading,
140
145
  lastStartedModel,
@@ -160,7 +165,7 @@ function SessionHeader({
160
165
  const resolvedModel = modelLabel?.trim() || modelDisplayName(modelId);
161
166
  const displayEffort = lastStartedReasoningEffort ?? session.reasoningEffort;
162
167
  const displayLatency = lastStartedLatencyMode ?? session.latencyMode;
163
- const isCodexRail = resolvedBilling === "codex_subscription";
168
+ const isSubscriptionRail = SUBSCRIPTION_RAILS.has(resolvedBilling);
164
169
  const policyBits = [
165
170
  resolvedModel,
166
171
  labelEffort(displayEffort),
@@ -183,10 +188,10 @@ function SessionHeader({
183
188
  uiEvents.addEventListener(RENAME_CURRENT_CHAT_EVENT, start);
184
189
  return () => uiEvents.removeEventListener(RENAME_CURRENT_CHAT_EVENT, start);
185
190
  }, [uiEvents, startRenaming]);
186
- const providerControl = isCodexRail ? codexSlot ?? /* @__PURE__ */ jsx(
191
+ const providerControl = isSubscriptionRail ? accountSlot ?? /* @__PURE__ */ jsx(
187
192
  BillingClassMark,
188
193
  {
189
- billingClass: "codex_subscription",
194
+ billingClass: resolvedBilling,
190
195
  className: "size-3.5 shrink-0 text-fg-muted",
191
196
  "aria-label": ""
192
197
  }
@@ -678,4 +683,4 @@ function SessionTitleEditor(props) {
678
683
  export {
679
684
  SessionHeader
680
685
  };
681
- //# sourceMappingURL=chunk-PQCFW2KT.js.map
686
+ //# sourceMappingURL=chunk-IDDHH5AQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/components/rail/session-header.tsx"],"sourcesContent":["// The session header bar — the slim canvas top strip's contents on a session\n// route. Split out of the session shell as a PURE, presentational component: it takes\n// plain session data + callbacks and renders the two-line identity block\n// (breadcrumb → title) on the left and the action cluster on the right\n// (provider+model·effort·speed, sandbox, pin, connection, status, panel).\n// The live children that need their own hooks — the sandbox switcher and the\n// subscription account control — arrive as slots so the whole bar can be rendered\n// (and screenshotted) in isolation. `CanvasTopStrip` in session-shell owns the\n// data wiring and passes the real slots.\nimport { t } from \"../../lib/console-text\";\nimport { OPEN_WORKSTREAM_CONTROL_EVENT } from \"../../../workstream-control-event\";\nimport {\n SessionStatus as SessionStatusBadge,\n SESSION_STATUS_META,\n StatusDot,\n} from \"../../../components/session-status\";\nimport { sessionDisplayStatus, type SessionDisplayStatus } from \"../../../session-status-model\";\nimport { ModelMark } from \"../../../components/model-mark\";\nimport { modelDisplayName } from \"@opengeni/sdk/model-display\";\nimport type { SessionEventsConnectionState } from \"../../../hooks/use-session-events\";\nimport type { SessionSummary } from \"@opengeni/sdk\";\nimport { SiteOriginLink } from \"../session/site-origin-link\";\nimport {\n ArchiveIcon,\n ArchiveRestoreIcon,\n BellIcon,\n BellOffIcon,\n CalendarClockIcon,\n CalendarOffIcon,\n GaugeIcon,\n LinkIcon,\n LockIcon,\n MoreHorizontalIcon,\n PanelRightCloseIcon,\n PanelRightOpenIcon,\n PauseIcon,\n PencilIcon,\n PinIcon,\n SearchIcon,\n ShieldCheckIcon,\n ShieldOffIcon,\n SmartphoneIcon,\n} from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState, type ReactNode } from \"react\";\n\nimport { BillingClassMark, type BillingClass } from \"../billing-class-mark\";\nimport { ConnectionPill } from \"../common\";\nimport {\n GrantSessionAdminAccessDialog,\n SessionAdminAccessIndicator,\n type SessionAdminAccessControl,\n} from \"../session/session-admin-access\";\nimport { SessionAncestryBreadcrumb } from \"../session/subagents\";\nimport { Button } from \"../../../ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuMeta,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from \"../../../ui/dropdown-menu\";\nimport { useActionShortcut } from \"../../lib/actions/actions-provider\";\nimport { useChatOperations } from \"../../lib/actions/chat-operations\";\nimport { RENAME_CURRENT_CHAT_EVENT } from \"../../lib/actions/events\";\nimport { Skeleton } from \"../../../ui/skeleton\";\nimport { requestConversationFind } from \"../../lib/conversation-find-event\";\nimport { currentPhoneAppPlatform, openInAppUrl } from \"../../lib/open-in-app\";\nimport {\n sessionControlPaused,\n sessionHasUpcomingSchedule,\n sessionInputWait,\n} from \"../../lib/session-rail\";\nimport { useSessionStartup } from \"../../../lib/session-startup\";\nimport { isCodexProductModel } from \"../../lib/session-model\";\nimport {\n SESSION_TITLE_MAX_LENGTH,\n sessionDisplayTitle,\n useInlineRename,\n type InlineRename,\n} from \"../../lib/session-rename\";\nimport { pinLiveAnnouncement } from \"../../lib/pin-live-announcement\";\nimport type { SessionRepliesMute } from \"../../lib/inbox\";\nimport { labelEffort, type IntelligenceEffort } from \"../../lib/session-tools\";\nimport type { LatencyMode, Session } from \"../../types\";\nimport { usePage } from \"../../lib/navigation\";\nimport { useUiEventTarget } from \"../../lib/ui-events\";\n\nconst SUBSCRIPTION_RAILS: ReadonlySet<BillingClass> = new Set([\n \"codex_subscription\",\n \"claude_subscription\",\n \"supergrok_subscription\",\n]);\n\nexport function SessionHeader({\n session,\n ancestors,\n onOpenSchedule,\n lineageLoading,\n lineageError,\n connectionState,\n status,\n keyAuthRequired,\n onForgetAccessKey,\n inspectorOpen,\n onToggleInspector,\n onRename,\n onPin,\n onArchive,\n repliesMute,\n adminAccess,\n onOpenUsageLimit,\n sandboxSlot,\n accountSlot,\n accessSlot,\n leading,\n lastStartedModel,\n lastStartedReasoningEffort,\n lastStartedLatencyMode,\n billingClass,\n modelLabel,\n modelLogoUrl,\n policyLoading,\n}: {\n session: Session;\n /** Root-to-direct-parent order. */\n ancestors: SessionSummary[];\n /**\n * Present only when a scheduled task started this session. Opens that task on\n * the Schedules page so the reader can see or edit what put this here.\n */\n onOpenSchedule?: ((() => void) | null) | undefined;\n lineageLoading?: boolean | undefined;\n lineageError?: Error | null | undefined;\n connectionState: SessionEventsConnectionState;\n status: Session[\"status\"];\n keyAuthRequired: boolean;\n onForgetAccessKey: () => void;\n inspectorOpen: boolean;\n /** Absent: the surface shows no session panel, so no toggle. */\n onToggleInspector?: (() => void) | undefined;\n onRename: (workspaceId: string, sessionId: string, title: string) => Promise<Session | null>;\n onPin: (session: Session, pinned: boolean) => Promise<Session | null>;\n /** Archives or restores this root session. Absent hides the action. */\n onArchive?: ((session: Session, archived: boolean) => Promise<void>) | undefined;\n /**\n * The signed-in person's mute on this session's replies. Absent hides the\n * action (sub-agents, people without an inbox, servers without it).\n */\n repliesMute?: SessionRepliesMute | null | undefined;\n /**\n * This session's admin access, when the viewer can see it on or give it.\n * Absent hides the shield and the menu action.\n */\n adminAccess?: SessionAdminAccessControl | null | undefined;\n /**\n * Opens this chat's usage limit (Agent tab > Usage). Absent hides the menu\n * item, for servers without usage limits.\n */\n onOpenUsageLimit?: ((() => void) | null) | undefined;\n /** The \"Run on <machine>\" control — a live component in production. */\n sandboxSlot?: ReactNode | undefined;\n /**\n * Replaces the static provider mark when the session runs on a subscription\n * (Codex, Claude, SuperGrok): the same mark, clickable for the account and\n * its usage. Absent for other payment rails.\n */\n accountSlot?: ReactNode | undefined;\n /** Compact session access state/menu, lazy-mounted by the route shell. */\n accessSlot?: ReactNode | undefined;\n /** Leading control (the mobile hamburger); absent on desktop. */\n leading?: ReactNode | undefined;\n /**\n * Model·effort·latency from the newest turn that durably emitted `turn.started`.\n * Historical — does not follow the composer next-turn picker. Falls back to\n * session creation defaults before any turn has admitted.\n */\n lastStartedModel?: string | undefined;\n lastStartedReasoningEffort?: IntelligenceEffort | undefined;\n lastStartedLatencyMode?: LatencyMode | undefined;\n /** Billing rail: subscription account chip, or the mark for makers without a logo. */\n billingClass?: BillingClass | undefined;\n /** Product model label (e.g. GPT-5.6 Luna). */\n modelLabel?: string | undefined;\n modelLogoUrl?: string | undefined;\n /**\n * True while last-started policy and/or model catalog are still resolving.\n * Avoids flashing session defaults (wrong provider) before admitted truth.\n */\n policyLoading?: boolean | undefined;\n}) {\n const uiEvents = useUiEventTarget(\"document\");\n const page = usePage();\n const waiting = sessionInputWait({ ...session, status });\n // A paused or finished schedule still links to its settings, marked inactive.\n const upcomingSchedule = sessionHasUpcomingSchedule(session);\n // A session the runtime could not start reads as stuck, not \"Waiting on you\".\n const displayStatus = sessionDisplayStatus({\n status,\n admissionBlock: session.admissionBlock,\n });\n const startup = useSessionStartup({ ...session, status });\n const startupLabel =\n startup === \"starting\"\n ? \"Starting\"\n : startup === \"delayed\" || startup === \"retrying\"\n ? \"Waiting to start\"\n : undefined;\n const modelId = lastStartedModel?.trim() || session.model;\n const resolvedBilling: BillingClass =\n billingClass ?? (isCodexProductModel(modelId) ? \"codex_subscription\" : \"opengeni_credits\");\n const resolvedModel = modelLabel?.trim() || modelDisplayName(modelId);\n const displayEffort: IntelligenceEffort = lastStartedReasoningEffort ?? session.reasoningEffort;\n const displayLatency: LatencyMode = lastStartedLatencyMode ?? session.latencyMode;\n // Subscription rails → clickable account chip, the same for every provider.\n // Other rails → static provider icon only (never invent a text\n // \"Opengeni\"/\"BYOK\" word). Don't key off `accountSlot != null`.\n const isSubscriptionRail = SUBSCRIPTION_RAILS.has(resolvedBilling);\n const policyBits = [\n resolvedModel,\n labelEffort(displayEffort),\n displayLatency === \"fast\"\n ? \"Fast\"\n : displayLatency === \"ultrafast\"\n ? \"Ultrafast\"\n : displayLatency === \"priority\"\n ? \"Priority\"\n : null,\n ].filter((bit): bit is string => Boolean(bit));\n const rename = useInlineRename(session, onRename);\n const pin = useSessionPinToggle(session, onPin);\n const canArchive = Boolean(onArchive) && session.parentSessionId === null;\n const [grantAdminOpen, setGrantAdminOpen] = useState(false);\n // Menu actions that move focus (rename input, find field) run after the menu\n // has closed, so its focus restoration cannot steal focus back to the trigger.\n const afterMenuClose = useRef<(() => void) | null>(null);\n const chatOps = useChatOperations();\n const findKeys = useActionShortcut(\"chat.find\");\n const copyLinkKeys = useActionShortcut(\"chat.copyLink\");\n const pinKeys = useActionShortcut(\"chat.pin\");\n const archiveKeys = useActionShortcut(\"chat.archive\");\n const panelKeys = useActionShortcut(\"view.workspacePanel\");\n // \"Rename\" from the ⌘K menu or the desktop menu bar edits this title.\n const startRenaming = rename.startEditing;\n useEffect(() => {\n const start = () => startRenaming();\n uiEvents.addEventListener(RENAME_CURRENT_CHAT_EVENT, start);\n return () => uiEvents.removeEventListener(RENAME_CURRENT_CHAT_EVENT, start);\n }, [uiEvents, startRenaming]);\n const providerControl = isSubscriptionRail ? (\n (accountSlot ?? (\n <BillingClassMark\n billingClass={resolvedBilling}\n className=\"size-3.5 shrink-0 text-fg-muted\"\n aria-label=\"\"\n />\n ))\n ) : (\n // The model maker's logo; the payment rail only when the maker has none.\n <ModelMark\n model={{ id: modelId, logoUrl: modelLogoUrl }}\n className=\"size-3.5 text-fg-muted\"\n fallback={<BillingClassMark billingClass={resolvedBilling} className=\"size-3.5 shrink-0\" />}\n />\n );\n return (\n // An elevated band, not just canvas-with-a-hairline: reading as a real top\n // bar was the light-theme fix — a near-white header on a near-white canvas\n // needs its own surface + a crisp divider to look intentional (and it lifts\n // the dark bar a touch above the canvas too).\n <header\n data-window-drag\n data-titlebar\n className=\"@container/titlebar flex min-h-14 min-w-0 shrink-0 items-center gap-1 border-b border-border bg-canvas/80 pb-1 pl-[max(clamp(0.5rem,2.5vw,1.25rem),env(safe-area-inset-left))] pr-[max(clamp(0.5rem,2.5vw,1.25rem),env(safe-area-inset-right))] pt-[max(0.375rem,env(safe-area-inset-top))] backdrop-blur supports-[backdrop-filter]:bg-canvas/65 flex-wrap\"\n >\n {leading}\n {/* The title takes every pixel the actions leave; it truncates last. */}\n <div className=\"flex min-w-20 flex-[1_1_5rem] flex-col justify-center gap-0.5\">\n {/* Child sessions link back to the manager that spawned them, and a\n session links to its current schedules. */}\n <div className=\"flex min-w-0 items-center gap-1.5\">\n <SessionAncestryBreadcrumb\n workspaceId={session.workspaceId}\n parentSessionId={session.parentSessionId}\n ancestors={ancestors}\n loading={lineageLoading}\n error={lineageError}\n />\n <SiteOriginLink session={session} />\n {onOpenSchedule ? (\n <button\n type=\"button\"\n onClick={onOpenSchedule}\n className=\"inline-flex shrink-0 items-center gap-1 rounded border border-border px-1.5 py-0.5 text-2xs text-fg-muted transition-colors hover:border-border-strong hover:text-fg\"\n title={\n upcomingSchedule\n ? \"Open schedules for this session\"\n : \"No upcoming runs. Open schedules for this session\"\n }\n >\n {upcomingSchedule ? (\n <CalendarClockIcon aria-hidden className=\"size-3\" />\n ) : (\n <CalendarOffIcon aria-hidden className=\"size-3\" />\n )}\n Schedule\n </button>\n ) : null}\n </div>\n <div className=\"flex min-w-0 items-center gap-1.5\">\n <SessionTitleEditor session={session} rename={rename} />\n {/* Below lg the lifecycle is a dot beside the title; the full badge\n and connection pill take over from lg. */}\n <CompactSessionStatus\n paused={sessionControlPaused(session)}\n waiting={Boolean(waiting)}\n status={displayStatus}\n label={startupLabel}\n />\n {accessSlot}\n {adminAccess ? (\n <SessionAdminAccessIndicator\n control={adminAccess}\n onChangeTimeLimit={() => setGrantAdminOpen(true)}\n />\n ) : null}\n </div>\n </div>\n <div className=\"ml-auto flex shrink-0 items-center justify-end gap-0.5 lg:min-w-0 lg:max-w-full lg:shrink lg:flex-wrap lg:gap-2\">\n {/* Provider + model · effort · speed stay one cluster on the action side. */}\n <div className=\"hidden min-w-0 max-w-[min(100%,18rem)] items-center gap-1.5 overflow-hidden text-2xs leading-4 text-fg-muted lg:flex xl:max-w-[22rem]\">\n {policyLoading ? (\n <span\n className=\"inline-flex items-center gap-1.5\"\n aria-busy=\"true\"\n aria-label=\"Loading model\"\n >\n <Skeleton className=\"h-6 w-11 shrink-0 rounded-full\" />\n <Skeleton className=\"h-3 w-36\" />\n </span>\n ) : (\n <span className=\"inline-flex min-w-0 items-center gap-1.5 truncate font-medium text-fg-muted\">\n {providerControl}\n <span className=\"min-w-0 truncate font-normal\">\n {policyBits.map((bit, index) => (\n <span key={bit}>\n {index > 0 ? \" · \" : null}\n {bit}\n </span>\n ))}\n </span>\n </span>\n )}\n </div>\n {/* Below lg, machine, find and pin live in the \"…\" menu. */}\n <span className=\"hidden min-w-0 lg:contents\">{sandboxSlot}</span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => requestConversationFind(uiEvents)}\n aria-label=\"Find in conversation\"\n data-conversation-find-trigger=\"\"\n title=\"Find in conversation (Ctrl/Cmd+F)\"\n className=\"hidden pointer-coarse:size-11 lg:inline-flex\"\n >\n <SearchIcon className=\"size-4\" />\n </Button>\n <Button\n type=\"button\"\n variant={session.pinned ? \"secondary\" : \"ghost\"}\n size=\"icon-sm\"\n aria-label={session.pinned ? \"Unpin session\" : \"Pin session\"}\n aria-pressed={Boolean(session.pinned)}\n aria-busy={pin.busy}\n disabled={pin.busy}\n className=\"hidden pointer-coarse:size-11 lg:inline-flex\"\n onClick={pin.toggle}\n >\n <PinIcon className={session.pinned ? \"size-4 fill-current\" : \"size-4\"} />\n </Button>\n <span className=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {pin.announcement}\n </span>\n <div className=\"hidden items-center gap-2 lg:flex\">\n <ConnectionPill state={connectionState} />\n {/* Admission vs lifecycle are different axes, but showing both when\n control is Active (Running + Active) is redundant noise. When\n paused, admission is the headline — hide lifecycle so we don't\n imply the session is still \"Running\"/\"Idle\" under a pause gate. */}\n {!sessionControlPaused(session) ? (\n waiting ? (\n <span\n className=\"inline-flex shrink-0 items-center gap-1.5 rounded-full border border-border bg-surface px-2 py-0.5 text-control font-medium text-fg-muted\"\n data-session-wait-badge=\"\"\n >\n <span aria-hidden className=\"size-1.5 rounded-full bg-current\" />\n Waiting\n </span>\n ) : (\n <SessionStatusBadge status={displayStatus} label={startupLabel} />\n )\n ) : (\n <WorkstreamControlIndicator session={session} />\n )}\n </div>\n <span className=\"sr-only lg:hidden\">Connection {connectionState}.</span>\n {keyAuthRequired ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={onForgetAccessKey}\n aria-label=\"Clear access key\"\n className=\"pointer-coarse:size-11\"\n >\n <LockIcon className=\"size-4\" />\n </Button>\n ) : null}\n {onToggleInspector ? (\n <Button\n type=\"button\"\n variant={inspectorOpen ? \"secondary\" : \"ghost\"}\n size=\"icon-sm\"\n onClick={onToggleInspector}\n aria-label={inspectorOpen ? \"Hide workspace\" : \"Open workspace\"}\n aria-keyshortcuts={panelKeys?.ariaKeys}\n title={\n (inspectorOpen ? \"Hide workspace\" : \"Open workspace\") +\n (panelKeys ? ` (${panelKeys.label})` : \"\")\n }\n className=\"pointer-coarse:size-11\"\n >\n {inspectorOpen ? (\n <PanelRightCloseIcon className=\"size-4\" />\n ) : (\n <PanelRightOpenIcon className=\"size-4\" />\n )}\n </Button>\n ) : null}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label=\"More session actions\"\n title=\"More\"\n className=\"pointer-coarse:size-11\"\n >\n <MoreHorizontalIcon className=\"size-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"w-56\"\n onCloseAutoFocus={(event) => {\n const action = afterMenuClose.current;\n if (!action) return;\n afterMenuClose.current = null;\n event.preventDefault();\n action();\n }}\n >\n <DropdownMenuItem\n className=\"lg:hidden\"\n aria-keyshortcuts={findKeys?.ariaKeys}\n onSelect={() => {\n afterMenuClose.current = () => requestConversationFind(uiEvents);\n }}\n >\n <SearchIcon />\n Find\n {findKeys ? <DropdownMenuShortcut>{findKeys.label}</DropdownMenuShortcut> : null}\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => {\n afterMenuClose.current = rename.startEditing;\n }}\n >\n <PencilIcon />\n Rename\n </DropdownMenuItem>\n <DropdownMenuItem\n aria-keyshortcuts={copyLinkKeys?.ariaKeys}\n onSelect={() => void chatOps.copyLink(session)}\n >\n <LinkIcon />\n Copy link\n {copyLinkKeys ? (\n <DropdownMenuShortcut>{copyLinkKeys.label}</DropdownMenuShortcut>\n ) : null}\n </DropdownMenuItem>\n <DropdownMenuItem\n className=\"lg:hidden\"\n aria-keyshortcuts={pinKeys?.ariaKeys}\n disabled={pin.busy}\n onSelect={() => pin.toggle()}\n >\n <PinIcon className={session.pinned ? \"fill-current\" : undefined} />\n {session.pinned ? \"Unpin\" : \"Pin\"}\n {pinKeys ? <DropdownMenuShortcut>{pinKeys.label}</DropdownMenuShortcut> : null}\n </DropdownMenuItem>\n {currentPhoneAppPlatform() ? (\n <DropdownMenuItem\n onSelect={() => {\n page.assign(openInAppUrl(page.href()));\n }}\n >\n <SmartphoneIcon />\n Open in app\n </DropdownMenuItem>\n ) : null}\n {sandboxSlot ? (\n <div className=\"flex min-h-9 items-center px-2 empty:hidden lg:hidden\">\n {sandboxSlot}\n </div>\n ) : null}\n {repliesMute ? (\n <DropdownMenuItem disabled={repliesMute.busy} onSelect={() => repliesMute.toggle()}>\n {repliesMute.muted ? <BellIcon /> : <BellOffIcon />}\n {repliesMute.muted ? \"Unmute replies\" : \"Mute replies\"}\n </DropdownMenuItem>\n ) : null}\n {onOpenUsageLimit ? (\n <DropdownMenuItem\n onSelect={() => {\n afterMenuClose.current = onOpenUsageLimit;\n }}\n >\n <GaugeIcon />\n Usage limit\n </DropdownMenuItem>\n ) : null}\n {adminAccess?.state.active && adminAccess.state.canRevoke ? (\n <DropdownMenuItem disabled={adminAccess.busy} onSelect={() => adminAccess.revoke()}>\n <ShieldOffIcon />\n Turn off admin access\n </DropdownMenuItem>\n ) : adminAccess && !adminAccess.state.active && adminAccess.state.canGrant ? (\n <DropdownMenuItem\n disabled={adminAccess.busy}\n onSelect={() => {\n afterMenuClose.current = () => setGrantAdminOpen(true);\n }}\n >\n <ShieldCheckIcon />\n Give admin access…\n </DropdownMenuItem>\n ) : null}\n {canArchive ? (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n aria-keyshortcuts={archiveKeys?.ariaKeys}\n onSelect={() => void onArchive?.(session, !session.archived)}\n >\n {session.archived ? <ArchiveRestoreIcon /> : <ArchiveIcon />}\n {session.archived ? \"Restore\" : \"Archive\"}\n {session.archived ? (\n <DropdownMenuMeta>Archived</DropdownMenuMeta>\n ) : archiveKeys ? (\n <DropdownMenuShortcut>{archiveKeys.label}</DropdownMenuShortcut>\n ) : null}\n </DropdownMenuItem>\n </>\n ) : null}\n </DropdownMenuContent>\n </DropdownMenu>\n {adminAccess ? (\n <GrantSessionAdminAccessDialog\n control={adminAccess}\n open={grantAdminOpen}\n onOpenChange={setGrantAdminOpen}\n />\n ) : null}\n </div>\n </header>\n );\n}\n\n/** Small-screen status: a dot beside the title, named for assistive tech. */\nfunction CompactSessionStatus({\n paused,\n waiting,\n status,\n label,\n}: {\n paused: boolean;\n waiting: boolean;\n status: SessionDisplayStatus;\n label?: string | undefined;\n}) {\n if (paused) {\n return (\n <span\n data-compact-session-status=\"paused\"\n title=\"Paused\"\n className=\"inline-flex shrink-0 items-center lg:hidden\"\n >\n <PauseIcon aria-hidden className=\"size-2.5 shrink-0 fill-current text-status-waiting\" />\n <span className=\"sr-only\">Paused</span>\n </span>\n );\n }\n if (waiting) {\n return (\n <span\n data-compact-session-status=\"waiting\"\n title=\"Waiting\"\n className=\"inline-flex shrink-0 items-center lg:hidden\"\n >\n <span aria-hidden className=\"size-2 rounded-full bg-status-waiting\" />\n <span className=\"sr-only\">Waiting</span>\n </span>\n );\n }\n const name = label ?? SESSION_STATUS_META(t)[status].label;\n return (\n <span\n data-compact-session-status={status}\n data-status={status}\n title={name}\n className=\"inline-flex shrink-0 items-center lg:hidden\"\n >\n <StatusDot status={status} className=\"size-2\" />\n <span className=\"sr-only\">{name}</span>\n </span>\n );\n}\n\n/** Pause-only header chip (Active is not shown — lifecycle status covers “go”). */\nfunction WorkstreamControlIndicator({ session }: { session: Session }) {\n const control = session.effectiveControl;\n if (control.state !== \"paused\" || session.status === \"cancelled\") {\n return null;\n }\n const blocker = control.primaryBlocker;\n const label =\n blocker?.kind === \"workspace\"\n ? \"Workspace paused\"\n : control.directState === \"paused\" || blocker?.sessionId === session.id\n ? \"Paused here\"\n : `Paused by ${blocker?.displayName ?? \"parent\"}`;\n return (\n <button\n type=\"button\"\n aria-label={`${label}. Open workstream controls`}\n title={`${label} · open workstream controls`}\n onClick={() => {\n document.dispatchEvent(new Event(OPEN_WORKSTREAM_CONTROL_EVENT));\n }}\n className=\"inline-flex min-w-0 max-w-48 items-center gap-1.5 rounded-full border border-status-waiting/35 bg-status-waiting/10 px-2 py-0.5 text-xs font-medium text-fg hover:bg-status-waiting/15\"\n >\n <PauseIcon className=\"size-3 shrink-0 fill-current text-status-waiting\" />\n <span className=\"hidden truncate sm:inline\">{label}</span>\n {control.additionalBlockerCount > 0 ? (\n <span className=\"hidden shrink-0 sm:inline\">+{control.additionalBlockerCount}</span>\n ) : null}\n </button>\n );\n}\n\n/** Pin toggle shared by the desktop pin button and the phone \"…\" menu item. */\nfunction useSessionPinToggle(\n session: Session,\n onPin: (session: Session, pinned: boolean) => Promise<Session | null>,\n) {\n const [busy, setBusy] = useState(false);\n const [announcement, setAnnouncement] = useState(\"\");\n const announcementSequence = useRef(0);\n const announce = useCallback((message: string) => {\n announcementSequence.current += 1;\n setAnnouncement(pinLiveAnnouncement(message, announcementSequence.current));\n }, []);\n const toggle = useCallback(() => {\n if (busy) return;\n const nextPinned = !session.pinned;\n setBusy(true);\n void onPin(session, nextPinned)\n .then((updated) => {\n announce(\n updated\n ? `Session ${nextPinned ? \"pinned\" : \"unpinned\"}.`\n : `Session was not ${nextPinned ? \"pinned\" : \"unpinned\"}.`,\n );\n })\n .catch(() => {\n announce(`Session was not ${nextPinned ? \"pinned\" : \"unpinned\"}.`);\n })\n .finally(() => setBusy(false));\n }, [announce, busy, onPin, session]);\n return { busy, toggle, announcement };\n}\n\n/**\n * The session header title — display by default, click the title (or the\n * hover pencil / \"…\" > Rename) to rename inline. Prefers the durable session.title\n * (agent- or user-set), falling back to the initial message / \"Untitled\n * session\" exactly like the rail list. Enter saves, Esc cancels, blur saves; an\n * empty/unchanged value is a no-op cancel. The live title (context.session)\n * flows in through the session.title_set SSE event the react useSession hook\n * applies, so cross-client renames and agent titling reflect here without a\n * reload. The shared `useInlineRename` hook keeps this behaviour identical to\n * the rail row's rename.\n */\nfunction SessionTitleEditor(props: { session: Session; rename: InlineRename }) {\n const display = sessionDisplayTitle(props.session);\n const rename = props.rename;\n\n if (rename.editing) {\n return (\n // A calm in-place edit: same size and position as the display title, a\n // soft surface tint + hairline instead of a loud focus ring. The global\n // focus-ring rule is what painted the old blue box; opting out here keeps\n // the rename feeling like editing the text, not filling in a form field.\n <input\n ref={rename.inputRef}\n data-session-title-current={display}\n value={rename.draft}\n onChange={(event) => rename.setDraft(event.target.value)}\n onBlur={() => void rename.commit()}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n void rename.commit();\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n rename.cancel();\n }\n }}\n maxLength={SESSION_TITLE_MAX_LENGTH}\n aria-label=\"Session title\"\n dir=\"auto\"\n className=\"-mx-1.5 w-full truncate rounded-md bg-surface-2/70 px-1.5 text-[15px] font-semibold leading-6 tracking-[-0.01em] outline-hidden ring-1 ring-border-strong focus:outline-hidden focus-visible:outline-hidden\"\n style={{ outline: \"none\" }}\n />\n );\n }\n\n return (\n <div className=\"group/title flex min-w-0 items-center gap-0.5\">\n <button\n type=\"button\"\n onClick={rename.startEditing}\n title={`${display} · click to rename`}\n dir=\"auto\"\n className=\"min-w-0 shrink truncate rounded-sm text-left text-[15px] font-semibold leading-6 tracking-[-0.01em] text-fg hover:text-fg focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring/40 pointer-coarse:min-h-11 pointer-coarse:px-2\"\n >\n {display}\n </button>\n {/* The pencil earns its pixels only when relevant: hidden at rest and\n revealed on hover/focus. Touch screens rename by tapping the title\n (or \"…\" > Rename), so the title keeps the row's width. */}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={rename.startEditing}\n aria-label=\"Rename session\"\n className=\"shrink-0 text-fg-subtle opacity-0 transition-opacity hover:text-fg focus-visible:opacity-100 group-hover/title:opacity-100 pointer-coarse:hidden\"\n >\n <PencilIcon className=\"size-3\" />\n </Button>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,SAAS,wBAAwB;AAIjC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,aAAa,WAAW,QAAQ,gBAAgC;AAiNnE,SA4SQ,UA5SR,KAuCM,YAvCN;AAnKN,IAAM,qBAAgD,oBAAI,IAAI;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAmEG;AACD,QAAM,WAAW,iBAAiB,UAAU;AAC5C,QAAM,OAAO,QAAQ;AACrB,QAAM,UAAU,iBAAiB,EAAE,GAAG,SAAS,OAAO,CAAC;AAEvD,QAAM,mBAAmB,2BAA2B,OAAO;AAE3D,QAAM,gBAAgB,qBAAqB;AAAA,IACzC;AAAA,IACA,gBAAgB,QAAQ;AAAA,EAC1B,CAAC;AACD,QAAM,UAAU,kBAAkB,EAAE,GAAG,SAAS,OAAO,CAAC;AACxD,QAAM,eACJ,YAAY,aACR,aACA,YAAY,aAAa,YAAY,aACnC,qBACA;AACR,QAAM,UAAU,kBAAkB,KAAK,KAAK,QAAQ;AACpD,QAAM,kBACJ,iBAAiB,oBAAoB,OAAO,IAAI,uBAAuB;AACzE,QAAM,gBAAgB,YAAY,KAAK,KAAK,iBAAiB,OAAO;AACpE,QAAM,gBAAoC,8BAA8B,QAAQ;AAChF,QAAM,iBAA8B,0BAA0B,QAAQ;AAItE,QAAM,qBAAqB,mBAAmB,IAAI,eAAe;AACjE,QAAM,aAAa;AAAA,IACjB;AAAA,IACA,YAAY,aAAa;AAAA,IACzB,mBAAmB,SACf,SACA,mBAAmB,cACjB,cACA,mBAAmB,aACjB,aACA;AAAA,EACV,EAAE,OAAO,CAAC,QAAuB,QAAQ,GAAG,CAAC;AAC7C,QAAM,SAAS,gBAAgB,SAAS,QAAQ;AAChD,QAAM,MAAM,oBAAoB,SAAS,KAAK;AAC9C,QAAM,aAAa,QAAQ,SAAS,KAAK,QAAQ,oBAAoB;AACrE,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,KAAK;AAG1D,QAAM,iBAAiB,OAA4B,IAAI;AACvD,QAAM,UAAU,kBAAkB;AAClC,QAAM,WAAW,kBAAkB,WAAW;AAC9C,QAAM,eAAe,kBAAkB,eAAe;AACtD,QAAM,UAAU,kBAAkB,UAAU;AAC5C,QAAM,cAAc,kBAAkB,cAAc;AACpD,QAAM,YAAY,kBAAkB,qBAAqB;AAEzD,QAAM,gBAAgB,OAAO;AAC7B,YAAU,MAAM;AACd,UAAM,QAAQ,MAAM,cAAc;AAClC,aAAS,iBAAiB,2BAA2B,KAAK;AAC1D,WAAO,MAAM,SAAS,oBAAoB,2BAA2B,KAAK;AAAA,EAC5E,GAAG,CAAC,UAAU,aAAa,CAAC;AAC5B,QAAM,kBAAkB,qBACrB,eACC;AAAA,IAAC;AAAA;AAAA,MACC,cAAc;AAAA,MACd,WAAU;AAAA,MACV,cAAW;AAAA;AAAA,EACb;AAAA;AAAA,IAIF;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,EAAE,IAAI,SAAS,SAAS,aAAa;AAAA,QAC5C,WAAU;AAAA,QACV,UAAU,oBAAC,oBAAiB,cAAc,iBAAiB,WAAU,qBAAoB;AAAA;AAAA,IAC3F;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE;AAAA,MAAC;AAAA;AAAA,QACC,oBAAgB;AAAA,QAChB,iBAAa;AAAA,QACb,WAAU;AAAA,QAET;AAAA;AAAA,UAED,qBAAC,SAAI,WAAU,iEAGb;AAAA,iCAAC,SAAI,WAAU,qCACb;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,aAAa,QAAQ;AAAA,kBACrB,iBAAiB,QAAQ;AAAA,kBACzB;AAAA,kBACA,SAAS;AAAA,kBACT,OAAO;AAAA;AAAA,cACT;AAAA,cACA,oBAAC,kBAAe,SAAkB;AAAA,cACjC,iBACC;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAS;AAAA,kBACT,WAAU;AAAA,kBACV,OACE,mBACI,oCACA;AAAA,kBAGL;AAAA,uCACC,oBAAC,qBAAkB,eAAW,MAAC,WAAU,UAAS,IAElD,oBAAC,mBAAgB,eAAW,MAAC,WAAU,UAAS;AAAA,oBAChD;AAAA;AAAA;AAAA,cAEJ,IACE;AAAA,eACN;AAAA,YACA,qBAAC,SAAI,WAAU,qCACb;AAAA,kCAAC,sBAAmB,SAAkB,QAAgB;AAAA,cAGtD;AAAA,gBAAC;AAAA;AAAA,kBACC,QAAQ,qBAAqB,OAAO;AAAA,kBACpC,SAAS,QAAQ,OAAO;AAAA,kBACxB,QAAQ;AAAA,kBACR,OAAO;AAAA;AAAA,cACT;AAAA,cACC;AAAA,cACA,cACC;AAAA,gBAAC;AAAA;AAAA,kBACC,SAAS;AAAA,kBACT,mBAAmB,MAAM,kBAAkB,IAAI;AAAA;AAAA,cACjD,IACE;AAAA,eACN;AAAA,aACF;AAAA,UACA,qBAAC,SAAI,WAAU,mHAEb;AAAA,gCAAC,SAAI,WAAU,yIACZ,0BACC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,aAAU;AAAA,gBACV,cAAW;AAAA,gBAEX;AAAA,sCAAC,YAAS,WAAU,kCAAiC;AAAA,kBACrD,oBAAC,YAAS,WAAU,YAAW;AAAA;AAAA;AAAA,YACjC,IAEA,qBAAC,UAAK,WAAU,+EACb;AAAA;AAAA,cACD,oBAAC,UAAK,WAAU,gCACb,qBAAW,IAAI,CAAC,KAAK,UACpB,qBAAC,UACE;AAAA,wBAAQ,IAAI,WAAQ;AAAA,gBACpB;AAAA,mBAFQ,GAGX,CACD,GACH;AAAA,eACF,GAEJ;AAAA,YAEA,oBAAC,UAAK,WAAU,8BAA8B,uBAAY;AAAA,YAC1D;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,SAAS,MAAM,wBAAwB,QAAQ;AAAA,gBAC/C,cAAW;AAAA,gBACX,kCAA+B;AAAA,gBAC/B,OAAM;AAAA,gBACN,WAAU;AAAA,gBAEV,8BAAC,cAAW,WAAU,UAAS;AAAA;AAAA,YACjC;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,QAAQ,SAAS,cAAc;AAAA,gBACxC,MAAK;AAAA,gBACL,cAAY,QAAQ,SAAS,kBAAkB;AAAA,gBAC/C,gBAAc,QAAQ,QAAQ,MAAM;AAAA,gBACpC,aAAW,IAAI;AAAA,gBACf,UAAU,IAAI;AAAA,gBACd,WAAU;AAAA,gBACV,SAAS,IAAI;AAAA,gBAEb,8BAAC,WAAQ,WAAW,QAAQ,SAAS,wBAAwB,UAAU;AAAA;AAAA,YACzE;AAAA,YACA,oBAAC,UAAK,WAAU,WAAU,aAAU,UAAS,eAAY,QACtD,cAAI,cACP;AAAA,YACA,qBAAC,SAAI,WAAU,qCACb;AAAA,kCAAC,kBAAe,OAAO,iBAAiB;AAAA,cAKvC,CAAC,qBAAqB,OAAO,IAC5B,UACE;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAU;AAAA,kBACV,2BAAwB;AAAA,kBAExB;AAAA,wCAAC,UAAK,eAAW,MAAC,WAAU,oCAAmC;AAAA,oBAAE;AAAA;AAAA;AAAA,cAEnE,IAEA,oBAAC,iBAAmB,QAAQ,eAAe,OAAO,cAAc,IAGlE,oBAAC,8BAA2B,SAAkB;AAAA,eAElD;AAAA,YACA,qBAAC,UAAK,WAAU,qBAAoB;AAAA;AAAA,cAAY;AAAA,cAAgB;AAAA,eAAC;AAAA,YAChE,kBACC;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,SAAS;AAAA,gBACT,cAAW;AAAA,gBACX,WAAU;AAAA,gBAEV,8BAAC,YAAS,WAAU,UAAS;AAAA;AAAA,YAC/B,IACE;AAAA,YACH,oBACC;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,gBAAgB,cAAc;AAAA,gBACvC,MAAK;AAAA,gBACL,SAAS;AAAA,gBACT,cAAY,gBAAgB,mBAAmB;AAAA,gBAC/C,qBAAmB,WAAW;AAAA,gBAC9B,QACG,gBAAgB,mBAAmB,qBACnC,YAAY,KAAK,UAAU,KAAK,MAAM;AAAA,gBAEzC,WAAU;AAAA,gBAET,0BACC,oBAAC,uBAAoB,WAAU,UAAS,IAExC,oBAAC,sBAAmB,WAAU,UAAS;AAAA;AAAA,YAE3C,IACE;AAAA,YACJ,qBAAC,gBACC;AAAA,kCAAC,uBAAoB,SAAO,MAC1B;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,cAAW;AAAA,kBACX,OAAM;AAAA,kBACN,WAAU;AAAA,kBAEV,8BAAC,sBAAmB,WAAU,UAAS;AAAA;AAAA,cACzC,GACF;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAM;AAAA,kBACN,WAAU;AAAA,kBACV,kBAAkB,CAAC,UAAU;AAC3B,0BAAM,SAAS,eAAe;AAC9B,wBAAI,CAAC,OAAQ;AACb,mCAAe,UAAU;AACzB,0BAAM,eAAe;AACrB,2BAAO;AAAA,kBACT;AAAA,kBAEA;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAU;AAAA,wBACV,qBAAmB,UAAU;AAAA,wBAC7B,UAAU,MAAM;AACd,yCAAe,UAAU,MAAM,wBAAwB,QAAQ;AAAA,wBACjE;AAAA,wBAEA;AAAA,8CAAC,cAAW;AAAA,0BAAE;AAAA,0BAEb,WAAW,oBAAC,wBAAsB,mBAAS,OAAM,IAA0B;AAAA;AAAA;AAAA,oBAC9E;AAAA,oBACA;AAAA,sBAAC;AAAA;AAAA,wBACC,UAAU,MAAM;AACd,yCAAe,UAAU,OAAO;AAAA,wBAClC;AAAA,wBAEA;AAAA,8CAAC,cAAW;AAAA,0BAAE;AAAA;AAAA;AAAA,oBAEhB;AAAA,oBACA;AAAA,sBAAC;AAAA;AAAA,wBACC,qBAAmB,cAAc;AAAA,wBACjC,UAAU,MAAM,KAAK,QAAQ,SAAS,OAAO;AAAA,wBAE7C;AAAA,8CAAC,YAAS;AAAA,0BAAE;AAAA,0BAEX,eACC,oBAAC,wBAAsB,uBAAa,OAAM,IACxC;AAAA;AAAA;AAAA,oBACN;AAAA,oBACA;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAU;AAAA,wBACV,qBAAmB,SAAS;AAAA,wBAC5B,UAAU,IAAI;AAAA,wBACd,UAAU,MAAM,IAAI,OAAO;AAAA,wBAE3B;AAAA,8CAAC,WAAQ,WAAW,QAAQ,SAAS,iBAAiB,QAAW;AAAA,0BAChE,QAAQ,SAAS,UAAU;AAAA,0BAC3B,UAAU,oBAAC,wBAAsB,kBAAQ,OAAM,IAA0B;AAAA;AAAA;AAAA,oBAC5E;AAAA,oBACC,wBAAwB,IACvB;AAAA,sBAAC;AAAA;AAAA,wBACC,UAAU,MAAM;AACd,+BAAK,OAAO,aAAa,KAAK,KAAK,CAAC,CAAC;AAAA,wBACvC;AAAA,wBAEA;AAAA,8CAAC,kBAAe;AAAA,0BAAE;AAAA;AAAA;AAAA,oBAEpB,IACE;AAAA,oBACH,cACC,oBAAC,SAAI,WAAU,yDACZ,uBACH,IACE;AAAA,oBACH,cACC,qBAAC,oBAAiB,UAAU,YAAY,MAAM,UAAU,MAAM,YAAY,OAAO,GAC9E;AAAA,kCAAY,QAAQ,oBAAC,YAAS,IAAK,oBAAC,eAAY;AAAA,sBAChD,YAAY,QAAQ,mBAAmB;AAAA,uBAC1C,IACE;AAAA,oBACH,mBACC;AAAA,sBAAC;AAAA;AAAA,wBACC,UAAU,MAAM;AACd,yCAAe,UAAU;AAAA,wBAC3B;AAAA,wBAEA;AAAA,8CAAC,aAAU;AAAA,0BAAE;AAAA;AAAA;AAAA,oBAEf,IACE;AAAA,oBACH,aAAa,MAAM,UAAU,YAAY,MAAM,YAC9C,qBAAC,oBAAiB,UAAU,YAAY,MAAM,UAAU,MAAM,YAAY,OAAO,GAC/E;AAAA,0CAAC,iBAAc;AAAA,sBAAE;AAAA,uBAEnB,IACE,eAAe,CAAC,YAAY,MAAM,UAAU,YAAY,MAAM,WAChE;AAAA,sBAAC;AAAA;AAAA,wBACC,UAAU,YAAY;AAAA,wBACtB,UAAU,MAAM;AACd,yCAAe,UAAU,MAAM,kBAAkB,IAAI;AAAA,wBACvD;AAAA,wBAEA;AAAA,8CAAC,mBAAgB;AAAA,0BAAE;AAAA;AAAA;AAAA,oBAErB,IACE;AAAA,oBACH,aACC,iCACE;AAAA,0CAAC,yBAAsB;AAAA,sBACvB;AAAA,wBAAC;AAAA;AAAA,0BACC,qBAAmB,aAAa;AAAA,0BAChC,UAAU,MAAM,KAAK,YAAY,SAAS,CAAC,QAAQ,QAAQ;AAAA,0BAE1D;AAAA,oCAAQ,WAAW,oBAAC,sBAAmB,IAAK,oBAAC,eAAY;AAAA,4BACzD,QAAQ,WAAW,YAAY;AAAA,4BAC/B,QAAQ,WACP,oBAAC,oBAAiB,sBAAQ,IACxB,cACF,oBAAC,wBAAsB,sBAAY,OAAM,IACvC;AAAA;AAAA;AAAA,sBACN;AAAA,uBACF,IACE;AAAA;AAAA;AAAA,cACN;AAAA,eACF;AAAA,YACC,cACC;AAAA,cAAC;AAAA;AAAA,gBACC,SAAS;AAAA,gBACT,MAAM;AAAA,gBACN,cAAc;AAAA;AAAA,YAChB,IACE;AAAA,aACN;AAAA;AAAA;AAAA,IACF;AAAA;AAEJ;AAGA,SAAS,qBAAqB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,MAAI,QAAQ;AACV,WACE;AAAA,MAAC;AAAA;AAAA,QACC,+BAA4B;AAAA,QAC5B,OAAM;AAAA,QACN,WAAU;AAAA,QAEV;AAAA,8BAAC,aAAU,eAAW,MAAC,WAAU,sDAAqD;AAAA,UACtF,oBAAC,UAAK,WAAU,WAAU,oBAAM;AAAA;AAAA;AAAA,IAClC;AAAA,EAEJ;AACA,MAAI,SAAS;AACX,WACE;AAAA,MAAC;AAAA;AAAA,QACC,+BAA4B;AAAA,QAC5B,OAAM;AAAA,QACN,WAAU;AAAA,QAEV;AAAA,8BAAC,UAAK,eAAW,MAAC,WAAU,yCAAwC;AAAA,UACpE,oBAAC,UAAK,WAAU,WAAU,qBAAO;AAAA;AAAA;AAAA,IACnC;AAAA,EAEJ;AACA,QAAM,OAAO,SAAS,oBAAoB,CAAC,EAAE,MAAM,EAAE;AACrD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,+BAA6B;AAAA,MAC7B,eAAa;AAAA,MACb,OAAO;AAAA,MACP,WAAU;AAAA,MAEV;AAAA,4BAAC,aAAU,QAAgB,WAAU,UAAS;AAAA,QAC9C,oBAAC,UAAK,WAAU,WAAW,gBAAK;AAAA;AAAA;AAAA,EAClC;AAEJ;AAGA,SAAS,2BAA2B,EAAE,QAAQ,GAAyB;AACrE,QAAM,UAAU,QAAQ;AACxB,MAAI,QAAQ,UAAU,YAAY,QAAQ,WAAW,aAAa;AAChE,WAAO;AAAA,EACT;AACA,QAAM,UAAU,QAAQ;AACxB,QAAM,QACJ,SAAS,SAAS,cACd,qBACA,QAAQ,gBAAgB,YAAY,SAAS,cAAc,QAAQ,KACjE,gBACA,aAAa,SAAS,eAAe,QAAQ;AACrD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAY,GAAG,KAAK;AAAA,MACpB,OAAO,GAAG,KAAK;AAAA,MACf,SAAS,MAAM;AACb,iBAAS,cAAc,IAAI,MAAM,6BAA6B,CAAC;AAAA,MACjE;AAAA,MACA,WAAU;AAAA,MAEV;AAAA,4BAAC,aAAU,WAAU,oDAAmD;AAAA,QACxE,oBAAC,UAAK,WAAU,6BAA6B,iBAAM;AAAA,QAClD,QAAQ,yBAAyB,IAChC,qBAAC,UAAK,WAAU,6BAA4B;AAAA;AAAA,UAAE,QAAQ;AAAA,WAAuB,IAC3E;AAAA;AAAA;AAAA,EACN;AAEJ;AAGA,SAAS,oBACP,SACA,OACA;AACA,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,EAAE;AACnD,QAAM,uBAAuB,OAAO,CAAC;AACrC,QAAM,WAAW,YAAY,CAAC,YAAoB;AAChD,yBAAqB,WAAW;AAChC,oBAAgB,oBAAoB,SAAS,qBAAqB,OAAO,CAAC;AAAA,EAC5E,GAAG,CAAC,CAAC;AACL,QAAM,SAAS,YAAY,MAAM;AAC/B,QAAI,KAAM;AACV,UAAM,aAAa,CAAC,QAAQ;AAC5B,YAAQ,IAAI;AACZ,SAAK,MAAM,SAAS,UAAU,EAC3B,KAAK,CAAC,YAAY;AACjB;AAAA,QACE,UACI,WAAW,aAAa,WAAW,UAAU,MAC7C,mBAAmB,aAAa,WAAW,UAAU;AAAA,MAC3D;AAAA,IACF,CAAC,EACA,MAAM,MAAM;AACX,eAAS,mBAAmB,aAAa,WAAW,UAAU,GAAG;AAAA,IACnE,CAAC,EACA,QAAQ,MAAM,QAAQ,KAAK,CAAC;AAAA,EACjC,GAAG,CAAC,UAAU,MAAM,OAAO,OAAO,CAAC;AACnC,SAAO,EAAE,MAAM,QAAQ,aAAa;AACtC;AAaA,SAAS,mBAAmB,OAAmD;AAC7E,QAAM,UAAU,oBAAoB,MAAM,OAAO;AACjD,QAAM,SAAS,MAAM;AAErB,MAAI,OAAO,SAAS;AAClB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKE;AAAA,QAAC;AAAA;AAAA,UACC,KAAK,OAAO;AAAA,UACZ,8BAA4B;AAAA,UAC5B,OAAO,OAAO;AAAA,UACd,UAAU,CAAC,UAAU,OAAO,SAAS,MAAM,OAAO,KAAK;AAAA,UACvD,QAAQ,MAAM,KAAK,OAAO,OAAO;AAAA,UACjC,WAAW,CAAC,UAAU;AACpB,gBAAI,MAAM,QAAQ,SAAS;AACzB,oBAAM,eAAe;AACrB,mBAAK,OAAO,OAAO;AAAA,YACrB,WAAW,MAAM,QAAQ,UAAU;AACjC,oBAAM,eAAe;AACrB,qBAAO,OAAO;AAAA,YAChB;AAAA,UACF;AAAA,UACA,WAAW;AAAA,UACX,cAAW;AAAA,UACX,KAAI;AAAA,UACJ,WAAU;AAAA,UACV,OAAO,EAAE,SAAS,OAAO;AAAA;AAAA,MAC3B;AAAA;AAAA,EAEJ;AAEA,SACE,qBAAC,SAAI,WAAU,iDACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,OAAO;AAAA,QAChB,OAAO,GAAG,OAAO;AAAA,QACjB,KAAI;AAAA,QACJ,WAAU;AAAA,QAET;AAAA;AAAA,IACH;AAAA,IAIA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,SAAS,OAAO;AAAA,QAChB,cAAW;AAAA,QACX,WAAU;AAAA,QAEV,8BAAC,cAAW,WAAU,UAAS;AAAA;AAAA,IACjC;AAAA,KACF;AAEJ;","names":[]}
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-NML44AW2.js";
9
9
  import {
10
10
  summarizeRailNodes
11
- } from "./chunk-CPKD2YGK.js";
11
+ } from "./chunk-RNU5CUPI.js";
12
12
  import {
13
13
  railRowCreator
14
14
  } from "./chunk-KJJBQ3KV.js";
@@ -132,4 +132,4 @@ export {
132
132
  ChatStatusMarks,
133
133
  useChatStatusRefresh
134
134
  };
135
- //# sourceMappingURL=chunk-ZZUKJ5HQ.js.map
135
+ //# sourceMappingURL=chunk-IG2ERMSB.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-IOYHDEP3.js";
5
5
  import {
6
6
  useOpenGeniText
7
- } from "./chunk-S6WJ6TUT.js";
7
+ } from "./chunk-ZEVJGMNB.js";
8
8
 
9
9
  // src/components/artifacts/published-html-artifact-frame.tsx
10
10
  import {
@@ -381,4 +381,4 @@ export {
381
381
  SiteList,
382
382
  SiteDetail
383
383
  };
384
- //# sourceMappingURL=chunk-2SZ3KC5S.js.map
384
+ //# sourceMappingURL=chunk-IMKIIS4Y.js.map
@@ -1,16 +1,16 @@
1
1
  "use client";
2
2
  import {
3
3
  NewSessionLink
4
- } from "./chunk-JJ7VMIEQ.js";
4
+ } from "./chunk-QCANSTLU.js";
5
5
  import {
6
6
  useActionShortcut
7
- } from "./chunk-OHG2UQ2O.js";
7
+ } from "./chunk-YWP2H7SX.js";
8
8
  import {
9
9
  TooltipWithKeys
10
10
  } from "./chunk-OHGG2G3A.js";
11
11
  import {
12
12
  useRail
13
- } from "./chunk-6VITVQ23.js";
13
+ } from "./chunk-SHJ5SQOW.js";
14
14
  import {
15
15
  useSessionUiFeature
16
16
  } from "./chunk-H5M33DAL.js";
@@ -163,4 +163,4 @@ export {
163
163
  RailHeader,
164
164
  PrimaryNav
165
165
  };
166
- //# sourceMappingURL=chunk-CA64OZLZ.js.map
166
+ //# sourceMappingURL=chunk-IRXPXDY5.js.map
@@ -20,7 +20,7 @@ import {
20
20
  } from "./chunk-SJGAHTY5.js";
21
21
  import {
22
22
  useOpenGeniText
23
- } from "./chunk-S6WJ6TUT.js";
23
+ } from "./chunk-ZEVJGMNB.js";
24
24
 
25
25
  // src/hooks/use-composer.ts
26
26
  import {
@@ -2241,4 +2241,4 @@ export {
2241
2241
  shouldSubmitOnKey,
2242
2242
  shouldSteerOnKey
2243
2243
  };
2244
- //# sourceMappingURL=chunk-I57HZMMA.js.map
2244
+ //# sourceMappingURL=chunk-IXIE3H43.js.map
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-HZUL2CUH.js";
16
16
  import {
17
17
  t
18
- } from "./chunk-BPD4IJBG.js";
18
+ } from "./chunk-CG6CJMIS.js";
19
19
  import {
20
20
  userErrorText
21
21
  } from "./chunk-L4OF77LE.js";
@@ -201,4 +201,4 @@ export {
201
201
  FeedbackDialog,
202
202
  SessionFeedback
203
203
  };
204
- //# sourceMappingURL=chunk-OWJD3V4V.js.map
204
+ //# sourceMappingURL=chunk-J3YQ3554.js.map
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  PatchApplyCommand,
7
7
  useRetainedImageObjectUrl
8
- } from "./chunk-6K3WNTRI.js";
8
+ } from "./chunk-AODISQO6.js";
9
9
  import {
10
10
  approvalsFromRequiresAction
11
11
  } from "./chunk-UD2PSIIX.js";
@@ -34,7 +34,7 @@ import {
34
34
  ToolOutputPreviewProvider,
35
35
  useForcedDefaultOpen,
36
36
  useTimelineSearchReveal
37
- } from "./chunk-26P7B46A.js";
37
+ } from "./chunk-DXYARXK3.js";
38
38
  import {
39
39
  useToolDetails
40
40
  } from "./chunk-RZLBICR5.js";
@@ -98,7 +98,7 @@ import {
98
98
  } from "./chunk-LEKBNKLD.js";
99
99
  import {
100
100
  ShimmerText
101
- } from "./chunk-DNWBLT4U.js";
101
+ } from "./chunk-MASBMJ2M.js";
102
102
  import {
103
103
  formatBytes,
104
104
  truncate,
@@ -109,7 +109,7 @@ import {
109
109
  } from "./chunk-TXS65BB2.js";
110
110
  import {
111
111
  useOpenGeniText
112
- } from "./chunk-S6WJ6TUT.js";
112
+ } from "./chunk-ZEVJGMNB.js";
113
113
 
114
114
  // src/timeline/retained-loaders.ts
115
115
  function createWorkspaceRetainedArtifactLoader(client, workspaceId) {
@@ -3268,8 +3268,8 @@ function useSeenActivityIds() {
3268
3268
 
3269
3269
  // src/timeline/activity-rail.tsx
3270
3270
  import { Fragment as Fragment5, jsx as jsx14, jsxs as jsxs8 } from "react/jsx-runtime";
3271
- var LazyFleetDecisionRow = lazy2(() => import("./fleet-decision-row-35S3GAUN.js"));
3272
- var LazyPlatformActivityRow = lazy2(() => import("./platform-activity-row-ISMXR7NJ.js"));
3271
+ var LazyFleetDecisionRow = lazy2(() => import("./fleet-decision-row-DQXRRBT7.js"));
3272
+ var LazyPlatformActivityRow = lazy2(() => import("./platform-activity-row-227C764Z.js"));
3273
3273
  function familyOf(item) {
3274
3274
  if (item.kind === "tool-call") {
3275
3275
  return item.name === "exec_command" || item.name === "write_stdin" ? "terminal" : item.name;
@@ -4148,4 +4148,4 @@ export {
4148
4148
  LearningRefusalActionsProvider,
4149
4149
  LearningRefusalRow
4150
4150
  };
4151
- //# sourceMappingURL=chunk-BCFHMBMK.js.map
4151
+ //# sourceMappingURL=chunk-J5HZBHU4.js.map
@@ -8,13 +8,13 @@ import {
8
8
  editableArtifactStatusLabel,
9
9
  useArtifactSubmissions,
10
10
  useEditableArtifactView
11
- } from "./chunk-G3FU2IF7.js";
11
+ } from "./chunk-TB7UW5BB.js";
12
12
  import {
13
13
  cn
14
14
  } from "./chunk-TXS65BB2.js";
15
15
  import {
16
16
  useOpenGeniText
17
- } from "./chunk-S6WJ6TUT.js";
17
+ } from "./chunk-ZEVJGMNB.js";
18
18
 
19
19
  // src/components/artifacts/spreadsheet-grid.tsx
20
20
  import { PlusIcon } from "lucide-react";
@@ -3848,4 +3848,4 @@ export {
3848
3848
  EditableSpreadsheetGrid,
3849
3849
  EditableSpreadsheetArtifactSurface
3850
3850
  };
3851
- //# sourceMappingURL=chunk-UHMMRQGU.js.map
3851
+ //# sourceMappingURL=chunk-KD7GNHOP.js.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-XEA5BCMA.js";
8
8
  import {
9
9
  useOpenGeniText
10
- } from "./chunk-S6WJ6TUT.js";
10
+ } from "./chunk-ZEVJGMNB.js";
11
11
 
12
12
  // src/components/session-capability-frame.tsx
13
13
  import { CheckIcon, InfoIcon, ShieldCheckIcon, XIcon } from "lucide-react";
@@ -152,4 +152,4 @@ function SessionCapabilityFrame({
152
152
  export {
153
153
  SessionCapabilityFrame
154
154
  };
155
- //# sourceMappingURL=chunk-X7Z4B5GK.js.map
155
+ //# sourceMappingURL=chunk-KPL7EXS6.js.map
@@ -133,4 +133,4 @@ function ComposerMobilePlus(props) {
133
133
  export {
134
134
  ComposerMobilePlus
135
135
  };
136
- //# sourceMappingURL=chunk-GTR2WUBA.js.map
136
+ //# sourceMappingURL=chunk-KX6M5CJI.js.map
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-X6WZOHBI.js";
12
12
  import {
13
13
  t
14
- } from "./chunk-BPD4IJBG.js";
14
+ } from "./chunk-CG6CJMIS.js";
15
15
  import {
16
16
  Link
17
17
  } from "./chunk-VYKW6TB2.js";
@@ -292,4 +292,4 @@ export {
292
292
  SubagentsLabel,
293
293
  SessionAncestryBreadcrumb
294
294
  };
295
- //# sourceMappingURL=chunk-CYO5HL4C.js.map
295
+ //# sourceMappingURL=chunk-KYL2BPS2.js.map
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-TXS65BB2.js";
15
15
  import {
16
16
  useOpenGeniText
17
- } from "./chunk-S6WJ6TUT.js";
17
+ } from "./chunk-ZEVJGMNB.js";
18
18
 
19
19
  // src/components/timeline-annotation-chrome.tsx
20
20
  import { useLayoutEffect, useRef, useState } from "react";
@@ -194,4 +194,4 @@ export {
194
194
  AnnotationNotePreview,
195
195
  AnnotationNoteField
196
196
  };
197
- //# sourceMappingURL=chunk-QLDMF7MH.js.map
197
+ //# sourceMappingURL=chunk-LC5HE7PZ.js.map
@@ -17,12 +17,10 @@ import {
17
17
  // src/app/components/session/subscription-account-menu.tsx
18
18
  import { ChevronDownIcon, Loader2Icon } from "lucide-react";
19
19
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
20
- function UsageRow({ label, remaining, usedPercent, detail }) {
21
- const value = remaining ?? usedPercent;
22
- const known = typeof value === "number" && Number.isFinite(value);
23
- const pct = known ? Math.min(100, Math.max(0, value)) : 0;
24
- const measure = remaining !== void 0 ? "remaining" : "used";
25
- const text = known ? `${Math.round(value)}% ${measure}` : "Unknown";
20
+ function UsageRow({ label, usedPercent, detail }) {
21
+ const known = typeof usedPercent === "number" && Number.isFinite(usedPercent);
22
+ const pct = known ? Math.min(100, Math.max(0, usedPercent)) : 0;
23
+ const text = known ? `${Math.round(usedPercent)}% used` : "Unknown";
26
24
  return /* @__PURE__ */ jsxs("div", { className: "space-y-0.5 text-2xs text-fg-subtle", children: [
27
25
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
28
26
  /* @__PURE__ */ jsx("span", { className: "max-w-28 min-w-10 shrink-0 truncate", title: label, children: label }),
@@ -31,7 +29,7 @@ function UsageRow({ label, remaining, usedPercent, detail }) {
31
29
  {
32
30
  className: "h-1 min-w-0 flex-1 overflow-hidden rounded-full bg-surface-2",
33
31
  role: "progressbar",
34
- "aria-label": `${label} ${measure}`,
32
+ "aria-label": `${label} used`,
35
33
  "aria-valuemin": 0,
36
34
  "aria-valuemax": 100,
37
35
  "aria-valuenow": pct,
@@ -41,7 +39,7 @@ function UsageRow({ label, remaining, usedPercent, detail }) {
41
39
  {
42
40
  className: cn(
43
41
  "block h-full rounded-full",
44
- (measure === "remaining" ? pct <= 10 : pct >= 90) ? "bg-status-waiting" : "bg-brand"
42
+ pct >= 90 ? "bg-status-waiting" : "bg-brand"
45
43
  ),
46
44
  style: { width: `${pct}%` }
47
45
  }
@@ -53,29 +51,6 @@ function UsageRow({ label, remaining, usedPercent, detail }) {
53
51
  detail ? /* @__PURE__ */ jsx("p", { children: detail }) : null
54
52
  ] });
55
53
  }
56
- function MiniBar({ remaining }) {
57
- const pct = Math.min(100, Math.max(0, remaining));
58
- return /* @__PURE__ */ jsxs(
59
- "span",
60
- {
61
- className: "inline-flex shrink-0 items-center gap-1.5 text-2xs text-fg-subtle",
62
- title: `${Math.round(pct)}% remaining in the tighter usage window`,
63
- children: [
64
- /* @__PURE__ */ jsx("span", { className: "h-1 w-8 overflow-hidden rounded-full bg-surface-2", "aria-hidden": "true", children: /* @__PURE__ */ jsx(
65
- "span",
66
- {
67
- className: cn("block h-full rounded-full", pct <= 10 ? "bg-status-waiting" : "bg-brand"),
68
- style: { width: `${pct}%` }
69
- }
70
- ) }),
71
- /* @__PURE__ */ jsxs("span", { className: "whitespace-nowrap tabular-nums", children: [
72
- Math.round(pct),
73
- "% remaining"
74
- ] })
75
- ]
76
- }
77
- );
78
- }
79
54
  function SubscriptionAccountMenu({
80
55
  ariaLabel,
81
56
  triggerMark,
@@ -115,7 +90,6 @@ function SubscriptionAccountMenu({
115
90
  account.usageSummary ? /* @__PURE__ */ jsx("span", { className: "block truncate text-2xs text-fg-subtle", title: account.usageSummary, children: account.usageSummary }) : null
116
91
  ] }),
117
92
  account.plan ? /* @__PURE__ */ jsx(DropdownMenuMeta, { children: account.plan }) : null,
118
- account.remaining != null ? /* @__PURE__ */ jsx(MiniBar, { remaining: account.remaining }) : null,
119
93
  account.status ? /* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs text-status-waiting", children: account.status }) : null,
120
94
  choosingTarget === account.id ? /* @__PURE__ */ jsx(Loader2Icon, { className: "size-4 shrink-0 animate-spin" }) : /* @__PURE__ */ jsx(DropdownMenuCheck, { checked: account.id === selectedId, className: "ml-0" })
121
95
  ]
@@ -213,4 +187,4 @@ function SubscriptionAccountMenu({
213
187
  export {
214
188
  SubscriptionAccountMenu
215
189
  };
216
- //# sourceMappingURL=chunk-3SMJ2BIQ.js.map
190
+ //# sourceMappingURL=chunk-LGD5RESZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/components/session/subscription-account-menu.tsx"],"sourcesContent":["// The subscription-account dropdown every provider shares. Its content comes\n// from `subscriptionAccountMenuContent`; data sources own loading,\n// authorization, usage freshness and selection.\nimport { ChevronDownIcon, Loader2Icon } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nimport {\n DropdownMenu,\n DropdownMenuCheck,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuMeta,\n DropdownMenuNote,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../../../ui/dropdown-menu\";\nimport { cn } from \"../../lib/utils\";\n\nexport type SubscriptionAccountMenuRow = {\n id: string;\n label: string;\n plan?: string | null | undefined;\n status?: string | null;\n detail?: string;\n personal?: boolean;\n disabled?: boolean;\n /** Per-window readings, not an aggregate capacity/eligibility estimate. */\n usageSummary?: string | undefined;\n};\n\nexport type SubscriptionAccountUsageWindow = {\n label: string;\n /** Null means unknown; values over 100 can represent overage. */\n usedPercent: number | null;\n detail?: string;\n};\n\nexport type SubscriptionAccountMenuUsage = {\n checking?: boolean | undefined;\n unavailable?: boolean | undefined;\n message?: string | undefined;\n note?: string | undefined;\n windows?: SubscriptionAccountUsageWindow[] | undefined;\n};\n\nfunction UsageRow({ label, usedPercent, detail }: SubscriptionAccountUsageWindow) {\n const known = typeof usedPercent === \"number\" && Number.isFinite(usedPercent);\n const pct = known ? Math.min(100, Math.max(0, usedPercent)) : 0;\n const text = known ? `${Math.round(usedPercent)}% used` : \"Unknown\";\n return (\n <div className=\"space-y-0.5 text-2xs text-fg-subtle\">\n <div className=\"flex items-center gap-2\">\n <span className=\"max-w-28 min-w-10 shrink-0 truncate\" title={label}>\n {label}\n </span>\n {known ? (\n <span\n className=\"h-1 min-w-0 flex-1 overflow-hidden rounded-full bg-surface-2\"\n role=\"progressbar\"\n aria-label={`${label} used`}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={pct}\n aria-valuetext={text}\n >\n <span\n className={cn(\n \"block h-full rounded-full\",\n pct >= 90 ? \"bg-status-waiting\" : \"bg-brand\",\n )}\n style={{ width: `${pct}%` }}\n />\n </span>\n ) : (\n <span className=\"flex-1\" />\n )}\n <span className=\"shrink-0 whitespace-nowrap text-right tabular-nums\">{text}</span>\n </div>\n {detail ? <p>{detail}</p> : null}\n </div>\n );\n}\n\nexport function SubscriptionAccountMenu({\n ariaLabel,\n triggerMark,\n headerMark,\n selectionLabel,\n displayName,\n metadata,\n identity,\n tone = \"ok\",\n usage,\n accounts,\n selectedId,\n automaticSelected,\n choosing,\n choosingTarget,\n actionLabel = \"Use for next turn\",\n automaticLabel = \"Automatic\",\n emptyMessage,\n error,\n note,\n onOpenChange,\n onChoose,\n}: {\n ariaLabel: string;\n triggerMark: ReactNode;\n headerMark: ReactNode;\n selectionLabel: string;\n displayName: string;\n metadata: string;\n identity?: string | null | undefined;\n tone?: \"ok\" | \"warn\" | \"bad\" | undefined;\n usage: SubscriptionAccountMenuUsage;\n accounts: SubscriptionAccountMenuRow[];\n selectedId: string | null;\n automaticSelected: boolean;\n choosing: boolean;\n choosingTarget: string | null | undefined;\n actionLabel?: string | undefined;\n automaticLabel?: string | undefined;\n emptyMessage?: string | undefined;\n error?: string | null | undefined;\n note: string;\n onOpenChange?: ((open: boolean) => void) | undefined;\n onChoose: (connectionId: string | null) => void;\n}) {\n const row = (account: SubscriptionAccountMenuRow) => (\n <DropdownMenuItem\n key={account.id}\n disabled={choosing || account.disabled}\n title={account.detail}\n onSelect={(event) => {\n event.preventDefault();\n onChoose(account.id);\n }}\n className=\"cursor-pointer\"\n >\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate\">{account.label}</span>\n {account.usageSummary ? (\n <span className=\"block truncate text-2xs text-fg-subtle\" title={account.usageSummary}>\n {account.usageSummary}\n </span>\n ) : null}\n </span>\n {account.plan ? <DropdownMenuMeta>{account.plan}</DropdownMenuMeta> : null}\n {account.status ? (\n <span className=\"shrink-0 text-xs text-status-waiting\">{account.status}</span>\n ) : null}\n {choosingTarget === account.id ? (\n <Loader2Icon className=\"size-4 shrink-0 animate-spin\" />\n ) : (\n <DropdownMenuCheck checked={account.id === selectedId} className=\"ml-0\" />\n )}\n </DropdownMenuItem>\n );\n const personal = accounts.filter((account) => account.personal);\n return (\n <DropdownMenu {...(onOpenChange ? { onOpenChange } : {})}>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n aria-label={ariaLabel}\n title={ariaLabel}\n className={cn(\n \"group/account relative inline-flex h-6 shrink-0 cursor-pointer items-center gap-0.5 rounded-full border border-border/70 bg-surface-2/50 px-1.5 text-fg-muted outline-hidden transition-[background-color,border-color,color] hover:border-border hover:bg-surface-2 hover:text-fg focus-visible:ring-1 focus-visible:ring-ring/40 data-[state=open]:border-border data-[state=open]:bg-surface-2 data-[state=open]:text-fg\",\n choosing && \"opacity-60\",\n )}\n >\n {triggerMark}\n {choosing ? (\n <Loader2Icon className=\"size-2.5 animate-spin text-current\" aria-hidden />\n ) : (\n <ChevronDownIcon\n className=\"size-2.5 shrink-0 opacity-70 transition-opacity group-hover/account:opacity-100\"\n aria-hidden\n />\n )}\n {tone !== \"ok\" ? (\n <span\n className={cn(\n \"absolute -top-0.5 -right-0.5 size-1.5 rounded-full ring-1 ring-surface\",\n tone === \"bad\" ? \"bg-destructive\" : \"bg-status-waiting\",\n )}\n aria-hidden\n />\n ) : null}\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"start\"\n side=\"bottom\"\n sideOffset={8}\n collisionPadding={12}\n className=\"flex max-h-[min(32rem,var(--radix-dropdown-menu-content-available-height))] w-72 flex-col overflow-hidden\"\n >\n <div className=\"shrink-0 space-y-2 px-2.5 pt-1.5 pb-2\">\n <div className=\"flex items-start gap-2\">\n <span className=\"mt-0.5 inline-flex size-7 shrink-0 items-center justify-center overflow-hidden rounded-md bg-surface-2 text-fg\">\n {headerMark}\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-2xs text-fg-subtle\">{selectionLabel}</p>\n <p className=\"truncate text-sm font-medium text-fg\">{displayName}</p>\n {identity ? (\n <p className=\"truncate text-2xs text-fg-subtle\" title={identity}>\n {identity}\n </p>\n ) : null}\n <p className=\"truncate text-2xs text-fg-subtle\" title={metadata}>\n {metadata}\n </p>\n </div>\n </div>\n {usage.checking ? (\n <p className=\"text-2xs text-fg-subtle\">Checking usage…</p>\n ) : usage.unavailable ? (\n <p className=\"text-2xs text-fg-subtle\">Usage unavailable</p>\n ) : usage.message ? (\n <p className=\"text-2xs text-fg-subtle\">{usage.message}</p>\n ) : (\n <div className=\"max-h-36 space-y-1.5 overflow-y-auto overscroll-contain\">\n {usage.windows?.map((window) => (\n <UsageRow key={window.label} {...window} />\n ))}\n </div>\n )}\n {usage.note ? <p className=\"text-2xs text-fg-subtle\">{usage.note}</p> : null}\n </div>\n <DropdownMenuSeparator className=\"shrink-0\" />\n <DropdownMenuLabel className=\"shrink-0\">{actionLabel}</DropdownMenuLabel>\n <div className=\"min-h-0 flex-1 overflow-y-auto overscroll-contain\">\n <DropdownMenuItem\n disabled={choosing}\n onSelect={(event) => {\n event.preventDefault();\n onChoose(null);\n }}\n className=\"cursor-pointer\"\n >\n <span className=\"min-w-0 flex-1 truncate\">{automaticLabel}</span>\n {choosingTarget === null ? (\n <Loader2Icon className=\"size-4 shrink-0 animate-spin\" />\n ) : (\n <DropdownMenuCheck checked={automaticSelected} className=\"ml-0\" />\n )}\n </DropdownMenuItem>\n {accounts.filter((account) => !account.personal).map(row)}\n {personal.length > 0 ? (\n <>\n <DropdownMenuLabel className=\"pt-2\">Your accounts</DropdownMenuLabel>\n {personal.map(row)}\n </>\n ) : null}\n {accounts.length === 0 && emptyMessage ? (\n <DropdownMenuNote>{emptyMessage}</DropdownMenuNote>\n ) : null}\n {error ? (\n <DropdownMenuNote role=\"alert\" className=\"text-xs text-danger\">\n {error}\n </DropdownMenuNote>\n ) : (\n <p className=\"px-2.5 pt-1.5 pb-1 text-xs text-fg-muted\">{note}</p>\n )}\n </div>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"],"mappings":"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","names":[]}
@@ -37,7 +37,7 @@ import {
37
37
  } from "./chunk-HZUL2CUH.js";
38
38
  import {
39
39
  t
40
- } from "./chunk-BPD4IJBG.js";
40
+ } from "./chunk-CG6CJMIS.js";
41
41
  import {
42
42
  userErrorText
43
43
  } from "./chunk-L4OF77LE.js";
@@ -560,4 +560,4 @@ export {
560
560
  formatConnectExpiry,
561
561
  ConnectMachineDialog
562
562
  };
563
- //# sourceMappingURL=chunk-4ICPJZAB.js.map
563
+ //# sourceMappingURL=chunk-LMYSYG6U.js.map
@@ -5,7 +5,7 @@ import {
5
5
  AnnotationQuoteSourceButton,
6
6
  TimelineAnnotationSourceRootContext,
7
7
  useTimelineAnnotationSourceRoot
8
- } from "./chunk-QLDMF7MH.js";
8
+ } from "./chunk-LC5HE7PZ.js";
9
9
  import {
10
10
  resolveAnnotationRevealRoot
11
11
  } from "./chunk-H3LIIAGE.js";
@@ -21,7 +21,7 @@ import {
21
21
  } from "./chunk-TXS65BB2.js";
22
22
  import {
23
23
  useOpenGeniText
24
- } from "./chunk-S6WJ6TUT.js";
24
+ } from "./chunk-ZEVJGMNB.js";
25
25
 
26
26
  // src/components/timeline-annotations.tsx
27
27
  import { QuoteIcon, XIcon } from "lucide-react";
@@ -34,7 +34,7 @@ import {
34
34
  useState
35
35
  } from "react";
36
36
  import { jsx, jsxs } from "react/jsx-runtime";
37
- var TimelineAnnotationsDialog = lazy(() => import("./timeline-annotations-dialog-5M6DP5FX.js"));
37
+ var TimelineAnnotationsDialog = lazy(() => import("./timeline-annotations-dialog-G6J5ZJKN.js"));
38
38
  function AnnotationSourceRootBridge({
39
39
  triggerRef,
40
40
  children
@@ -209,4 +209,4 @@ export {
209
209
  TimelineAnnotationCards,
210
210
  TimelineAnnotationsChip
211
211
  };
212
- //# sourceMappingURL=chunk-3ZZOE4SN.js.map
212
+ //# sourceMappingURL=chunk-LOCDYMD6.js.map
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-TXS65BB2.js";
11
11
  import {
12
12
  useOpenGeniText
13
- } from "./chunk-S6WJ6TUT.js";
13
+ } from "./chunk-ZEVJGMNB.js";
14
14
 
15
15
  // src/timeline/screenshot-lightbox.tsx
16
16
  import { ChevronLeftIcon, ChevronRightIcon, DownloadIcon, XIcon } from "lucide-react";
@@ -491,4 +491,4 @@ export {
491
491
  TooltipContent,
492
492
  ShimmerText
493
493
  };
494
- //# sourceMappingURL=chunk-DNWBLT4U.js.map
494
+ //# sourceMappingURL=chunk-MASBMJ2M.js.map