@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
@@ -6,8 +6,12 @@ import {
6
6
  import type { Session, SessionEvent, SessionListResponse } from "@opengeni/sdk";
7
7
  import { OpenGeniApiError } from "@opengeni/sdk/browser";
8
8
  import {
9
+ ArchiveIcon,
9
10
  ArrowLeftIcon,
11
+ CopyIcon,
12
+ CopyPlusIcon,
10
13
  InfoIcon,
14
+ LinkIcon,
11
15
  Maximize2Icon,
12
16
  MoreHorizontalIcon,
13
17
  PanelLeftCloseIcon,
@@ -16,6 +20,7 @@ import {
16
20
  PanelRightCloseIcon,
17
21
  PanelRightIcon,
18
22
  PanelRightOpenIcon,
23
+ PinIcon,
19
24
  PlusIcon,
20
25
  } from "lucide-react";
21
26
  import {
@@ -29,6 +34,7 @@ import {
29
34
  useRef,
30
35
  useState,
31
36
  type CSSProperties,
37
+ type ReactNode,
32
38
  type RefObject,
33
39
  } from "react";
34
40
  import { SiteView } from "../../artifacts";
@@ -40,12 +46,21 @@ import type {
40
46
  NewConversationCreateOptions,
41
47
  } from "../../hooks/use-new-conversation";
42
48
  import { Button } from "../../ui/button";
49
+ import {
50
+ ContextMenu,
51
+ ContextMenuContent,
52
+ ContextMenuItem,
53
+ ContextMenuTrigger,
54
+ } from "../../ui/context-menu";
43
55
  import {
44
56
  DropdownMenu,
45
57
  DropdownMenuContent,
46
58
  DropdownMenuItem,
59
+ DropdownMenuSeparator,
47
60
  DropdownMenuTrigger,
48
61
  } from "../../ui/dropdown-menu";
62
+ import { useSiteActions } from "../components/artifacts/site-actions";
63
+ import { useSiteSidebarActions } from "../lib/site-sidebar-bridge";
49
64
  import { ResizeHandle } from "../../ui/resize-handle";
50
65
  import { Skeleton } from "../../ui/skeleton";
51
66
  import { useAppContext, type SessionCreationHandoff } from "../app-context";
@@ -201,7 +216,9 @@ export function SiteViewRoute({
201
216
  // the bar's row is hidden). The publish form, opened in front of the Site,
202
217
  // names the bar once it has loaded; the Site's claim mounted first, so it
203
218
  // yields while the form is open.
204
- const titleInWindowBar = useWindowBarTitle(artifact?.title ?? null, publishing);
219
+ const titleInWindowBar = useWindowBarTitle(artifact?.title ?? null, publishing, {
220
+ copyable: true,
221
+ });
205
222
  // Full screen is the route's so opening the form can leave it first.
206
223
  const [fullScreen, setFullScreen] = useState(false);
207
224
  const openPublishing = useCallback(() => {
@@ -303,6 +320,18 @@ export function SiteViewRoute({
303
320
  onSiteLocationChange={onSiteLocationChange}
304
321
  toolbarStart={backControl}
305
322
  showTitle={!titleInWindowBar || fullScreen}
323
+ renderTitle={
324
+ artifact
325
+ ? (title) => (
326
+ <SiteTitleMenu
327
+ workspaceId={workspaceId}
328
+ origin={{ siteId, title: artifact.title }}
329
+ >
330
+ {title}
331
+ </SiteTitleMenu>
332
+ )
333
+ : undefined
334
+ }
306
335
  // The one publication control. The Site view never says "Live":
307
336
  // it stays current, and says so only while Updating or Reconnecting.
308
337
  liveStatus={
@@ -317,6 +346,13 @@ export function SiteViewRoute({
317
346
  item={{ kind: "site", id: siteId }}
318
347
  className="size-8 rounded-md text-fg-muted hover:text-fg"
319
348
  />
349
+ {artifact ? (
350
+ <SiteActionsMenu
351
+ workspaceId={workspaceId}
352
+ origin={{ siteId, title: artifact.title }}
353
+ hasVersion={Boolean(artifact.currentVersion)}
354
+ />
355
+ ) : null}
320
356
  </>
321
357
  }
322
358
  versionId={artifact ? (artifact.currentVersion?.id ?? null) : undefined}
@@ -368,6 +404,104 @@ export function SiteViewRoute({
368
404
  );
369
405
  }
370
406
 
407
+ /** Right-click the Site's title: copy it or the Site's address. */
408
+ function SiteTitleMenu({
409
+ workspaceId,
410
+ origin,
411
+ children,
412
+ }: {
413
+ workspaceId: string;
414
+ origin: { siteId: string; title: string };
415
+ children: ReactNode;
416
+ }) {
417
+ const site = useSiteActions(workspaceId, origin);
418
+ return (
419
+ <ContextMenu>
420
+ <ContextMenuTrigger asChild>{children}</ContextMenuTrigger>
421
+ <ContextMenuContent className="min-w-40" data-site-title-menu="">
422
+ <ContextMenuItem onSelect={site.copyTitle}>
423
+ <CopyIcon className="size-4" />
424
+ Copy title
425
+ </ContextMenuItem>
426
+ <ContextMenuItem onSelect={site.copyLink}>
427
+ <LinkIcon className="size-4" />
428
+ Copy link
429
+ </ContextMenuItem>
430
+ </ContextMenuContent>
431
+ </ContextMenu>
432
+ );
433
+ }
434
+
435
+ /**
436
+ * The Site's "…", as a chat's header has one: Copy title, the sidebar's Pin
437
+ * and Archive (while the sidebar lists Sites), Duplicate and Site details.
438
+ * Copy link and the published address keep their own controls beside it.
439
+ */
440
+ function SiteActionsMenu({
441
+ workspaceId,
442
+ origin,
443
+ hasVersion,
444
+ }: {
445
+ workspaceId: string;
446
+ origin: { siteId: string; title: string };
447
+ hasVersion: boolean;
448
+ }) {
449
+ const site = useSiteActions(workspaceId, origin, { hasVersion });
450
+ const sidebar = useSiteSidebarActions(workspaceId, origin);
451
+ return (
452
+ <span data-site-actions-root="" className="contents">
453
+ <DropdownMenu>
454
+ <DropdownMenuTrigger asChild>
455
+ <Button
456
+ type="button"
457
+ variant="ghost"
458
+ size="icon-sm"
459
+ aria-label="More Site actions"
460
+ title="More"
461
+ data-site-actions-menu=""
462
+ className="size-8 rounded-md text-fg-muted hover:text-fg pointer-coarse:size-11"
463
+ >
464
+ <MoreHorizontalIcon aria-hidden="true" className="size-4" />
465
+ </Button>
466
+ </DropdownMenuTrigger>
467
+ <DropdownMenuContent align="end" className="w-52">
468
+ <DropdownMenuItem onSelect={site.copyTitle}>
469
+ <CopyIcon aria-hidden="true" />
470
+ Copy title
471
+ </DropdownMenuItem>
472
+ {sidebar ? (
473
+ <DropdownMenuItem onSelect={sidebar.togglePin}>
474
+ <PinIcon aria-hidden="true" className={sidebar.pinned ? "fill-current" : undefined} />
475
+ {sidebar.pinned ? "Unpin" : "Pin"}
476
+ </DropdownMenuItem>
477
+ ) : null}
478
+ {site.duplicate ? (
479
+ <DropdownMenuItem disabled={site.duplicate.busy} onSelect={site.duplicate.run}>
480
+ <CopyPlusIcon aria-hidden="true" />
481
+ {site.duplicate.busy ? "Duplicating…" : "Duplicate"}
482
+ </DropdownMenuItem>
483
+ ) : null}
484
+ <DropdownMenuItem asChild>
485
+ <Link {...site.details}>
486
+ <InfoIcon aria-hidden="true" />
487
+ Site details
488
+ </Link>
489
+ </DropdownMenuItem>
490
+ {sidebar ? (
491
+ <>
492
+ <DropdownMenuSeparator />
493
+ <DropdownMenuItem onSelect={sidebar.archive}>
494
+ <ArchiveIcon aria-hidden="true" />
495
+ Archive
496
+ </DropdownMenuItem>
497
+ </>
498
+ ) : null}
499
+ </DropdownMenuContent>
500
+ </DropdownMenu>
501
+ </span>
502
+ );
503
+ }
504
+
371
505
  const PAGE_SIZE = 30;
372
506
 
373
507
  /**
@@ -842,19 +976,6 @@ function SiteChatPanel({
842
976
  </Link>
843
977
  </DropdownMenuItem>
844
978
  ) : null}
845
- <DropdownMenuItem asChild>
846
- <Link
847
- to="/workspaces/$workspaceId/artifacts/$artifactId"
848
- params={{ workspaceId, artifactId: siteId }}
849
- // Its details are by tab; without one the address opens
850
- // the Site view again. Settings shows Versions to people
851
- // who can't manage it.
852
- search={{ tab: "settings" }}
853
- >
854
- <InfoIcon aria-hidden="true" />
855
- Site details
856
- </Link>
857
- </DropdownMenuItem>
858
979
  {/* Beside the Site only on wide screens; narrower ones stack the chat below. */}
859
980
  <DropdownMenuItem
860
981
  className="max-lg:hidden"
@@ -71,6 +71,17 @@ export type ApprovalSurfaceProps = {
71
71
  };
72
72
  export type ApprovalField = { key: string; label: string; value: string };
73
73
 
74
+ /** Backoff for re-reading a waiting review that offered no decision. */
75
+ const UNDECIDABLE_RETRY_DELAYS_MS = [1_000, 2_000, 4_000, 8_000, 8_000];
76
+
77
+ function reviewUndecidable(review: ToolActionReview | undefined): review is ToolActionReview {
78
+ return (
79
+ review?.status === "pending" &&
80
+ !review.availableActions.includes("approve") &&
81
+ !review.availableActions.includes("reject")
82
+ );
83
+ }
84
+
74
85
  /** Hosts provide decisions; this surface never mutates the approved payload. */
75
86
  export function ApprovalSurface({
76
87
  approvals,
@@ -107,7 +118,11 @@ export function ApprovalSurface({
107
118
  if (pending && !approvals.some((approval) => approval.id === pending.id)) {
108
119
  pendingRef.current = null;
109
120
  setPending(null);
110
- requestAnimationFrame(() => surface.current?.querySelector<HTMLElement>("h3")?.focus());
121
+ // Hand focus to the next card without moving the view: a reader at the
122
+ // bottom already sees it, and one who scrolled up keeps their place.
123
+ requestAnimationFrame(() =>
124
+ surface.current?.querySelector<HTMLElement>("h3")?.focus({ preventScroll: true }),
125
+ );
111
126
  }
112
127
  }, [approvals, pending]);
113
128
  if (!approvals.length) return null;
@@ -265,12 +280,26 @@ function ApprovalRequest({
265
280
  legacy?: boolean;
266
281
  denied?: boolean;
267
282
  } | null>(null);
268
- // Hide stale facts during render, before passive effect cleanup can run.
269
- const current = result?.request === request ? result : null;
283
+ // Hide stale facts during render, before passive effect cleanup can run. A
284
+ // re-read of the same undecided action (same facts, same loader) keeps its
285
+ // notice up meanwhile.
286
+ const current =
287
+ result?.request === request ||
288
+ (result !== null &&
289
+ result.request.loadReview === request.loadReview &&
290
+ reviewUndecidable(result.review) &&
291
+ dequal(result.request.approval, request.approval))
292
+ ? result
293
+ : null;
270
294
  const loaded = current?.review;
271
295
  const failed = current?.failed;
272
296
  const legacy = current?.legacy;
273
297
  const denied = current?.denied;
298
+ // Still waiting, yet the saved review offers no decision: it was read while
299
+ // the chat was between states. Never a silent footer: say so, offer a retry,
300
+ // and re-read it on its own a few times.
301
+ const undecidable = reviewUndecidable(loaded);
302
+ const undecidableRetries = useRef(0);
274
303
  const [detailPath, setDetailPath] = useState<string | null>(null);
275
304
  useEffect(() => {
276
305
  let active = true;
@@ -302,6 +331,22 @@ function ApprovalRequest({
302
331
  active = false;
303
332
  };
304
333
  }, [request]);
334
+ // Each automatic re-read waits from when the previous read answered.
335
+ const readSettled = result?.request === request;
336
+ useEffect(() => {
337
+ if (
338
+ !undecidable ||
339
+ !readSettled ||
340
+ undecidableRetries.current >= UNDECIDABLE_RETRY_DELAYS_MS.length
341
+ )
342
+ return;
343
+ const delay = UNDECIDABLE_RETRY_DELAYS_MS[undecidableRetries.current]!;
344
+ const timer = setTimeout(() => {
345
+ undecidableRetries.current += 1;
346
+ setRetry((value) => value + 1);
347
+ }, delay);
348
+ return () => clearTimeout(timer);
349
+ }, [undecidable, readSettled, request]);
305
350
  const stableApproval = request.approval;
306
351
  const { formatToolName, approve: approveLabel } = messages;
307
352
  const toolName = approvalToolName(stableApproval);
@@ -382,6 +427,36 @@ function ApprovalRequest({
382
427
  </p>
383
428
  </ToolReviewFrame>
384
429
  );
430
+ if (undecidable)
431
+ return (
432
+ <div data-approval-id={approval.id} data-review-origin="pending">
433
+ {custom}
434
+ <ToolReviewFrame
435
+ tone="waiting"
436
+ icon={<ShieldCheckIcon className="size-4" aria-hidden="true" />}
437
+ eyebrow={messages.title}
438
+ title={loaded.title}
439
+ subtitle={loaded.accountLabel}
440
+ data-og-tool-review=""
441
+ data-og-tool-review-undecidable=""
442
+ >
443
+ <p className="m-0 text-og-sm text-og-fg">
444
+ <span role="status">{t("approvalSurface.thisActionCanTBeDecided")}</span>{" "}
445
+ <button
446
+ type="button"
447
+ className="min-h-8 font-medium underline underline-offset-4 [@media(pointer:coarse)]:min-h-11 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent/40"
448
+ onClick={() => {
449
+ // Asking again starts a fresh round of automatic re-reads.
450
+ undecidableRetries.current = 0;
451
+ setRetry((value) => value + 1);
452
+ }}
453
+ >
454
+ {t("approvalSurface.tryAgain")}
455
+ </button>
456
+ </p>
457
+ </ToolReviewFrame>
458
+ </div>
459
+ );
385
460
  if (!loaded && stableApproval.arguments === undefined)
386
461
  return (
387
462
  <div data-approval-id={approval.id} data-review-origin="pending">
@@ -6,7 +6,14 @@ import {
6
6
  RefreshCwIcon,
7
7
  SparklesIcon,
8
8
  } from "lucide-react";
9
- import { useCallback, useLayoutEffect, useRef, useState, type ReactNode } from "react";
9
+ import {
10
+ useCallback,
11
+ useLayoutEffect,
12
+ useRef,
13
+ useState,
14
+ type ReactElement,
15
+ type ReactNode,
16
+ } from "react";
10
17
  import type { SiteViewer } from "@opengeni/sdk";
11
18
 
12
19
  import { cn } from "../../lib/cn";
@@ -45,6 +52,11 @@ export type ArtifactSandboxProps = {
45
52
  title: string;
46
53
  /** Hide the visible title/icon while retaining the accessible iframe title. */
47
54
  showTitle?: boolean | undefined;
55
+ /**
56
+ * Wraps the visible title, so a host can attach its own menu to it (the
57
+ * Site view's Copy title). Returns the title itself when absent.
58
+ */
59
+ renderTitle?: ((title: ReactElement) => ReactNode) | undefined;
48
60
  showLiveStatus?: boolean | undefined;
49
61
  /**
50
62
  * Replaces the "Live" indicator, for example with the host's link to the
@@ -200,7 +212,20 @@ export function ArtifactSandbox(props: ArtifactSandboxProps) {
200
212
  <Globe2Icon className="size-3.5" />
201
213
  </span>
202
214
  ) : null}
203
- {props.showTitle !== false && (
215
+ {props.showTitle === false ? null : props.renderTitle ? (
216
+ // Its menu opens in front of full screen, as the controls' do; its
217
+ // words leave a full-screen toolbar's drag region so they can be
218
+ // right-clicked.
219
+ <PortalContainerProvider
220
+ container={focused && frameElement ? frameElement : inheritedPortal}
221
+ >
222
+ {props.renderTitle(
223
+ <span className="truncate text-xs font-semibold text-fg [-webkit-app-region:no-drag] [app-region:no-drag]">
224
+ {props.title}
225
+ </span>,
226
+ )}
227
+ </PortalContainerProvider>
228
+ ) : (
204
229
  <span className="truncate text-xs font-semibold text-fg">{props.title}</span>
205
230
  )}
206
231
  {props.headerControls ? (
@@ -1,4 +1,12 @@
1
- import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from "react";
1
+ import {
2
+ useCallback,
3
+ useEffect,
4
+ useMemo,
5
+ useRef,
6
+ useState,
7
+ type ReactElement,
8
+ type ReactNode,
9
+ } from "react";
2
10
  import type { SiteViewer } from "@opengeni/sdk";
3
11
 
4
12
  import { loadSiteSnapshot } from "../../sites-ui";
@@ -36,6 +44,8 @@ export type SiteViewProps = {
36
44
  archivedMessage?: string | undefined;
37
45
  /** Show the Site title in the frame bar; hide it under a host header that already does. */
38
46
  showTitle?: boolean | undefined;
47
+ /** Wraps the visible title (a host's menu on it); see ArtifactSandbox. */
48
+ renderTitle?: ((title: ReactElement) => ReactNode) | undefined;
39
49
  /** Loading copy; defaults to "Loading Site…". */
40
50
  loadingLabel?: string | undefined;
41
51
  /** Called with the loaded title, for a host header. */
@@ -91,6 +101,7 @@ export function SiteView({
91
101
  theme,
92
102
  archivedMessage,
93
103
  showTitle = true,
104
+ renderTitle,
94
105
  loadingLabel,
95
106
  onTitle,
96
107
  showToolbar,
@@ -231,6 +242,7 @@ export function SiteView({
231
242
  html={content.html}
232
243
  title={snapshot.detail.artifact.title}
233
244
  showTitle={showTitle}
245
+ {...(renderTitle ? { renderTitle } : {})}
234
246
  versionLabel={
235
247
  !versionControl && snapshot.detail.artifact.currentVersion
236
248
  ? t("artifacts.siteView.vRevision", {
@@ -99,11 +99,10 @@ import {
99
99
  TimelineBeforeLayout,
100
100
  captureTimelineAnchor,
101
101
  timelineAnchorCorrection,
102
- timelineHasReader,
102
+ timelineHasSelection,
103
103
  type TimelineAnchor,
104
104
  } from "./timeline-anchor";
105
105
  import { useReadingProgress } from "./timeline-reading-progress";
106
- import { TimelineAnswerFollowContext } from "./timeline-answer-follow";
107
106
  import {
108
107
  animateTimelineSettlement,
109
108
  captureTimelineSettlement,
@@ -402,6 +401,11 @@ export type MessageTimelineProps = {
402
401
  * - While pinned, tip-debt from growth/collapse must NEVER unpin — only
403
402
  * wheel/keys/pointer-armed scroll-up, or a settled scrollend away from the
404
403
  * tip while the tip-follow camera is idle (Vimium / unfocused PageUp).
404
+ * Moving the view is the only reader signal for follow: focus and clicks
405
+ * inside the conversation (a card's buttons, Copy, a menu) never unpin, so
406
+ * answering one approval after another keeps the newest card in view. A
407
+ * text selection (content must not move under it) and an in-place
408
+ * disclosure toggle (it keeps its place) are the two non-scroll exceptions.
405
409
  * Height shrink compensates scrollTop by Δh (collapse owns motion); tip-ease
406
410
  * pauses briefly so the two don't fight. Programmatic camera writes are
407
411
  * tagged so their scroll echoes never count as leave.
@@ -838,8 +842,6 @@ export function MessageTimeline({
838
842
  return sources;
839
843
  }, [resolvedItems]);
840
844
  const scrollRef = useRef<HTMLDivElement | null>(null);
841
- /** The card whose answer handed the view back to the tip (see followAfterAnswer). */
842
- const answeredCardRef = useRef<HTMLElement | null>(null);
843
845
  const topSentinelRef = useRef<HTMLDivElement | null>(null);
844
846
  const bottomSentinelRef = useRef<HTMLDivElement | null>(null);
845
847
  const previousBulkFirstKeyRef = useRef<string | null | undefined>(undefined);
@@ -848,7 +850,6 @@ export function MessageTimeline({
848
850
  projectedGroups,
849
851
  autoFollow && pinned && !hasNewer,
850
852
  scrollRef.current,
851
- answeredCardRef.current,
852
853
  );
853
854
  const [canSkipTipCatchup, setCanSkipTipCatchup] = useState(false);
854
855
  const canSkipTipCatchupRef = useRef(false);
@@ -876,10 +877,10 @@ export function MessageTimeline({
876
877
  const questionNavMinViewportRef = useRef(questionNavMinViewportHeight);
877
878
  questionNavMinViewportRef.current = questionNavMinViewportHeight;
878
879
  const scheduleQuestionNavRef = useRef<() => void>(() => {});
879
- // Unpinned is not the same as away from the tip: focusing a control in the
880
- // conversation (Copy, a connection card) hands the view to the reader while
881
- // they are still at the bottom. Offer the jump only once there is something
882
- // below them, or a newer window / catch-up to skip.
880
+ // Unpinned is not the same as away from the tip: selecting text or opening a
881
+ // disclosure hands the view to the reader while they are still at the
882
+ // bottom. Offer the jump only once there is something below them, or a newer
883
+ // window / catch-up to skip.
883
884
  const [awayFromTip, setAwayFromTip] = useState(false);
884
885
  const jumpPillShown = autoFollow && ((!pinned && awayFromTip) || hasNewer || canSkipTipCatchup);
885
886
  const firstGroupKey = allGroups[0] ? timelineGroupKey(allGroups[0]) : null;
@@ -1274,8 +1275,6 @@ export function MessageTimeline({
1274
1275
 
1275
1276
  /** Reader left the tip — wheel, keyboard, pointer-armed scroll-up, or scrollend. */
1276
1277
  const releasePinFromReader = useCallback(() => {
1277
- // The reader took over again: focus on the answered card counts once more.
1278
- answeredCardRef.current = null;
1279
1278
  if (!autoFollow || !pinnedRef.current || hasNewerRef.current) {
1280
1279
  return;
1281
1280
  }
@@ -1488,28 +1487,6 @@ export function MessageTimeline({
1488
1487
  ],
1489
1488
  );
1490
1489
 
1491
- /**
1492
- * The person answered a card (finished a connection, say) and the agent
1493
- * continues from that answer: follow the tip as Jump to latest does, while
1494
- * focus stays on the card for keyboard and screen reader users. Wheel, keys,
1495
- * a drag or focus elsewhere hand the view back to the reader as usual.
1496
- */
1497
- const followAfterAnswer = useCallback(
1498
- (card: HTMLElement) => {
1499
- const node = scrollRef.current;
1500
- if (!autoFollow || !node || !node.contains(card) || hasNewerRef.current) {
1501
- return;
1502
- }
1503
- answeredCardRef.current = card;
1504
- disclosureKeepsUnpinnedRef.current = false;
1505
- wantPinRef.current = false;
1506
- clearPendingReaderLeave();
1507
- applyPinned(true);
1508
- snapToBottom(node);
1509
- },
1510
- [applyPinned, autoFollow, clearPendingReaderLeave, snapToBottom],
1511
- );
1512
-
1513
1490
  const beginUserMessageDisclosureChange = useCallback(
1514
1491
  (messageBody: HTMLElement, disclosureControl: HTMLElement) => {
1515
1492
  const node = scrollRef.current;
@@ -2723,7 +2700,10 @@ export function MessageTimeline({
2723
2700
  event.target instanceof Element
2724
2701
  ? event.target.closest("button[aria-expanded]")
2725
2702
  : null;
2726
- if (target) {
2703
+ // An in-place disclosure keeps its toggle where the reader
2704
+ // left it. A menu or dialog opener changes nothing here.
2705
+ const popup = target?.getAttribute("aria-haspopup");
2706
+ if (target && (popup === null || popup === "false")) {
2727
2707
  if (target.hasAttribute("data-og-work-header")) {
2728
2708
  releaseProgress(
2729
2709
  target
@@ -2736,15 +2716,17 @@ export function MessageTimeline({
2736
2716
  }
2737
2717
  }}
2738
2718
  onFocusCapture={(event) => {
2719
+ // Focus is not reading position: pressing a card's button
2720
+ // (Chromium focuses it) or a card handing focus to the next
2721
+ // one leaves follow alone. Focus that scrolls the view away
2722
+ // from the tip unpins through the scroll path like any
2723
+ // other navigation. Only a settle ease yields to it.
2739
2724
  if (
2740
2725
  readableTurns &&
2741
2726
  event.target !== event.currentTarget &&
2742
- eventFromScrollerDom(event) &&
2743
- !answeredCardRef.current?.contains(event.target)
2727
+ eventFromScrollerDom(event)
2744
2728
  ) {
2745
2729
  stopSettlement();
2746
- releasePinFromReader();
2747
- disclosureKeepsUnpinnedRef.current = true;
2748
2730
  }
2749
2731
  }}
2750
2732
  onPointerDown={onPointerDown}
@@ -2763,10 +2745,9 @@ export function MessageTimeline({
2763
2745
  >
2764
2746
  <TimelineBeforeLayout
2765
2747
  capture={() => {
2766
- if (
2767
- readableTurns &&
2768
- timelineHasReader(scrollRef.current, answeredCardRef.current)
2769
- ) {
2748
+ // Selectionchange can arrive after this commit: a fresh
2749
+ // selection still owns the view before React moves it.
2750
+ if (readableTurns && timelineHasSelection(scrollRef.current)) {
2770
2751
  releasePinFromReader();
2771
2752
  }
2772
2753
  readingAnchorRef.current =
@@ -2783,11 +2764,7 @@ export function MessageTimeline({
2783
2764
  !disclosureKeepsUnpinnedRef.current &&
2784
2765
  !prefersReducedMotion() &&
2785
2766
  scrollRef.current
2786
- ? captureTimelineSettlement(
2787
- scrollRef.current,
2788
- groups,
2789
- answeredCardRef.current,
2790
- )
2767
+ ? captureTimelineSettlement(scrollRef.current, groups)
2791
2768
  : null;
2792
2769
  }}
2793
2770
  >
@@ -3128,11 +3105,7 @@ export function MessageTimeline({
3128
3105
  resolveSessionTitle={resolveSessionTitle}
3129
3106
  onOpenSession={onOpenSession}
3130
3107
  >
3131
- <ProviderLogoProvider value={resolveProviderLogo}>
3132
- <TimelineAnswerFollowContext.Provider value={followAfterAnswer}>
3133
- {timeline}
3134
- </TimelineAnswerFollowContext.Provider>
3135
- </ProviderLogoProvider>
3108
+ <ProviderLogoProvider value={resolveProviderLogo}>{timeline}</ProviderLogoProvider>
3136
3109
  </AgentIdentityProvider>
3137
3110
  </MessageSenderContext.Provider>
3138
3111
  </OpenGeniLinkProvider>
@@ -1,10 +1,9 @@
1
1
  import { CheckIcon, InfoIcon, ShieldCheckIcon, XIcon } from "lucide-react";
2
2
  import { Dialog } from "radix-ui";
3
3
  import { containedPortal } from "../ui/portal-container";
4
- import { useLayoutEffect, useRef, useState, type ReactNode, type RefObject } from "react";
4
+ import { useRef, useState, type ReactNode, type RefObject } from "react";
5
5
  import { usePortalTokenStyle } from "../lib/use-portal-token-style";
6
6
  import { useOpenGeniText } from "../messages/runtime";
7
- import { useTimelineAnswerFollow } from "./timeline-answer-follow";
8
7
 
9
8
  const DialogContainedPortal = containedPortal(Dialog.Portal);
10
9
 
@@ -100,27 +99,7 @@ export function SessionCapabilityFrame({
100
99
  const localCard = useRef<HTMLElement>(null);
101
100
  const buttonRef = opener ?? localOpener;
102
101
  const sectionRef = cardRef ?? localCard;
103
- const rootRef = useRef<HTMLDivElement>(null);
104
102
  const portalStyle = usePortalTokenStyle(sectionRef.current);
105
- // Finishing the card here is the person's answer and the agent continues
106
- // from it: let the conversation follow that answer. Only a completion the
107
- // person brought about in this card counts. A card that was already complete
108
- // when it appeared, or whose saved completion loads after it appears while
109
- // the person reads elsewhere, asks nothing.
110
- const followAnswer = useTimelineAnswerFollow();
111
- const wasComplete = useRef(complete);
112
- const engaged = useRef(false);
113
- useLayoutEffect(() => {
114
- if (expanded || busy) engaged.current = true;
115
- }, [expanded, busy]);
116
- const engage = () => {
117
- engaged.current = true;
118
- };
119
- useLayoutEffect(() => {
120
- if (complete && !wasComplete.current && engaged.current && rootRef.current)
121
- followAnswer?.(rootRef.current);
122
- wasComplete.current = complete;
123
- }, [complete, followAnswer]);
124
103
  // A row without a better name is titled by its domain; never say it twice.
125
104
  const shownSubtitle = subtitle.trim().toLowerCase() === name.trim().toLowerCase() ? "" : subtitle;
126
105
  const identity = (
@@ -134,14 +113,7 @@ export function SessionCapabilityFrame({
134
113
  </>
135
114
  );
136
115
  return (
137
- // React bubbles the setup dialog's portaled events here too.
138
- <div
139
- ref={rootRef}
140
- className="og-session-capability"
141
- onPointerDownCapture={engage}
142
- onClickCapture={engage}
143
- onKeyDownCapture={engage}
144
- >
116
+ <div className="og-session-capability">
145
117
  <section
146
118
  hidden={dialogOnly}
147
119
  style={dialogOnly ? { display: "none" } : undefined}