@opengeni/react 6.8.0 → 6.8.1-canary.41842879332001

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 (685) hide show
  1. package/dist/app/app-state.js +8 -8
  2. package/dist/app/components/Composer.js +18 -18
  3. package/dist/app/components/agent/agent-capability-picker.js +6 -6
  4. package/dist/app/components/artifacts/artifact-library.js +6 -6
  5. package/dist/app/components/artifacts/artifact-viewer.js +18 -18
  6. package/dist/app/components/artifacts/chat-interactive-block.js +11 -11
  7. package/dist/app/components/artifacts/file-reach-dialog.js +6 -6
  8. package/dist/app/components/artifacts/inline-chat-image.js +19 -19
  9. package/dist/app/components/artifacts/retained-file-preview.js +20 -20
  10. package/dist/app/components/artifacts/retained-text-preview.js +3 -3
  11. package/dist/app/components/artifacts/site-audience.js +3 -3
  12. package/dist/app/components/artifacts/site-conversations.js +9 -9
  13. package/dist/app/components/artifacts/site-data.js +10 -10
  14. package/dist/app/components/artifacts/site-publishing-page.js +25 -25
  15. package/dist/app/components/artifacts/site-publishing.js +22 -22
  16. package/dist/app/components/artifacts/site-settings.js +24 -24
  17. package/dist/app/components/artifacts/site-version-menu.js +3 -3
  18. package/dist/app/components/billing-class-mark.js +3 -3
  19. package/dist/app/components/bots/bot-launch-strip.js +20 -20
  20. package/dist/app/components/bots/bot-template-dialog.js +26 -26
  21. package/dist/app/components/bots/bot-template-shortcuts.js +20 -20
  22. package/dist/app/components/bots/bot-templates-page.js +30 -30
  23. package/dist/app/components/capabilities/capability-detail-sheet.js +6 -6
  24. package/dist/app/components/capabilities/capability-logo-source.js +13 -13
  25. package/dist/app/components/capabilities/connector-tool-permissions.js +4 -4
  26. package/dist/app/components/capabilities/native-connect-setup.js +13 -13
  27. package/dist/app/components/capabilities/own-logins-shared-heads-up.js +3 -3
  28. package/dist/app/components/capabilities/prepared-mcp-setup-card.js +15 -15
  29. package/dist/app/components/capabilities/session-capability-card.js +47 -47
  30. package/dist/app/components/capabilities/session-chrome-card.js +20 -20
  31. package/dist/app/components/capabilities/session-custom-mcp-card.js +16 -16
  32. package/dist/app/components/capabilities/session-github-card.js +16 -16
  33. package/dist/app/components/capabilities/session-machine-card.js +19 -19
  34. package/dist/app/components/capabilities/session-personal-github-card.js +14 -14
  35. package/dist/app/components/capabilities/session-plugin-card.js +8 -8
  36. package/dist/app/components/command-menu/chat-status.js +15 -15
  37. package/dist/app/components/command-menu/chat-switcher.js +32 -32
  38. package/dist/app/components/command-menu/command-menu.js +36 -36
  39. package/dist/app/components/command-menu/shortcut-sheet.js +8 -8
  40. package/dist/app/components/composer-capabilities-menu-body.js +4 -4
  41. package/dist/app/components/composer-mobile-plus-panel.js +8 -8
  42. package/dist/app/components/composer-mobile-plus.js +1 -1
  43. package/dist/app/components/credit-required-gate.js +1 -1
  44. package/dist/app/components/credit-required-prompt.js +3 -3
  45. package/dist/app/components/desktop/app-shots.js +6 -6
  46. package/dist/app/components/desktop/computer-use.js +2 -2
  47. package/dist/app/components/desktop/this-computer.js +5 -5
  48. package/dist/app/components/feedback.js +3 -3
  49. package/dist/app/components/github-app-connect-launcher.js +1 -1
  50. package/dist/app/components/machines/connect-machine-dialog.js +11 -11
  51. package/dist/app/components/markdown.js +6 -6
  52. package/dist/app/components/models/models-ui.js +5 -5
  53. package/dist/app/components/my-things.js +4 -4
  54. package/dist/app/components/own-where-it-works.js +3 -3
  55. package/dist/app/components/personal-resource-attachment-surface.js +4 -4
  56. package/dist/app/components/pickers.js +5 -5
  57. package/dist/app/components/rail/channel-create-dialog.js +3 -3
  58. package/dist/app/components/rail/project-glyph.js +20 -20
  59. package/dist/app/components/rail/project-profile.js +27 -27
  60. package/dist/app/components/rail/rail-context.js +1 -1
  61. package/dist/app/components/rail/rail-sections.js +55 -55
  62. package/dist/app/components/rail/session-header.js +47 -47
  63. package/dist/app/components/rail/session-list.js +53 -53
  64. package/dist/app/components/rail/session-row-content.js +4 -4
  65. package/dist/app/components/rail/session-row-hover-details.js +14 -14
  66. package/dist/app/components/rail/session-shell.js +73 -73
  67. package/dist/app/components/rail/site-session-group-heading.js +8 -8
  68. package/dist/app/components/session/agent-configuration-panel.js +12 -12
  69. package/dist/app/components/session/banners.js +8 -8
  70. package/dist/app/components/session/console-new-conversation.js +39 -39
  71. package/dist/app/components/session/descendant-requests.js +36 -36
  72. package/dist/app/components/session/editable-artifacts-workspace.js +16 -16
  73. package/dist/app/components/session/failed-session-banner.js +6 -6
  74. package/dist/app/components/session/failure-recovery-boundary.js +3 -3
  75. package/dist/app/components/session/human-input-delegation-record.js +2 -2
  76. package/dist/app/components/session/human-input.js +33 -33
  77. package/dist/app/components/session/inspector.js +43 -43
  78. package/dist/app/components/session/message-actions.js +3 -3
  79. package/dist/app/components/session/message-resource-attachments.js +10 -10
  80. package/dist/app/components/session/model-recovery-notice.js +3 -3
  81. package/dist/app/components/session/new-session-settings-menu.js +6 -6
  82. package/dist/app/components/session/new-session-setup-strip.js +21 -21
  83. package/dist/app/components/session/sandbox-recovery-actions.js +3 -3
  84. package/dist/app/components/session/sandbox-switcher.js +7 -7
  85. package/dist/app/components/session/sandbox-workspace.js +48 -48
  86. package/dist/app/components/session/search-markdown-highlight.js +7 -7
  87. package/dist/app/components/session/search-results-view.js +8 -8
  88. package/dist/app/components/session/session-admin-access.js +4 -4
  89. package/dist/app/components/session/session-admission-notice.js +4 -4
  90. package/dist/app/components/session/session-avatar-picker.js +21 -21
  91. package/dist/app/components/session/session-avatar.js +19 -19
  92. package/dist/app/components/session/session-machine-access-notice.js +4 -4
  93. package/dist/app/components/session/session-profile-dialog.js +25 -25
  94. package/dist/app/components/session/session-profile-editor.js +26 -26
  95. package/dist/app/components/session/session-retention.js +3 -3
  96. package/dist/app/components/session/session-search-dialog.js +8 -8
  97. package/dist/app/components/session/session-tenancy-control.js +2 -2
  98. package/dist/app/components/session/session-usage-limit-section.js +4 -4
  99. package/dist/app/components/session/share-chat-dialog.js +5 -5
  100. package/dist/app/components/session/subagents.js +8 -8
  101. package/dist/app/components/session/subscription-account-indicator.js +6 -6
  102. package/dist/app/components/settings/row-select.js +4 -4
  103. package/dist/app/components/transcription-settings.js +6 -6
  104. package/dist/app/components/ui/destructive-confirm.js +5 -5
  105. package/dist/app/components/usage/usage-entry.js +3 -3
  106. package/dist/app/components/window-bar.js +9 -9
  107. package/dist/app/components/workspace-composer-plus.js +16 -16
  108. package/dist/app/components/workspace-reach.js +4 -4
  109. package/dist/app/embed/session-app.js +156 -156
  110. package/dist/app/lib/actions/actions-provider.js +8 -8
  111. package/dist/app/lib/agent-capabilities.js +3 -3
  112. package/dist/app/lib/codex-usage-query.js +2 -2
  113. package/dist/app/lib/composer-connectors.js +14 -14
  114. package/dist/app/lib/console-site.js +2 -2
  115. package/dist/app/lib/console-text.js +2 -2
  116. package/dist/app/lib/events.js +12 -12
  117. package/dist/app/lib/failed-session-copy.js +3 -3
  118. package/dist/app/lib/model-access-onboarding.js +3 -3
  119. package/dist/app/lib/move-chat-to-machine.js +3 -3
  120. package/dist/app/lib/session-branch-cache.js +8 -8
  121. package/dist/app/lib/session-create.js +4 -4
  122. package/dist/app/lib/session-group-pagination.js +8 -8
  123. package/dist/app/lib/session-hover-facts.js +13 -13
  124. package/dist/app/lib/session-model.js +2 -2
  125. package/dist/app/lib/session-pins.js +1 -1
  126. package/dist/app/lib/session-rail.js +5 -5
  127. package/dist/app/lib/session-rename.js +3 -3
  128. package/dist/app/lib/sessions-group.d.ts +5 -3
  129. package/dist/app/lib/sessions-group.js +7 -7
  130. package/dist/app/lib/site-tool-consent-dialog.js +7 -7
  131. package/dist/app/lib/site-tool-consent.js +1 -1
  132. package/dist/app/lib/turn-failure-analytics.js +4 -4
  133. package/dist/app/lib/use-follow-up-repositories.js +3 -3
  134. package/dist/app/lib/use-workspace-machines.js +4 -4
  135. package/dist/app/lib/use-workspace-model-catalog.js +3 -3
  136. package/dist/app/lib/use-workspace-rigs.js +2 -2
  137. package/dist/app/lib/workspace-navigation-preference.js +4 -4
  138. package/dist/app/lib/workspace-scope-context.js +3 -3
  139. package/dist/app/routes/artifacts.js +48 -48
  140. package/dist/app/routes/retained-artifact.js +32 -32
  141. package/dist/app/routes/session.js +94 -94
  142. package/dist/app/routes/sessions-index-hydration.js +5 -5
  143. package/dist/app/routes/sessions-index.js +76 -76
  144. package/dist/app/routes/site-view.js +55 -55
  145. package/dist/artifacts-document.js +4 -4
  146. package/dist/artifacts-presentation.js +4 -4
  147. package/dist/artifacts-spreadsheet.js +4 -4
  148. package/dist/artifacts.js +10 -10
  149. package/dist/automations.js +10 -10
  150. package/dist/{browser-viewer-ZHQDVHZ2.js → browser-viewer-H7PKY67P.js} +4 -4
  151. package/dist/{chat-interactive-block-VSDD6X3M.js → chat-interactive-block-47TCT4DN.js} +5 -5
  152. package/dist/{chunk-7Z76QP64.js → chunk-2QH3Q6Z2.js} +35 -5
  153. package/dist/chunk-2QH3Q6Z2.js.map +1 -0
  154. package/dist/{chunk-5MHMCE2G.js → chunk-2X2B6D5G.js} +3 -3
  155. package/dist/{chunk-OCXEY7HE.js → chunk-3BUI5DT7.js} +2 -2
  156. package/dist/{chunk-OSJ366KR.js → chunk-3FWP3TD3.js} +29 -29
  157. package/dist/{chunk-PWUSSSSL.js → chunk-3G5IA36N.js} +2 -2
  158. package/dist/{chunk-RGR57NYY.js → chunk-3NK4JAHL.js} +2 -2
  159. package/dist/{chunk-XUOYNJPB.js → chunk-3O7UZRWM.js} +24 -24
  160. package/dist/{chunk-JV3UI7BH.js → chunk-3OR6HMA4.js} +3 -3
  161. package/dist/{chunk-MV2CLIO6.js → chunk-3PC45I5N.js} +6 -6
  162. package/dist/{chunk-SJYTQLN3.js → chunk-3PI2BYK5.js} +3 -3
  163. package/dist/{chunk-DCEQCGVN.js → chunk-3PNA2P2Z.js} +2 -2
  164. package/dist/{chunk-ESXAECZ3.js → chunk-3XBZKF3K.js} +2 -2
  165. package/dist/{chunk-SBXSKRFA.js → chunk-45OGYO3S.js} +3 -3
  166. package/dist/{chunk-M3FDGRB4.js → chunk-4A7TKVNX.js} +3 -3
  167. package/dist/{chunk-RHXYO4H2.js → chunk-4BXRGXTD.js} +2 -2
  168. package/dist/{chunk-CV4VVLPZ.js → chunk-4HQAJA3T.js} +2 -2
  169. package/dist/{chunk-VCJQQYRE.js → chunk-4X2A3KPB.js} +4 -4
  170. package/dist/{chunk-OCXTTKVA.js → chunk-555K37A7.js} +2 -2
  171. package/dist/{chunk-EBIVTDEG.js → chunk-57L5ZXDS.js} +2 -2
  172. package/dist/{chunk-3L465FBR.js → chunk-5IADORIV.js} +6 -6
  173. package/dist/{chunk-SK5S2PCK.js → chunk-5IZQT4TE.js} +14 -14
  174. package/dist/chunk-5IZQT4TE.js.map +1 -0
  175. package/dist/{chunk-ZW5YTIH3.js → chunk-5PB46DAA.js} +1 -1
  176. package/dist/{chunk-ZW5YTIH3.js.map → chunk-5PB46DAA.js.map} +1 -1
  177. package/dist/{chunk-PVB4YVDP.js → chunk-5Y2O2432.js} +2 -2
  178. package/dist/{chunk-OOOSGPJL.js → chunk-6572EFE4.js} +1 -1
  179. package/dist/{chunk-YMI27QPF.js → chunk-6BG5HCUP.js} +2 -2
  180. package/dist/{chunk-QRECBCJM.js → chunk-6EXFJWII.js} +2 -2
  181. package/dist/{chunk-74CBR5YE.js → chunk-6PNRUGOK.js} +2 -2
  182. package/dist/{chunk-PUUEI4W3.js → chunk-6RJEY6TC.js} +5 -5
  183. package/dist/{chunk-DLVIRJGK.js → chunk-727GL2YY.js} +2 -2
  184. package/dist/{chunk-J2BTILRR.js → chunk-7FGYLFW6.js} +2 -2
  185. package/dist/{chunk-MKDFYE2E.js → chunk-7IMWTFEG.js} +2 -2
  186. package/dist/{chunk-FER6EVIY.js → chunk-7POKH54R.js} +2 -2
  187. package/dist/{chunk-H6BX6WOW.js → chunk-7T26IH6W.js} +3 -3
  188. package/dist/{chunk-R33SBMB7.js → chunk-7XQRVZZQ.js} +3 -3
  189. package/dist/{chunk-NFCS5WYC.js → chunk-A3SPPXMC.js} +3 -3
  190. package/dist/{chunk-DQPIEQGP.js → chunk-A7CWPDEH.js} +2 -2
  191. package/dist/{chunk-3PM3M2Q6.js → chunk-AGOYVKTI.js} +2 -2
  192. package/dist/{chunk-OBGOLHCP.js → chunk-AIQKZUPB.js} +3 -3
  193. package/dist/{chunk-GSCGKJNK.js → chunk-AMYDHG3S.js} +2 -2
  194. package/dist/{chunk-U4LTPFD2.js → chunk-APJPB6TX.js} +2 -2
  195. package/dist/{chunk-SP44O3OU.js → chunk-APLGT5EI.js} +2 -2
  196. package/dist/{chunk-M3HGBO2Y.js → chunk-ATNKMGLO.js} +1 -1
  197. package/dist/{chunk-4O2XWOLZ.js → chunk-AVX4CZQ3.js} +3 -3
  198. package/dist/{chunk-CXAN2FHF.js → chunk-B46MK44K.js} +6 -6
  199. package/dist/{chunk-RMCLFSMX.js → chunk-BBKUPEGG.js} +2 -2
  200. package/dist/{chunk-J2WY42FA.js → chunk-BES6OQE3.js} +2 -2
  201. package/dist/{chunk-GU7T2S5N.js → chunk-BM2N26SH.js} +2 -2
  202. package/dist/{chunk-HEGV4QMS.js → chunk-C3NS74PZ.js} +2 -2
  203. package/dist/{chunk-752WXSDN.js → chunk-C56ABB5V.js} +2 -2
  204. package/dist/{chunk-77SYIH6O.js → chunk-C6MATJQ5.js} +2 -2
  205. package/dist/{chunk-KUE5BOQE.js → chunk-CRX47CO6.js} +4 -4
  206. package/dist/{chunk-QPQ7R77C.js → chunk-CUIV2XPO.js} +3 -1
  207. package/dist/chunk-CUIV2XPO.js.map +1 -0
  208. package/dist/{chunk-GTHCHCWW.js → chunk-D33KWZQJ.js} +3 -3
  209. package/dist/{chunk-AH3DGOTK.js → chunk-D7E3BSCX.js} +2 -2
  210. package/dist/{chunk-OJWDNNW3.js → chunk-DFR3TMTZ.js} +5 -5
  211. package/dist/{chunk-WYGTAQMX.js → chunk-DICC75CU.js} +2 -2
  212. package/dist/{chunk-736RUNIA.js → chunk-DJ2LMKKX.js} +4 -4
  213. package/dist/{chunk-4F3AEJI6.js → chunk-DJI4D7PM.js} +4 -4
  214. package/dist/{chunk-LVELUUK6.js → chunk-DSZUQL4W.js} +2 -2
  215. package/dist/{chunk-MT2R57SF.js → chunk-DVF246BE.js} +2 -2
  216. package/dist/{chunk-OI6VI6SU.js → chunk-DVOWBHWN.js} +8 -8
  217. package/dist/{chunk-PZKHST7A.js → chunk-E2KPRSA4.js} +2 -2
  218. package/dist/{chunk-EKJHOWTZ.js → chunk-E3LMLWEB.js} +4 -4
  219. package/dist/{chunk-QURYQFDN.js → chunk-EDC7X7PW.js} +2 -2
  220. package/dist/{chunk-HYEIA25Y.js → chunk-EDSMULHU.js} +2 -2
  221. package/dist/{chunk-U6552Q3T.js → chunk-EQQOZ6DD.js} +2 -2
  222. package/dist/{chunk-IFSXVU2S.js → chunk-ERBDQ2GY.js} +2 -2
  223. package/dist/{chunk-IZXYFWA4.js → chunk-EWI73URG.js} +13 -13
  224. package/dist/{chunk-N3FM4BNA.js → chunk-EZ6LFN33.js} +2 -2
  225. package/dist/{chunk-4K64EKM7.js → chunk-F7YL6DPR.js} +4 -4
  226. package/dist/{chunk-ICAMYP5M.js → chunk-FIGFXMUP.js} +2 -2
  227. package/dist/{chunk-54U6ZBEX.js → chunk-FJRJK67G.js} +3 -3
  228. package/dist/{chunk-E5KOWRDU.js → chunk-FLHB2NZT.js} +2 -2
  229. package/dist/{chunk-OWET7EY2.js → chunk-FRSZSL2S.js} +19 -13
  230. package/dist/{chunk-OWET7EY2.js.map → chunk-FRSZSL2S.js.map} +1 -1
  231. package/dist/{chunk-D3PTVN2I.js → chunk-FUGGM76A.js} +2 -2
  232. package/dist/{chunk-QQIZMVAJ.js → chunk-FWLLGNGP.js} +51 -49
  233. package/dist/chunk-FWLLGNGP.js.map +1 -0
  234. package/dist/{chunk-TDTD66BK.js → chunk-FXPZAZYT.js} +2 -2
  235. package/dist/{chunk-KO3OHHY2.js → chunk-GAGAM4MT.js} +2 -2
  236. package/dist/{chunk-TK5FWVZR.js → chunk-GESGH3HY.js} +3 -3
  237. package/dist/{chunk-2VJOSU4H.js → chunk-GI4PWKXI.js} +2 -2
  238. package/dist/{chunk-KFNZZ2N6.js → chunk-GJTEBAZ7.js} +2 -2
  239. package/dist/{chunk-LTJFV2JI.js → chunk-GNCGEW7F.js} +2 -2
  240. package/dist/{chunk-34NV52R3.js → chunk-GOMUNPB6.js} +4 -4
  241. package/dist/{chunk-7YTR3UFO.js → chunk-GPWE5UD7.js} +8 -5
  242. package/dist/chunk-GPWE5UD7.js.map +1 -0
  243. package/dist/{chunk-LIJNVIT3.js → chunk-GUMUILEI.js} +3 -3
  244. package/dist/{chunk-7NLF35YL.js → chunk-GVGNHBFT.js} +4 -4
  245. package/dist/{chunk-K3D7IQQP.js → chunk-GW4YI3FB.js} +6 -6
  246. package/dist/{chunk-D5TIVCXG.js → chunk-GXKCV7X7.js} +2 -2
  247. package/dist/{chunk-2J77TWGH.js → chunk-H467EQA6.js} +3 -3
  248. package/dist/{chunk-3OK7Y6ES.js → chunk-HE77VDDR.js} +2 -2
  249. package/dist/{chunk-UO35OEOX.js → chunk-HT65RGCX.js} +3 -3
  250. package/dist/{chunk-G6ICCGJ3.js → chunk-HVQSFTE7.js} +2 -2
  251. package/dist/{chunk-G5UQBTXY.js → chunk-HXJPDC76.js} +2 -2
  252. package/dist/{chunk-GIWFLWXG.js → chunk-I6LQW24C.js} +4 -4
  253. package/dist/{chunk-467WDSOK.js → chunk-I7A6S5YL.js} +2 -2
  254. package/dist/{chunk-AAS7OWV6.js → chunk-IADS4ZYD.js} +3 -3
  255. package/dist/{chunk-Y3XZEKDQ.js → chunk-IJWMWCGR.js} +2 -2
  256. package/dist/{chunk-SGH7I7OY.js → chunk-IWFO6KOU.js} +2 -2
  257. package/dist/{chunk-GMHIOYB7.js → chunk-IYC6QGV2.js} +4 -4
  258. package/dist/{chunk-2OXSB2OL.js → chunk-J2TZIFRC.js} +3 -2
  259. package/dist/chunk-J2TZIFRC.js.map +1 -0
  260. package/dist/{chunk-3NNAC43A.js → chunk-J5AODKJO.js} +2 -2
  261. package/dist/{chunk-DIP7YALH.js → chunk-JKI3LMLH.js} +2 -2
  262. package/dist/{chunk-IJR6VOLU.js → chunk-JSYRWOCE.js} +2 -2
  263. package/dist/{chunk-CEMSIU4Z.js → chunk-JTQTWO4D.js} +5 -5
  264. package/dist/{chunk-JHZRAYI4.js → chunk-JWSRFXRN.js} +2 -2
  265. package/dist/chunk-JWSRFXRN.js.map +1 -0
  266. package/dist/{chunk-BASI553K.js → chunk-KBTKAAHM.js} +4 -4
  267. package/dist/{chunk-OYOFPNLC.js → chunk-KD7VEMWY.js} +4 -4
  268. package/dist/{chunk-3DRLCX5V.js → chunk-KPGFGRSA.js} +2 -2
  269. package/dist/{chunk-PLYVGZIN.js → chunk-KWFDEJFI.js} +1 -1
  270. package/dist/{chunk-FNXCFIPW.js → chunk-KYLEH4OF.js} +2 -2
  271. package/dist/{chunk-WXF2RTS4.js → chunk-L7FJTFJN.js} +2 -2
  272. package/dist/{chunk-KI46GKMD.js → chunk-L7VVQOSY.js} +7 -7
  273. package/dist/{chunk-M5IQVMLR.js → chunk-LAZ2QZTJ.js} +11 -4
  274. package/dist/chunk-LAZ2QZTJ.js.map +1 -0
  275. package/dist/chunk-LKLQVANM.js +2 -0
  276. package/dist/{chunk-YNTLWCF4.js → chunk-LLYEAZ4E.js} +3 -3
  277. package/dist/{chunk-4Z5X7PLC.js → chunk-LWM7JUW6.js} +3 -3
  278. package/dist/{chunk-CHU3RDV4.js → chunk-LXKV4ND3.js} +3 -3
  279. package/dist/{chunk-AB5IW227.js → chunk-LYLICEQO.js} +3 -3
  280. package/dist/{chunk-PSM3CU7N.js → chunk-M3OZOCIK.js} +46 -39
  281. package/dist/chunk-M3OZOCIK.js.map +1 -0
  282. package/dist/{chunk-OTW25A6I.js → chunk-M5GRI5K4.js} +3 -3
  283. package/dist/{chunk-X2QJXDE4.js → chunk-MF65PKKF.js} +8 -8
  284. package/dist/{chunk-EDDKPIIV.js → chunk-MJ4XIOPM.js} +2 -2
  285. package/dist/{chunk-FLWQJDJ5.js → chunk-MMPJJQG3.js} +6 -6
  286. package/dist/{chunk-T67LTMSW.js → chunk-MOU54FGD.js} +10 -10
  287. package/dist/{chunk-LQKVNREV.js → chunk-NAWHQ4IL.js} +3 -3
  288. package/dist/{chunk-ZBHGNE2J.js → chunk-NBHBB2VV.js} +3 -3
  289. package/dist/{chunk-PF2WU2IL.js → chunk-ND4IQJUM.js} +120 -17
  290. package/dist/chunk-ND4IQJUM.js.map +1 -0
  291. package/dist/{chunk-U5UGM5XD.js → chunk-NMOZDAEZ.js} +5 -5
  292. package/dist/{chunk-D74Z2N4K.js → chunk-NZA4R3BE.js} +2 -2
  293. package/dist/{chunk-WRMUXZ7C.js → chunk-OB2CX7PJ.js} +3 -3
  294. package/dist/{chunk-YJSCLGAW.js → chunk-OB4I4OIT.js} +3 -3
  295. package/dist/{chunk-DWJ6J3YW.js → chunk-OKQW2FPL.js} +4 -4
  296. package/dist/{chunk-2GCHGWNE.js → chunk-ORLX6A3C.js} +3 -3
  297. package/dist/{chunk-EBTUPRRQ.js → chunk-P5N4EYFW.js} +4 -4
  298. package/dist/{chunk-JKL5S7UQ.js → chunk-PL4JE3NI.js} +6 -6
  299. package/dist/{chunk-OP2GD6QW.js → chunk-PNUHKDY2.js} +2 -2
  300. package/dist/{chunk-MZY3VKKM.js → chunk-PWJE7D6V.js} +2 -2
  301. package/dist/{chunk-RISUROBM.js → chunk-PYE27I6J.js} +4 -4
  302. package/dist/{chunk-SPD4ULVB.js → chunk-PYMROAWS.js} +2 -1
  303. package/dist/chunk-PYMROAWS.js.map +1 -0
  304. package/dist/{chunk-Q5K2J5GG.js → chunk-Q74FQK3A.js} +13 -3
  305. package/dist/chunk-Q74FQK3A.js.map +1 -0
  306. package/dist/{chunk-R5QAL43H.js → chunk-QIJHK6P4.js} +2 -2
  307. package/dist/{chunk-AJBDAVX3.js → chunk-QK3A23NP.js} +7 -7
  308. package/dist/{chunk-CYDXCILL.js → chunk-QLWDNAOV.js} +7 -7
  309. package/dist/{chunk-BQYRZIZ7.js → chunk-QS6DQBVJ.js} +2 -2
  310. package/dist/{chunk-3PZ3LRPV.js → chunk-QSUVFPG3.js} +3 -3
  311. package/dist/{chunk-PYB4BFEC.js → chunk-QUC5MLTN.js} +3 -3
  312. package/dist/{chunk-WDASYY4S.js → chunk-QVT5AWPI.js} +6 -6
  313. package/dist/{chunk-K4DQS2ML.js → chunk-QZC6WCBR.js} +4 -4
  314. package/dist/{chunk-HWVPLFIW.js → chunk-RAHNICPP.js} +2 -2
  315. package/dist/{chunk-H6MJFMHZ.js → chunk-RME6RGIW.js} +3 -3
  316. package/dist/{chunk-XMBOLFFS.js → chunk-RQIB2F53.js} +2 -2
  317. package/dist/{chunk-OXQ2SXVC.js → chunk-RUA72NQY.js} +2 -2
  318. package/dist/{chunk-UMX6DZME.js → chunk-SCJHWN4X.js} +2 -2
  319. package/dist/{chunk-HTMQGS63.js → chunk-SIXBDT5F.js} +8 -8
  320. package/dist/{chunk-ZAX4XQLN.js → chunk-SPK3T4JK.js} +2 -2
  321. package/dist/{chunk-WTSQUCHB.js → chunk-SSN2YSST.js} +3 -3
  322. package/dist/{chunk-5MIBQ4P5.js → chunk-SYJCDX5V.js} +2 -2
  323. package/dist/{chunk-NQ2CPQJF.js → chunk-SYL7LCRA.js} +26 -3
  324. package/dist/chunk-SYL7LCRA.js.map +1 -0
  325. package/dist/{chunk-ZR5EKJT6.js → chunk-T6276OXI.js} +2 -2
  326. package/dist/{chunk-DEHLWZSI.js → chunk-T7OARG4N.js} +4 -4
  327. package/dist/{chunk-77BHKC43.js → chunk-TF5L3BEV.js} +1 -1
  328. package/dist/{chunk-GOCODNQS.js → chunk-TF6Z7BOP.js} +2 -2
  329. package/dist/{chunk-WIFDNUKD.js → chunk-TJDXWZMO.js} +3 -3
  330. package/dist/{chunk-SFIXTOOJ.js → chunk-TL5ATBHZ.js} +3 -3
  331. package/dist/{chunk-XZCCEKPW.js → chunk-TMOHIOMT.js} +6 -6
  332. package/dist/{chunk-AVXDIRRW.js → chunk-UI5X63YC.js} +2 -2
  333. package/dist/{chunk-6QK65ZWM.js → chunk-UIY7BDZC.js} +3 -3
  334. package/dist/{chunk-VATYK3JQ.js → chunk-UMBFMEO7.js} +3 -3
  335. package/dist/{chunk-UU5FBVRX.js → chunk-UU5G7OA4.js} +2 -2
  336. package/dist/{chunk-EGKARC53.js → chunk-UZUCYCF4.js} +2 -2
  337. package/dist/{chunk-LPKJ77EK.js → chunk-V2A7G7S7.js} +2 -2
  338. package/dist/{chunk-CH4UQ4NO.js → chunk-V5G4TKRC.js} +5 -5
  339. package/dist/{chunk-UBRQ3PQD.js → chunk-VKAVW34W.js} +2 -2
  340. package/dist/{chunk-JV5ULONH.js → chunk-VVLEVNTQ.js} +36 -36
  341. package/dist/{chunk-44JWVYJB.js → chunk-VW7X7TWZ.js} +2 -2
  342. package/dist/{chunk-3CDJSKDW.js → chunk-VWA2CHSL.js} +3 -3
  343. package/dist/{chunk-IN3VQFKS.js → chunk-W43HZPM7.js} +2 -2
  344. package/dist/{chunk-SXGJL7UT.js → chunk-WHGD7Q2L.js} +14 -14
  345. package/dist/{chunk-XOIDUM2H.js → chunk-WNXKYEVN.js} +1 -1
  346. package/dist/{chunk-TKQL7EDB.js → chunk-WSA7UBX4.js} +2 -2
  347. package/dist/{chunk-AJDGP2N4.js → chunk-WZ5TQJ3T.js} +19 -19
  348. package/dist/{chunk-FBA2NXYH.js → chunk-X3TGNSOG.js} +3 -3
  349. package/dist/{chunk-R4JA5JFI.js → chunk-X4WXYI3N.js} +3 -3
  350. package/dist/{chunk-Q5EZNBPI.js → chunk-XIQ3AIAJ.js} +3 -3
  351. package/dist/{chunk-S27VZ5DO.js → chunk-XWYT4LEL.js} +6 -6
  352. package/dist/{chunk-477DTTMH.js → chunk-Y3PU75OC.js} +3 -3
  353. package/dist/{chunk-4JXPLTWV.js → chunk-Y5ZWX5YS.js} +2 -2
  354. package/dist/{chunk-4BWMAGJJ.js → chunk-YA5PABND.js} +3 -3
  355. package/dist/{chunk-VXORMNU4.js → chunk-YBHAAULA.js} +67 -2
  356. package/dist/chunk-YBHAAULA.js.map +1 -0
  357. package/dist/{chunk-OGU73VUN.js → chunk-YBPRR2QS.js} +2 -2
  358. package/dist/{chunk-TNSJFZ6Q.js → chunk-YDYR7XQE.js} +4 -4
  359. package/dist/{chunk-GTRAH4FG.js → chunk-YG6V2LQH.js} +2 -2
  360. package/dist/{chunk-XVLEBB4Y.js → chunk-YUXA7ALE.js} +2 -2
  361. package/dist/{chunk-SN2WENRP.js → chunk-YWHQDXPB.js} +3 -3
  362. package/dist/{chunk-BFFNINCC.js → chunk-YWRR5R7B.js} +3 -3
  363. package/dist/{chunk-FSDQQQIA.js → chunk-YYRK7A4N.js} +3 -3
  364. package/dist/{chunk-MRECRNVU.js → chunk-Z26CDLUV.js} +5 -5
  365. package/dist/{chunk-OYCK4JRS.js → chunk-Z27EXLMQ.js} +2 -2
  366. package/dist/{chunk-UTRNLNCW.js → chunk-Z7GDH7W2.js} +3 -3
  367. package/dist/{chunk-PRT4J2DL.js → chunk-ZGVLSAWL.js} +2 -2
  368. package/dist/{chunk-OK7BQMCI.js → chunk-ZM6Q5NQN.js} +9 -9
  369. package/dist/components/message-timeline.d.ts +10 -2
  370. package/dist/composer.js +8 -8
  371. package/dist/{computer-viewer-5LKRCEVQ.js → computer-viewer-SROXREYD.js} +5 -5
  372. package/dist/connect.js +12 -12
  373. package/dist/desktop-dictation.js +8 -8
  374. package/dist/desktop.js +2 -2
  375. package/dist/editor.js +2 -2
  376. package/dist/{embedded-new-voice-GHJRY3YL.js → embedded-new-voice-EIQY2VBF.js} +5 -5
  377. package/dist/{embedded-voice-ASQXBSTX.js → embedded-voice-LMWNH7F7.js} +5 -5
  378. package/dist/{fleet-decision-row-U7LDVBEM.js → fleet-decision-row-X2G56ZRA.js} +2 -2
  379. package/dist/hooks/use-recordings.d.ts +4 -2
  380. package/dist/in-chat-connect-model.js +5 -5
  381. package/dist/index.d.ts +2 -2
  382. package/dist/index.js +66 -60
  383. package/dist/interaction.js +5 -5
  384. package/dist/{latest-question-RNVF262Q.js → latest-question-KA7AQYVI.js} +2 -2
  385. package/dist/machines.js +3 -3
  386. package/dist/meetings/recorder-context.d.ts +6 -1
  387. package/dist/meetings/recorder-panel.d.ts +2 -5
  388. package/dist/meetings-recorder.js +1 -1
  389. package/dist/meetings.js +22 -21
  390. package/dist/meetings.js.map +1 -1
  391. package/dist/messages/en.d.ts +2 -0
  392. package/dist/messages.js +1 -1
  393. package/dist/{model-policy-picker-menu-E6XKMFTA.js → model-policy-picker-menu-SHWPT5VA.js} +4 -4
  394. package/dist/{payment-page-card-DJDKV2LW.js → payment-page-card-NNVUISN4.js} +4 -4
  395. package/dist/{platform-activity-row-MSDCSMET.js → platform-activity-row-7UDWSAHK.js} +2 -2
  396. package/dist/{queue-surface-implementation-GUAIG6TK.js → queue-surface-implementation-BUXSO24N.js} +5 -5
  397. package/dist/realtime.js +4 -4
  398. package/dist/{recorder-host-2MYDJPQW.js → recorder-host-POX54CFT.js} +5 -5
  399. package/dist/recordings.js +4 -4
  400. package/dist/{sandbox-files-W5W2LW4K.js → sandbox-files-33QD7DW2.js} +6 -6
  401. package/dist/session-app.js +156 -156
  402. package/dist/{session-connect-cards-HPH7JOZP.js → session-connect-cards-CXGNVA2A.js} +9 -9
  403. package/dist/session-list-model.js +2 -2
  404. package/dist/{session-realtime-SDTKFFIR.js → session-realtime-CVDSEULB.js} +3 -3
  405. package/dist/session-realtime.js +2 -2
  406. package/dist/session-ui.js +33 -33
  407. package/dist/session.d.ts +3 -2
  408. package/dist/session.js +16 -10
  409. package/dist/sites.js +2 -2
  410. package/dist/terminal.js +2 -2
  411. package/dist/this-computer.js +3 -3
  412. package/dist/timeline/index.d.ts +3 -2
  413. package/dist/timeline/projection.d.ts +52 -0
  414. package/dist/timeline/turn-summary-model.d.ts +4 -3
  415. package/dist/timeline/types.d.ts +8 -2
  416. package/dist/timeline/use-timeline-pauses.d.ts +12 -0
  417. package/dist/timeline/work-presentation.d.ts +4 -3
  418. package/dist/{timeline-annotation-markers-FNILLWNU.js → timeline-annotation-markers-5J5TM5IP.js} +2 -2
  419. package/dist/{timeline-annotation-selection-MBCIDO2Q.js → timeline-annotation-selection-WLY7FB7F.js} +2 -2
  420. package/dist/{timeline-annotations-dialog-JPNKLOTE.js → timeline-annotations-dialog-67VRFKJU.js} +3 -3
  421. package/dist/timeline-model.js +2 -2
  422. package/dist/ui/access-list.js +5 -5
  423. package/dist/ui/cadence-picker.js +4 -4
  424. package/dist/ui/choice-cards.js +3 -3
  425. package/dist/ui/confirm-dialog.js +2 -2
  426. package/dist/ui/copy-field.js +3 -3
  427. package/dist/ui/detail-page.js +2 -2
  428. package/dist/ui/detail-sheet.js +2 -2
  429. package/dist/ui/disclosure.js +3 -3
  430. package/dist/ui/email-chips-input.js +3 -3
  431. package/dist/ui/field.js +2 -2
  432. package/dist/ui/flush-form-page.js +3 -3
  433. package/dist/ui/form-dialog.js +2 -2
  434. package/dist/ui/list-row.js +3 -3
  435. package/dist/ui/relative-time.js +2 -2
  436. package/dist/ui/revision-history.js +4 -4
  437. package/dist/ui/role-select.js +5 -5
  438. package/dist/ui/select-menu.js +3 -3
  439. package/dist/ui/usage-meter.js +3 -3
  440. package/dist/usage.js +2 -2
  441. package/dist/workbench.js +4 -4
  442. package/package.json +6 -5
  443. package/src/app/components/rail/session-row-content.tsx +27 -0
  444. package/src/app/lib/session-branch-cache.tsx +1 -0
  445. package/src/app/lib/session-pins.tsx +1 -0
  446. package/src/app/lib/session-row-paused.test.tsx +183 -0
  447. package/src/app/lib/sessions-group-channels.test.ts +4 -4
  448. package/src/app/lib/sessions-group.tsx +62 -4
  449. package/src/app/routes/session.tsx +2 -0
  450. package/src/components/message-timeline.tsx +14 -2
  451. package/src/components/session-conversation.tsx +2 -1
  452. package/src/components/timeline-annotations.tsx +4 -1
  453. package/src/components/timeline-settlement.ts +1 -1
  454. package/src/hooks/use-recordings.ts +5 -0
  455. package/src/index.ts +5 -0
  456. package/src/meetings/recorder-context.tsx +28 -5
  457. package/src/meetings/recorder-panel.tsx +13 -5
  458. package/src/meetings/recorder-workspace.test.tsx +57 -8
  459. package/src/messages/en.ts +2 -0
  460. package/src/session.ts +8 -1
  461. package/src/timeline/index.ts +4 -1
  462. package/src/timeline/projection.ts +228 -16
  463. package/src/timeline/turn-summary-model.ts +4 -3
  464. package/src/timeline/turn-summary.tsx +15 -2
  465. package/src/timeline/types.ts +8 -2
  466. package/src/timeline/use-timeline-pauses.ts +105 -0
  467. package/src/timeline/work-presentation.ts +13 -4
  468. package/dist/chunk-2OXSB2OL.js.map +0 -1
  469. package/dist/chunk-7YTR3UFO.js.map +0 -1
  470. package/dist/chunk-7Z76QP64.js.map +0 -1
  471. package/dist/chunk-JHZRAYI4.js.map +0 -1
  472. package/dist/chunk-M5IQVMLR.js.map +0 -1
  473. package/dist/chunk-NQ2CPQJF.js.map +0 -1
  474. package/dist/chunk-O2UPPN5M.js +0 -2
  475. package/dist/chunk-PF2WU2IL.js.map +0 -1
  476. package/dist/chunk-PSM3CU7N.js.map +0 -1
  477. package/dist/chunk-Q5K2J5GG.js.map +0 -1
  478. package/dist/chunk-QPQ7R77C.js.map +0 -1
  479. package/dist/chunk-QQIZMVAJ.js.map +0 -1
  480. package/dist/chunk-SK5S2PCK.js.map +0 -1
  481. package/dist/chunk-SPD4ULVB.js.map +0 -1
  482. package/dist/chunk-VXORMNU4.js.map +0 -1
  483. /package/dist/{browser-viewer-ZHQDVHZ2.js.map → browser-viewer-H7PKY67P.js.map} +0 -0
  484. /package/dist/{chat-interactive-block-VSDD6X3M.js.map → chat-interactive-block-47TCT4DN.js.map} +0 -0
  485. /package/dist/{chunk-5MHMCE2G.js.map → chunk-2X2B6D5G.js.map} +0 -0
  486. /package/dist/{chunk-OCXEY7HE.js.map → chunk-3BUI5DT7.js.map} +0 -0
  487. /package/dist/{chunk-OSJ366KR.js.map → chunk-3FWP3TD3.js.map} +0 -0
  488. /package/dist/{chunk-PWUSSSSL.js.map → chunk-3G5IA36N.js.map} +0 -0
  489. /package/dist/{chunk-RGR57NYY.js.map → chunk-3NK4JAHL.js.map} +0 -0
  490. /package/dist/{chunk-XUOYNJPB.js.map → chunk-3O7UZRWM.js.map} +0 -0
  491. /package/dist/{chunk-JV3UI7BH.js.map → chunk-3OR6HMA4.js.map} +0 -0
  492. /package/dist/{chunk-MV2CLIO6.js.map → chunk-3PC45I5N.js.map} +0 -0
  493. /package/dist/{chunk-SJYTQLN3.js.map → chunk-3PI2BYK5.js.map} +0 -0
  494. /package/dist/{chunk-DCEQCGVN.js.map → chunk-3PNA2P2Z.js.map} +0 -0
  495. /package/dist/{chunk-ESXAECZ3.js.map → chunk-3XBZKF3K.js.map} +0 -0
  496. /package/dist/{chunk-SBXSKRFA.js.map → chunk-45OGYO3S.js.map} +0 -0
  497. /package/dist/{chunk-M3FDGRB4.js.map → chunk-4A7TKVNX.js.map} +0 -0
  498. /package/dist/{chunk-RHXYO4H2.js.map → chunk-4BXRGXTD.js.map} +0 -0
  499. /package/dist/{chunk-CV4VVLPZ.js.map → chunk-4HQAJA3T.js.map} +0 -0
  500. /package/dist/{chunk-VCJQQYRE.js.map → chunk-4X2A3KPB.js.map} +0 -0
  501. /package/dist/{chunk-OCXTTKVA.js.map → chunk-555K37A7.js.map} +0 -0
  502. /package/dist/{chunk-EBIVTDEG.js.map → chunk-57L5ZXDS.js.map} +0 -0
  503. /package/dist/{chunk-3L465FBR.js.map → chunk-5IADORIV.js.map} +0 -0
  504. /package/dist/{chunk-PVB4YVDP.js.map → chunk-5Y2O2432.js.map} +0 -0
  505. /package/dist/{chunk-OOOSGPJL.js.map → chunk-6572EFE4.js.map} +0 -0
  506. /package/dist/{chunk-YMI27QPF.js.map → chunk-6BG5HCUP.js.map} +0 -0
  507. /package/dist/{chunk-QRECBCJM.js.map → chunk-6EXFJWII.js.map} +0 -0
  508. /package/dist/{chunk-74CBR5YE.js.map → chunk-6PNRUGOK.js.map} +0 -0
  509. /package/dist/{chunk-PUUEI4W3.js.map → chunk-6RJEY6TC.js.map} +0 -0
  510. /package/dist/{chunk-DLVIRJGK.js.map → chunk-727GL2YY.js.map} +0 -0
  511. /package/dist/{chunk-J2BTILRR.js.map → chunk-7FGYLFW6.js.map} +0 -0
  512. /package/dist/{chunk-MKDFYE2E.js.map → chunk-7IMWTFEG.js.map} +0 -0
  513. /package/dist/{chunk-FER6EVIY.js.map → chunk-7POKH54R.js.map} +0 -0
  514. /package/dist/{chunk-H6BX6WOW.js.map → chunk-7T26IH6W.js.map} +0 -0
  515. /package/dist/{chunk-R33SBMB7.js.map → chunk-7XQRVZZQ.js.map} +0 -0
  516. /package/dist/{chunk-NFCS5WYC.js.map → chunk-A3SPPXMC.js.map} +0 -0
  517. /package/dist/{chunk-DQPIEQGP.js.map → chunk-A7CWPDEH.js.map} +0 -0
  518. /package/dist/{chunk-3PM3M2Q6.js.map → chunk-AGOYVKTI.js.map} +0 -0
  519. /package/dist/{chunk-OBGOLHCP.js.map → chunk-AIQKZUPB.js.map} +0 -0
  520. /package/dist/{chunk-GSCGKJNK.js.map → chunk-AMYDHG3S.js.map} +0 -0
  521. /package/dist/{chunk-U4LTPFD2.js.map → chunk-APJPB6TX.js.map} +0 -0
  522. /package/dist/{chunk-SP44O3OU.js.map → chunk-APLGT5EI.js.map} +0 -0
  523. /package/dist/{chunk-M3HGBO2Y.js.map → chunk-ATNKMGLO.js.map} +0 -0
  524. /package/dist/{chunk-4O2XWOLZ.js.map → chunk-AVX4CZQ3.js.map} +0 -0
  525. /package/dist/{chunk-CXAN2FHF.js.map → chunk-B46MK44K.js.map} +0 -0
  526. /package/dist/{chunk-RMCLFSMX.js.map → chunk-BBKUPEGG.js.map} +0 -0
  527. /package/dist/{chunk-J2WY42FA.js.map → chunk-BES6OQE3.js.map} +0 -0
  528. /package/dist/{chunk-GU7T2S5N.js.map → chunk-BM2N26SH.js.map} +0 -0
  529. /package/dist/{chunk-HEGV4QMS.js.map → chunk-C3NS74PZ.js.map} +0 -0
  530. /package/dist/{chunk-752WXSDN.js.map → chunk-C56ABB5V.js.map} +0 -0
  531. /package/dist/{chunk-77SYIH6O.js.map → chunk-C6MATJQ5.js.map} +0 -0
  532. /package/dist/{chunk-KUE5BOQE.js.map → chunk-CRX47CO6.js.map} +0 -0
  533. /package/dist/{chunk-GTHCHCWW.js.map → chunk-D33KWZQJ.js.map} +0 -0
  534. /package/dist/{chunk-AH3DGOTK.js.map → chunk-D7E3BSCX.js.map} +0 -0
  535. /package/dist/{chunk-OJWDNNW3.js.map → chunk-DFR3TMTZ.js.map} +0 -0
  536. /package/dist/{chunk-WYGTAQMX.js.map → chunk-DICC75CU.js.map} +0 -0
  537. /package/dist/{chunk-736RUNIA.js.map → chunk-DJ2LMKKX.js.map} +0 -0
  538. /package/dist/{chunk-4F3AEJI6.js.map → chunk-DJI4D7PM.js.map} +0 -0
  539. /package/dist/{chunk-LVELUUK6.js.map → chunk-DSZUQL4W.js.map} +0 -0
  540. /package/dist/{chunk-MT2R57SF.js.map → chunk-DVF246BE.js.map} +0 -0
  541. /package/dist/{chunk-OI6VI6SU.js.map → chunk-DVOWBHWN.js.map} +0 -0
  542. /package/dist/{chunk-PZKHST7A.js.map → chunk-E2KPRSA4.js.map} +0 -0
  543. /package/dist/{chunk-EKJHOWTZ.js.map → chunk-E3LMLWEB.js.map} +0 -0
  544. /package/dist/{chunk-QURYQFDN.js.map → chunk-EDC7X7PW.js.map} +0 -0
  545. /package/dist/{chunk-HYEIA25Y.js.map → chunk-EDSMULHU.js.map} +0 -0
  546. /package/dist/{chunk-U6552Q3T.js.map → chunk-EQQOZ6DD.js.map} +0 -0
  547. /package/dist/{chunk-IFSXVU2S.js.map → chunk-ERBDQ2GY.js.map} +0 -0
  548. /package/dist/{chunk-IZXYFWA4.js.map → chunk-EWI73URG.js.map} +0 -0
  549. /package/dist/{chunk-N3FM4BNA.js.map → chunk-EZ6LFN33.js.map} +0 -0
  550. /package/dist/{chunk-4K64EKM7.js.map → chunk-F7YL6DPR.js.map} +0 -0
  551. /package/dist/{chunk-ICAMYP5M.js.map → chunk-FIGFXMUP.js.map} +0 -0
  552. /package/dist/{chunk-54U6ZBEX.js.map → chunk-FJRJK67G.js.map} +0 -0
  553. /package/dist/{chunk-E5KOWRDU.js.map → chunk-FLHB2NZT.js.map} +0 -0
  554. /package/dist/{chunk-D3PTVN2I.js.map → chunk-FUGGM76A.js.map} +0 -0
  555. /package/dist/{chunk-TDTD66BK.js.map → chunk-FXPZAZYT.js.map} +0 -0
  556. /package/dist/{chunk-KO3OHHY2.js.map → chunk-GAGAM4MT.js.map} +0 -0
  557. /package/dist/{chunk-TK5FWVZR.js.map → chunk-GESGH3HY.js.map} +0 -0
  558. /package/dist/{chunk-2VJOSU4H.js.map → chunk-GI4PWKXI.js.map} +0 -0
  559. /package/dist/{chunk-KFNZZ2N6.js.map → chunk-GJTEBAZ7.js.map} +0 -0
  560. /package/dist/{chunk-LTJFV2JI.js.map → chunk-GNCGEW7F.js.map} +0 -0
  561. /package/dist/{chunk-34NV52R3.js.map → chunk-GOMUNPB6.js.map} +0 -0
  562. /package/dist/{chunk-LIJNVIT3.js.map → chunk-GUMUILEI.js.map} +0 -0
  563. /package/dist/{chunk-7NLF35YL.js.map → chunk-GVGNHBFT.js.map} +0 -0
  564. /package/dist/{chunk-K3D7IQQP.js.map → chunk-GW4YI3FB.js.map} +0 -0
  565. /package/dist/{chunk-D5TIVCXG.js.map → chunk-GXKCV7X7.js.map} +0 -0
  566. /package/dist/{chunk-2J77TWGH.js.map → chunk-H467EQA6.js.map} +0 -0
  567. /package/dist/{chunk-3OK7Y6ES.js.map → chunk-HE77VDDR.js.map} +0 -0
  568. /package/dist/{chunk-UO35OEOX.js.map → chunk-HT65RGCX.js.map} +0 -0
  569. /package/dist/{chunk-G6ICCGJ3.js.map → chunk-HVQSFTE7.js.map} +0 -0
  570. /package/dist/{chunk-G5UQBTXY.js.map → chunk-HXJPDC76.js.map} +0 -0
  571. /package/dist/{chunk-GIWFLWXG.js.map → chunk-I6LQW24C.js.map} +0 -0
  572. /package/dist/{chunk-467WDSOK.js.map → chunk-I7A6S5YL.js.map} +0 -0
  573. /package/dist/{chunk-AAS7OWV6.js.map → chunk-IADS4ZYD.js.map} +0 -0
  574. /package/dist/{chunk-Y3XZEKDQ.js.map → chunk-IJWMWCGR.js.map} +0 -0
  575. /package/dist/{chunk-SGH7I7OY.js.map → chunk-IWFO6KOU.js.map} +0 -0
  576. /package/dist/{chunk-GMHIOYB7.js.map → chunk-IYC6QGV2.js.map} +0 -0
  577. /package/dist/{chunk-3NNAC43A.js.map → chunk-J5AODKJO.js.map} +0 -0
  578. /package/dist/{chunk-DIP7YALH.js.map → chunk-JKI3LMLH.js.map} +0 -0
  579. /package/dist/{chunk-IJR6VOLU.js.map → chunk-JSYRWOCE.js.map} +0 -0
  580. /package/dist/{chunk-CEMSIU4Z.js.map → chunk-JTQTWO4D.js.map} +0 -0
  581. /package/dist/{chunk-BASI553K.js.map → chunk-KBTKAAHM.js.map} +0 -0
  582. /package/dist/{chunk-OYOFPNLC.js.map → chunk-KD7VEMWY.js.map} +0 -0
  583. /package/dist/{chunk-3DRLCX5V.js.map → chunk-KPGFGRSA.js.map} +0 -0
  584. /package/dist/{chunk-PLYVGZIN.js.map → chunk-KWFDEJFI.js.map} +0 -0
  585. /package/dist/{chunk-FNXCFIPW.js.map → chunk-KYLEH4OF.js.map} +0 -0
  586. /package/dist/{chunk-WXF2RTS4.js.map → chunk-L7FJTFJN.js.map} +0 -0
  587. /package/dist/{chunk-KI46GKMD.js.map → chunk-L7VVQOSY.js.map} +0 -0
  588. /package/dist/{chunk-O2UPPN5M.js.map → chunk-LKLQVANM.js.map} +0 -0
  589. /package/dist/{chunk-YNTLWCF4.js.map → chunk-LLYEAZ4E.js.map} +0 -0
  590. /package/dist/{chunk-4Z5X7PLC.js.map → chunk-LWM7JUW6.js.map} +0 -0
  591. /package/dist/{chunk-CHU3RDV4.js.map → chunk-LXKV4ND3.js.map} +0 -0
  592. /package/dist/{chunk-AB5IW227.js.map → chunk-LYLICEQO.js.map} +0 -0
  593. /package/dist/{chunk-OTW25A6I.js.map → chunk-M5GRI5K4.js.map} +0 -0
  594. /package/dist/{chunk-X2QJXDE4.js.map → chunk-MF65PKKF.js.map} +0 -0
  595. /package/dist/{chunk-EDDKPIIV.js.map → chunk-MJ4XIOPM.js.map} +0 -0
  596. /package/dist/{chunk-FLWQJDJ5.js.map → chunk-MMPJJQG3.js.map} +0 -0
  597. /package/dist/{chunk-T67LTMSW.js.map → chunk-MOU54FGD.js.map} +0 -0
  598. /package/dist/{chunk-LQKVNREV.js.map → chunk-NAWHQ4IL.js.map} +0 -0
  599. /package/dist/{chunk-ZBHGNE2J.js.map → chunk-NBHBB2VV.js.map} +0 -0
  600. /package/dist/{chunk-U5UGM5XD.js.map → chunk-NMOZDAEZ.js.map} +0 -0
  601. /package/dist/{chunk-D74Z2N4K.js.map → chunk-NZA4R3BE.js.map} +0 -0
  602. /package/dist/{chunk-WRMUXZ7C.js.map → chunk-OB2CX7PJ.js.map} +0 -0
  603. /package/dist/{chunk-YJSCLGAW.js.map → chunk-OB4I4OIT.js.map} +0 -0
  604. /package/dist/{chunk-DWJ6J3YW.js.map → chunk-OKQW2FPL.js.map} +0 -0
  605. /package/dist/{chunk-2GCHGWNE.js.map → chunk-ORLX6A3C.js.map} +0 -0
  606. /package/dist/{chunk-EBTUPRRQ.js.map → chunk-P5N4EYFW.js.map} +0 -0
  607. /package/dist/{chunk-JKL5S7UQ.js.map → chunk-PL4JE3NI.js.map} +0 -0
  608. /package/dist/{chunk-OP2GD6QW.js.map → chunk-PNUHKDY2.js.map} +0 -0
  609. /package/dist/{chunk-MZY3VKKM.js.map → chunk-PWJE7D6V.js.map} +0 -0
  610. /package/dist/{chunk-RISUROBM.js.map → chunk-PYE27I6J.js.map} +0 -0
  611. /package/dist/{chunk-R5QAL43H.js.map → chunk-QIJHK6P4.js.map} +0 -0
  612. /package/dist/{chunk-AJBDAVX3.js.map → chunk-QK3A23NP.js.map} +0 -0
  613. /package/dist/{chunk-CYDXCILL.js.map → chunk-QLWDNAOV.js.map} +0 -0
  614. /package/dist/{chunk-BQYRZIZ7.js.map → chunk-QS6DQBVJ.js.map} +0 -0
  615. /package/dist/{chunk-3PZ3LRPV.js.map → chunk-QSUVFPG3.js.map} +0 -0
  616. /package/dist/{chunk-PYB4BFEC.js.map → chunk-QUC5MLTN.js.map} +0 -0
  617. /package/dist/{chunk-WDASYY4S.js.map → chunk-QVT5AWPI.js.map} +0 -0
  618. /package/dist/{chunk-K4DQS2ML.js.map → chunk-QZC6WCBR.js.map} +0 -0
  619. /package/dist/{chunk-HWVPLFIW.js.map → chunk-RAHNICPP.js.map} +0 -0
  620. /package/dist/{chunk-H6MJFMHZ.js.map → chunk-RME6RGIW.js.map} +0 -0
  621. /package/dist/{chunk-XMBOLFFS.js.map → chunk-RQIB2F53.js.map} +0 -0
  622. /package/dist/{chunk-OXQ2SXVC.js.map → chunk-RUA72NQY.js.map} +0 -0
  623. /package/dist/{chunk-UMX6DZME.js.map → chunk-SCJHWN4X.js.map} +0 -0
  624. /package/dist/{chunk-HTMQGS63.js.map → chunk-SIXBDT5F.js.map} +0 -0
  625. /package/dist/{chunk-ZAX4XQLN.js.map → chunk-SPK3T4JK.js.map} +0 -0
  626. /package/dist/{chunk-WTSQUCHB.js.map → chunk-SSN2YSST.js.map} +0 -0
  627. /package/dist/{chunk-5MIBQ4P5.js.map → chunk-SYJCDX5V.js.map} +0 -0
  628. /package/dist/{chunk-ZR5EKJT6.js.map → chunk-T6276OXI.js.map} +0 -0
  629. /package/dist/{chunk-DEHLWZSI.js.map → chunk-T7OARG4N.js.map} +0 -0
  630. /package/dist/{chunk-77BHKC43.js.map → chunk-TF5L3BEV.js.map} +0 -0
  631. /package/dist/{chunk-GOCODNQS.js.map → chunk-TF6Z7BOP.js.map} +0 -0
  632. /package/dist/{chunk-WIFDNUKD.js.map → chunk-TJDXWZMO.js.map} +0 -0
  633. /package/dist/{chunk-SFIXTOOJ.js.map → chunk-TL5ATBHZ.js.map} +0 -0
  634. /package/dist/{chunk-XZCCEKPW.js.map → chunk-TMOHIOMT.js.map} +0 -0
  635. /package/dist/{chunk-AVXDIRRW.js.map → chunk-UI5X63YC.js.map} +0 -0
  636. /package/dist/{chunk-6QK65ZWM.js.map → chunk-UIY7BDZC.js.map} +0 -0
  637. /package/dist/{chunk-VATYK3JQ.js.map → chunk-UMBFMEO7.js.map} +0 -0
  638. /package/dist/{chunk-UU5FBVRX.js.map → chunk-UU5G7OA4.js.map} +0 -0
  639. /package/dist/{chunk-EGKARC53.js.map → chunk-UZUCYCF4.js.map} +0 -0
  640. /package/dist/{chunk-LPKJ77EK.js.map → chunk-V2A7G7S7.js.map} +0 -0
  641. /package/dist/{chunk-CH4UQ4NO.js.map → chunk-V5G4TKRC.js.map} +0 -0
  642. /package/dist/{chunk-UBRQ3PQD.js.map → chunk-VKAVW34W.js.map} +0 -0
  643. /package/dist/{chunk-JV5ULONH.js.map → chunk-VVLEVNTQ.js.map} +0 -0
  644. /package/dist/{chunk-44JWVYJB.js.map → chunk-VW7X7TWZ.js.map} +0 -0
  645. /package/dist/{chunk-3CDJSKDW.js.map → chunk-VWA2CHSL.js.map} +0 -0
  646. /package/dist/{chunk-IN3VQFKS.js.map → chunk-W43HZPM7.js.map} +0 -0
  647. /package/dist/{chunk-SXGJL7UT.js.map → chunk-WHGD7Q2L.js.map} +0 -0
  648. /package/dist/{chunk-XOIDUM2H.js.map → chunk-WNXKYEVN.js.map} +0 -0
  649. /package/dist/{chunk-TKQL7EDB.js.map → chunk-WSA7UBX4.js.map} +0 -0
  650. /package/dist/{chunk-AJDGP2N4.js.map → chunk-WZ5TQJ3T.js.map} +0 -0
  651. /package/dist/{chunk-FBA2NXYH.js.map → chunk-X3TGNSOG.js.map} +0 -0
  652. /package/dist/{chunk-R4JA5JFI.js.map → chunk-X4WXYI3N.js.map} +0 -0
  653. /package/dist/{chunk-Q5EZNBPI.js.map → chunk-XIQ3AIAJ.js.map} +0 -0
  654. /package/dist/{chunk-S27VZ5DO.js.map → chunk-XWYT4LEL.js.map} +0 -0
  655. /package/dist/{chunk-477DTTMH.js.map → chunk-Y3PU75OC.js.map} +0 -0
  656. /package/dist/{chunk-4JXPLTWV.js.map → chunk-Y5ZWX5YS.js.map} +0 -0
  657. /package/dist/{chunk-4BWMAGJJ.js.map → chunk-YA5PABND.js.map} +0 -0
  658. /package/dist/{chunk-OGU73VUN.js.map → chunk-YBPRR2QS.js.map} +0 -0
  659. /package/dist/{chunk-TNSJFZ6Q.js.map → chunk-YDYR7XQE.js.map} +0 -0
  660. /package/dist/{chunk-GTRAH4FG.js.map → chunk-YG6V2LQH.js.map} +0 -0
  661. /package/dist/{chunk-XVLEBB4Y.js.map → chunk-YUXA7ALE.js.map} +0 -0
  662. /package/dist/{chunk-SN2WENRP.js.map → chunk-YWHQDXPB.js.map} +0 -0
  663. /package/dist/{chunk-BFFNINCC.js.map → chunk-YWRR5R7B.js.map} +0 -0
  664. /package/dist/{chunk-FSDQQQIA.js.map → chunk-YYRK7A4N.js.map} +0 -0
  665. /package/dist/{chunk-MRECRNVU.js.map → chunk-Z26CDLUV.js.map} +0 -0
  666. /package/dist/{chunk-OYCK4JRS.js.map → chunk-Z27EXLMQ.js.map} +0 -0
  667. /package/dist/{chunk-UTRNLNCW.js.map → chunk-Z7GDH7W2.js.map} +0 -0
  668. /package/dist/{chunk-PRT4J2DL.js.map → chunk-ZGVLSAWL.js.map} +0 -0
  669. /package/dist/{chunk-OK7BQMCI.js.map → chunk-ZM6Q5NQN.js.map} +0 -0
  670. /package/dist/{computer-viewer-5LKRCEVQ.js.map → computer-viewer-SROXREYD.js.map} +0 -0
  671. /package/dist/{embedded-new-voice-GHJRY3YL.js.map → embedded-new-voice-EIQY2VBF.js.map} +0 -0
  672. /package/dist/{embedded-voice-ASQXBSTX.js.map → embedded-voice-LMWNH7F7.js.map} +0 -0
  673. /package/dist/{fleet-decision-row-U7LDVBEM.js.map → fleet-decision-row-X2G56ZRA.js.map} +0 -0
  674. /package/dist/{latest-question-RNVF262Q.js.map → latest-question-KA7AQYVI.js.map} +0 -0
  675. /package/dist/{model-policy-picker-menu-E6XKMFTA.js.map → model-policy-picker-menu-SHWPT5VA.js.map} +0 -0
  676. /package/dist/{payment-page-card-DJDKV2LW.js.map → payment-page-card-NNVUISN4.js.map} +0 -0
  677. /package/dist/{platform-activity-row-MSDCSMET.js.map → platform-activity-row-7UDWSAHK.js.map} +0 -0
  678. /package/dist/{queue-surface-implementation-GUAIG6TK.js.map → queue-surface-implementation-BUXSO24N.js.map} +0 -0
  679. /package/dist/{recorder-host-2MYDJPQW.js.map → recorder-host-POX54CFT.js.map} +0 -0
  680. /package/dist/{sandbox-files-W5W2LW4K.js.map → sandbox-files-33QD7DW2.js.map} +0 -0
  681. /package/dist/{session-connect-cards-HPH7JOZP.js.map → session-connect-cards-CXGNVA2A.js.map} +0 -0
  682. /package/dist/{session-realtime-SDTKFFIR.js.map → session-realtime-CVDSEULB.js.map} +0 -0
  683. /package/dist/{timeline-annotation-markers-FNILLWNU.js.map → timeline-annotation-markers-5J5TM5IP.js.map} +0 -0
  684. /package/dist/{timeline-annotation-selection-MBCIDO2Q.js.map → timeline-annotation-selection-WLY7FB7F.js.map} +0 -0
  685. /package/dist/{timeline-annotations-dialog-JPNKLOTE.js.map → timeline-annotations-dialog-67VRFKJU.js.map} +0 -0
@@ -73,6 +73,7 @@ export type RailAggregateStatusKind =
73
73
  | "active"
74
74
  | "queued"
75
75
  | "waiting"
76
+ | "paused"
76
77
  | "unread"
77
78
  | "active_work"
78
79
  | "neutral";
@@ -103,6 +104,8 @@ export type RailStatusCounts = {
103
104
  queued: number;
104
105
  /** Idle sessions parked on their own wake-up (input or timer), not executing. */
105
106
  waiting: number;
107
+ /** Paused sessions whose work is parked for Resume. */
108
+ paused: number;
106
109
  unread: number;
107
110
  activeWork: number;
108
111
  };
@@ -122,6 +125,7 @@ export function sessionProjectTotals(
122
125
  active: 0,
123
126
  queued: 0,
124
127
  waiting: 0,
128
+ paused: 0,
125
129
  unread: 0,
126
130
  activeWork: 0,
127
131
  });
@@ -137,6 +141,7 @@ export function sessionProjectTotals(
137
141
  ...group,
138
142
  active: group.active - waiting,
139
143
  waiting,
144
+ paused: 0,
140
145
  sendFailed: 0,
141
146
  });
142
147
  }
@@ -173,11 +178,32 @@ function ownRailStatusCounts(
173
178
  ? 1
174
179
  : 0,
175
180
  waiting: sessionInputWait(session) ? 1 : 0,
181
+ paused: hasPausedWork(session) ? 1 : 0,
176
182
  unread: session.unread ? 1 : 0,
177
183
  activeWork: session.activelyWorking ? 1 : 0,
178
184
  };
179
185
  }
180
186
 
187
+ /**
188
+ * Work a pause holds for Resume: a turn still open, queued or running. A
189
+ * paused chat with nothing in progress shows no marker, nor does one that
190
+ * needs the person or is ending (Cancel also pauses while the turn stops).
191
+ * Matches the server's `treeStats.pausedWorkDescendants`.
192
+ */
193
+ function hasPausedWork(session: Session): boolean {
194
+ return (
195
+ !hasActiveEffectiveControl(session) &&
196
+ session.status !== "requires_action" &&
197
+ session.status !== "cancelled" &&
198
+ session.status !== "failed" &&
199
+ (Boolean(session.activeTurnId) ||
200
+ session.status === "running" ||
201
+ session.status === "recovering" ||
202
+ session.status === "queued" ||
203
+ session.status === "waiting_capacity")
204
+ );
205
+ }
206
+
181
207
  function addRailStatusCounts(target: RailStatusCounts, source: RailStatusCounts): void {
182
208
  target.total += source.total;
183
209
  target.sendFailed += source.sendFailed;
@@ -187,6 +213,7 @@ function addRailStatusCounts(target: RailStatusCounts, source: RailStatusCounts)
187
213
  target.active += source.active;
188
214
  target.queued += source.queued;
189
215
  target.waiting += source.waiting;
216
+ target.paused += source.paused;
190
217
  target.unread += source.unread;
191
218
  target.activeWork += source.activeWork;
192
219
  }
@@ -211,6 +238,7 @@ function railStatusCounts(
211
238
  active: summary.active - waiting,
212
239
  queued: summary.queued,
213
240
  waiting,
241
+ paused: 0,
214
242
  unread: summary.unread,
215
243
  activeWork: summary.activeWork,
216
244
  };
@@ -225,6 +253,7 @@ function railStatusCounts(
225
253
  "active",
226
254
  "queued",
227
255
  "waiting",
256
+ "paused",
228
257
  "unread",
229
258
  "activeWork",
230
259
  ] as const)
@@ -244,6 +273,7 @@ function railStatusCounts(
244
273
  counts.active += stats.runningDescendants;
245
274
  counts.queued += stats.queuedDescendants;
246
275
  counts.waiting += stats.waitingDescendants ?? 0;
276
+ counts.paused += stats.pausedWorkDescendants ?? 0;
247
277
  counts.unread += stats.unreadDescendants ?? 0;
248
278
  counts.activeWork += stats.activelyWorkingDescendants ?? 0;
249
279
 
@@ -298,6 +328,7 @@ export function summarizeRailNodes(
298
328
  active: 0,
299
329
  queued: 0,
300
330
  waiting: 0,
331
+ paused: 0,
301
332
  unread: 0,
302
333
  activeWork: 0,
303
334
  };
@@ -318,8 +349,8 @@ export function summarizeRailNodes(
318
349
  * covers stays in its label ("1 unread · 2 working"), and an expanded row's
319
350
  * workers keep their own markers. The chat's own running or queued turn keeps
320
351
  * its spinner: progress it posts mid-turn can leave it unread, and the answer
321
- * arrives when that turn ends. Anything that needs you, a failure and an
322
- * unsent message still come first. Section headers and Site rows summarize
352
+ * arrives when that turn ends; its own paused turn likewise stays paused.
353
+ * Anything that needs you, a failure and an unsent message still come first. Section headers and Site rows summarize
323
354
  * many chats and keep the plain order.
324
355
  */
325
356
  export function summarizeRailRow(
@@ -330,10 +361,16 @@ export function summarizeRailRow(
330
361
  const counts = railStatusCounts(node, localDeliveryAttention);
331
362
  const summary = summarizeRailStatusCounts(counts, now);
332
363
  if (node.siteGroup || !node.session.unread) return summary;
333
- if (summary.kind !== "active" && summary.kind !== "queued" && summary.kind !== "waiting")
364
+ if (
365
+ summary.kind !== "active" &&
366
+ summary.kind !== "queued" &&
367
+ summary.kind !== "waiting" &&
368
+ summary.kind !== "paused"
369
+ )
334
370
  return summary;
335
371
  const own = ownRailStatusCounts(node.session, localDeliveryAttention);
336
- if (own.active > 0 || own.queued > 0) return summary;
372
+ if (own.active > 0 || own.queued > 0 || (summary.kind === "paused" && own.paused > 0))
373
+ return summary;
337
374
  return {
338
375
  kind: "unread",
339
376
  count: counts.unread,
@@ -402,6 +439,14 @@ export function summarizeRailStatusCounts(
402
439
  label: `${counts.waiting} waiting to resume`,
403
440
  };
404
441
  }
442
+ if (counts.paused > 0) {
443
+ return {
444
+ kind: "paused",
445
+ count: counts.paused,
446
+ total: counts.total,
447
+ label: `${counts.paused} paused`,
448
+ };
449
+ }
405
450
  if (counts.unread > 0) {
406
451
  return {
407
452
  kind: "unread",
@@ -1120,6 +1165,7 @@ type RemovedCounts = {
1120
1165
  waiting: number;
1121
1166
  attention: number;
1122
1167
  paused: number;
1168
+ pausedWork: number;
1123
1169
  failed: number;
1124
1170
  unreadFailed: number;
1125
1171
  unread: number;
@@ -1134,6 +1180,7 @@ function emptyRemovedCounts(): RemovedCounts {
1134
1180
  waiting: 0,
1135
1181
  attention: 0,
1136
1182
  paused: 0,
1183
+ pausedWork: 0,
1137
1184
  failed: 0,
1138
1185
  unreadFailed: 0,
1139
1186
  unread: 0,
@@ -1148,6 +1195,7 @@ function addRemovedCounts(target: RemovedCounts, source: RemovedCounts): void {
1148
1195
  target.waiting += source.waiting;
1149
1196
  target.attention += source.attention;
1150
1197
  target.paused += source.paused;
1198
+ target.pausedWork += source.pausedWork;
1151
1199
  target.failed += source.failed;
1152
1200
  target.unreadFailed += source.unreadFailed;
1153
1201
  target.unread += source.unread;
@@ -1164,6 +1212,7 @@ function subtreeCounts(node: SessionTreeNode): RemovedCounts {
1164
1212
  waiting: sessionInputWait(node.session) ? 1 : 0,
1165
1213
  attention: awaitsPerson(node.session) ? 1 : 0,
1166
1214
  paused: node.session.effectiveControl?.state === "paused" ? 1 : 0,
1215
+ pausedWork: hasPausedWork(node.session) ? 1 : 0,
1167
1216
  failed: status === "failed" ? 1 : 0,
1168
1217
  unreadFailed: status === "failed" && node.session.unread ? 1 : 0,
1169
1218
  unread: node.session.unread ? 1 : 0,
@@ -1177,6 +1226,7 @@ function subtreeCounts(node: SessionTreeNode): RemovedCounts {
1177
1226
  counts.waiting += stats.waitingDescendants ?? 0;
1178
1227
  counts.attention += stats.attentionDescendants;
1179
1228
  counts.paused += stats.pausedDescendants;
1229
+ counts.pausedWork += stats.pausedWorkDescendants ?? 0;
1180
1230
  counts.failed += stats.failedDescendants;
1181
1231
  counts.unreadFailed += stats.unreadFailedDescendants ?? stats.failedDescendants;
1182
1232
  counts.unread += stats.unreadDescendants ?? 0;
@@ -1219,6 +1269,14 @@ function prunePinnedSubtreesWithCounts(
1219
1269
  : {}),
1220
1270
  attentionDescendants: Math.max(0, stats.attentionDescendants - removed.attention),
1221
1271
  pausedDescendants: Math.max(0, stats.pausedDescendants - removed.paused),
1272
+ ...(stats.pausedWorkDescendants !== undefined
1273
+ ? {
1274
+ pausedWorkDescendants: Math.max(
1275
+ 0,
1276
+ stats.pausedWorkDescendants - removed.pausedWork,
1277
+ ),
1278
+ }
1279
+ : {}),
1222
1280
  failedDescendants: Math.max(0, stats.failedDescendants - removed.failed),
1223
1281
  ...(stats.unreadFailedDescendants !== undefined
1224
1282
  ? {
@@ -4,6 +4,7 @@ import {
4
4
  createSessionRetainedScreenshotLoader,
5
5
  createWorkspaceRetainedArtifactLoader,
6
6
  createWorkspaceRetainedVideoLoader,
7
+ timelineLivePause,
7
8
  } from "../../timeline";
8
9
  import { isModelUnavailableSubmissionError, type CreditRefusalKind } from "../../lib/format";
9
10
  import { inertProps } from "../../lib/inert";
@@ -4253,6 +4254,7 @@ function SessionChatPane(props: {
4253
4254
  focusSequence={momentSequence}
4254
4255
  events={props.events}
4255
4256
  status={props.session.status}
4257
+ pause={timelineLivePause(admissionControl)}
4256
4258
  computeLabel={computeLabel}
4257
4259
  renderMessageText={renderMessageText}
4258
4260
  renderMessageActions={renderMessageActions}
@@ -25,6 +25,7 @@ import {
25
25
  type TimelineSearchTarget,
26
26
  } from "./timeline-search";
27
27
  import { GenieLoadingOptionsContext, type GenieLoadingOptions } from "../timeline/genie-loading";
28
+ import { useTimelinePauses } from "../timeline/use-timeline-pauses";
28
29
  import { ChildSessionLink } from "./child-session-link";
29
30
  import { useStartupDetails } from "../timeline/startup-preference";
30
31
  import {
@@ -133,6 +134,7 @@ import {
133
134
  defaultToolRegistry,
134
135
  groupTimeline,
135
136
  LightboxProvider,
137
+ type TimelineLivePause,
136
138
  type ActivityItem,
137
139
  type AgentMessageItem,
138
140
  type AuthNeededItem,
@@ -235,6 +237,14 @@ export type MessageTimelineProps = {
235
237
  items?: TimelineItem[] | undefined;
236
238
  /** Current session status (reserved; tip "Working…" chrome removed for now). */
237
239
  status?: SessionStatus | null | undefined;
240
+ /**
241
+ * The session's live Pause, from its effective control
242
+ * (`timelineLivePause(session.effectiveControl)`). A turn still open under a
243
+ * pause reads "Paused" with its clock stopped, and paused time is not
244
+ * counted as work. Omit to rely on the session's events alone, which do not
245
+ * show a pause of an ancestor or the workspace that interrupted nothing.
246
+ */
247
+ pause?: TimelineLivePause | null | undefined;
238
248
  /** Host-owned controls beside Copy and the timestamp on settled message rows. */
239
249
  renderMessageActions?: ((item: AgentMessageItem | UserMessageItem) => ReactNode) | undefined;
240
250
  /**
@@ -651,6 +661,7 @@ export function MessageTimeline({
651
661
  events,
652
662
  items,
653
663
  status: _status,
664
+ pause,
654
665
  renderMessageActions,
655
666
  renderMessageSender,
656
667
  renderMessageText,
@@ -820,9 +831,10 @@ export function MessageTimeline({
820
831
  const olderPageBudgetRef = useRef(0);
821
832
  const [olderDemand, setOlderDemand] = useState(0);
822
833
  const readableTurns = turnSummary?.rolling === true;
834
+ const pauses = useTimelinePauses(events, pause, readableTurns);
823
835
  const projectedGroups = useMemo(
824
- () => groupTimeline(t, resolvedItems, { readableTurns }),
825
- [resolvedItems, readableTurns, t],
836
+ () => groupTimeline(t, resolvedItems, { readableTurns, pauses }),
837
+ [resolvedItems, readableTurns, pauses, t],
826
838
  );
827
839
  // A new timeline revision (including session/turn replacement) owns layout.
828
840
  // Never leave an old decorative transform running on its retained rows.
@@ -61,7 +61,7 @@ import {
61
61
  } from "./conversation-capability-connect";
62
62
  import type { SessionMcpCapabilityCardProps } from "./session-mcp-capability-card";
63
63
  import type { SessionIntegrationCapabilityCardProps } from "./session-integration-capability-card";
64
- import type { AuthNeededItem } from "../timeline";
64
+ import { timelineLivePause, type AuthNeededItem } from "../timeline";
65
65
  import { ProviderRecoveryNotice } from "./provider-recovery-notice";
66
66
  import { currentProviderRecovery } from "../lib/provider-recovery";
67
67
  import {
@@ -718,6 +718,7 @@ function ConversationView({
718
718
  emptyState={timelineProps?.emptyState}
719
719
  renderMessageSender={timelineProps?.renderMessageSender}
720
720
  status={status}
721
+ pause={timelineLivePause(voiceControl)}
721
722
  hasOlder={feed.hasOlder}
722
723
  loadingOlder={feed.loadingOlder}
723
724
  onLoadOlder={feed.loadOlder}
@@ -74,8 +74,11 @@ export function TimelineAnnotationCards({
74
74
  data-og-annotation-cards=""
75
75
  className={cn(
76
76
  "grid gap-2",
77
+ // Inside the timeline, let the wheel chain to the timeline once this
78
+ // stack is at its edge. Containing overscroll here made the whole
79
+ // message a dead zone for scrolling, even when the stack fit.
77
80
  annotations.length >= ANNOTATION_CARD_STACK_SCROLL_AT &&
78
- "max-h-[min(28rem,55vh)] overflow-x-hidden overflow-y-auto overscroll-contain pr-1",
81
+ "max-h-[min(28rem,55vh)] overflow-x-hidden overflow-y-auto pr-1",
79
82
  className,
80
83
  )}
81
84
  >
@@ -14,7 +14,7 @@ export function captureTimelineSettlement(
14
14
  if (timelineHasReader(scroller)) return null;
15
15
  const live = Array.from(
16
16
  scroller.querySelectorAll(
17
- '[data-og-exchange-status="working"], [data-og-exchange-status="waiting"]',
17
+ '[data-og-exchange-status="working"], [data-og-exchange-status="waiting"], [data-og-exchange-status="paused"]',
18
18
  ),
19
19
  );
20
20
  // At the live tip the newest retained answer owns the transition. An older
@@ -9,6 +9,7 @@ import type {
9
9
  RecordingPerson,
10
10
  RecordingVoiceprintConsent,
11
11
  RecordingSpeaker,
12
+ RecordingCalendarEventRef,
12
13
  RecordingTranscriptionRequest,
13
14
  RecordingTranscriptPage,
14
15
  RecordingTranscriptSegment,
@@ -172,6 +173,8 @@ export type UseRecorderOptions = RecordingsClientOverride & {
172
173
  /** Your own id for what this recording belongs to, to find it again with `useRecordings`. */
173
174
  externalRef?: string;
174
175
  metadata?: Record<string, unknown>;
176
+ /** The owner's calendar event the meeting is of, such as one they joined; it names the meeting. */
177
+ calendarEvent?: RecordingCalendarEventRef;
175
178
  transcription?: RecordingTranscriptionRequest;
176
179
  /**
177
180
  * The person recording's name, as your app knows it: their microphone's
@@ -241,6 +244,7 @@ export type UseRecorderResult = RecorderSnapshot & {
241
244
  | "transcription"
242
245
  | "externalRef"
243
246
  | "metadata"
247
+ | "calendarEvent"
244
248
  | "ownerName"
245
249
  >,
246
250
  ) => Promise<void>;
@@ -473,6 +477,7 @@ export function useRecorder(options: UseRecorderOptions = {}): UseRecorderResult
473
477
  ...(merged.visibility ? { visibility: merged.visibility } : {}),
474
478
  ...(merged.externalRef ? { externalRef: merged.externalRef } : {}),
475
479
  ...(merged.metadata ? { metadata: merged.metadata as never } : {}),
480
+ ...(merged.calendarEvent ? { calendarEvent: merged.calendarEvent } : {}),
476
481
  ...(merged.transcription ? { transcription: merged.transcription } : {}),
477
482
  ...(merged.ownerName?.trim() ? { ownerName: merged.ownerName } : {}),
478
483
  ...(merged.microphone !== undefined ? { microphone: merged.microphone } : {}),
package/src/index.ts CHANGED
@@ -481,10 +481,15 @@ export {
481
481
  extractSessionRef,
482
482
  groupTimeline,
483
483
  sessionStatusFromEvents,
484
+ timelineLivePause,
485
+ timelinePauseSpans,
484
486
  toolDisplayName,
487
+ useTimelinePauses,
485
488
  } from "./timeline";
486
489
  export type {
487
490
  GroupTimelineOptions,
491
+ TimelineLivePause,
492
+ TimelinePauseSpan,
488
493
  ActivityItem,
489
494
  AgentMessageItem,
490
495
  AuthNeededItem,
@@ -42,9 +42,14 @@ export type MeetingRecorder = UseRecorderResult;
42
42
  * A recording someone asked for outside the recorder, such as from a desktop
43
43
  * call notification. An empty title leaves the name to Opengeni; `app` marks
44
44
  * a title the app guessed (the call app's name), which a calendar event or
45
- * the conversation replaces.
45
+ * the conversation replaces. `calendarEvent` is the owner's calendar event
46
+ * the meeting is of, such as one joined from a reminder; it names the meeting.
46
47
  */
47
- export type MeetingStartRequest = { title: string; titleSource?: "person" | "app" };
48
+ export type MeetingStartRequest = {
49
+ title: string;
50
+ titleSource?: "person" | "app";
51
+ calendarEvent?: { provider: "google" | "microsoft"; id: string };
52
+ };
48
53
 
49
54
  export type MeetingRecorderStore = {
50
55
  get: () => MeetingRecorder | null;
@@ -280,10 +285,28 @@ function useDesktopMeetingRequests(
280
285
  // Nobody signed in: a start kept for later would record, for whoever
281
286
  // signs in next, a call that may be long over.
282
287
  if (latest.current.signedOut) return;
283
- // Already recording shows that recording rather than start a second one.
284
- // The call app's name is only a guess at the meeting's.
288
+ // The call app's name is only a guess at the meeting's; the calendar
289
+ // event a reminder joined names it.
290
+ const start: MeetingStartRequest = {
291
+ title: request.title,
292
+ titleSource: "app",
293
+ ...(request.calendarEvent ? { calendarEvent: request.calendarEvent } : {}),
294
+ };
295
+ // Already recording shows that recording rather than start a second
296
+ // one, unless the person chose to switch to recording the next meeting:
297
+ // this one stops and is kept, then the next starts.
285
298
  if (canStartRecording(recorder?.state)) {
286
- store.requestStart({ title: request.title, titleSource: "app" });
299
+ store.requestStart(start);
300
+ } else if (
301
+ request.replace === true &&
302
+ recorder &&
303
+ (recorder.state === "recording" || recorder.state === "paused")
304
+ ) {
305
+ // A stop that fails leaves that recording showing its error, and starts nothing.
306
+ void recorder.stop().then(
307
+ () => store.requestStart(start),
308
+ () => undefined,
309
+ );
287
310
  }
288
311
  latest.current.onOpenMeetings?.();
289
312
  return;
@@ -48,7 +48,7 @@ import { Notice } from "../ui/notice";
48
48
  import { cn } from "../app/lib/utils";
49
49
 
50
50
  import { formatClock, ownerLiveLaneName } from "../recordings";
51
- import type { MeetingRecorder } from "./recorder-context";
51
+ import type { MeetingRecorder, MeetingStartRequest } from "./recorder-context";
52
52
  import { canStartRecording } from "./recorder-state";
53
53
  import { LiveTranscript, liveStatus, type LiveTranscriptLine } from "./live-transcript";
54
54
  import { DETECT_LANGUAGE, meetingLanguageOptions } from "./meeting-languages";
@@ -618,7 +618,7 @@ function RecorderPanelContent({
618
618
  */
619
619
  autoStart?: {
620
620
  pending: boolean;
621
- take: () => { title: string; titleSource?: "person" | "app" } | null;
621
+ take: () => MeetingStartRequest | null;
622
622
  } | null;
623
623
  /** The host's own id for what new recordings belong to, such as a project. */
624
624
  externalRef?: string | null | undefined;
@@ -645,8 +645,15 @@ function RecorderPanelContent({
645
645
  const state = recorder?.state ?? "idle";
646
646
  const live = state === "recording" || state === "paused" || state === "stopping";
647
647
 
648
- /** `guess` is the app's name for the meeting, used only when nobody typed one. */
649
- const start = async (titleText: string = title, guess?: string) => {
648
+ /**
649
+ * `guess` is the app's name for the meeting, used only when nobody typed
650
+ * one; `calendarEvent` the calendar event it is of, which names it.
651
+ */
652
+ const start = async (
653
+ titleText: string = title,
654
+ guess?: string,
655
+ calendarEvent?: MeetingStartRequest["calendarEvent"],
656
+ ) => {
650
657
  if (!recorder) return;
651
658
  setErrorDismissed(false);
652
659
  const name = titleText.trim();
@@ -658,6 +665,7 @@ function RecorderPanelContent({
658
665
  systemAudio: tabAudio,
659
666
  ...(liveOn ? { liveTranscript: true } : {}),
660
667
  ...(externalRef ? { externalRef } : {}),
668
+ ...(calendarEvent ? { calendarEvent } : {}),
661
669
  // Names their microphone in the transcript when Opengeni has no name for them.
662
670
  ...(viewerName?.trim() ? { ownerName: viewerName } : {}),
663
671
  // Sent even when it's the workspace's, so this meeting keeps it.
@@ -679,7 +687,7 @@ function RecorderPanelContent({
679
687
  if (!request) return;
680
688
  // The call app's name is a guess: a title already typed wins over it.
681
689
  if (request.titleSource === "app") {
682
- void startRef.current(undefined, request.title);
690
+ void startRef.current(undefined, request.title, request.calendarEvent);
683
691
  return;
684
692
  }
685
693
  // A start without a title (the Start recording key) keeps one already typed, as the button does.
@@ -6,7 +6,11 @@ import { GlobalRegistrator } from "@happy-dom/global-registrator";
6
6
  import { act, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
7
7
  import { createRoot } from "react-dom/client";
8
8
 
9
- import type { MeetingRecorder, MeetingRecorderStore } from "./recorder-context";
9
+ import type {
10
+ MeetingRecorder,
11
+ MeetingRecorderStore,
12
+ MeetingStartRequest,
13
+ } from "./recorder-context";
10
14
 
11
15
  beforeAll(() => {
12
16
  GlobalRegistrator.register();
@@ -83,7 +87,17 @@ async function until(check: () => boolean) {
83
87
 
84
88
  type Desktop = {
85
89
  listener:
86
- | ((request: { kind: "record"; title?: string } | { kind: "stop" } | { kind: "open" }) => void)
90
+ | ((
91
+ request:
92
+ | {
93
+ kind: "record";
94
+ title?: string;
95
+ calendarEvent?: { provider: "google" | "microsoft"; id: string };
96
+ replace?: boolean;
97
+ }
98
+ | { kind: "stop" }
99
+ | { kind: "open" },
100
+ ) => void)
87
101
  | null;
88
102
  };
89
103
 
@@ -118,7 +132,7 @@ function mountProvider() {
118
132
  };
119
133
  const opened: string[] = [];
120
134
  const meetingsOpened: string[] = [];
121
- let pendingStart: () => boolean = () => false;
135
+ let pendingStart: () => MeetingStartRequest | null = () => null;
122
136
  let open: ((recordingId: string, workspaceId: string) => boolean) | null = null;
123
137
  function Probe() {
124
138
  const current = useMeetingRecorder();
@@ -129,23 +143,24 @@ function mountProvider() {
129
143
  }
130
144
  function PendingStart() {
131
145
  const { take } = usePendingMeetingStart();
132
- pendingStart = () => take() !== null;
146
+ pendingStart = take;
133
147
  return null;
134
148
  }
135
149
  const container = document.createElement("div");
136
150
  document.body.append(container);
137
151
  const root = createRoot(container);
138
- return {
152
+ const view = {
139
153
  seen,
140
154
  opened,
141
155
  meetingsOpened,
142
156
  // Taking the pending start clears provider state, so it runs inside act.
143
- takePendingStart: () => {
144
- let taken = false;
157
+ takePendingStart: () => view.takePendingRequest() !== null,
158
+ takePendingRequest: () => {
159
+ let taken: MeetingStartRequest | null = null;
145
160
  act(() => {
146
161
  taken = pendingStart();
147
162
  });
148
- return taken;
163
+ return taken as MeetingStartRequest | null;
149
164
  },
150
165
  open: (recordingId: string, workspaceId: string) => open!(recordingId, workspaceId),
151
166
  render: (workspaceId: string | null, options: { scope?: string | null } = {}) =>
@@ -170,6 +185,7 @@ function mountProvider() {
170
185
  container.remove();
171
186
  },
172
187
  };
188
+ return view;
173
189
  }
174
190
 
175
191
  describe("A recording and the workspace it was made in", () => {
@@ -423,4 +439,37 @@ describe("A recording and the person who made it", () => {
423
439
  removeDesktop();
424
440
  }
425
441
  });
442
+ test("a reminder's Join and record this one stops the recording, then starts the next meeting's", async () => {
443
+ events.length = 0;
444
+ const desktop = installDesktop();
445
+ const view = mountProvider();
446
+ try {
447
+ await view.render("workspace-a");
448
+ await until(() => view.seen.recorder !== null);
449
+ await settle();
450
+ await act(async () => setStates.get("workspace-a")!("recording"));
451
+ const calendarEvent = { provider: "google" as const, id: "event-2" };
452
+ // Without replace, a reminder's Join shows the recording going on.
453
+ await act(async () =>
454
+ desktop.listener!({ kind: "record", title: "Planning", calendarEvent }),
455
+ );
456
+ expect(view.takePendingRequest()).toBeNull();
457
+ expect(view.seen.recorder?.state).toBe("recording");
458
+ // With it, the recording stops and is kept, then the next one starts for its event.
459
+ await act(async () =>
460
+ desktop.listener!({ kind: "record", title: "Planning", calendarEvent, replace: true }),
461
+ );
462
+ await settle();
463
+ expect(view.seen.recorder?.state).toBe("stopped");
464
+ expect(view.takePendingRequest()).toEqual({
465
+ title: "Planning",
466
+ titleSource: "app",
467
+ calendarEvent,
468
+ });
469
+ expect(view.meetingsOpened).toEqual(["workspace-a", "workspace-a"]);
470
+ } finally {
471
+ await view.unmount();
472
+ removeDesktop();
473
+ }
474
+ });
426
475
  });
@@ -3740,6 +3740,7 @@ export const englishMessages = {
3740
3740
  "native.timeline.messages.onAMachine": "On a machine",
3741
3741
  "native.timeline.messages.output": "Output",
3742
3742
  "native.timeline.messages.pauseGoal": "Pause goal",
3743
+ "native.timeline.messages.paused": "Paused",
3743
3744
  "native.timeline.messages.pin": "Pin",
3744
3745
  "native.timeline.messages.pinned": "Pinned",
3745
3746
  "native.timeline.messages.proposedKnowledge": "Proposed knowledge",
@@ -6081,6 +6082,7 @@ export const englishMessages = {
6081
6082
  "timeline.turnSummary.contextCompactedExpandForDetails": "Context compacted; expand for details",
6082
6083
  "timeline.turnSummary.copyTurn": "Copy turn",
6083
6084
  "timeline.turnSummary.interrupted": "· interrupted",
6085
+ "timeline.turnSummary.paused": "Paused",
6084
6086
  "timeline.turnSummary.preparation": "Preparation",
6085
6087
  "timeline.turnSummary.steps": "Steps",
6086
6088
  "timeline.turnSummary.waiting": "Waiting",
package/src/session.ts CHANGED
@@ -141,9 +141,16 @@ export {
141
141
  extractSessionRef,
142
142
  groupTimeline,
143
143
  sessionStatusFromEvents,
144
+ timelineLivePause,
145
+ timelinePauseSpans,
144
146
  toolDisplayName,
145
147
  } from "./timeline/projection";
146
- export type { GroupTimelineOptions } from "./timeline/projection";
148
+ export type {
149
+ GroupTimelineOptions,
150
+ TimelineLivePause,
151
+ TimelinePauseSpan,
152
+ } from "./timeline/projection";
153
+ export { useTimelinePauses } from "./timeline/use-timeline-pauses";
147
154
  export type {
148
155
  ActivityItem,
149
156
  AgentMessageItem,
@@ -24,10 +24,13 @@ export {
24
24
  groupTimeline,
25
25
  sessionStatusFromEvents,
26
26
  mcpToolLeaf,
27
+ timelineLivePause,
28
+ timelinePauseSpans,
27
29
  toolDisplayName,
28
30
  toolMatchesLeaf,
29
31
  } from "./projection";
30
- export type { GroupTimelineOptions } from "./projection";
32
+ export type { GroupTimelineOptions, TimelineLivePause, TimelinePauseSpan } from "./projection";
33
+ export { useTimelinePauses } from "./use-timeline-pauses";
31
34
 
32
35
  // item types
33
36
  export type {