@opengeni/react 6.7.0 → 6.7.1-canary.41759707569001

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 (758) hide show
  1. package/dist/app/app-state.js +9 -9
  2. package/dist/app/components/Composer.js +19 -19
  3. package/dist/app/components/agent/agent-capability-picker.js +6 -6
  4. package/dist/app/components/artifacts/artifact-browse-controls.js +2 -2
  5. package/dist/app/components/artifacts/artifact-library.js +13 -13
  6. package/dist/app/components/artifacts/artifact-viewer.js +21 -21
  7. package/dist/app/components/artifacts/chat-interactive-block.js +14 -14
  8. package/dist/app/components/artifacts/copy-artifact-link.js +2 -2
  9. package/dist/app/components/artifacts/file-reach-dialog.js +7 -7
  10. package/dist/app/components/artifacts/inline-chat-image.js +22 -22
  11. package/dist/app/components/artifacts/retained-file-preview.js +23 -23
  12. package/dist/app/components/artifacts/retained-text-preview.js +3 -3
  13. package/dist/app/components/artifacts/site-actions.d.ts +43 -0
  14. package/dist/app/components/artifacts/site-actions.js +38 -0
  15. package/dist/app/components/artifacts/site-audience.js +5 -5
  16. package/dist/app/components/artifacts/site-conversations.js +13 -13
  17. package/dist/app/components/artifacts/site-data.js +14 -14
  18. package/dist/app/components/artifacts/site-publishing-page.js +31 -31
  19. package/dist/app/components/artifacts/site-publishing.js +25 -25
  20. package/dist/app/components/artifacts/site-settings.js +30 -30
  21. package/dist/app/components/artifacts/site-version-menu.js +3 -3
  22. package/dist/app/components/billing-class-mark.js +3 -3
  23. package/dist/app/components/bots/bot-launch-strip.js +23 -23
  24. package/dist/app/components/bots/bot-template-dialog.js +30 -30
  25. package/dist/app/components/bots/bot-template-shortcuts.js +23 -23
  26. package/dist/app/components/bots/bot-templates-page.js +37 -37
  27. package/dist/app/components/capabilities/capability-detail-sheet.js +9 -9
  28. package/dist/app/components/capabilities/capability-logo-source.js +15 -16
  29. package/dist/app/components/capabilities/connection-ownership-selector.js +4 -4
  30. package/dist/app/components/capabilities/connector-tool-permissions.js +4 -4
  31. package/dist/app/components/capabilities/detail-dialog.js +3 -3
  32. package/dist/app/components/capabilities/native-connect-setup.js +17 -18
  33. package/dist/app/components/capabilities/native-connect-setup.js.map +1 -1
  34. package/dist/app/components/capabilities/own-logins-shared-heads-up.js +3 -3
  35. package/dist/app/components/capabilities/prepared-mcp-setup-card.js +17 -18
  36. package/dist/app/components/capabilities/session-capability-card.js +55 -56
  37. package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
  38. package/dist/app/components/capabilities/session-chrome-card.js +24 -25
  39. package/dist/app/components/capabilities/session-custom-mcp-card.js +18 -19
  40. package/dist/app/components/capabilities/session-github-card.js +18 -19
  41. package/dist/app/components/capabilities/session-machine-card.js +23 -24
  42. package/dist/app/components/capabilities/session-personal-github-card.js +16 -17
  43. package/dist/app/components/capabilities/session-plugin-card.js +9 -10
  44. package/dist/app/components/capabilities/use-connection-accounts.js +2 -2
  45. package/dist/app/components/command-menu/chat-status.js +19 -19
  46. package/dist/app/components/command-menu/chat-switcher.js +35 -35
  47. package/dist/app/components/command-menu/command-menu.js +42 -42
  48. package/dist/app/components/command-menu/shortcut-sheet.js +11 -11
  49. package/dist/app/components/composer-capabilities-menu-body.js +4 -4
  50. package/dist/app/components/composer-mobile-plus-panel.js +10 -10
  51. package/dist/app/components/composer-mobile-plus.js +3 -3
  52. package/dist/app/components/credit-required-gate.js +1 -1
  53. package/dist/app/components/credit-required-prompt.js +4 -4
  54. package/dist/app/components/credits/checkout-credits-celebration.js +3 -3
  55. package/dist/app/components/credits/checkout-return.js +3 -3
  56. package/dist/app/components/credits/credit-refusal-notice.js +2 -2
  57. package/dist/app/components/desktop/app-shots.js +6 -6
  58. package/dist/app/components/desktop/computer-use.js +2 -2
  59. package/dist/app/components/desktop/this-computer.js +5 -5
  60. package/dist/app/components/feedback.js +5 -5
  61. package/dist/app/components/github-app-connect-launcher.js +1 -1
  62. package/dist/app/components/machines/connect-machine-dialog.js +14 -14
  63. package/dist/app/components/markdown.js +7 -7
  64. package/dist/app/components/models/models-ui.js +6 -6
  65. package/dist/app/components/my-things.js +6 -6
  66. package/dist/app/components/own-where-it-works.js +5 -5
  67. package/dist/app/components/personal-resource-attachment-surface.js +4 -4
  68. package/dist/app/components/pickers.js +5 -5
  69. package/dist/app/components/rail/channel-create-dialog.js +5 -5
  70. package/dist/app/components/rail/project-glyph.js +23 -23
  71. package/dist/app/components/rail/project-profile.js +32 -32
  72. package/dist/app/components/rail/rail-context.js +1 -1
  73. package/dist/app/components/rail/rail-sections.js +69 -60
  74. package/dist/app/components/rail/session-header.js +54 -53
  75. package/dist/app/components/rail/session-list.js +67 -58
  76. package/dist/app/components/rail/session-row-content.js +4 -4
  77. package/dist/app/components/rail/session-row-hover-details.js +18 -18
  78. package/dist/app/components/rail/session-shell.js +86 -77
  79. package/dist/app/components/rail/site-session-group-heading.js +29 -12
  80. package/dist/app/components/session/agent-configuration-panel.js +14 -14
  81. package/dist/app/components/session/artifact-session-page.js +5 -5
  82. package/dist/app/components/session/banners.js +9 -9
  83. package/dist/app/components/session/console-new-conversation.js +42 -43
  84. package/dist/app/components/session/descendant-requests.js +38 -39
  85. package/dist/app/components/session/descendant-requests.js.map +1 -1
  86. package/dist/app/components/session/editable-artifacts-workspace.js +27 -27
  87. package/dist/app/components/session/failed-session-banner.js +9 -9
  88. package/dist/app/components/session/failure-recovery-boundary.js +3 -3
  89. package/dist/app/components/session/human-input-delegation-record.js +2 -2
  90. package/dist/app/components/session/human-input.js +36 -37
  91. package/dist/app/components/session/inspector.js +45 -46
  92. package/dist/app/components/session/inspector.js.map +1 -1
  93. package/dist/app/components/session/message-actions.js +5 -5
  94. package/dist/app/components/session/message-resource-attachments.js +13 -13
  95. package/dist/app/components/session/model-recovery-notice.js +3 -3
  96. package/dist/app/components/session/new-session-settings-menu.js +6 -6
  97. package/dist/app/components/session/new-session-setup-strip.js +24 -24
  98. package/dist/app/components/session/sandbox-recovery-actions.js +5 -5
  99. package/dist/app/components/session/sandbox-switcher.js +8 -8
  100. package/dist/app/components/session/sandbox-workspace.js +52 -53
  101. package/dist/app/components/session/search-markdown-highlight.js +8 -8
  102. package/dist/app/components/session/search-results-view.js +9 -9
  103. package/dist/app/components/session/session-admin-access.js +5 -5
  104. package/dist/app/components/session/session-admission-notice.js +4 -4
  105. package/dist/app/components/session/session-avatar-picker.js +24 -24
  106. package/dist/app/components/session/session-avatar.js +22 -22
  107. package/dist/app/components/session/session-machine-access-notice.js +4 -4
  108. package/dist/app/components/session/session-profile-dialog.js +29 -29
  109. package/dist/app/components/session/session-profile-editor.js +30 -30
  110. package/dist/app/components/session/session-retention.js +3 -3
  111. package/dist/app/components/session/session-search-dialog.js +11 -11
  112. package/dist/app/components/session/session-tenancy-control.js +4 -4
  113. package/dist/app/components/session/session-usage-limit-section.js +4 -4
  114. package/dist/app/components/session/share-chat-dialog.js +7 -7
  115. package/dist/app/components/session/subagents.js +12 -12
  116. package/dist/app/components/session/subscription-account-indicator.js +6 -6
  117. package/dist/app/components/settings/row-select.js +4 -4
  118. package/dist/app/components/transcription-settings.js +6 -6
  119. package/dist/app/components/ui/destructive-confirm.js +7 -7
  120. package/dist/app/components/usage/usage-entry.js +3 -3
  121. package/dist/app/components/window-bar.d.ts +3 -1
  122. package/dist/app/components/window-bar.js +13 -11
  123. package/dist/app/components/workspace-composer-plus.js +20 -21
  124. package/dist/app/components/workspace-reach.js +4 -4
  125. package/dist/app/embed/session-app.js +168 -162
  126. package/dist/app/lib/actions/actions-provider.js +9 -9
  127. package/dist/app/lib/agent-capabilities.js +3 -3
  128. package/dist/app/lib/codex-usage-query.js +2 -2
  129. package/dist/app/lib/composer-connectors.js +16 -17
  130. package/dist/app/lib/composer-send-blocking.d.ts +135 -1
  131. package/dist/app/lib/composer-send-blocking.js +30 -3
  132. package/dist/app/lib/console-site.js +2 -2
  133. package/dist/app/lib/console-text.js +2 -2
  134. package/dist/app/lib/copy-link.d.ts +2 -0
  135. package/dist/app/lib/events.js +15 -15
  136. package/dist/app/lib/failed-session-copy.js +4 -4
  137. package/dist/app/lib/model-access-onboarding.js +3 -3
  138. package/dist/app/lib/model-access.js +2 -2
  139. package/dist/app/lib/move-chat-to-machine.js +3 -3
  140. package/dist/app/lib/session-branch-cache.js +12 -12
  141. package/dist/app/lib/session-composer-readiness.d.ts +2 -2
  142. package/dist/app/lib/session-create.js +4 -4
  143. package/dist/app/lib/session-group-pagination.js +12 -12
  144. package/dist/app/lib/session-hover-facts.js +17 -17
  145. package/dist/app/lib/session-model.js +2 -2
  146. package/dist/app/lib/session-rail.js +9 -9
  147. package/dist/app/lib/session-rename.js +3 -3
  148. package/dist/app/lib/sessions-group.js +11 -11
  149. package/dist/app/lib/site-sidebar-bridge.d.ts +24 -0
  150. package/dist/app/lib/site-tool-consent-dialog.js +10 -11
  151. package/dist/app/lib/site-tool-consent-dialog.js.map +1 -1
  152. package/dist/app/lib/site-tool-consent.js +1 -1
  153. package/dist/app/lib/turn-failure-analytics.js +5 -5
  154. package/dist/app/lib/use-follow-up-repositories.js +5 -5
  155. package/dist/app/lib/use-workspace-machines.js +5 -5
  156. package/dist/app/lib/use-workspace-model-catalog.js +3 -3
  157. package/dist/app/lib/use-workspace-rigs.js +2 -2
  158. package/dist/app/lib/workspace-navigation-preference.js +4 -4
  159. package/dist/app/lib/workspace-scope-context.js +3 -3
  160. package/dist/app/routes/artifacts.js +70 -70
  161. package/dist/app/routes/retained-artifact.js +50 -50
  162. package/dist/app/routes/session.js +98 -99
  163. package/dist/app/routes/sessions-index-hydration.js +5 -5
  164. package/dist/app/routes/sessions-index.js +85 -85
  165. package/dist/app/routes/site-view.js +174 -82
  166. package/dist/app/routes/site-view.js.map +1 -1
  167. package/dist/artifacts-document.js +4 -4
  168. package/dist/artifacts-presentation.js +4 -4
  169. package/dist/artifacts-spreadsheet.js +4 -4
  170. package/dist/artifacts.js +13 -13
  171. package/dist/automations.js +12 -12
  172. package/dist/{browser-viewer-TC27OCIP.js → browser-viewer-ZHQDVHZ2.js} +5 -5
  173. package/dist/{chat-interactive-block-RWPQBHVS.js → chat-interactive-block-VSDD6X3M.js} +5 -5
  174. package/dist/{chunk-5MOJZORA.js → chunk-2EA4IRIP.js} +34 -3
  175. package/dist/chunk-2EA4IRIP.js.map +1 -0
  176. package/dist/{chunk-C43KRXGA.js → chunk-2GCHGWNE.js} +3 -3
  177. package/dist/{chunk-XLH7QY2R.js → chunk-2J77TWGH.js} +3 -3
  178. package/dist/{chunk-Q3DPEYX4.js → chunk-2LMJXRXK.js} +7 -7
  179. package/dist/{chunk-77WAKEAH.js → chunk-2OXSB2OL.js} +2 -2
  180. package/dist/{chunk-H3T7IWNA.js → chunk-2VJOSU4H.js} +2 -2
  181. package/dist/{chunk-IMDQUHBJ.js → chunk-2ZAQA5GE.js} +6 -6
  182. package/dist/{chunk-L7YTNTIK.js → chunk-3CDJSKDW.js} +3 -3
  183. package/dist/{chunk-EWSOC6WF.js → chunk-3DRLCX5V.js} +2 -2
  184. package/dist/{chunk-JEUPAVYY.js → chunk-3L465FBR.js} +6 -6
  185. package/dist/{chunk-4SAWSRAA.js → chunk-3LTSLMVL.js} +5 -5
  186. package/dist/{chunk-5NWEKLDZ.js → chunk-3NNAC43A.js} +2 -2
  187. package/dist/{chunk-EDI6SJ2N.js → chunk-3OK7Y6ES.js} +2 -2
  188. package/dist/{chunk-AWKES45Y.js → chunk-3PM3M2Q6.js} +2 -2
  189. package/dist/{chunk-I7XIZRFD.js → chunk-3PZ3LRPV.js} +3 -3
  190. package/dist/{chunk-6BCXNDEI.js → chunk-3RGLQG6S.js} +69 -55
  191. package/dist/chunk-3RGLQG6S.js.map +1 -0
  192. package/dist/{chunk-2M3J7ZWQ.js → chunk-467WDSOK.js} +2 -2
  193. package/dist/{chunk-UTIAXH52.js → chunk-477DTTMH.js} +3 -3
  194. package/dist/{chunk-J5F5HPPW.js → chunk-4BWMAGJJ.js} +3 -3
  195. package/dist/{chunk-YSJEAAOL.js → chunk-4F3AEJI6.js} +4 -4
  196. package/dist/{chunk-LHPNABDH.js → chunk-4JXPLTWV.js} +2 -2
  197. package/dist/{chunk-NUNZS36W.js → chunk-4O2XWOLZ.js} +3 -3
  198. package/dist/{chunk-BHNSJVBC.js → chunk-4OTNYMJH.js} +5 -5
  199. package/dist/{chunk-2Z3NQNTM.js → chunk-4POXUODO.js} +15 -15
  200. package/dist/{chunk-QB2KMIDP.js → chunk-4SJAEPM2.js} +2 -2
  201. package/dist/{chunk-TAT5USZN.js → chunk-4T3NE262.js} +3 -3
  202. package/dist/{chunk-6JHU2UBS.js → chunk-4Z5X7PLC.js} +3 -3
  203. package/dist/{chunk-2STUPWEL.js → chunk-54U6ZBEX.js} +3 -3
  204. package/dist/{chunk-XXSOHN35.js → chunk-5FLYHX5R.js} +2 -2
  205. package/dist/{chunk-MIYFS2XN.js → chunk-5MHMCE2G.js} +3 -3
  206. package/dist/{chunk-YWVI6ZMK.js → chunk-5MIBQ4P5.js} +2 -2
  207. package/dist/{chunk-HAX4LCR5.js → chunk-5TKTWXAU.js} +3 -3
  208. package/dist/chunk-6B73WNLR.js +173 -0
  209. package/dist/chunk-6B73WNLR.js.map +1 -0
  210. package/dist/{chunk-F2OPHAUN.js → chunk-6HRYJERP.js} +5 -5
  211. package/dist/{chunk-5O2FCCHZ.js → chunk-6JGB4XGH.js} +3 -3
  212. package/dist/{chunk-RPVREAU7.js → chunk-736RUNIA.js} +4 -4
  213. package/dist/{chunk-2KALVELR.js → chunk-74CBR5YE.js} +3 -3
  214. package/dist/{chunk-5IE76VCY.js → chunk-752WXSDN.js} +2 -2
  215. package/dist/{chunk-SEO7TICN.js → chunk-76MC7KOE.js} +1 -1
  216. package/dist/{chunk-OPJJSKUK.js → chunk-77B6UCNK.js} +6 -6
  217. package/dist/{chunk-ZUA3JMI6.js → chunk-77SYIH6O.js} +2 -2
  218. package/dist/{chunk-ILDXWY37.js → chunk-7AI4E7PV.js} +2 -2
  219. package/dist/{chunk-7X6SDK2C.js → chunk-7HESG3ET.js} +3 -3
  220. package/dist/{chunk-2RG7NIAS.js → chunk-7MY3XB6I.js} +7 -7
  221. package/dist/{chunk-C372BFOV.js → chunk-7NLF35YL.js} +4 -4
  222. package/dist/{chunk-IFB3WJ36.js → chunk-7YTR3UFO.js} +4 -4
  223. package/dist/{chunk-BMICEQZQ.js → chunk-7Z76QP64.js} +3 -3
  224. package/dist/{chunk-YWIFM7D7.js → chunk-AAS7OWV6.js} +3 -3
  225. package/dist/{chunk-5QAY6K77.js → chunk-AB5IW227.js} +3 -3
  226. package/dist/{chunk-ZBIXBQNI.js → chunk-ABJZDRW2.js} +2 -2
  227. package/dist/{chunk-4DVJ6ONS.js → chunk-AH3DGOTK.js} +2 -2
  228. package/dist/{chunk-HGKTHF2U.js → chunk-AJBDAVX3.js} +8 -8
  229. package/dist/{chunk-HD5X76TP.js → chunk-AQQT2FIC.js} +5 -5
  230. package/dist/chunk-AQQT2FIC.js.map +1 -0
  231. package/dist/{chunk-SC6RRD2D.js → chunk-ARTEEI2E.js} +11 -2
  232. package/dist/{chunk-SC6RRD2D.js.map → chunk-ARTEEI2E.js.map} +1 -1
  233. package/dist/{chunk-IXPTECSC.js → chunk-AVXDIRRW.js} +2 -2
  234. package/dist/{chunk-QK5EFEUT.js → chunk-BASI553K.js} +4 -4
  235. package/dist/{chunk-AW2MQB37.js → chunk-BD5FMBO4.js} +2 -2
  236. package/dist/{chunk-CRU35QQH.js → chunk-BFFNINCC.js} +108 -66
  237. package/dist/chunk-BFFNINCC.js.map +1 -0
  238. package/dist/{chunk-OVKYVZMW.js → chunk-BIHGCQXA.js} +2 -2
  239. package/dist/{chunk-Z4FMAFNH.js → chunk-BQYRZIZ7.js} +2 -2
  240. package/dist/{chunk-DZWARC4M.js → chunk-BWMIWRUK.js} +3 -3
  241. package/dist/{chunk-Y4OBB2VN.js → chunk-CV4VVLPZ.js} +2 -2
  242. package/dist/{chunk-JQL7ZH6C.js → chunk-CXAN2FHF.js} +7 -7
  243. package/dist/{chunk-3PZ7JZI2.js → chunk-D3PTVN2I.js} +2 -2
  244. package/dist/{chunk-FPXASDG5.js → chunk-D5TIVCXG.js} +2 -2
  245. package/dist/{chunk-7W37NS3I.js → chunk-D74Z2N4K.js} +2 -2
  246. package/dist/{chunk-MNZG4OHU.js → chunk-DCEQCGVN.js} +2 -2
  247. package/dist/{chunk-ND2BXV3P.js → chunk-DEHLWZSI.js} +4 -4
  248. package/dist/{chunk-ZTPXACWB.js → chunk-DHIGEK6P.js} +6 -6
  249. package/dist/{chunk-2YUOVM3G.js → chunk-DIP7YALH.js} +2 -2
  250. package/dist/{chunk-6PZ7OBYU.js → chunk-DLVIRJGK.js} +4 -4
  251. package/dist/{chunk-KLEUWIMZ.js → chunk-DQPIEQGP.js} +2 -2
  252. package/dist/{chunk-T2QX3FDP.js → chunk-DWJ6J3YW.js} +4 -4
  253. package/dist/{chunk-3CPWWGNK.js → chunk-E5KOWRDU.js} +2 -2
  254. package/dist/{chunk-6WGRDRMA.js → chunk-EBIVTDEG.js} +2 -2
  255. package/dist/{chunk-5CPEEAFD.js → chunk-EDDKPIIV.js} +2 -2
  256. package/dist/{chunk-TX3VECZU.js → chunk-EGKARC53.js} +2 -2
  257. package/dist/{chunk-JEA3QDX7.js → chunk-EKJHOWTZ.js} +4 -4
  258. package/dist/{chunk-UVN5TMHU.js → chunk-ESXAECZ3.js} +2 -2
  259. package/dist/{chunk-3SOIESJM.js → chunk-EWZ2RLNG.js} +2 -2
  260. package/dist/{chunk-ORJPS5VN.js → chunk-F4GCGN7J.js} +91 -31
  261. package/dist/chunk-F4GCGN7J.js.map +1 -0
  262. package/dist/{chunk-NW53H5RW.js → chunk-F7GARVTE.js} +160 -59
  263. package/dist/chunk-F7GARVTE.js.map +1 -0
  264. package/dist/{chunk-CMKGILJK.js → chunk-FBA2NXYH.js} +4 -4
  265. package/dist/{chunk-O6N4ABCA.js → chunk-FER6EVIY.js} +2 -2
  266. package/dist/{chunk-DF5EAHDN.js → chunk-FLWQJDJ5.js} +5 -5
  267. package/dist/{chunk-PTAG4PDC.js → chunk-FNXCFIPW.js} +2 -2
  268. package/dist/chunk-FPSS23S4.js +36 -0
  269. package/dist/chunk-FPSS23S4.js.map +1 -0
  270. package/dist/{chunk-BJEJFISW.js → chunk-FSDQQQIA.js} +3 -3
  271. package/dist/{chunk-FVXBNBHO.js → chunk-FTIC5VXR.js} +6 -6
  272. package/dist/{chunk-PTF5B7TJ.js → chunk-G5UQBTXY.js} +2 -2
  273. package/dist/{chunk-4E3ZJRTZ.js → chunk-G6ICCGJ3.js} +2 -2
  274. package/dist/{chunk-5YKW2K6I.js → chunk-GB5SOTIB.js} +12 -12
  275. package/dist/{chunk-NRTE7DNV.js → chunk-GIWFLWXG.js} +4 -4
  276. package/dist/{chunk-MM4FNWI4.js → chunk-GMHIOYB7.js} +4 -4
  277. package/dist/{chunk-6DK6Z4UN.js → chunk-GOCODNQS.js} +3 -3
  278. package/dist/{chunk-TPQTRNER.js → chunk-GSCGKJNK.js} +2 -2
  279. package/dist/{chunk-7VMZGLYI.js → chunk-GTHCHCWW.js} +3 -3
  280. package/dist/{chunk-SQJIKMN3.js → chunk-GTRAH4FG.js} +2 -2
  281. package/dist/{chunk-ZYAZUPPV.js → chunk-GU7T2S5N.js} +3 -3
  282. package/dist/{chunk-JKHKLL5W.js → chunk-H6BX6WOW.js} +3 -3
  283. package/dist/{chunk-IMZCQBOT.js → chunk-H6MJFMHZ.js} +3 -3
  284. package/dist/{chunk-HSOXMJOT.js → chunk-HEGV4QMS.js} +2 -2
  285. package/dist/{chunk-JDTGRRNU.js → chunk-HGS5KMZS.js} +45 -27
  286. package/dist/chunk-HGS5KMZS.js.map +1 -0
  287. package/dist/chunk-HROITVQJ.js +85 -0
  288. package/dist/chunk-HROITVQJ.js.map +1 -0
  289. package/dist/{chunk-OF4TIKYC.js → chunk-HTMQGS63.js} +17 -9
  290. package/dist/chunk-HTMQGS63.js.map +1 -0
  291. package/dist/{chunk-NC7PVOEK.js → chunk-HWVPLFIW.js} +2 -2
  292. package/dist/{chunk-ECJBYNLJ.js → chunk-ICAMYP5M.js} +2 -2
  293. package/dist/{chunk-DJAXC5OK.js → chunk-IFSXVU2S.js} +2 -2
  294. package/dist/{chunk-N6AACDUW.js → chunk-IHLRYWA7.js} +4 -4
  295. package/dist/{chunk-I4MRDSUF.js → chunk-IJR6VOLU.js} +3 -3
  296. package/dist/{chunk-YCVD6CI3.js → chunk-IN3VQFKS.js} +2 -2
  297. package/dist/{chunk-TXLIEOJX.js → chunk-IWKHF2FN.js} +106 -75
  298. package/dist/chunk-IWKHF2FN.js.map +1 -0
  299. package/dist/{chunk-MFROMEKA.js → chunk-J2BTILRR.js} +3 -3
  300. package/dist/{chunk-NCYMNCJO.js → chunk-J2WY42FA.js} +2 -2
  301. package/dist/{chunk-DGMR6JEJ.js → chunk-J4XSTXZP.js} +2 -2
  302. package/dist/{chunk-P77WNZDY.js → chunk-JMHEFZOB.js} +2 -2
  303. package/dist/{chunk-GVN5SZLX.js → chunk-JMI53ZMU.js} +3 -3
  304. package/dist/{chunk-IDANQPRH.js → chunk-JV3UI7BH.js} +3 -3
  305. package/dist/{chunk-XEQMZB3C.js → chunk-K4DQS2ML.js} +24 -6
  306. package/dist/chunk-K4DQS2ML.js.map +1 -0
  307. package/dist/{chunk-GKVJIDHF.js → chunk-KFNZZ2N6.js} +2 -2
  308. package/dist/{chunk-I4QEJ62Y.js → chunk-KI46GKMD.js} +7 -7
  309. package/dist/{chunk-SIRLACNZ.js → chunk-KO3OHHY2.js} +3 -3
  310. package/dist/{chunk-NULUNM7H.js → chunk-KUE5BOQE.js} +5 -5
  311. package/dist/{chunk-O3LKCBP5.js → chunk-LIJNVIT3.js} +3 -3
  312. package/dist/{chunk-JWB44UGJ.js → chunk-LIJPDVYP.js} +2 -2
  313. package/dist/{chunk-BJFH6JI5.js → chunk-LN4DJOMX.js} +13 -13
  314. package/dist/{chunk-KYS77RPN.js → chunk-LPKJ77EK.js} +2 -2
  315. package/dist/{chunk-RMFKVOM7.js → chunk-LQKVNREV.js} +4 -4
  316. package/dist/{chunk-E7XERZWC.js → chunk-LTJFV2JI.js} +2 -2
  317. package/dist/{chunk-INXGSG3J.js → chunk-LVDNY5RC.js} +2 -2
  318. package/dist/{chunk-2INLDVK3.js → chunk-LVELUUK6.js} +2 -2
  319. package/dist/{chunk-5EWSRZ2Y.js → chunk-M3HGBO2Y.js} +1 -1
  320. package/dist/{chunk-J3DY5HWQ.js → chunk-M5IQVMLR.js} +4 -4
  321. package/dist/{chunk-53AGXXZM.js → chunk-MKDFYE2E.js} +2 -2
  322. package/dist/{chunk-2I7HDP53.js → chunk-MT2R57SF.js} +2 -2
  323. package/dist/{chunk-Z7Y523PS.js → chunk-MV2CLIO6.js} +6 -6
  324. package/dist/{chunk-JZ4NLCAP.js → chunk-MZY3VKKM.js} +2 -2
  325. package/dist/{chunk-YENLNISG.js → chunk-N3FM4BNA.js} +2 -2
  326. package/dist/{chunk-RQKLF42C.js → chunk-NPGLNXYI.js} +4 -4
  327. package/dist/{chunk-I5QZJODL.js → chunk-NQ2CPQJF.js} +3 -3
  328. package/dist/{chunk-6DVCC7QS.js → chunk-OBGOLHCP.js} +164 -43
  329. package/dist/chunk-OBGOLHCP.js.map +1 -0
  330. package/dist/{chunk-CUIWCGMA.js → chunk-OCXEY7HE.js} +2 -2
  331. package/dist/{chunk-KRDR5RJD.js → chunk-OGU73VUN.js} +2 -2
  332. package/dist/{chunk-YIRVLKAX.js → chunk-OI6VI6SU.js} +9 -9
  333. package/dist/{chunk-X6KAJI3V.js → chunk-OK7BQMCI.js} +9 -9
  334. package/dist/chunk-OP2GD6QW.js +166 -0
  335. package/dist/chunk-OP2GD6QW.js.map +1 -0
  336. package/dist/{chunk-TUIN4MB7.js → chunk-ORV7EFSL.js} +4 -4
  337. package/dist/{chunk-3IK6UYO6.js → chunk-OTW25A6I.js} +3 -3
  338. package/dist/{chunk-NPGISCU6.js → chunk-OWET7EY2.js} +16 -16
  339. package/dist/{chunk-3ED2U6XE.js → chunk-OYCK4JRS.js} +2 -2
  340. package/dist/{chunk-YQXTDZSU.js → chunk-OYOFPNLC.js} +4 -4
  341. package/dist/{chunk-4NQHXYMW.js → chunk-PD7NWM7V.js} +2 -2
  342. package/dist/{chunk-4YCA2Y73.js → chunk-PF2WU2IL.js} +3 -3
  343. package/dist/{chunk-Z654FWNU.js → chunk-PLYVGZIN.js} +2 -2
  344. package/dist/{chunk-MVW6HNPI.js → chunk-PRT4J2DL.js} +2 -2
  345. package/dist/{chunk-OPWCMA4D.js → chunk-PUUEI4W3.js} +6 -6
  346. package/dist/{chunk-RLBKLAEY.js → chunk-PVB4YVDP.js} +2 -2
  347. package/dist/{chunk-NXCMHIKI.js → chunk-PWUSSSSL.js} +2 -2
  348. package/dist/{chunk-MJUCFQMS.js → chunk-PYB4BFEC.js} +3 -3
  349. package/dist/{chunk-2FSBSCZJ.js → chunk-PZKHST7A.js} +2 -2
  350. package/dist/{chunk-QZAAUQRN.js → chunk-Q5EZNBPI.js} +3 -3
  351. package/dist/{chunk-ZHDFQITM.js → chunk-Q5K2J5GG.js} +2 -2
  352. package/dist/{chunk-DZXEDSQI.js → chunk-QKBFIJE7.js} +5 -5
  353. package/dist/{chunk-FZC5N55X.js → chunk-QL5NQ3JX.js} +8 -8
  354. package/dist/{chunk-7T2ZE3VT.js → chunk-QPQ7R77C.js} +8 -1
  355. package/dist/chunk-QPQ7R77C.js.map +1 -0
  356. package/dist/{chunk-OV6QJRT4.js → chunk-QRECBCJM.js} +2 -2
  357. package/dist/{chunk-3GZA4BUW.js → chunk-QURYQFDN.js} +2 -2
  358. package/dist/{chunk-I5B5L6Q4.js → chunk-QVZVUROX.js} +1 -1
  359. package/dist/{chunk-VS7AHPCZ.js → chunk-R33SBMB7.js} +3 -3
  360. package/dist/{chunk-KCBMFSMS.js → chunk-R4JA5JFI.js} +3 -3
  361. package/dist/{chunk-HC4JFZVU.js → chunk-R5QAL43H.js} +2 -2
  362. package/dist/{chunk-QPSGCC5D.js → chunk-RGR57NYY.js} +2 -2
  363. package/dist/{chunk-XWFAMUZQ.js → chunk-RHXYO4H2.js} +2 -2
  364. package/dist/{chunk-Y4BB2KS2.js → chunk-RISUROBM.js} +7 -7
  365. package/dist/{chunk-U3DN4HEY.js → chunk-RMCLFSMX.js} +2 -2
  366. package/dist/{chunk-YK7756IF.js → chunk-RTZANSSC.js} +3 -3
  367. package/dist/{chunk-ZEG4VPBL.js → chunk-S27VZ5DO.js} +6 -6
  368. package/dist/{chunk-54YW6SZZ.js → chunk-SBXSKRFA.js} +3 -3
  369. package/dist/{chunk-QIOQ2NPQ.js → chunk-SGH7I7OY.js} +2 -2
  370. package/dist/{chunk-K2A5PXQ5.js → chunk-SJYTQLN3.js} +3 -3
  371. package/dist/{chunk-X3MWB2QU.js → chunk-SN2WENRP.js} +3 -3
  372. package/dist/{chunk-OSY5K7L7.js → chunk-SP44O3OU.js} +2 -2
  373. package/dist/{chunk-OZCBM3UC.js → chunk-SSR4ZX52.js} +2 -2
  374. package/dist/{chunk-QCSJ4CWE.js → chunk-SXGJL7UT.js} +14 -14
  375. package/dist/{chunk-NC55IFN3.js → chunk-T67LTMSW.js} +10 -10
  376. package/dist/{chunk-AXHZYXUV.js → chunk-TDTD66BK.js} +2 -2
  377. package/dist/{chunk-NGJJJPZZ.js → chunk-TK5FWVZR.js} +3 -3
  378. package/dist/{chunk-YPWU5KPE.js → chunk-TKQL7EDB.js} +56 -19
  379. package/dist/chunk-TKQL7EDB.js.map +1 -0
  380. package/dist/{chunk-2OP6WLGV.js → chunk-TNSJFZ6Q.js} +4 -4
  381. package/dist/{chunk-O732GAFC.js → chunk-U4LTPFD2.js} +2 -2
  382. package/dist/{chunk-4DVNUCRR.js → chunk-U5UGM5XD.js} +6 -6
  383. package/dist/{chunk-UJK53QFL.js → chunk-UBRQ3PQD.js} +2 -2
  384. package/dist/{chunk-SODC7T6L.js → chunk-UMX6DZME.js} +2 -2
  385. package/dist/{chunk-YLS6QE5G.js → chunk-UO35OEOX.js} +4 -4
  386. package/dist/{chunk-VTTAJOQ7.js → chunk-UO3X52YM.js} +2 -2
  387. package/dist/{chunk-SHHJCL7X.js → chunk-UTRNLNCW.js} +3 -3
  388. package/dist/{chunk-HEFPPMBQ.js → chunk-UU5FBVRX.js} +2 -2
  389. package/dist/{chunk-GQXZPKK7.js → chunk-V6UOVHW3.js} +2 -2
  390. package/dist/{chunk-7TIX2UAR.js → chunk-VCJQQYRE.js} +4 -4
  391. package/dist/{chunk-6WD2INST.js → chunk-WDASYY4S.js} +7 -7
  392. package/dist/{chunk-DXBYWSL5.js → chunk-WIFDNUKD.js} +3 -3
  393. package/dist/{chunk-RT7CJMER.js → chunk-WIXHUBQN.js} +2 -2
  394. package/dist/{chunk-57AZS3IE.js → chunk-WRMUXZ7C.js} +3 -3
  395. package/dist/{chunk-CRAOSVHC.js → chunk-WSDBQSPP.js} +2 -2
  396. package/dist/{chunk-2CLNIEK4.js → chunk-WTSQUCHB.js} +3 -3
  397. package/dist/{chunk-MIHN76LX.js → chunk-WYGTAQMX.js} +3 -3
  398. package/dist/{chunk-GAVYGBFI.js → chunk-X2R73NGG.js} +2 -2
  399. package/dist/{chunk-T7OXJZCX.js → chunk-XOIDUM2H.js} +1 -1
  400. package/dist/{chunk-XHIQ5I6N.js → chunk-XVLEBB4Y.js} +2 -2
  401. package/dist/{chunk-T3OWFVMS.js → chunk-Y3XZEKDQ.js} +2 -2
  402. package/dist/{chunk-ROKQU7WG.js → chunk-YMI27QPF.js} +2 -2
  403. package/dist/{chunk-U7XM7CB4.js → chunk-YNTLWCF4.js} +4 -4
  404. package/dist/{chunk-ZQCND77P.js → chunk-YRYF76OE.js} +2 -2
  405. package/dist/{chunk-2BDT3UZQ.js → chunk-ZAX4XQLN.js} +3 -3
  406. package/dist/{chunk-DXR5PDFP.js → chunk-ZBHGNE2J.js} +3 -3
  407. package/dist/{chunk-KODELWYT.js → chunk-ZF6ZS77B.js} +3 -3
  408. package/dist/{chunk-KUDGXAF7.js → chunk-ZM5YP5NJ.js} +10 -10
  409. package/dist/{chunk-I7ITSXSJ.js → chunk-ZR5EKJT6.js} +2 -2
  410. package/dist/{chunk-IZXHMZQ6.js → chunk-ZW5YTIH3.js} +4 -4
  411. package/dist/components/artifacts/artifact-sandbox.d.ts +6 -1
  412. package/dist/components/artifacts/site-view.d.ts +4 -2
  413. package/dist/components/timeline-anchor.d.ts +8 -3
  414. package/dist/components/timeline-reading-progress.d.ts +1 -1
  415. package/dist/components/timeline-settlement.d.ts +1 -1
  416. package/dist/composer-messages.js +2 -2
  417. package/dist/composer.js +9 -9
  418. package/dist/{computer-viewer-TDDO25AV.js → computer-viewer-5LKRCEVQ.js} +5 -5
  419. package/dist/connect.js +14 -15
  420. package/dist/desktop-dictation.js +7 -7
  421. package/dist/desktop.js +2 -2
  422. package/dist/editor.js +2 -2
  423. package/dist/{embedded-new-voice-2G3VLPVQ.js → embedded-new-voice-GHJRY3YL.js} +5 -5
  424. package/dist/{embedded-voice-T5IWOWGD.js → embedded-voice-ASQXBSTX.js} +5 -5
  425. package/dist/{fleet-decision-row-WM64KXP3.js → fleet-decision-row-U7LDVBEM.js} +2 -2
  426. package/dist/in-chat-connect-model.js +6 -6
  427. package/dist/index.js +53 -54
  428. package/dist/interaction.js +6 -6
  429. package/dist/{latest-question-OX56OVQ5.js → latest-question-RNVF262Q.js} +5 -5
  430. package/dist/lib/format.d.ts +10 -0
  431. package/dist/machines.js +4 -4
  432. package/dist/meetings-recorder.js +1 -1
  433. package/dist/meetings.js +24 -24
  434. package/dist/messages/en.d.ts +7 -0
  435. package/dist/messages.js +1 -1
  436. package/dist/{model-policy-picker-menu-SMC6J6QN.js → model-policy-picker-menu-E6XKMFTA.js} +4 -4
  437. package/dist/{payment-page-card-G4U63KUV.js → payment-page-card-DJDKV2LW.js} +6 -5
  438. package/dist/{payment-page-card-G4U63KUV.js.map → payment-page-card-DJDKV2LW.js.map} +1 -1
  439. package/dist/{platform-activity-row-BUZGZAKZ.js → platform-activity-row-MSDCSMET.js} +17 -7
  440. package/dist/platform-activity-row-MSDCSMET.js.map +1 -0
  441. package/dist/{queue-surface-implementation-4KUZ4PJV.js → queue-surface-implementation-GUAIG6TK.js} +5 -5
  442. package/dist/realtime.js +4 -4
  443. package/dist/{recorder-host-WF2RRR56.js → recorder-host-2MYDJPQW.js} +4 -4
  444. package/dist/recordings.js +3 -3
  445. package/dist/{sandbox-files-ESDMOFSD.js → sandbox-files-W5W2LW4K.js} +6 -6
  446. package/dist/session-app.js +168 -162
  447. package/dist/{session-connect-cards-Q53KMMYY.js → session-connect-cards-TUY62MVP.js} +10 -11
  448. package/dist/session-list-model.js +2 -2
  449. package/dist/{session-realtime-CF3I35WJ.js → session-realtime-SDTKFFIR.js} +3 -3
  450. package/dist/session-realtime-SDTKFFIR.js.map +1 -0
  451. package/dist/session-realtime.js +2 -2
  452. package/dist/session-ui.js +36 -37
  453. package/dist/session.js +9 -9
  454. package/dist/sites.js +2 -2
  455. package/dist/terminal.js +2 -2
  456. package/dist/this-computer.js +3 -3
  457. package/dist/timeline/shared.d.ts +2 -0
  458. package/dist/{timeline-annotation-markers-CJK4RYZ4.js → timeline-annotation-markers-FNILLWNU.js} +2 -2
  459. package/dist/{timeline-annotation-selection-67GF5H26.js → timeline-annotation-selection-MBCIDO2Q.js} +2 -2
  460. package/dist/{timeline-annotations-dialog-ONJPQDJQ.js → timeline-annotations-dialog-JPNKLOTE.js} +3 -3
  461. package/dist/timeline-model.js +6 -6
  462. package/dist/ui/access-list.js +6 -6
  463. package/dist/ui/cadence-picker.js +4 -4
  464. package/dist/ui/choice-cards.js +3 -3
  465. package/dist/ui/confirm-dialog.js +4 -4
  466. package/dist/ui/copy-field.js +3 -3
  467. package/dist/ui/detail-page.js +5 -5
  468. package/dist/ui/detail-sheet.js +4 -4
  469. package/dist/ui/dialog.js +2 -2
  470. package/dist/ui/disclosure.js +5 -5
  471. package/dist/ui/email-chips-input.js +3 -3
  472. package/dist/ui/field.js +2 -2
  473. package/dist/ui/flush-form-page.js +4 -4
  474. package/dist/ui/form-dialog.js +3 -3
  475. package/dist/ui/list-row.js +3 -3
  476. package/dist/ui/page-header.js +2 -2
  477. package/dist/ui/relative-time.js +2 -2
  478. package/dist/ui/revision-history.js +4 -4
  479. package/dist/ui/role-select.js +6 -6
  480. package/dist/ui/select-menu.js +3 -3
  481. package/dist/ui/sheet.js +2 -2
  482. package/dist/ui/usage-meter.js +3 -3
  483. package/dist/ui/window-bar-title.d.ts +7 -3
  484. package/dist/ui/window-bar-title.js +1 -1
  485. package/dist/usage.js +2 -2
  486. package/dist/workbench.js +4 -4
  487. package/package.json +6 -5
  488. package/src/app/components/artifacts/site-actions.tsx +105 -0
  489. package/src/app/components/rail/session-header-copy.test.tsx +172 -0
  490. package/src/app/components/rail/session-header.tsx +68 -12
  491. package/src/app/components/rail/session-list.tsx +20 -0
  492. package/src/app/components/rail/site-session-group-heading.test.tsx +210 -0
  493. package/src/app/components/rail/site-session-group-heading.tsx +119 -60
  494. package/src/app/components/session/failed-session-actions.test.tsx +4 -0
  495. package/src/app/components/window-bar.tsx +63 -15
  496. package/src/app/lib/composer-send-blocking.tsx +312 -1
  497. package/src/app/lib/copy-link.ts +10 -0
  498. package/src/app/lib/session-composer-readiness.ts +4 -3
  499. package/src/app/lib/site-sidebar-bridge.test.tsx +67 -0
  500. package/src/app/lib/site-sidebar-bridge.ts +57 -0
  501. package/src/app/routes/session.tsx +45 -12
  502. package/src/app/routes/sessions-index.tsx +164 -105
  503. package/src/app/routes/site-view.test.tsx +74 -6
  504. package/src/app/routes/site-view.tsx +135 -14
  505. package/src/components/approval-surface.tsx +78 -3
  506. package/src/components/artifacts/artifact-sandbox.tsx +27 -2
  507. package/src/components/artifacts/site-view.tsx +13 -1
  508. package/src/components/message-timeline.tsx +25 -52
  509. package/src/components/session-capability-frame.tsx +2 -30
  510. package/src/components/timeline-anchor.tsx +19 -14
  511. package/src/components/timeline-reading-progress.ts +1 -2
  512. package/src/components/timeline-settlement.ts +3 -3
  513. package/src/lib/format.ts +46 -1
  514. package/src/messages/en.ts +11 -0
  515. package/src/timeline/platform-activity-row.tsx +20 -8
  516. package/src/timeline/shared.tsx +203 -32
  517. package/src/ui/window-bar-title.test.tsx +37 -0
  518. package/src/ui/window-bar-title.tsx +13 -6
  519. package/styles/compiled.css +5 -0
  520. package/dist/chunk-5MOJZORA.js.map +0 -1
  521. package/dist/chunk-6BCXNDEI.js.map +0 -1
  522. package/dist/chunk-6DVCC7QS.js.map +0 -1
  523. package/dist/chunk-7T2ZE3VT.js.map +0 -1
  524. package/dist/chunk-AFRGP2VP.js +0 -17
  525. package/dist/chunk-AFRGP2VP.js.map +0 -1
  526. package/dist/chunk-CRU35QQH.js.map +0 -1
  527. package/dist/chunk-FO4LYKJL.js +0 -197
  528. package/dist/chunk-FO4LYKJL.js.map +0 -1
  529. package/dist/chunk-HD5X76TP.js.map +0 -1
  530. package/dist/chunk-JDTGRRNU.js.map +0 -1
  531. package/dist/chunk-NW53H5RW.js.map +0 -1
  532. package/dist/chunk-OF4TIKYC.js.map +0 -1
  533. package/dist/chunk-ORJPS5VN.js.map +0 -1
  534. package/dist/chunk-TXLIEOJX.js.map +0 -1
  535. package/dist/chunk-VBUVBHFJ.js +0 -16
  536. package/dist/chunk-VBUVBHFJ.js.map +0 -1
  537. package/dist/chunk-XEQMZB3C.js.map +0 -1
  538. package/dist/chunk-YPWU5KPE.js.map +0 -1
  539. package/dist/components/timeline-answer-follow.d.ts +0 -8
  540. package/dist/platform-activity-row-BUZGZAKZ.js.map +0 -1
  541. package/src/components/timeline-answer-follow.ts +0 -15
  542. /package/dist/{browser-viewer-TC27OCIP.js.map → app/components/artifacts/site-actions.js.map} +0 -0
  543. /package/dist/{chat-interactive-block-RWPQBHVS.js.map → browser-viewer-ZHQDVHZ2.js.map} +0 -0
  544. /package/dist/{computer-viewer-TDDO25AV.js.map → chat-interactive-block-VSDD6X3M.js.map} +0 -0
  545. /package/dist/{chunk-C43KRXGA.js.map → chunk-2GCHGWNE.js.map} +0 -0
  546. /package/dist/{chunk-XLH7QY2R.js.map → chunk-2J77TWGH.js.map} +0 -0
  547. /package/dist/{chunk-Q3DPEYX4.js.map → chunk-2LMJXRXK.js.map} +0 -0
  548. /package/dist/{chunk-77WAKEAH.js.map → chunk-2OXSB2OL.js.map} +0 -0
  549. /package/dist/{chunk-H3T7IWNA.js.map → chunk-2VJOSU4H.js.map} +0 -0
  550. /package/dist/{chunk-IMDQUHBJ.js.map → chunk-2ZAQA5GE.js.map} +0 -0
  551. /package/dist/{chunk-L7YTNTIK.js.map → chunk-3CDJSKDW.js.map} +0 -0
  552. /package/dist/{chunk-EWSOC6WF.js.map → chunk-3DRLCX5V.js.map} +0 -0
  553. /package/dist/{chunk-JEUPAVYY.js.map → chunk-3L465FBR.js.map} +0 -0
  554. /package/dist/{chunk-4SAWSRAA.js.map → chunk-3LTSLMVL.js.map} +0 -0
  555. /package/dist/{chunk-5NWEKLDZ.js.map → chunk-3NNAC43A.js.map} +0 -0
  556. /package/dist/{chunk-EDI6SJ2N.js.map → chunk-3OK7Y6ES.js.map} +0 -0
  557. /package/dist/{chunk-AWKES45Y.js.map → chunk-3PM3M2Q6.js.map} +0 -0
  558. /package/dist/{chunk-I7XIZRFD.js.map → chunk-3PZ3LRPV.js.map} +0 -0
  559. /package/dist/{chunk-2M3J7ZWQ.js.map → chunk-467WDSOK.js.map} +0 -0
  560. /package/dist/{chunk-UTIAXH52.js.map → chunk-477DTTMH.js.map} +0 -0
  561. /package/dist/{chunk-J5F5HPPW.js.map → chunk-4BWMAGJJ.js.map} +0 -0
  562. /package/dist/{chunk-YSJEAAOL.js.map → chunk-4F3AEJI6.js.map} +0 -0
  563. /package/dist/{chunk-LHPNABDH.js.map → chunk-4JXPLTWV.js.map} +0 -0
  564. /package/dist/{chunk-NUNZS36W.js.map → chunk-4O2XWOLZ.js.map} +0 -0
  565. /package/dist/{chunk-BHNSJVBC.js.map → chunk-4OTNYMJH.js.map} +0 -0
  566. /package/dist/{chunk-2Z3NQNTM.js.map → chunk-4POXUODO.js.map} +0 -0
  567. /package/dist/{chunk-QB2KMIDP.js.map → chunk-4SJAEPM2.js.map} +0 -0
  568. /package/dist/{chunk-TAT5USZN.js.map → chunk-4T3NE262.js.map} +0 -0
  569. /package/dist/{chunk-6JHU2UBS.js.map → chunk-4Z5X7PLC.js.map} +0 -0
  570. /package/dist/{chunk-2STUPWEL.js.map → chunk-54U6ZBEX.js.map} +0 -0
  571. /package/dist/{chunk-XXSOHN35.js.map → chunk-5FLYHX5R.js.map} +0 -0
  572. /package/dist/{chunk-MIYFS2XN.js.map → chunk-5MHMCE2G.js.map} +0 -0
  573. /package/dist/{chunk-YWVI6ZMK.js.map → chunk-5MIBQ4P5.js.map} +0 -0
  574. /package/dist/{chunk-HAX4LCR5.js.map → chunk-5TKTWXAU.js.map} +0 -0
  575. /package/dist/{chunk-F2OPHAUN.js.map → chunk-6HRYJERP.js.map} +0 -0
  576. /package/dist/{chunk-5O2FCCHZ.js.map → chunk-6JGB4XGH.js.map} +0 -0
  577. /package/dist/{chunk-RPVREAU7.js.map → chunk-736RUNIA.js.map} +0 -0
  578. /package/dist/{chunk-2KALVELR.js.map → chunk-74CBR5YE.js.map} +0 -0
  579. /package/dist/{chunk-5IE76VCY.js.map → chunk-752WXSDN.js.map} +0 -0
  580. /package/dist/{chunk-SEO7TICN.js.map → chunk-76MC7KOE.js.map} +0 -0
  581. /package/dist/{chunk-OPJJSKUK.js.map → chunk-77B6UCNK.js.map} +0 -0
  582. /package/dist/{chunk-ZUA3JMI6.js.map → chunk-77SYIH6O.js.map} +0 -0
  583. /package/dist/{chunk-ILDXWY37.js.map → chunk-7AI4E7PV.js.map} +0 -0
  584. /package/dist/{chunk-7X6SDK2C.js.map → chunk-7HESG3ET.js.map} +0 -0
  585. /package/dist/{chunk-2RG7NIAS.js.map → chunk-7MY3XB6I.js.map} +0 -0
  586. /package/dist/{chunk-C372BFOV.js.map → chunk-7NLF35YL.js.map} +0 -0
  587. /package/dist/{chunk-IFB3WJ36.js.map → chunk-7YTR3UFO.js.map} +0 -0
  588. /package/dist/{chunk-BMICEQZQ.js.map → chunk-7Z76QP64.js.map} +0 -0
  589. /package/dist/{chunk-YWIFM7D7.js.map → chunk-AAS7OWV6.js.map} +0 -0
  590. /package/dist/{chunk-5QAY6K77.js.map → chunk-AB5IW227.js.map} +0 -0
  591. /package/dist/{chunk-ZBIXBQNI.js.map → chunk-ABJZDRW2.js.map} +0 -0
  592. /package/dist/{chunk-4DVJ6ONS.js.map → chunk-AH3DGOTK.js.map} +0 -0
  593. /package/dist/{chunk-HGKTHF2U.js.map → chunk-AJBDAVX3.js.map} +0 -0
  594. /package/dist/{chunk-IXPTECSC.js.map → chunk-AVXDIRRW.js.map} +0 -0
  595. /package/dist/{chunk-QK5EFEUT.js.map → chunk-BASI553K.js.map} +0 -0
  596. /package/dist/{chunk-AW2MQB37.js.map → chunk-BD5FMBO4.js.map} +0 -0
  597. /package/dist/{chunk-OVKYVZMW.js.map → chunk-BIHGCQXA.js.map} +0 -0
  598. /package/dist/{chunk-Z4FMAFNH.js.map → chunk-BQYRZIZ7.js.map} +0 -0
  599. /package/dist/{chunk-DZWARC4M.js.map → chunk-BWMIWRUK.js.map} +0 -0
  600. /package/dist/{chunk-Y4OBB2VN.js.map → chunk-CV4VVLPZ.js.map} +0 -0
  601. /package/dist/{chunk-JQL7ZH6C.js.map → chunk-CXAN2FHF.js.map} +0 -0
  602. /package/dist/{chunk-3PZ7JZI2.js.map → chunk-D3PTVN2I.js.map} +0 -0
  603. /package/dist/{chunk-FPXASDG5.js.map → chunk-D5TIVCXG.js.map} +0 -0
  604. /package/dist/{chunk-7W37NS3I.js.map → chunk-D74Z2N4K.js.map} +0 -0
  605. /package/dist/{chunk-MNZG4OHU.js.map → chunk-DCEQCGVN.js.map} +0 -0
  606. /package/dist/{chunk-ND2BXV3P.js.map → chunk-DEHLWZSI.js.map} +0 -0
  607. /package/dist/{chunk-ZTPXACWB.js.map → chunk-DHIGEK6P.js.map} +0 -0
  608. /package/dist/{chunk-2YUOVM3G.js.map → chunk-DIP7YALH.js.map} +0 -0
  609. /package/dist/{chunk-6PZ7OBYU.js.map → chunk-DLVIRJGK.js.map} +0 -0
  610. /package/dist/{chunk-KLEUWIMZ.js.map → chunk-DQPIEQGP.js.map} +0 -0
  611. /package/dist/{chunk-T2QX3FDP.js.map → chunk-DWJ6J3YW.js.map} +0 -0
  612. /package/dist/{chunk-3CPWWGNK.js.map → chunk-E5KOWRDU.js.map} +0 -0
  613. /package/dist/{chunk-6WGRDRMA.js.map → chunk-EBIVTDEG.js.map} +0 -0
  614. /package/dist/{chunk-5CPEEAFD.js.map → chunk-EDDKPIIV.js.map} +0 -0
  615. /package/dist/{chunk-TX3VECZU.js.map → chunk-EGKARC53.js.map} +0 -0
  616. /package/dist/{chunk-JEA3QDX7.js.map → chunk-EKJHOWTZ.js.map} +0 -0
  617. /package/dist/{chunk-UVN5TMHU.js.map → chunk-ESXAECZ3.js.map} +0 -0
  618. /package/dist/{chunk-3SOIESJM.js.map → chunk-EWZ2RLNG.js.map} +0 -0
  619. /package/dist/{chunk-CMKGILJK.js.map → chunk-FBA2NXYH.js.map} +0 -0
  620. /package/dist/{chunk-O6N4ABCA.js.map → chunk-FER6EVIY.js.map} +0 -0
  621. /package/dist/{chunk-DF5EAHDN.js.map → chunk-FLWQJDJ5.js.map} +0 -0
  622. /package/dist/{chunk-PTAG4PDC.js.map → chunk-FNXCFIPW.js.map} +0 -0
  623. /package/dist/{chunk-BJEJFISW.js.map → chunk-FSDQQQIA.js.map} +0 -0
  624. /package/dist/{chunk-FVXBNBHO.js.map → chunk-FTIC5VXR.js.map} +0 -0
  625. /package/dist/{chunk-PTF5B7TJ.js.map → chunk-G5UQBTXY.js.map} +0 -0
  626. /package/dist/{chunk-4E3ZJRTZ.js.map → chunk-G6ICCGJ3.js.map} +0 -0
  627. /package/dist/{chunk-5YKW2K6I.js.map → chunk-GB5SOTIB.js.map} +0 -0
  628. /package/dist/{chunk-NRTE7DNV.js.map → chunk-GIWFLWXG.js.map} +0 -0
  629. /package/dist/{chunk-MM4FNWI4.js.map → chunk-GMHIOYB7.js.map} +0 -0
  630. /package/dist/{chunk-6DK6Z4UN.js.map → chunk-GOCODNQS.js.map} +0 -0
  631. /package/dist/{chunk-TPQTRNER.js.map → chunk-GSCGKJNK.js.map} +0 -0
  632. /package/dist/{chunk-7VMZGLYI.js.map → chunk-GTHCHCWW.js.map} +0 -0
  633. /package/dist/{chunk-SQJIKMN3.js.map → chunk-GTRAH4FG.js.map} +0 -0
  634. /package/dist/{chunk-ZYAZUPPV.js.map → chunk-GU7T2S5N.js.map} +0 -0
  635. /package/dist/{chunk-JKHKLL5W.js.map → chunk-H6BX6WOW.js.map} +0 -0
  636. /package/dist/{chunk-IMZCQBOT.js.map → chunk-H6MJFMHZ.js.map} +0 -0
  637. /package/dist/{chunk-HSOXMJOT.js.map → chunk-HEGV4QMS.js.map} +0 -0
  638. /package/dist/{chunk-NC7PVOEK.js.map → chunk-HWVPLFIW.js.map} +0 -0
  639. /package/dist/{chunk-ECJBYNLJ.js.map → chunk-ICAMYP5M.js.map} +0 -0
  640. /package/dist/{chunk-DJAXC5OK.js.map → chunk-IFSXVU2S.js.map} +0 -0
  641. /package/dist/{chunk-N6AACDUW.js.map → chunk-IHLRYWA7.js.map} +0 -0
  642. /package/dist/{chunk-I4MRDSUF.js.map → chunk-IJR6VOLU.js.map} +0 -0
  643. /package/dist/{chunk-YCVD6CI3.js.map → chunk-IN3VQFKS.js.map} +0 -0
  644. /package/dist/{chunk-MFROMEKA.js.map → chunk-J2BTILRR.js.map} +0 -0
  645. /package/dist/{chunk-NCYMNCJO.js.map → chunk-J2WY42FA.js.map} +0 -0
  646. /package/dist/{chunk-DGMR6JEJ.js.map → chunk-J4XSTXZP.js.map} +0 -0
  647. /package/dist/{chunk-P77WNZDY.js.map → chunk-JMHEFZOB.js.map} +0 -0
  648. /package/dist/{chunk-GVN5SZLX.js.map → chunk-JMI53ZMU.js.map} +0 -0
  649. /package/dist/{chunk-IDANQPRH.js.map → chunk-JV3UI7BH.js.map} +0 -0
  650. /package/dist/{chunk-GKVJIDHF.js.map → chunk-KFNZZ2N6.js.map} +0 -0
  651. /package/dist/{chunk-I4QEJ62Y.js.map → chunk-KI46GKMD.js.map} +0 -0
  652. /package/dist/{chunk-SIRLACNZ.js.map → chunk-KO3OHHY2.js.map} +0 -0
  653. /package/dist/{chunk-NULUNM7H.js.map → chunk-KUE5BOQE.js.map} +0 -0
  654. /package/dist/{chunk-O3LKCBP5.js.map → chunk-LIJNVIT3.js.map} +0 -0
  655. /package/dist/{chunk-JWB44UGJ.js.map → chunk-LIJPDVYP.js.map} +0 -0
  656. /package/dist/{chunk-BJFH6JI5.js.map → chunk-LN4DJOMX.js.map} +0 -0
  657. /package/dist/{chunk-KYS77RPN.js.map → chunk-LPKJ77EK.js.map} +0 -0
  658. /package/dist/{chunk-RMFKVOM7.js.map → chunk-LQKVNREV.js.map} +0 -0
  659. /package/dist/{chunk-E7XERZWC.js.map → chunk-LTJFV2JI.js.map} +0 -0
  660. /package/dist/{chunk-INXGSG3J.js.map → chunk-LVDNY5RC.js.map} +0 -0
  661. /package/dist/{chunk-2INLDVK3.js.map → chunk-LVELUUK6.js.map} +0 -0
  662. /package/dist/{chunk-5EWSRZ2Y.js.map → chunk-M3HGBO2Y.js.map} +0 -0
  663. /package/dist/{chunk-J3DY5HWQ.js.map → chunk-M5IQVMLR.js.map} +0 -0
  664. /package/dist/{chunk-53AGXXZM.js.map → chunk-MKDFYE2E.js.map} +0 -0
  665. /package/dist/{chunk-2I7HDP53.js.map → chunk-MT2R57SF.js.map} +0 -0
  666. /package/dist/{chunk-Z7Y523PS.js.map → chunk-MV2CLIO6.js.map} +0 -0
  667. /package/dist/{chunk-JZ4NLCAP.js.map → chunk-MZY3VKKM.js.map} +0 -0
  668. /package/dist/{chunk-YENLNISG.js.map → chunk-N3FM4BNA.js.map} +0 -0
  669. /package/dist/{chunk-RQKLF42C.js.map → chunk-NPGLNXYI.js.map} +0 -0
  670. /package/dist/{chunk-I5QZJODL.js.map → chunk-NQ2CPQJF.js.map} +0 -0
  671. /package/dist/{chunk-CUIWCGMA.js.map → chunk-OCXEY7HE.js.map} +0 -0
  672. /package/dist/{chunk-KRDR5RJD.js.map → chunk-OGU73VUN.js.map} +0 -0
  673. /package/dist/{chunk-YIRVLKAX.js.map → chunk-OI6VI6SU.js.map} +0 -0
  674. /package/dist/{chunk-X6KAJI3V.js.map → chunk-OK7BQMCI.js.map} +0 -0
  675. /package/dist/{chunk-TUIN4MB7.js.map → chunk-ORV7EFSL.js.map} +0 -0
  676. /package/dist/{chunk-3IK6UYO6.js.map → chunk-OTW25A6I.js.map} +0 -0
  677. /package/dist/{chunk-NPGISCU6.js.map → chunk-OWET7EY2.js.map} +0 -0
  678. /package/dist/{chunk-3ED2U6XE.js.map → chunk-OYCK4JRS.js.map} +0 -0
  679. /package/dist/{chunk-YQXTDZSU.js.map → chunk-OYOFPNLC.js.map} +0 -0
  680. /package/dist/{chunk-4NQHXYMW.js.map → chunk-PD7NWM7V.js.map} +0 -0
  681. /package/dist/{chunk-4YCA2Y73.js.map → chunk-PF2WU2IL.js.map} +0 -0
  682. /package/dist/{chunk-Z654FWNU.js.map → chunk-PLYVGZIN.js.map} +0 -0
  683. /package/dist/{chunk-MVW6HNPI.js.map → chunk-PRT4J2DL.js.map} +0 -0
  684. /package/dist/{chunk-OPWCMA4D.js.map → chunk-PUUEI4W3.js.map} +0 -0
  685. /package/dist/{chunk-RLBKLAEY.js.map → chunk-PVB4YVDP.js.map} +0 -0
  686. /package/dist/{chunk-NXCMHIKI.js.map → chunk-PWUSSSSL.js.map} +0 -0
  687. /package/dist/{chunk-MJUCFQMS.js.map → chunk-PYB4BFEC.js.map} +0 -0
  688. /package/dist/{chunk-2FSBSCZJ.js.map → chunk-PZKHST7A.js.map} +0 -0
  689. /package/dist/{chunk-QZAAUQRN.js.map → chunk-Q5EZNBPI.js.map} +0 -0
  690. /package/dist/{chunk-ZHDFQITM.js.map → chunk-Q5K2J5GG.js.map} +0 -0
  691. /package/dist/{chunk-DZXEDSQI.js.map → chunk-QKBFIJE7.js.map} +0 -0
  692. /package/dist/{chunk-FZC5N55X.js.map → chunk-QL5NQ3JX.js.map} +0 -0
  693. /package/dist/{chunk-OV6QJRT4.js.map → chunk-QRECBCJM.js.map} +0 -0
  694. /package/dist/{chunk-3GZA4BUW.js.map → chunk-QURYQFDN.js.map} +0 -0
  695. /package/dist/{chunk-I5B5L6Q4.js.map → chunk-QVZVUROX.js.map} +0 -0
  696. /package/dist/{chunk-VS7AHPCZ.js.map → chunk-R33SBMB7.js.map} +0 -0
  697. /package/dist/{chunk-KCBMFSMS.js.map → chunk-R4JA5JFI.js.map} +0 -0
  698. /package/dist/{chunk-HC4JFZVU.js.map → chunk-R5QAL43H.js.map} +0 -0
  699. /package/dist/{chunk-QPSGCC5D.js.map → chunk-RGR57NYY.js.map} +0 -0
  700. /package/dist/{chunk-XWFAMUZQ.js.map → chunk-RHXYO4H2.js.map} +0 -0
  701. /package/dist/{chunk-Y4BB2KS2.js.map → chunk-RISUROBM.js.map} +0 -0
  702. /package/dist/{chunk-U3DN4HEY.js.map → chunk-RMCLFSMX.js.map} +0 -0
  703. /package/dist/{chunk-YK7756IF.js.map → chunk-RTZANSSC.js.map} +0 -0
  704. /package/dist/{chunk-ZEG4VPBL.js.map → chunk-S27VZ5DO.js.map} +0 -0
  705. /package/dist/{chunk-54YW6SZZ.js.map → chunk-SBXSKRFA.js.map} +0 -0
  706. /package/dist/{chunk-QIOQ2NPQ.js.map → chunk-SGH7I7OY.js.map} +0 -0
  707. /package/dist/{chunk-K2A5PXQ5.js.map → chunk-SJYTQLN3.js.map} +0 -0
  708. /package/dist/{chunk-X3MWB2QU.js.map → chunk-SN2WENRP.js.map} +0 -0
  709. /package/dist/{chunk-OSY5K7L7.js.map → chunk-SP44O3OU.js.map} +0 -0
  710. /package/dist/{chunk-OZCBM3UC.js.map → chunk-SSR4ZX52.js.map} +0 -0
  711. /package/dist/{chunk-QCSJ4CWE.js.map → chunk-SXGJL7UT.js.map} +0 -0
  712. /package/dist/{chunk-NC55IFN3.js.map → chunk-T67LTMSW.js.map} +0 -0
  713. /package/dist/{chunk-AXHZYXUV.js.map → chunk-TDTD66BK.js.map} +0 -0
  714. /package/dist/{chunk-NGJJJPZZ.js.map → chunk-TK5FWVZR.js.map} +0 -0
  715. /package/dist/{chunk-2OP6WLGV.js.map → chunk-TNSJFZ6Q.js.map} +0 -0
  716. /package/dist/{chunk-O732GAFC.js.map → chunk-U4LTPFD2.js.map} +0 -0
  717. /package/dist/{chunk-4DVNUCRR.js.map → chunk-U5UGM5XD.js.map} +0 -0
  718. /package/dist/{chunk-UJK53QFL.js.map → chunk-UBRQ3PQD.js.map} +0 -0
  719. /package/dist/{chunk-SODC7T6L.js.map → chunk-UMX6DZME.js.map} +0 -0
  720. /package/dist/{chunk-YLS6QE5G.js.map → chunk-UO35OEOX.js.map} +0 -0
  721. /package/dist/{chunk-VTTAJOQ7.js.map → chunk-UO3X52YM.js.map} +0 -0
  722. /package/dist/{chunk-SHHJCL7X.js.map → chunk-UTRNLNCW.js.map} +0 -0
  723. /package/dist/{chunk-HEFPPMBQ.js.map → chunk-UU5FBVRX.js.map} +0 -0
  724. /package/dist/{chunk-GQXZPKK7.js.map → chunk-V6UOVHW3.js.map} +0 -0
  725. /package/dist/{chunk-7TIX2UAR.js.map → chunk-VCJQQYRE.js.map} +0 -0
  726. /package/dist/{chunk-6WD2INST.js.map → chunk-WDASYY4S.js.map} +0 -0
  727. /package/dist/{chunk-DXBYWSL5.js.map → chunk-WIFDNUKD.js.map} +0 -0
  728. /package/dist/{chunk-RT7CJMER.js.map → chunk-WIXHUBQN.js.map} +0 -0
  729. /package/dist/{chunk-57AZS3IE.js.map → chunk-WRMUXZ7C.js.map} +0 -0
  730. /package/dist/{chunk-CRAOSVHC.js.map → chunk-WSDBQSPP.js.map} +0 -0
  731. /package/dist/{chunk-2CLNIEK4.js.map → chunk-WTSQUCHB.js.map} +0 -0
  732. /package/dist/{chunk-MIHN76LX.js.map → chunk-WYGTAQMX.js.map} +0 -0
  733. /package/dist/{chunk-GAVYGBFI.js.map → chunk-X2R73NGG.js.map} +0 -0
  734. /package/dist/{chunk-T7OXJZCX.js.map → chunk-XOIDUM2H.js.map} +0 -0
  735. /package/dist/{chunk-XHIQ5I6N.js.map → chunk-XVLEBB4Y.js.map} +0 -0
  736. /package/dist/{chunk-T3OWFVMS.js.map → chunk-Y3XZEKDQ.js.map} +0 -0
  737. /package/dist/{chunk-ROKQU7WG.js.map → chunk-YMI27QPF.js.map} +0 -0
  738. /package/dist/{chunk-U7XM7CB4.js.map → chunk-YNTLWCF4.js.map} +0 -0
  739. /package/dist/{chunk-ZQCND77P.js.map → chunk-YRYF76OE.js.map} +0 -0
  740. /package/dist/{chunk-2BDT3UZQ.js.map → chunk-ZAX4XQLN.js.map} +0 -0
  741. /package/dist/{chunk-DXR5PDFP.js.map → chunk-ZBHGNE2J.js.map} +0 -0
  742. /package/dist/{chunk-KODELWYT.js.map → chunk-ZF6ZS77B.js.map} +0 -0
  743. /package/dist/{chunk-KUDGXAF7.js.map → chunk-ZM5YP5NJ.js.map} +0 -0
  744. /package/dist/{chunk-I7ITSXSJ.js.map → chunk-ZR5EKJT6.js.map} +0 -0
  745. /package/dist/{chunk-IZXHMZQ6.js.map → chunk-ZW5YTIH3.js.map} +0 -0
  746. /package/dist/{embedded-new-voice-2G3VLPVQ.js.map → computer-viewer-5LKRCEVQ.js.map} +0 -0
  747. /package/dist/{embedded-voice-T5IWOWGD.js.map → embedded-new-voice-GHJRY3YL.js.map} +0 -0
  748. /package/dist/{model-policy-picker-menu-SMC6J6QN.js.map → embedded-voice-ASQXBSTX.js.map} +0 -0
  749. /package/dist/{fleet-decision-row-WM64KXP3.js.map → fleet-decision-row-U7LDVBEM.js.map} +0 -0
  750. /package/dist/{latest-question-OX56OVQ5.js.map → latest-question-RNVF262Q.js.map} +0 -0
  751. /package/dist/{sandbox-files-ESDMOFSD.js.map → model-policy-picker-menu-E6XKMFTA.js.map} +0 -0
  752. /package/dist/{queue-surface-implementation-4KUZ4PJV.js.map → queue-surface-implementation-GUAIG6TK.js.map} +0 -0
  753. /package/dist/{recorder-host-WF2RRR56.js.map → recorder-host-2MYDJPQW.js.map} +0 -0
  754. /package/dist/{session-connect-cards-Q53KMMYY.js.map → sandbox-files-W5W2LW4K.js.map} +0 -0
  755. /package/dist/{session-realtime-CF3I35WJ.js.map → session-connect-cards-TUY62MVP.js.map} +0 -0
  756. /package/dist/{timeline-annotation-markers-CJK4RYZ4.js.map → timeline-annotation-markers-FNILLWNU.js.map} +0 -0
  757. /package/dist/{timeline-annotation-selection-67GF5H26.js.map → timeline-annotation-selection-MBCIDO2Q.js.map} +0 -0
  758. /package/dist/{timeline-annotations-dialog-ONJPQDJQ.js.map → timeline-annotations-dialog-JPNKLOTE.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/app/components/rail/session-header.tsx","../src/app/lib/session-slack-agent.ts","../src/app/components/rail/session-header-overflow.ts"],"sourcesContent":["import { useOptionalAppContext } from \"../../app-context\";\nimport { archiveActionLabel } from \"../../lib/archive-session\";\n// 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 { cn } from \"../../lib/utils\";\nimport { OPEN_WORKSTREAM_CONTROL_EVENT } from \"../../../workstream-control-event\";\nimport {\n SessionStatus as SessionStatusBadge,\n SESSION_STATUS_META,\n StatusDot,\n StatusPill,\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, SiteOriginMenuItem } from \"../session/site-origin-link\";\nimport { sessionSiteOrigin } from \"../../lib/session-site-origin\";\nimport { sessionSlackAgentInfo } from \"../../lib/session-slack-agent\";\nimport { MetaChip } from \"../../../ui/meta-chip\";\nimport type { CreateBotTemplateRequest, WorkspaceBotTemplate } from \"@opengeni/contracts\";\nimport {\n ArchiveIcon,\n BellIcon,\n BellOffIcon,\n BotIcon,\n CalendarClockIcon,\n GaugeIcon,\n LinkIcon,\n LockIcon,\n MoreHorizontalIcon,\n PanelRightCloseIcon,\n PanelRightOpenIcon,\n PauseIcon,\n PencilIcon,\n PinIcon,\n SearchIcon,\n Share2Icon,\n ShieldCheckIcon,\n ShieldOffIcon,\n SmartphoneIcon,\n UserRoundPenIcon,\n ZapIcon,\n ZapOffIcon,\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 SessionAdminAccessMenuItems,\n type SessionAdminAccessControl,\n} from \"../session/session-admin-access\";\nimport { SessionAncestryBreadcrumb } from \"../session/subagents\";\nimport { ShareChatDialog } from \"../session/share-chat-dialog\";\nimport { useSessionUiFeature } from \"../../lib/session-ui-features\";\nimport {\n SESSION_HEADER_PARTS,\n useSessionHeaderOverflow,\n type SessionHeaderPart,\n} from \"./session-header-overflow\";\nimport { Button } from \"../../../ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\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 { sessionControlPaused, sessionInputWait } from \"../../lib/session-rail\";\nimport {\n sessionAutomationWaitLines,\n sessionAutomationWaitWords,\n} from \"../../../components/automations/automation-model\";\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from \"../../../ui/hover-card\";\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 { repliesMuteLabel, 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 { toast } from \"../../lib/toast\";\nimport { SessionAvatar } from \"../session/session-avatar\";\nimport {\n SessionProfileEditorDialog,\n type UpdateSessionProfileFn,\n} from \"../session/session-profile-editor\";\nimport { BotTemplateDialog } from \"../bots/bot-template-dialog\";\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 onOpenAutomations,\n lineageLoading,\n lineageError,\n connectionState,\n status,\n keyAuthRequired,\n onForgetAccessKey,\n inspectorOpen,\n onToggleInspector,\n onRename,\n onPin,\n onUpdateProfile,\n onSaveBotTemplate,\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 an automation posts into this session. Opens the\n * Automations page filtered to this chat, so the reader can see or edit what\n * puts runs here.\n */\n onOpenAutomations?: ((() => 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 /** Saves the chat's name, description and avatar. Absent hides Edit profile. */\n onUpdateProfile?: UpdateSessionProfileFn | null | undefined;\n /** Saves a bot template in the workspace. Absent hides Save as bot template. */\n onSaveBotTemplate?:\n | ((request: CreateBotTemplateRequest) => Promise<WorkspaceBotTemplate>)\n | null\n | undefined;\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 full 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 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 context = useOptionalAppContext();\n // Archiving is one-way, so an archived chat offers no archive action, and\n // only people who can control the chat archive it.\n const canArchive =\n Boolean(onArchive) &&\n session.parentSessionId === null &&\n !session.archived &&\n (context ? archiveActionLabel(context, session) !== null : true);\n // An archived chat cannot be pinned.\n const canPin = !session.archived;\n const [grantAdminOpen, setGrantAdminOpen] = useState(false);\n const shareLinksFeature = useSessionUiFeature(\"shareLinks\");\n // Only the person who started a top-level chat can share it; the server\n // decides whether links are on at all and says so in the dialog.\n const canShare =\n shareLinksFeature &&\n context !== null &&\n session.parentSessionId === null &&\n session.createdBy?.kind === \"subject\" &&\n session.createdBy.subjectId === context.accessContext.subjectId;\n const [shareOpen, setShareOpen] = useState(false);\n const canEditProfile = Boolean(onUpdateProfile);\n const [profileOpen, setProfileOpen] = useState(false);\n const [saveTemplateOpen, setSaveTemplateOpen] = 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 const hasCrumb =\n Boolean(session.parentSessionId) || ancestors.length > 0 || Boolean(lineageError);\n // A chat started for a Slack agent says which one; its avatar is the agent's icon.\n const slackAgent = sessionSlackAgentInfo(session.metadata);\n const overflow = useSessionHeaderOverflow({\n present: SESSION_HEADER_PARTS.filter((part) => {\n switch (part) {\n case \"panel\":\n return Boolean(onToggleInspector);\n case \"access\":\n return Boolean(accessSlot);\n case \"fullAccess\":\n return Boolean(adminAccess?.state.active);\n case \"automations\":\n return Boolean(onOpenAutomations);\n case \"machine\":\n return Boolean(sandboxSlot);\n case \"site\":\n return sessionSiteOrigin(session) !== null;\n case \"slackAgent\":\n return slackAgent !== null;\n case \"accessKey\":\n return keyAuthRequired;\n default:\n return true;\n }\n }),\n contentKey: sessionDisplayTitle(session),\n resetKey: session.id,\n frozen: rename.editing,\n });\n // In the \"…\" menu instead of the row (see SESSION_HEADER_PARTS).\n const inMenu = (part: SessionHeaderPart) => overflow.collapsed.has(part);\n const part = overflow.partRef;\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\"\n >\n {leading}\n {/* Every chat's header is one row of the same height. A child chat's\n way back is a small line above its title, never beside it. The title\n keeps a readable width: when the row is too narrow, the least\n important parts move into the \"…\" menu (SESSION_HEADER_PARTS). */}\n <div className=\"flex min-w-0 flex-1 flex-col justify-center\">\n <SessionAncestryBreadcrumb\n workspaceId={session.workspaceId}\n parentSessionId={session.parentSessionId}\n ancestors={ancestors}\n loading={lineageLoading}\n error={lineageError}\n />\n <div\n ref={overflow.rowRef}\n data-session-title-row=\"\"\n className={cn(\"flex min-w-0 items-center gap-1\", hasCrumb && \"h-7\")}\n >\n <div\n ref={overflow.titleRef}\n className={cn(\"flex min-w-0 items-center gap-1.5\", rename.editing && \"flex-1\")}\n >\n {/* A bot's avatar travels with its title. */}\n {session.avatar ? (\n <button\n type=\"button\"\n aria-label=\"Edit profile\"\n title=\"Edit profile\"\n disabled={!canEditProfile}\n onClick={() => setProfileOpen(true)}\n className=\"-mr-0.5 flex shrink-0 items-center justify-center rounded-[6px] outline-hidden focus-visible:ring-2 focus-visible:ring-ring/40 enabled:hover:opacity-85 pointer-coarse:size-11\"\n >\n <SessionAvatar\n avatar={session.avatar}\n name={sessionDisplayTitle(session)}\n workspaceId={session.workspaceId}\n seed={session.id}\n size=\"sm\"\n />\n </button>\n ) : null}\n <SessionTitleEditor session={session} rename={rename} />\n </div>\n {/* Below lg (or when the full badge has no room) the lifecycle is a\n dot beside the title. */}\n <CompactSessionStatus\n paused={sessionControlPaused(session)}\n waiting={Boolean(waiting)}\n status={displayStatus}\n label={startupLabel}\n always={inMenu(\"status\")}\n />\n {accessSlot && !inMenu(\"access\") ? (\n <span ref={part(\"access\")} className=\"flex shrink-0 items-center\">\n {accessSlot}\n </span>\n ) : null}\n {adminAccess?.state.active && !inMenu(\"fullAccess\") ? (\n <span ref={part(\"fullAccess\")} className=\"flex shrink-0 items-center\">\n <SessionAdminAccessIndicator\n control={adminAccess}\n onChangeTimeLimit={() => setGrantAdminOpen(true)}\n />\n </span>\n ) : null}\n {sessionSiteOrigin(session) && !inMenu(\"site\") ? (\n <span ref={part(\"site\")} className=\"flex shrink-0 items-center\">\n <SiteOriginLink session={session} />\n </span>\n ) : null}\n {slackAgent && !inMenu(\"slackAgent\") ? (\n <span ref={part(\"slackAgent\")} className=\"flex min-w-0 shrink-0 items-center\">\n <MetaChip\n variant=\"soft\"\n title={`Slack agent: ${slackAgent.name}`}\n className=\"max-w-48\"\n >\n <span data-session-slack-agent=\"\" className=\"min-w-0 truncate\">\n Slack agent: {slackAgent.name}\n </span>\n </MetaChip>\n </span>\n ) : null}\n {onOpenAutomations && !inMenu(\"automations\") ? (\n // The first to give way: its words shorten to its icon before\n // anything moves into the menu. The weight is high enough that\n // the title keeps every pixel until then (a sliver would already\n // truncate it).\n <span\n ref={part(\"automations\")}\n className=\"flex min-w-6 shrink-[100000] items-center pointer-coarse:min-w-11\"\n >\n <AutomationWaitChip session={session} onOpen={onOpenAutomations} />\n </span>\n ) : null}\n </div>\n </div>\n <div ref={overflow.clusterRef} className=\"flex shrink-0 items-center gap-0.5 lg:gap-2\">\n {/* Provider + model · effort · speed stay one cluster on the action side. */}\n {inMenu(\"model\") ? null : (\n <div\n ref={part(\"model\")}\n className=\"hidden max-w-[18rem] items-center gap-1.5 overflow-hidden text-2xs leading-4 text-fg-muted lg:flex xl:max-w-[22rem]\"\n >\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 )}\n {/* Below lg, machine, find and pin live in the \"…\" menu. */}\n {sandboxSlot && !inMenu(\"machine\") ? (\n <span ref={part(\"machine\")} className=\"hidden items-center lg:flex\">\n {sandboxSlot}\n </span>\n ) : null}\n {inMenu(\"find\") ? null : (\n <Button\n ref={part(\"find\")}\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 )}\n {inMenu(\"pin\") || !canPin ? null : (\n <Button\n ref={part(\"pin\")}\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 )}\n <span className=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {pin.announcement}\n </span>\n {inMenu(\"status\") ? null : (\n <div ref={part(\"status\")} 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 <StatusPill\n className=\"border-border bg-surface text-fg-muted\"\n data-session-wait-badge=\"\"\n >\n Waiting\n </StatusPill>\n ) : (\n <SessionStatusBadge status={displayStatus} label={startupLabel} />\n )\n ) : (\n <WorkstreamControlIndicator session={session} />\n )}\n </div>\n )}\n <span className={cn(\"sr-only\", !inMenu(\"status\") && \"lg:hidden\")}>\n Connection {connectionState}.\n </span>\n {keyAuthRequired && !inMenu(\"accessKey\") ? (\n <Button\n ref={part(\"accessKey\")}\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 && !inMenu(\"panel\") ? (\n <Button\n ref={part(\"panel\")}\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 {onToggleInspector && inMenu(\"panel\") ? (\n <DropdownMenuItem\n aria-keyshortcuts={panelKeys?.ariaKeys}\n onSelect={() => {\n afterMenuClose.current = onToggleInspector;\n }}\n >\n {inspectorOpen ? <PanelRightCloseIcon /> : <PanelRightOpenIcon />}\n {inspectorOpen ? \"Hide workspace\" : \"Open workspace\"}\n {panelKeys ? <DropdownMenuShortcut>{panelKeys.label}</DropdownMenuShortcut> : null}\n </DropdownMenuItem>\n ) : null}\n <DropdownMenuItem\n className={inMenu(\"find\") ? undefined : \"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 {canEditProfile ? (\n <DropdownMenuItem\n onSelect={() => {\n afterMenuClose.current = () => setProfileOpen(true);\n }}\n >\n <UserRoundPenIcon />\n Edit profile…\n </DropdownMenuItem>\n ) : null}\n {onSaveBotTemplate ? (\n <DropdownMenuItem\n onSelect={() => {\n afterMenuClose.current = () => setSaveTemplateOpen(true);\n }}\n >\n <BotIcon />\n Save as bot template…\n </DropdownMenuItem>\n ) : null}\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 {canShare ? (\n <DropdownMenuItem\n onSelect={() => {\n afterMenuClose.current = () => setShareOpen(true);\n }}\n >\n <Share2Icon />\n Share…\n </DropdownMenuItem>\n ) : null}\n {canPin ? (\n <DropdownMenuItem\n className={inMenu(\"pin\") ? undefined : \"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 ) : null}\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\n className={cn(\n \"flex min-h-9 items-center px-2 empty:hidden\",\n !inMenu(\"machine\") && \"lg:hidden\",\n )}\n >\n {sandboxSlot}\n </div>\n ) : null}\n {/* Parts with no room in the header row (SESSION_HEADER_PARTS). */}\n {accessSlot && inMenu(\"access\") ? (\n <div className=\"flex min-h-9 items-center gap-2 px-2 text-sm text-fg-muted\">\n Access\n {accessSlot}\n </div>\n ) : null}\n {onOpenAutomations && inMenu(\"automations\") ? (\n <AutomationWaitMenuItem\n session={session}\n onOpen={() => {\n afterMenuClose.current = onOpenAutomations;\n }}\n />\n ) : null}\n {inMenu(\"site\") ? <SiteOriginMenuItem session={session} /> : null}\n {slackAgent && inMenu(\"slackAgent\") ? (\n <div className=\"flex min-h-9 min-w-0 items-center px-2 text-sm text-fg-muted\">\n <span className=\"min-w-0 truncate\">Slack agent: {slackAgent.name}</span>\n </div>\n ) : null}\n {keyAuthRequired && inMenu(\"accessKey\") ? (\n <DropdownMenuItem onSelect={onForgetAccessKey}>\n <LockIcon />\n Clear access key\n </DropdownMenuItem>\n ) : null}\n {repliesMute ? (\n <DropdownMenuItem disabled={repliesMute.busy} onSelect={() => repliesMute.toggle()}>\n {repliesMute.muted ? <BellIcon /> : <BellOffIcon />}\n {repliesMuteLabel(repliesMute)}\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 && inMenu(\"fullAccess\") ? (\n <>\n <DropdownMenuSeparator />\n <SessionAdminAccessMenuItems\n control={adminAccess}\n onChangeTimeLimit={() => setGrantAdminOpen(true)}\n runAfterClose={(action) => {\n afterMenuClose.current = action;\n }}\n />\n </>\n ) : adminAccess?.state.active && adminAccess.state.canRevoke ? (\n <DropdownMenuItem disabled={adminAccess.busy} onSelect={() => adminAccess.revoke()}>\n <ShieldOffIcon />\n Turn off full 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 full access…\n </DropdownMenuItem>\n ) : null}\n {canArchive ? (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n aria-keyshortcuts={archiveKeys?.ariaKeys}\n onSelect={() => void onArchive?.(session, true)}\n >\n <ArchiveIcon />\n Archive\n {archiveKeys ? (\n <DropdownMenuShortcut>{archiveKeys.label}</DropdownMenuShortcut>\n ) : null}\n </DropdownMenuItem>\n </>\n ) : null}\n </DropdownMenuContent>\n </DropdownMenu>\n {canShare && context ? (\n <ShareChatDialog\n client={context.client}\n workspaceId={session.workspaceId}\n sessionId={session.id}\n open={shareOpen}\n onOpenChange={setShareOpen}\n />\n ) : null}\n {onUpdateProfile && profileOpen ? (\n <SessionProfileEditorDialog\n session={session}\n update={onUpdateProfile}\n open={profileOpen}\n onOpenChange={setProfileOpen}\n />\n ) : null}\n {onSaveBotTemplate && saveTemplateOpen ? (\n <BotTemplateDialog\n open={saveTemplateOpen}\n onOpenChange={setSaveTemplateOpen}\n workspaceId={session.workspaceId}\n seed={session.id}\n mode=\"save\"\n initial={{\n name: sessionDisplayTitle(session),\n description: session.description ?? \"\",\n avatar: session.avatar ?? null,\n setupInstructions: \"\",\n // Shared like the chat, so an Only me chat stays private by default.\n visibility: session.tenancy?.visibility === \"private\" ? \"private\" : \"workspace\",\n }}\n onSubmit={async (values) => {\n const created = await onSaveBotTemplate({ ...values, sourceSessionId: session.id });\n toast.success(\"Bot template saved\", {\n description: created.name,\n });\n }}\n />\n ) : null}\n {adminAccess ? (\n <GrantSessionAdminAccessDialog\n control={adminAccess}\n open={grantAdminOpen}\n onOpenChange={setGrantAdminOpen}\n />\n ) : null}\n </div>\n </header>\n );\n}\n\n/**\n * The automations that post into this chat: what they wait for in a few\n * words, every wait on hover, and their settings on click. A paused or\n * finished automation still links to its settings, marked inactive. Narrow\n * headers keep only the icon; its name always carries the whole wait.\n */\nfunction AutomationWaitChip({ session, onOpen }: { session: Session; onOpen: () => void }) {\n const now = new Date();\n const wait = sessionAutomationWaitWords(t, session, { now });\n const lines = sessionAutomationWaitLines(t, session, { now });\n const kind = wait?.kind ?? \"none\";\n return (\n <HoverCard openDelay={150} closeDelay={80}>\n <HoverCardTrigger asChild>\n <button\n type=\"button\"\n onClick={onOpen}\n data-automation-wait={kind}\n aria-label={t(\"automations.wait.openPanel\", {\n wait: wait?.label ?? t(\"automations.wait.none\"),\n })}\n className=\"inline-flex min-w-0 max-w-60 items-center justify-center gap-1 rounded-full px-1.5 text-2xs text-fg-muted transition-colors hover:text-fg focus-visible:outline-2 focus-visible:outline-ring/55 pointer-coarse:min-h-11 pointer-coarse:min-w-11\"\n >\n <AutomationWaitIcon kind={kind} />\n <span className=\"hidden min-w-0 truncate sm:block @max-[34rem]/titlebar:hidden!\">\n {wait?.short ?? t(\"sessionChrome.automation\")}\n </span>\n </button>\n </HoverCardTrigger>\n <HoverCardContent\n collisionPadding={8}\n className=\"w-auto min-w-56 max-w-[min(22rem,calc(100vw-16px))] p-3\"\n >\n <div data-automation-wait-details=\"\" className=\"grid min-w-0 gap-2.5\">\n <p className=\"text-xs font-medium text-fg\">{t(\"automations.wait.details.heading\")}</p>\n <ul className=\"grid min-w-0 gap-1.5\">\n {lines.map((line) => (\n <li\n key={line.text}\n className=\"flex min-w-0 items-start gap-2 text-xs leading-4 text-fg-muted\"\n >\n <span className=\"flex size-4 shrink-0 items-center justify-center text-fg-subtle\">\n <AutomationWaitIcon kind={line.kind} />\n </span>\n <span className=\"min-w-0 flex-1 [overflow-wrap:anywhere]\">{line.text}</span>\n </li>\n ))}\n </ul>\n <p className=\"border-t border-border pt-2 text-2xs text-fg-subtle\">\n {t(\"automations.wait.details.open\")}\n </p>\n </div>\n </HoverCardContent>\n </HoverCard>\n );\n}\n\nfunction AutomationWaitIcon({ kind }: { kind: \"event\" | \"schedule\" | \"none\" }) {\n return kind === \"event\" ? (\n <ZapIcon aria-hidden className=\"size-3 shrink-0\" />\n ) : kind === \"schedule\" ? (\n <CalendarClockIcon aria-hidden className=\"size-3 shrink-0\" />\n ) : (\n <ZapOffIcon aria-hidden className=\"size-3 shrink-0\" />\n );\n}\n\n/** The automation chip as a \"…\" menu item, for a header with no room for it. */\nfunction AutomationWaitMenuItem({ session, onOpen }: { session: Session; onOpen: () => void }) {\n const wait = sessionAutomationWaitWords(t, session, { now: new Date() });\n return (\n <DropdownMenuItem\n onSelect={onOpen}\n aria-label={t(\"automations.wait.openPanel\", {\n wait: wait?.label ?? t(\"automations.wait.none\"),\n })}\n >\n <AutomationWaitIcon kind={wait?.kind ?? \"none\"} />\n <span className=\"min-w-0 truncate\">{wait?.short ?? t(\"sessionChrome.automation\")}</span>\n </DropdownMenuItem>\n );\n}\n\n/**\n * Small-screen status: a dot beside the title, named for assistive tech.\n * `always` keeps it on wide screens too, when the full badge has no room.\n */\nfunction CompactSessionStatus({\n paused,\n waiting,\n status,\n label,\n always = false,\n}: {\n paused: boolean;\n waiting: boolean;\n status: SessionDisplayStatus;\n label?: string | undefined;\n always?: boolean | undefined;\n}) {\n const className = cn(\"inline-flex shrink-0 items-center\", !always && \"lg:hidden\");\n if (paused) {\n return (\n <span data-compact-session-status=\"paused\" title=\"Paused\" className={className}>\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 data-compact-session-status=\"waiting\" title=\"Waiting\" className={className}>\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={className}\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 min-w-0 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 data-session-title-text=\"\"\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","/**\n * The Slack agent a chat was started for, read from the chat's metadata.\n *\n * Mirrors `sessionSlackAgent` from `@opengeni/contracts` without zod, so the\n * chat header (an eager module) does not load the contracts schemas. The\n * parity test keeps the two in step.\n */\nexport type SessionSlackAgentInfo = { id: string; name: string };\n\n/** Session metadata key, `SESSION_SLACK_AGENT_METADATA_KEY` in contracts. */\nconst KEY = \"slackAgent\";\nconst UUID = /^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/iu;\n\nexport function sessionSlackAgentInfo(\n metadata: Record<string, unknown> | null | undefined,\n): SessionSlackAgentInfo | null {\n const value = metadata?.[KEY];\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return null;\n const { id, name } = value as Record<string, unknown>;\n if (typeof id !== \"string\" || !UUID.test(id)) return null;\n if (typeof name !== \"string\" || name.length === 0) return null;\n return { id, name };\n}\n","import { useCallback, useEffect, useLayoutEffect, useRef, useState, type RefObject } from \"react\";\n\n/**\n * The chat header's optional parts, most important first. The header is always\n * one row: when the title would be squeezed below its readable width, parts\n * leave the row from the end of this list and live in the \"…\" menu instead;\n * they come back once there is room again. One rule for every screen size, so\n * no part needs its own breakpoint. A part that can shrink (flex-shrink above\n * 1, like the automation chip's words) gives way first, down to its minimum\n * width, before anything leaves.\n */\nexport const SESSION_HEADER_PARTS = [\n \"panel\",\n \"status\",\n \"access\",\n \"fullAccess\",\n \"automations\",\n \"pin\",\n \"find\",\n \"machine\",\n \"site\",\n \"slackAgent\",\n \"model\",\n \"accessKey\",\n] as const;\n\nexport type SessionHeaderPart = (typeof SESSION_HEADER_PARTS)[number];\n\n/** The title's readable width: its whole text, up to 40% of the header or 20rem. */\nconst TITLE_HEADER_SHARE = 0.4;\nconst TITLE_MAX_REM = 20;\n/** A part comes back only with this much to spare, so a part on the edge never flickers. */\nconst RETURN_SLACK_PX = 8;\n\nconst NONE: ReadonlySet<SessionHeaderPart> = new Set();\n\nexport type SessionHeaderOverflow = {\n /** Parts that are in the \"…\" menu instead of the row. */\n collapsed: ReadonlySet<SessionHeaderPart>;\n /** The row that holds the title and the parts beside it. */\n rowRef: RefObject<HTMLDivElement | null>;\n /** The title's own box inside that row. */\n titleRef: RefObject<HTMLDivElement | null>;\n /** The action cluster on the header's other side. */\n clusterRef: RefObject<HTMLDivElement | null>;\n /** Stable ref for the element that is one part, measured while it is in the row. */\n partRef: (part: SessionHeaderPart) => (element: HTMLElement | null) => void;\n};\n\n/**\n * Keeps the header on one row by moving the least important parts into the\n * \"…\" menu when the title would get too narrow. `present` lists the parts this\n * chat has; `contentKey` changes whenever the title's text does; `resetKey`\n * (the chat) starts over with every part in the row; `frozen` holds the\n * current layout (while renaming).\n */\nexport function useSessionHeaderOverflow({\n present,\n contentKey,\n resetKey,\n frozen,\n}: {\n present: readonly SessionHeaderPart[];\n contentKey: string;\n resetKey: string;\n frozen: boolean;\n}): SessionHeaderOverflow {\n const rowRef = useRef<HTMLDivElement | null>(null);\n const titleRef = useRef<HTMLDivElement | null>(null);\n const clusterRef = useRef<HTMLDivElement | null>(null);\n const elements = useRef(new Map<SessionHeaderPart, HTMLElement>());\n const refs = useRef(new Map<SessionHeaderPart, (element: HTMLElement | null) => void>());\n const observer = useRef<ResizeObserver | null>(null);\n // A part's width (with its gap) from when it was last in the row.\n const widths = useRef(new Map<SessionHeaderPart, number>());\n const [collapsed, setCollapsed] = useState<ReadonlySet<SessionHeaderPart>>(NONE);\n const current = useRef(collapsed);\n const inputs = useRef({ present, frozen });\n const presentKey = present.join(\" \");\n\n const partRef = useCallback((part: SessionHeaderPart) => {\n let ref = refs.current.get(part);\n if (!ref) {\n ref = (element) => {\n const previous = elements.current.get(part);\n if (previous && previous !== element) observer.current?.unobserve(previous);\n if (element) {\n elements.current.set(part, element);\n observer.current?.observe(element);\n } else {\n elements.current.delete(part);\n }\n };\n refs.current.set(part, ref);\n }\n return ref;\n }, []);\n\n // `grow` lets parts come back. Only changes from outside (size, content,\n // which parts exist) may grow; our own changes only ever move more parts\n // out, so the row always settles.\n const fit = useCallback((grow: boolean) => {\n const { present: parts, frozen: hold } = inputs.current;\n const row = rowRef.current;\n const title = titleRef.current;\n if (hold || !row || !title) return;\n const { room: start, need } = measureRoom(row, title);\n let room = start;\n const available = new Set(parts);\n const next = new Set([...current.current].filter((part) => available.has(part)));\n if (room < need) {\n for (let index = SESSION_HEADER_PARTS.length - 1; index >= 0 && room < need; index -= 1) {\n const part = SESSION_HEADER_PARTS[index]!;\n if (!available.has(part) || next.has(part)) continue;\n const width = partWidth(elements.current.get(part));\n // Hidden at this size anyway (desktop-only parts on a phone).\n if (width <= 0) continue;\n widths.current.set(part, width);\n next.add(part);\n room += width;\n }\n } else if (grow) {\n for (const part of SESSION_HEADER_PARTS) {\n if (!next.has(part)) continue;\n const width = widths.current.get(part);\n if (width === undefined || room - width < need + RETURN_SLACK_PX) continue;\n next.delete(part);\n room -= width;\n }\n }\n if (sameParts(next, current.current)) return;\n current.current = next;\n setCollapsed(next);\n }, []);\n\n // A different chat starts with every part in the row.\n useLayoutEffect(() => {\n widths.current.clear();\n if (current.current.size === 0) return;\n current.current = NONE;\n setCollapsed(NONE);\n }, [resetKey]);\n\n useLayoutEffect(() => {\n inputs.current = { present, frozen };\n fit(true);\n // `present` is compared through `presentKey`, so a new array with the\n // same parts does not measure again.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fit, presentKey, contentKey, frozen]);\n\n useLayoutEffect(() => {\n fit(false);\n }, [fit, collapsed]);\n\n // Anything that changes size (the header, the title, a part) fits again.\n useEffect(() => {\n if (typeof ResizeObserver === \"undefined\") return;\n const sizes = new ResizeObserver(() => fit(true));\n observer.current = sizes;\n for (const element of [\n rowRef.current,\n titleRef.current,\n clusterRef.current,\n ...elements.current.values(),\n ]) {\n if (element) sizes.observe(element);\n }\n return () => {\n sizes.disconnect();\n observer.current = null;\n };\n }, [fit]);\n\n return { collapsed, rowRef, titleRef, clusterRef, partRef };\n}\n\n/**\n * How wide the title could be with the parts now in the row (`room`), and how\n * wide it should be (`need`): its whole text, up to its readable width.\n */\nfunction measureRoom(row: HTMLElement, title: HTMLElement): { room: number; need: number } {\n const gap = Number.parseFloat(getComputedStyle(row).columnGap) || 0;\n let used = 0;\n let shown = 0;\n for (const child of row.children) {\n if (getComputedStyle(child).display === \"none\") continue;\n used += child === title ? title.getBoundingClientRect().width : rigidWidth(child);\n shown += 1;\n }\n used += gap * Math.max(0, shown - 1);\n const titleWidth = title.getBoundingClientRect().width;\n const text = title.querySelector<HTMLElement>(\"[data-session-title-text]\");\n const natural = text\n ? titleWidth - text.getBoundingClientRect().width + text.scrollWidth\n : titleWidth;\n const header = row.closest(\"header\");\n const rem = Number.parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;\n const readable = Math.min((header?.clientWidth ?? 0) * TITLE_HEADER_SHARE, TITLE_MAX_REM * rem);\n return { room: titleWidth + row.clientWidth - used, need: Math.min(natural, readable) };\n}\n\nfunction partWidth(element: HTMLElement | undefined): number {\n if (!element) return 0;\n const width = rigidWidth(element);\n if (width <= 0) return 0;\n const parent = element.parentElement;\n const gap = parent ? Number.parseFloat(getComputedStyle(parent).columnGap) || 0 : 0;\n return width + gap;\n}\n\n/** The width a part keeps: a part that gives way first can shrink to its minimum. */\nfunction rigidWidth(element: Element): number {\n const width = element.getBoundingClientRect().width;\n const style = getComputedStyle(element);\n if ((Number.parseFloat(style.flexShrink) || 0) <= 1) return width;\n return Math.min(width, Number.parseFloat(style.minWidth) || 0);\n}\n\nfunction sameParts(a: ReadonlySet<SessionHeaderPart>, b: ReadonlySet<SessionHeaderPart>) {\n if (a.size !== b.size) return false;\n for (const part of a) if (!b.has(part)) return false;\n return true;\n}\n"],"mappings":"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","names":["useCallback","useEffect","useRef","useState","useState","useRef","part","useEffect","useCallback"]}