@opengeni/react 6.8.0 → 6.9.1-canary.41937124785001

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 (719) 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 +52 -52
  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 +35 -35
  38. package/dist/app/components/command-menu/command-menu.js +39 -39
  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/desktop/app-shots.js +6 -6
  44. package/dist/app/components/desktop/computer-use.js +2 -2
  45. package/dist/app/components/desktop/this-computer.js +5 -5
  46. package/dist/app/components/feedback.js +3 -3
  47. package/dist/app/components/github-app-connect-launcher.js +1 -1
  48. package/dist/app/components/machines/connect-machine-dialog.js +11 -11
  49. package/dist/app/components/markdown.js +6 -6
  50. package/dist/app/components/models/models-ui.js +5 -5
  51. package/dist/app/components/models/subscription-usage.d.ts +34 -0
  52. package/dist/app/components/models/subscription-usage.js +24 -0
  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 +76 -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 +12 -7
  102. package/dist/app/components/session/subscription-account-menu.d.ts +15 -15
  103. package/dist/app/components/session/subscription-account-menu.js +6 -1
  104. package/dist/app/components/session/subscription-account.d.ts +16 -9
  105. package/dist/app/components/settings/row-select.js +4 -4
  106. package/dist/app/components/transcription-settings.js +6 -6
  107. package/dist/app/components/ui/destructive-confirm.js +5 -5
  108. package/dist/app/components/usage/usage-entry.js +3 -3
  109. package/dist/app/components/window-bar.js +9 -9
  110. package/dist/app/components/workspace-composer-plus.js +16 -16
  111. package/dist/app/components/workspace-reach.js +4 -4
  112. package/dist/app/embed/session-app.js +160 -157
  113. package/dist/app/lib/actions/actions-provider.js +8 -8
  114. package/dist/app/lib/agent-capabilities.d.ts +12 -2
  115. package/dist/app/lib/agent-capabilities.js +3 -3
  116. package/dist/app/lib/codex-usage-query.js +2 -2
  117. package/dist/app/lib/composer-connectors.js +14 -14
  118. package/dist/app/lib/console-site.js +2 -2
  119. package/dist/app/lib/console-text.js +2 -2
  120. package/dist/app/lib/events.js +12 -12
  121. package/dist/app/lib/failed-session-copy.js +3 -3
  122. package/dist/app/lib/model-access-onboarding.js +3 -3
  123. package/dist/app/lib/move-chat-to-machine.js +3 -3
  124. package/dist/app/lib/session-branch-cache.js +8 -8
  125. package/dist/app/lib/session-create.js +4 -4
  126. package/dist/app/lib/session-group-pagination.js +8 -8
  127. package/dist/app/lib/session-hover-facts.js +13 -13
  128. package/dist/app/lib/session-model.js +2 -2
  129. package/dist/app/lib/session-pins.js +1 -1
  130. package/dist/app/lib/session-rail.js +5 -5
  131. package/dist/app/lib/session-rename.js +3 -3
  132. package/dist/app/lib/sessions-group.d.ts +5 -3
  133. package/dist/app/lib/sessions-group.js +7 -7
  134. package/dist/app/lib/site-tool-consent-dialog.js +7 -7
  135. package/dist/app/lib/site-tool-consent.js +1 -1
  136. package/dist/app/lib/subscription-accounts.d.ts +79 -0
  137. package/dist/app/lib/subscription-accounts.js +18 -0
  138. package/dist/app/lib/turn-failure-analytics.js +4 -4
  139. package/dist/app/lib/use-follow-up-repositories.js +3 -3
  140. package/dist/app/lib/use-workspace-machines.js +4 -4
  141. package/dist/app/lib/use-workspace-model-catalog.js +3 -3
  142. package/dist/app/lib/use-workspace-rigs.js +2 -2
  143. package/dist/app/lib/workspace-navigation-preference.js +4 -4
  144. package/dist/app/lib/workspace-scope-context.js +3 -3
  145. package/dist/app/routes/artifacts.js +48 -48
  146. package/dist/app/routes/retained-artifact.js +32 -32
  147. package/dist/app/routes/session.js +96 -96
  148. package/dist/app/routes/sessions-index-hydration.js +5 -5
  149. package/dist/app/routes/sessions-index.js +76 -76
  150. package/dist/app/routes/site-view.js +55 -55
  151. package/dist/artifacts-document.js +4 -4
  152. package/dist/artifacts-presentation.js +4 -4
  153. package/dist/artifacts-spreadsheet.js +4 -4
  154. package/dist/artifacts.js +10 -10
  155. package/dist/automations.js +10 -10
  156. package/dist/{browser-viewer-ZHQDVHZ2.js → browser-viewer-F4FL7JKB.js} +4 -4
  157. package/dist/{chat-interactive-block-VSDD6X3M.js → chat-interactive-block-4U5JWRSY.js} +5 -5
  158. package/dist/{chunk-4K64EKM7.js → chunk-22YIIM3X.js} +4 -4
  159. package/dist/{chunk-3NNAC43A.js → chunk-2N7ACQ7M.js} +2 -2
  160. package/dist/{chunk-7Z76QP64.js → chunk-2PY5XD3F.js} +35 -5
  161. package/dist/chunk-2PY5XD3F.js.map +1 -0
  162. package/dist/{chunk-WDASYY4S.js → chunk-2TEYUDJD.js} +8 -8
  163. package/dist/{chunk-OTW25A6I.js → chunk-37JJQNZB.js} +3 -3
  164. package/dist/{chunk-VCJQQYRE.js → chunk-3DWQPURZ.js} +4 -4
  165. package/dist/{chunk-GTRAH4FG.js → chunk-3GWC3FU3.js} +2 -2
  166. package/dist/{chunk-AB5IW227.js → chunk-3ICY6LP3.js} +3 -3
  167. package/dist/{chunk-WIFDNUKD.js → chunk-3OCU5RX5.js} +3 -3
  168. package/dist/{chunk-UBRQ3PQD.js → chunk-3SPDJLOR.js} +2 -2
  169. package/dist/{chunk-IZXYFWA4.js → chunk-3WVLR7UA.js} +12 -12
  170. package/dist/{chunk-DEHLWZSI.js → chunk-3XMB3L57.js} +4 -4
  171. package/dist/{chunk-AJBDAVX3.js → chunk-4IUOBO2H.js} +7 -7
  172. package/dist/{chunk-NFCS5WYC.js → chunk-4KQ3A3EO.js} +3 -3
  173. package/dist/{chunk-LIJNVIT3.js → chunk-4L5B5AZT.js} +3 -3
  174. package/dist/{chunk-EDDKPIIV.js → chunk-4NB3TPNE.js} +2 -2
  175. package/dist/{chunk-PSM3CU7N.js → chunk-4TDKXHCD.js} +46 -39
  176. package/dist/chunk-4TDKXHCD.js.map +1 -0
  177. package/dist/{chunk-OJWDNNW3.js → chunk-4TPTGBIO.js} +5 -5
  178. package/dist/{chunk-J2WY42FA.js → chunk-4UHGW6WF.js} +2 -2
  179. package/dist/{chunk-7NLF35YL.js → chunk-4YN2JLYK.js} +4 -4
  180. package/dist/{chunk-OOOSGPJL.js → chunk-53MYEEMA.js} +1 -1
  181. package/dist/{chunk-467WDSOK.js → chunk-5HYWXPMA.js} +2 -2
  182. package/dist/{chunk-XMBOLFFS.js → chunk-5IMNL6IV.js} +2 -2
  183. package/dist/{chunk-4Z5X7PLC.js → chunk-5MLM5T5C.js} +3 -3
  184. package/dist/{chunk-YMI27QPF.js → chunk-5NKQZVXP.js} +2 -2
  185. package/dist/{chunk-ZW5YTIH3.js → chunk-5PB46DAA.js} +1 -1
  186. package/dist/{chunk-ZW5YTIH3.js.map → chunk-5PB46DAA.js.map} +1 -1
  187. package/dist/{chunk-CYDXCILL.js → chunk-5SODSGW7.js} +7 -7
  188. package/dist/{chunk-Q5EZNBPI.js → chunk-5YAJASCO.js} +3 -3
  189. package/dist/{chunk-M3FDGRB4.js → chunk-62XAL5BA.js} +3 -3
  190. package/dist/{chunk-SGH7I7OY.js → chunk-67R6NAFI.js} +2 -2
  191. package/dist/{chunk-Q5K2J5GG.js → chunk-6BN3RU7T.js} +13 -3
  192. package/dist/chunk-6BN3RU7T.js.map +1 -0
  193. package/dist/{chunk-PYB4BFEC.js → chunk-6BQLDL6R.js} +3 -3
  194. package/dist/{chunk-YJSCLGAW.js → chunk-6EZYHJTL.js} +3 -3
  195. package/dist/{chunk-OWET7EY2.js → chunk-6GW7NJMK.js} +19 -13
  196. package/dist/{chunk-OWET7EY2.js.map → chunk-6GW7NJMK.js.map} +1 -1
  197. package/dist/{chunk-G5UQBTXY.js → chunk-6LXIL3Q3.js} +2 -2
  198. package/dist/{chunk-T67LTMSW.js → chunk-6LYVAJFZ.js} +10 -10
  199. package/dist/{chunk-3L465FBR.js → chunk-6WB5UXMZ.js} +6 -6
  200. package/dist/{chunk-EKJHOWTZ.js → chunk-74UGYVCA.js} +4 -4
  201. package/dist/{chunk-PWUSSSSL.js → chunk-7BTNYZC7.js} +2 -2
  202. package/dist/{chunk-NQ2CPQJF.js → chunk-7D3WIDKK.js} +26 -3
  203. package/dist/chunk-7D3WIDKK.js.map +1 -0
  204. package/dist/{chunk-ESXAECZ3.js → chunk-7KZFGA25.js} +2 -2
  205. package/dist/{chunk-EGKARC53.js → chunk-7MGDX2TD.js} +2 -2
  206. package/dist/{chunk-Y3XZEKDQ.js → chunk-7N3GFGB6.js} +2 -2
  207. package/dist/{chunk-AH3DGOTK.js → chunk-7SFSN6AX.js} +2 -2
  208. package/dist/{chunk-QPQ7R77C.js → chunk-7SU4YVZ5.js} +5 -1
  209. package/dist/chunk-7SU4YVZ5.js.map +1 -0
  210. package/dist/{chunk-6QK65ZWM.js → chunk-7TGUHFGO.js} +3 -3
  211. package/dist/{chunk-QURYQFDN.js → chunk-7ZIWO65F.js} +2 -2
  212. package/dist/{chunk-OYCK4JRS.js → chunk-AJHLEJTK.js} +2 -2
  213. package/dist/{chunk-3PZ3LRPV.js → chunk-AN4U7EPH.js} +3 -3
  214. package/dist/{chunk-77BHKC43.js → chunk-APG6CEG7.js} +1 -1
  215. package/dist/{chunk-FSDQQQIA.js → chunk-APHLXQNP.js} +3 -3
  216. package/dist/{chunk-SN2WENRP.js → chunk-AXHQ7QXV.js} +3 -3
  217. package/dist/{chunk-54U6ZBEX.js → chunk-AYTLSPF6.js} +3 -3
  218. package/dist/{chunk-WYGTAQMX.js → chunk-AZFVRPQM.js} +76 -22
  219. package/dist/chunk-AZFVRPQM.js.map +1 -0
  220. package/dist/{chunk-R33SBMB7.js → chunk-BBSKKBMV.js} +3 -3
  221. package/dist/{chunk-2GCHGWNE.js → chunk-BGH6TU2P.js} +3 -3
  222. package/dist/{chunk-D3PTVN2I.js → chunk-BGIYL26H.js} +2 -2
  223. package/dist/{chunk-BQYRZIZ7.js → chunk-BL7UQUC3.js} +2 -2
  224. package/dist/{chunk-EBTUPRRQ.js → chunk-BOUHCYL6.js} +4 -4
  225. package/dist/{chunk-MKDFYE2E.js → chunk-BVNGDFBC.js} +2 -2
  226. package/dist/{chunk-ICAMYP5M.js → chunk-BWJK64CP.js} +2 -2
  227. package/dist/{chunk-RHXYO4H2.js → chunk-BZ2GTCQV.js} +2 -2
  228. package/dist/{chunk-GIWFLWXG.js → chunk-C2KASMJK.js} +4 -4
  229. package/dist/{chunk-KO3OHHY2.js → chunk-CAZDRDQT.js} +2 -2
  230. package/dist/{chunk-OK7BQMCI.js → chunk-CBJRZKZB.js} +9 -9
  231. package/dist/{chunk-OYOFPNLC.js → chunk-CF6NYG7J.js} +4 -4
  232. package/dist/{chunk-MT2R57SF.js → chunk-COITN7WN.js} +2 -2
  233. package/dist/{chunk-OCXTTKVA.js → chunk-CPVOXM2Q.js} +2 -2
  234. package/dist/{chunk-HYEIA25Y.js → chunk-CTZRCBKH.js} +2 -2
  235. package/dist/{chunk-OCXEY7HE.js → chunk-CWL27YTB.js} +2 -2
  236. package/dist/{chunk-K4DQS2ML.js → chunk-D2I33V5P.js} +4 -4
  237. package/dist/{chunk-736RUNIA.js → chunk-DF7WI4JH.js} +4 -4
  238. package/dist/{chunk-KUE5BOQE.js → chunk-DKZYCJCO.js} +4 -4
  239. package/dist/{chunk-74CBR5YE.js → chunk-DQ32FKFQ.js} +2 -2
  240. package/dist/{chunk-4O2XWOLZ.js → chunk-DTKG2YUF.js} +3 -3
  241. package/dist/{chunk-GMHIOYB7.js → chunk-DUDA4V5R.js} +4 -4
  242. package/dist/{chunk-XUOYNJPB.js → chunk-ECROT4M5.js} +24 -24
  243. package/dist/{chunk-PVB4YVDP.js → chunk-EOXV5XGY.js} +2 -2
  244. package/dist/{chunk-U6552Q3T.js → chunk-EQQOZ6DD.js} +2 -2
  245. package/dist/{chunk-G6ICCGJ3.js → chunk-EY6W5H4B.js} +2 -2
  246. package/dist/{chunk-HWVPLFIW.js → chunk-EYRFEWXJ.js} +2 -2
  247. package/dist/{chunk-7YTR3UFO.js → chunk-FB4JWUVJ.js} +8 -5
  248. package/dist/chunk-FB4JWUVJ.js.map +1 -0
  249. package/dist/{chunk-U4LTPFD2.js → chunk-FKK2PD7K.js} +2 -2
  250. package/dist/{chunk-PUUEI4W3.js → chunk-FPHHIC5K.js} +5 -5
  251. package/dist/{chunk-SP44O3OU.js → chunk-FQM6L22H.js} +2 -2
  252. package/dist/{chunk-2J77TWGH.js → chunk-FW22IREV.js} +3 -3
  253. package/dist/{chunk-EBIVTDEG.js → chunk-G4M6AYDB.js} +2 -2
  254. package/dist/{chunk-O4JOE3R7.js → chunk-G55NAU5M.js} +60 -74
  255. package/dist/chunk-G55NAU5M.js.map +1 -0
  256. package/dist/{chunk-BASI553K.js → chunk-G6AZ2WIU.js} +4 -4
  257. package/dist/{chunk-SJYTQLN3.js → chunk-GJ5IDSAX.js} +3 -3
  258. package/dist/{chunk-TDTD66BK.js → chunk-GRDSEZWZ.js} +2 -2
  259. package/dist/{chunk-MV2CLIO6.js → chunk-HBVJIGY2.js} +6 -6
  260. package/dist/{chunk-R4JA5JFI.js → chunk-HCWQLIOE.js} +3 -3
  261. package/dist/{chunk-MZY3VKKM.js → chunk-HEVD4A5G.js} +2 -2
  262. package/dist/{chunk-DLVIRJGK.js → chunk-HNDHSEVJ.js} +2 -2
  263. package/dist/{chunk-LPKJ77EK.js → chunk-HNTZ7B7M.js} +2 -2
  264. package/dist/{chunk-QQIZMVAJ.js → chunk-HQ7GTMII.js} +59 -57
  265. package/dist/chunk-HQ7GTMII.js.map +1 -0
  266. package/dist/{chunk-IN3VQFKS.js → chunk-I2FC7CAI.js} +2 -2
  267. package/dist/{chunk-SK5S2PCK.js → chunk-I7BGHBOM.js} +14 -14
  268. package/dist/chunk-I7BGHBOM.js.map +1 -0
  269. package/dist/{chunk-ZBHGNE2J.js → chunk-IEHZFYMH.js} +3 -3
  270. package/dist/{chunk-DWJ6J3YW.js → chunk-IXISEVD7.js} +4 -4
  271. package/dist/{chunk-TK5FWVZR.js → chunk-IZEDVQUD.js} +3 -3
  272. package/dist/{chunk-HEGV4QMS.js → chunk-J42QE4VO.js} +2 -2
  273. package/dist/{chunk-PRT4J2DL.js → chunk-J555XSUM.js} +2 -2
  274. package/dist/{chunk-SBXSKRFA.js → chunk-JNMHFSDF.js} +3 -3
  275. package/dist/{chunk-KI46GKMD.js → chunk-JTBAOPYO.js} +7 -7
  276. package/dist/{chunk-JHZRAYI4.js → chunk-JWSRFXRN.js} +2 -2
  277. package/dist/chunk-JWSRFXRN.js.map +1 -0
  278. package/dist/{chunk-SXGJL7UT.js → chunk-K376MPJH.js} +14 -14
  279. package/dist/{chunk-OSJ366KR.js → chunk-KEBVT55V.js} +30 -30
  280. package/dist/{chunk-U5UGM5XD.js → chunk-KFIZAXHI.js} +5 -5
  281. package/dist/{chunk-KFNZZ2N6.js → chunk-KKGRDBMK.js} +2 -2
  282. package/dist/{chunk-PLYVGZIN.js → chunk-KKIG6DN5.js} +1 -1
  283. package/dist/{chunk-3OK7Y6ES.js → chunk-KKQO2GAA.js} +2 -2
  284. package/dist/{chunk-DQPIEQGP.js → chunk-KO753ZCZ.js} +2 -2
  285. package/dist/{chunk-YNTLWCF4.js → chunk-KYIRWU65.js} +3 -3
  286. package/dist/{chunk-JKL5S7UQ.js → chunk-L6V63DVI.js} +6 -6
  287. package/dist/{chunk-M5IQVMLR.js → chunk-LAZ2QZTJ.js} +11 -4
  288. package/dist/chunk-LAZ2QZTJ.js.map +1 -0
  289. package/dist/{chunk-CV4VVLPZ.js → chunk-LCNJ2KNS.js} +2 -2
  290. package/dist/{chunk-D74Z2N4K.js → chunk-LE7YKMTU.js} +2 -2
  291. package/dist/{chunk-D5TIVCXG.js → chunk-LEBEOMVT.js} +2 -2
  292. package/dist/chunk-LKLQVANM.js +2 -0
  293. package/dist/{chunk-2OXSB2OL.js → chunk-LKWVBUH6.js} +3 -2
  294. package/dist/chunk-LKWVBUH6.js.map +1 -0
  295. package/dist/{chunk-WXF2RTS4.js → chunk-M6URPYUB.js} +2 -2
  296. package/dist/{chunk-H6BX6WOW.js → chunk-MDHFMRBC.js} +3 -3
  297. package/dist/{chunk-3CDJSKDW.js → chunk-MGZO7CHI.js} +3 -3
  298. package/dist/{chunk-DCEQCGVN.js → chunk-MIWU52TW.js} +2 -2
  299. package/dist/{chunk-PF2WU2IL.js → chunk-ND4IQJUM.js} +120 -17
  300. package/dist/chunk-ND4IQJUM.js.map +1 -0
  301. package/dist/{chunk-3PM3M2Q6.js → chunk-NDXBF3RW.js} +27 -11
  302. package/dist/chunk-NDXBF3RW.js.map +1 -0
  303. package/dist/{chunk-LVELUUK6.js → chunk-NF6QVVMP.js} +2 -2
  304. package/dist/{chunk-UMX6DZME.js → chunk-NTZ5ZNVK.js} +2 -2
  305. package/dist/{chunk-FBA2NXYH.js → chunk-NWLRABUR.js} +3 -3
  306. package/dist/{chunk-TNSJFZ6Q.js → chunk-O2H2U7YS.js} +4 -4
  307. package/dist/{chunk-BFFNINCC.js → chunk-OAL2PPX4.js} +3 -3
  308. package/dist/{chunk-WTSQUCHB.js → chunk-OCYTHZ4A.js} +3 -3
  309. package/dist/{chunk-ZAX4XQLN.js → chunk-OEDTCIXF.js} +2 -2
  310. package/dist/{chunk-CHU3RDV4.js → chunk-OLVSYB3P.js} +3 -3
  311. package/dist/{chunk-PZKHST7A.js → chunk-OQ6QOPK6.js} +10 -3
  312. package/dist/chunk-OQ6QOPK6.js.map +1 -0
  313. package/dist/{chunk-IFSXVU2S.js → chunk-OQHTFOCA.js} +2 -2
  314. package/dist/{chunk-OXQ2SXVC.js → chunk-P56AVROH.js} +2 -2
  315. package/dist/{chunk-CXAN2FHF.js → chunk-PCEJHHGP.js} +6 -6
  316. package/dist/{chunk-5MIBQ4P5.js → chunk-PHGQGVVL.js} +2 -2
  317. package/dist/{chunk-FLWQJDJ5.js → chunk-PUZRHEQI.js} +6 -6
  318. package/dist/{chunk-OP2GD6QW.js → chunk-PV7U6OOJ.js} +2 -2
  319. package/dist/{chunk-SPD4ULVB.js → chunk-PYMROAWS.js} +2 -1
  320. package/dist/chunk-PYMROAWS.js.map +1 -0
  321. package/dist/{chunk-X2QJXDE4.js → chunk-PZQACDH5.js} +8 -8
  322. package/dist/{chunk-CH4UQ4NO.js → chunk-PZTS4O6E.js} +5 -5
  323. package/dist/{chunk-TKQL7EDB.js → chunk-Q42QHUAQ.js} +2 -2
  324. package/dist/{chunk-MRECRNVU.js → chunk-QCYGB6TZ.js} +5 -5
  325. package/dist/{chunk-GSCGKJNK.js → chunk-QECMETOF.js} +2 -2
  326. package/dist/{chunk-RMCLFSMX.js → chunk-QGX3LE6H.js} +2 -2
  327. package/dist/{chunk-HTMQGS63.js → chunk-QI3NDQFP.js} +8 -8
  328. package/dist/{chunk-UU5FBVRX.js → chunk-QZE4BTLA.js} +6 -5
  329. package/dist/chunk-QZE4BTLA.js.map +1 -0
  330. package/dist/{chunk-R5QAL43H.js → chunk-RA3Q52O2.js} +2 -2
  331. package/dist/chunk-RBOHWUSN.js +151 -0
  332. package/dist/chunk-RBOHWUSN.js.map +1 -0
  333. package/dist/{chunk-AJDGP2N4.js → chunk-RJNOQEJJ.js} +20 -20
  334. package/dist/{chunk-477DTTMH.js → chunk-RSFOFUR7.js} +3 -3
  335. package/dist/{chunk-JV5ULONH.js → chunk-RXR6PMSH.js} +39 -39
  336. package/dist/{chunk-J2BTILRR.js → chunk-SM7HFCGC.js} +2 -2
  337. package/dist/{chunk-UTRNLNCW.js → chunk-SN6ZWYOP.js} +69 -97
  338. package/dist/chunk-SN6ZWYOP.js.map +1 -0
  339. package/dist/{chunk-OBGOLHCP.js → chunk-T4HK4XCI.js} +3 -3
  340. package/dist/{chunk-XVLEBB4Y.js → chunk-TBWL6YWL.js} +2 -2
  341. package/dist/{chunk-AAS7OWV6.js → chunk-TIDXYWFX.js} +3 -3
  342. package/dist/{chunk-N3FM4BNA.js → chunk-TKHRGY2P.js} +2 -2
  343. package/dist/{chunk-GU7T2S5N.js → chunk-TU2GSZL7.js} +2 -2
  344. package/dist/{chunk-OI6VI6SU.js → chunk-U6HGJXXQ.js} +8 -8
  345. package/dist/{chunk-4BWMAGJJ.js → chunk-UGRW6RTR.js} +3 -3
  346. package/dist/{chunk-AVXDIRRW.js → chunk-UMRUDYUK.js} +2 -2
  347. package/dist/{chunk-FNXCFIPW.js → chunk-UOT2R5ZD.js} +2 -2
  348. package/dist/{chunk-DIP7YALH.js → chunk-USURKJVT.js} +2 -2
  349. package/dist/{chunk-S27VZ5DO.js → chunk-UU6Q67XM.js} +6 -6
  350. package/dist/{chunk-LTJFV2JI.js → chunk-UZ7NP5CW.js} +2 -2
  351. package/dist/{chunk-H6MJFMHZ.js → chunk-V4FO7UOE.js} +3 -3
  352. package/dist/{chunk-RGR57NYY.js → chunk-V4ZOZRCW.js} +2 -2
  353. package/dist/{chunk-LQKVNREV.js → chunk-V57YMKQZ.js} +3 -3
  354. package/dist/{chunk-XZCCEKPW.js → chunk-VOIWZBY6.js} +6 -6
  355. package/dist/{chunk-E5KOWRDU.js → chunk-VPHPLPDA.js} +2 -2
  356. package/dist/{chunk-OGU73VUN.js → chunk-VUL4KPUU.js} +2 -2
  357. package/dist/{chunk-SFIXTOOJ.js → chunk-VWF6ILAR.js} +3 -3
  358. package/dist/{chunk-FER6EVIY.js → chunk-W54BHJO7.js} +2 -2
  359. package/dist/{chunk-34NV52R3.js → chunk-WCYE4BLC.js} +4 -4
  360. package/dist/{chunk-RISUROBM.js → chunk-WTV25ELY.js} +4 -4
  361. package/dist/{chunk-UO35OEOX.js → chunk-WZYGH7CN.js} +3 -3
  362. package/dist/{chunk-CEMSIU4Z.js → chunk-XG2RWUF7.js} +5 -5
  363. package/dist/chunk-XK72HZ4C.js +147 -0
  364. package/dist/chunk-XK72HZ4C.js.map +1 -0
  365. package/dist/{chunk-K3D7IQQP.js → chunk-XV7QOT7W.js} +6 -6
  366. package/dist/{chunk-GOCODNQS.js → chunk-XWECT3GX.js} +2 -2
  367. package/dist/{chunk-5MHMCE2G.js → chunk-XZQK2ZLW.js} +3 -3
  368. package/dist/{chunk-JV3UI7BH.js → chunk-Y5BR66OH.js} +3 -3
  369. package/dist/{chunk-VXORMNU4.js → chunk-YBHAAULA.js} +67 -2
  370. package/dist/chunk-YBHAAULA.js.map +1 -0
  371. package/dist/{chunk-4F3AEJI6.js → chunk-YD6XU6FY.js} +4 -4
  372. package/dist/{chunk-VATYK3JQ.js → chunk-YFE47G3C.js} +3 -3
  373. package/dist/{chunk-ZR5EKJT6.js → chunk-YG6TWPP7.js} +2 -2
  374. package/dist/{chunk-44JWVYJB.js → chunk-YH3ARKBB.js} +2 -2
  375. package/dist/{chunk-752WXSDN.js → chunk-YI66STKJ.js} +2 -2
  376. package/dist/{chunk-QRECBCJM.js → chunk-YMVPYMKB.js} +2 -2
  377. package/dist/{chunk-77SYIH6O.js → chunk-YPIXBAF6.js} +2 -2
  378. package/dist/{chunk-WRMUXZ7C.js → chunk-YSWPNY6G.js} +3 -3
  379. package/dist/{chunk-GTHCHCWW.js → chunk-YWNNMBZG.js} +3 -3
  380. package/dist/{chunk-3DRLCX5V.js → chunk-Z3HYM2JT.js} +2 -2
  381. package/dist/{chunk-M3HGBO2Y.js → chunk-ZAC7YPRA.js} +1 -1
  382. package/dist/{chunk-2VJOSU4H.js → chunk-ZENESDAF.js} +2 -2
  383. package/dist/{chunk-4JXPLTWV.js → chunk-ZHAPMETO.js} +2 -2
  384. package/dist/{chunk-IJR6VOLU.js → chunk-ZVR6DUZH.js} +2 -2
  385. package/dist/components/message-timeline.d.ts +10 -2
  386. package/dist/composer.js +8 -8
  387. package/dist/{computer-viewer-5LKRCEVQ.js → computer-viewer-FOIOZUF5.js} +5 -5
  388. package/dist/connect.js +12 -12
  389. package/dist/desktop-dictation.js +8 -8
  390. package/dist/desktop.js +2 -2
  391. package/dist/editor.js +2 -2
  392. package/dist/{embedded-new-voice-GHJRY3YL.js → embedded-new-voice-WTXAJNGO.js} +5 -5
  393. package/dist/{embedded-voice-ASQXBSTX.js → embedded-voice-SIJOPN2G.js} +5 -5
  394. package/dist/{fleet-decision-row-U7LDVBEM.js → fleet-decision-row-XKQ3GMYT.js} +2 -2
  395. package/dist/hooks/use-recordings.d.ts +4 -2
  396. package/dist/in-chat-connect-model.js +5 -5
  397. package/dist/index.d.ts +2 -2
  398. package/dist/index.js +66 -60
  399. package/dist/interaction.js +5 -5
  400. package/dist/{latest-question-RNVF262Q.js → latest-question-KA7AQYVI.js} +2 -2
  401. package/dist/machines.js +3 -3
  402. package/dist/meetings/recorder-context.d.ts +6 -1
  403. package/dist/meetings/recorder-panel.d.ts +2 -5
  404. package/dist/meetings-recorder.js +1 -1
  405. package/dist/meetings.js +25 -23
  406. package/dist/meetings.js.map +1 -1
  407. package/dist/messages/en.d.ts +4 -0
  408. package/dist/messages.js +1 -1
  409. package/dist/{model-policy-picker-menu-E6XKMFTA.js → model-policy-picker-menu-6N2G7VGX.js} +4 -4
  410. package/dist/{payment-page-card-DJDKV2LW.js → payment-page-card-IJFZHQ52.js} +4 -4
  411. package/dist/{platform-activity-row-MSDCSMET.js → platform-activity-row-MFCMGI43.js} +2 -2
  412. package/dist/{queue-surface-implementation-GUAIG6TK.js → queue-surface-implementation-BBCDWWOP.js} +5 -5
  413. package/dist/realtime.js +4 -4
  414. package/dist/{recorder-host-2MYDJPQW.js → recorder-host-LDYYOKG7.js} +5 -5
  415. package/dist/recordings.js +4 -4
  416. package/dist/{sandbox-files-W5W2LW4K.js → sandbox-files-VYRBIXJY.js} +6 -6
  417. package/dist/session-app.js +160 -157
  418. package/dist/{session-connect-cards-HPH7JOZP.js → session-connect-cards-GBPSL6OT.js} +9 -9
  419. package/dist/session-connect-cards-GBPSL6OT.js.map +1 -0
  420. package/dist/session-list-model.js +2 -2
  421. package/dist/{session-realtime-SDTKFFIR.js → session-realtime-QGU57TND.js} +3 -3
  422. package/dist/session-realtime-QGU57TND.js.map +1 -0
  423. package/dist/session-realtime.js +2 -2
  424. package/dist/session-ui.js +33 -33
  425. package/dist/session.d.ts +3 -2
  426. package/dist/session.js +16 -10
  427. package/dist/sites.js +2 -2
  428. package/dist/terminal.js +2 -2
  429. package/dist/this-computer.js +3 -3
  430. package/dist/timeline/index.d.ts +3 -2
  431. package/dist/timeline/projection.d.ts +52 -0
  432. package/dist/timeline/turn-summary-model.d.ts +4 -3
  433. package/dist/timeline/types.d.ts +8 -2
  434. package/dist/timeline/use-timeline-pauses.d.ts +12 -0
  435. package/dist/timeline/work-presentation.d.ts +4 -3
  436. package/dist/{timeline-annotation-markers-FNILLWNU.js → timeline-annotation-markers-LL6ZVBZH.js} +2 -2
  437. package/dist/{timeline-annotation-selection-MBCIDO2Q.js → timeline-annotation-selection-WQA76WYC.js} +2 -2
  438. package/dist/{timeline-annotations-dialog-JPNKLOTE.js → timeline-annotations-dialog-HHETAEZA.js} +3 -3
  439. package/dist/timeline-model.js +2 -2
  440. package/dist/ui/access-list.js +5 -5
  441. package/dist/ui/cadence-picker.js +4 -4
  442. package/dist/ui/choice-cards.js +3 -3
  443. package/dist/ui/confirm-dialog.js +2 -2
  444. package/dist/ui/copy-field.js +3 -3
  445. package/dist/ui/detail-page.js +2 -2
  446. package/dist/ui/detail-sheet.js +2 -2
  447. package/dist/ui/disclosure.js +3 -3
  448. package/dist/ui/email-chips-input.js +3 -3
  449. package/dist/ui/field.js +2 -2
  450. package/dist/ui/flush-form-page.js +3 -3
  451. package/dist/ui/form-dialog.js +2 -2
  452. package/dist/ui/list-row.js +3 -3
  453. package/dist/ui/relative-time.js +2 -2
  454. package/dist/ui/revision-history.js +4 -4
  455. package/dist/ui/role-select.js +5 -5
  456. package/dist/ui/select-menu.js +3 -3
  457. package/dist/ui/usage-meter.d.ts +8 -2
  458. package/dist/ui/usage-meter.js +5 -3
  459. package/dist/usage.js +2 -2
  460. package/dist/workbench.js +4 -4
  461. package/package.json +6 -5
  462. package/src/app/components/agent/agent-capability-picker.test.tsx +1 -1
  463. package/src/app/components/models/subscription-usage.tsx +178 -0
  464. package/src/app/components/rail/session-row-content.tsx +27 -0
  465. package/src/app/components/session/subscription-account-indicator.test.ts +78 -18
  466. package/src/app/components/session/subscription-account-indicator.tsx +16 -31
  467. package/src/app/components/session/subscription-account-menu.tsx +79 -101
  468. package/src/app/components/session/subscription-account.test.ts +161 -54
  469. package/src/app/components/session/subscription-account.ts +106 -117
  470. package/src/app/lib/agent-capabilities.tsx +34 -7
  471. package/src/app/lib/session-branch-cache.tsx +1 -0
  472. package/src/app/lib/session-pins.tsx +1 -0
  473. package/src/app/lib/session-row-paused.test.tsx +183 -0
  474. package/src/app/lib/sessions-group-channels.test.ts +4 -4
  475. package/src/app/lib/sessions-group.tsx +62 -4
  476. package/src/app/lib/subscription-accounts.tsx +283 -0
  477. package/src/app/routes/session.tsx +2 -0
  478. package/src/components/message-timeline.tsx +14 -2
  479. package/src/components/session-conversation.tsx +2 -1
  480. package/src/components/timeline-annotations.tsx +4 -1
  481. package/src/components/timeline-settlement.ts +1 -1
  482. package/src/hooks/use-composer.ts +104 -25
  483. package/src/hooks/use-recordings.ts +5 -0
  484. package/src/index.ts +5 -0
  485. package/src/meetings/meeting-detail-page.tsx +4 -2
  486. package/src/meetings/meetings-pages.test.tsx +38 -0
  487. package/src/meetings/recorder-context.tsx +28 -5
  488. package/src/meetings/recorder-panel.tsx +13 -5
  489. package/src/meetings/recorder-workspace.test.tsx +57 -8
  490. package/src/messages/en.ts +5 -0
  491. package/src/recordings-model.ts +7 -0
  492. package/src/session.ts +8 -1
  493. package/src/timeline/index.ts +4 -1
  494. package/src/timeline/projection.ts +228 -16
  495. package/src/timeline/turn-summary-model.ts +4 -3
  496. package/src/timeline/turn-summary.tsx +15 -2
  497. package/src/timeline/types.ts +8 -2
  498. package/src/timeline/use-timeline-pauses.ts +105 -0
  499. package/src/timeline/work-presentation.ts +13 -4
  500. package/src/ui/usage-meter.tsx +10 -7
  501. package/styles/compiled.css +3 -0
  502. package/dist/chunk-2OXSB2OL.js.map +0 -1
  503. package/dist/chunk-3PM3M2Q6.js.map +0 -1
  504. package/dist/chunk-7YTR3UFO.js.map +0 -1
  505. package/dist/chunk-7Z76QP64.js.map +0 -1
  506. package/dist/chunk-JHZRAYI4.js.map +0 -1
  507. package/dist/chunk-M5IQVMLR.js.map +0 -1
  508. package/dist/chunk-NQ2CPQJF.js.map +0 -1
  509. package/dist/chunk-O2UPPN5M.js +0 -2
  510. package/dist/chunk-O4JOE3R7.js.map +0 -1
  511. package/dist/chunk-PF2WU2IL.js.map +0 -1
  512. package/dist/chunk-PSM3CU7N.js.map +0 -1
  513. package/dist/chunk-PZKHST7A.js.map +0 -1
  514. package/dist/chunk-Q5K2J5GG.js.map +0 -1
  515. package/dist/chunk-QPQ7R77C.js.map +0 -1
  516. package/dist/chunk-QQIZMVAJ.js.map +0 -1
  517. package/dist/chunk-SK5S2PCK.js.map +0 -1
  518. package/dist/chunk-SPD4ULVB.js.map +0 -1
  519. package/dist/chunk-UTRNLNCW.js.map +0 -1
  520. package/dist/chunk-UU5FBVRX.js.map +0 -1
  521. package/dist/chunk-VXORMNU4.js.map +0 -1
  522. package/dist/chunk-WYGTAQMX.js.map +0 -1
  523. /package/dist/{browser-viewer-ZHQDVHZ2.js.map → app/components/models/subscription-usage.js.map} +0 -0
  524. /package/dist/{chat-interactive-block-VSDD6X3M.js.map → app/lib/subscription-accounts.js.map} +0 -0
  525. /package/dist/{chunk-O2UPPN5M.js.map → browser-viewer-F4FL7JKB.js.map} +0 -0
  526. /package/dist/{computer-viewer-5LKRCEVQ.js.map → chat-interactive-block-4U5JWRSY.js.map} +0 -0
  527. /package/dist/{chunk-4K64EKM7.js.map → chunk-22YIIM3X.js.map} +0 -0
  528. /package/dist/{chunk-3NNAC43A.js.map → chunk-2N7ACQ7M.js.map} +0 -0
  529. /package/dist/{chunk-WDASYY4S.js.map → chunk-2TEYUDJD.js.map} +0 -0
  530. /package/dist/{chunk-OTW25A6I.js.map → chunk-37JJQNZB.js.map} +0 -0
  531. /package/dist/{chunk-VCJQQYRE.js.map → chunk-3DWQPURZ.js.map} +0 -0
  532. /package/dist/{chunk-GTRAH4FG.js.map → chunk-3GWC3FU3.js.map} +0 -0
  533. /package/dist/{chunk-AB5IW227.js.map → chunk-3ICY6LP3.js.map} +0 -0
  534. /package/dist/{chunk-WIFDNUKD.js.map → chunk-3OCU5RX5.js.map} +0 -0
  535. /package/dist/{chunk-UBRQ3PQD.js.map → chunk-3SPDJLOR.js.map} +0 -0
  536. /package/dist/{chunk-IZXYFWA4.js.map → chunk-3WVLR7UA.js.map} +0 -0
  537. /package/dist/{chunk-DEHLWZSI.js.map → chunk-3XMB3L57.js.map} +0 -0
  538. /package/dist/{chunk-AJBDAVX3.js.map → chunk-4IUOBO2H.js.map} +0 -0
  539. /package/dist/{chunk-NFCS5WYC.js.map → chunk-4KQ3A3EO.js.map} +0 -0
  540. /package/dist/{chunk-LIJNVIT3.js.map → chunk-4L5B5AZT.js.map} +0 -0
  541. /package/dist/{chunk-EDDKPIIV.js.map → chunk-4NB3TPNE.js.map} +0 -0
  542. /package/dist/{chunk-OJWDNNW3.js.map → chunk-4TPTGBIO.js.map} +0 -0
  543. /package/dist/{chunk-J2WY42FA.js.map → chunk-4UHGW6WF.js.map} +0 -0
  544. /package/dist/{chunk-7NLF35YL.js.map → chunk-4YN2JLYK.js.map} +0 -0
  545. /package/dist/{chunk-OOOSGPJL.js.map → chunk-53MYEEMA.js.map} +0 -0
  546. /package/dist/{chunk-467WDSOK.js.map → chunk-5HYWXPMA.js.map} +0 -0
  547. /package/dist/{chunk-XMBOLFFS.js.map → chunk-5IMNL6IV.js.map} +0 -0
  548. /package/dist/{chunk-4Z5X7PLC.js.map → chunk-5MLM5T5C.js.map} +0 -0
  549. /package/dist/{chunk-YMI27QPF.js.map → chunk-5NKQZVXP.js.map} +0 -0
  550. /package/dist/{chunk-CYDXCILL.js.map → chunk-5SODSGW7.js.map} +0 -0
  551. /package/dist/{chunk-Q5EZNBPI.js.map → chunk-5YAJASCO.js.map} +0 -0
  552. /package/dist/{chunk-M3FDGRB4.js.map → chunk-62XAL5BA.js.map} +0 -0
  553. /package/dist/{chunk-SGH7I7OY.js.map → chunk-67R6NAFI.js.map} +0 -0
  554. /package/dist/{chunk-PYB4BFEC.js.map → chunk-6BQLDL6R.js.map} +0 -0
  555. /package/dist/{chunk-YJSCLGAW.js.map → chunk-6EZYHJTL.js.map} +0 -0
  556. /package/dist/{chunk-G5UQBTXY.js.map → chunk-6LXIL3Q3.js.map} +0 -0
  557. /package/dist/{chunk-T67LTMSW.js.map → chunk-6LYVAJFZ.js.map} +0 -0
  558. /package/dist/{chunk-3L465FBR.js.map → chunk-6WB5UXMZ.js.map} +0 -0
  559. /package/dist/{chunk-EKJHOWTZ.js.map → chunk-74UGYVCA.js.map} +0 -0
  560. /package/dist/{chunk-PWUSSSSL.js.map → chunk-7BTNYZC7.js.map} +0 -0
  561. /package/dist/{chunk-ESXAECZ3.js.map → chunk-7KZFGA25.js.map} +0 -0
  562. /package/dist/{chunk-EGKARC53.js.map → chunk-7MGDX2TD.js.map} +0 -0
  563. /package/dist/{chunk-Y3XZEKDQ.js.map → chunk-7N3GFGB6.js.map} +0 -0
  564. /package/dist/{chunk-AH3DGOTK.js.map → chunk-7SFSN6AX.js.map} +0 -0
  565. /package/dist/{chunk-6QK65ZWM.js.map → chunk-7TGUHFGO.js.map} +0 -0
  566. /package/dist/{chunk-QURYQFDN.js.map → chunk-7ZIWO65F.js.map} +0 -0
  567. /package/dist/{chunk-OYCK4JRS.js.map → chunk-AJHLEJTK.js.map} +0 -0
  568. /package/dist/{chunk-3PZ3LRPV.js.map → chunk-AN4U7EPH.js.map} +0 -0
  569. /package/dist/{chunk-77BHKC43.js.map → chunk-APG6CEG7.js.map} +0 -0
  570. /package/dist/{chunk-FSDQQQIA.js.map → chunk-APHLXQNP.js.map} +0 -0
  571. /package/dist/{chunk-SN2WENRP.js.map → chunk-AXHQ7QXV.js.map} +0 -0
  572. /package/dist/{chunk-54U6ZBEX.js.map → chunk-AYTLSPF6.js.map} +0 -0
  573. /package/dist/{chunk-R33SBMB7.js.map → chunk-BBSKKBMV.js.map} +0 -0
  574. /package/dist/{chunk-2GCHGWNE.js.map → chunk-BGH6TU2P.js.map} +0 -0
  575. /package/dist/{chunk-D3PTVN2I.js.map → chunk-BGIYL26H.js.map} +0 -0
  576. /package/dist/{chunk-BQYRZIZ7.js.map → chunk-BL7UQUC3.js.map} +0 -0
  577. /package/dist/{chunk-EBTUPRRQ.js.map → chunk-BOUHCYL6.js.map} +0 -0
  578. /package/dist/{chunk-MKDFYE2E.js.map → chunk-BVNGDFBC.js.map} +0 -0
  579. /package/dist/{chunk-ICAMYP5M.js.map → chunk-BWJK64CP.js.map} +0 -0
  580. /package/dist/{chunk-RHXYO4H2.js.map → chunk-BZ2GTCQV.js.map} +0 -0
  581. /package/dist/{chunk-GIWFLWXG.js.map → chunk-C2KASMJK.js.map} +0 -0
  582. /package/dist/{chunk-KO3OHHY2.js.map → chunk-CAZDRDQT.js.map} +0 -0
  583. /package/dist/{chunk-OK7BQMCI.js.map → chunk-CBJRZKZB.js.map} +0 -0
  584. /package/dist/{chunk-OYOFPNLC.js.map → chunk-CF6NYG7J.js.map} +0 -0
  585. /package/dist/{chunk-MT2R57SF.js.map → chunk-COITN7WN.js.map} +0 -0
  586. /package/dist/{chunk-OCXTTKVA.js.map → chunk-CPVOXM2Q.js.map} +0 -0
  587. /package/dist/{chunk-HYEIA25Y.js.map → chunk-CTZRCBKH.js.map} +0 -0
  588. /package/dist/{chunk-OCXEY7HE.js.map → chunk-CWL27YTB.js.map} +0 -0
  589. /package/dist/{chunk-K4DQS2ML.js.map → chunk-D2I33V5P.js.map} +0 -0
  590. /package/dist/{chunk-736RUNIA.js.map → chunk-DF7WI4JH.js.map} +0 -0
  591. /package/dist/{chunk-KUE5BOQE.js.map → chunk-DKZYCJCO.js.map} +0 -0
  592. /package/dist/{chunk-74CBR5YE.js.map → chunk-DQ32FKFQ.js.map} +0 -0
  593. /package/dist/{chunk-4O2XWOLZ.js.map → chunk-DTKG2YUF.js.map} +0 -0
  594. /package/dist/{chunk-GMHIOYB7.js.map → chunk-DUDA4V5R.js.map} +0 -0
  595. /package/dist/{chunk-XUOYNJPB.js.map → chunk-ECROT4M5.js.map} +0 -0
  596. /package/dist/{chunk-PVB4YVDP.js.map → chunk-EOXV5XGY.js.map} +0 -0
  597. /package/dist/{chunk-U6552Q3T.js.map → chunk-EQQOZ6DD.js.map} +0 -0
  598. /package/dist/{chunk-G6ICCGJ3.js.map → chunk-EY6W5H4B.js.map} +0 -0
  599. /package/dist/{chunk-HWVPLFIW.js.map → chunk-EYRFEWXJ.js.map} +0 -0
  600. /package/dist/{chunk-U4LTPFD2.js.map → chunk-FKK2PD7K.js.map} +0 -0
  601. /package/dist/{chunk-PUUEI4W3.js.map → chunk-FPHHIC5K.js.map} +0 -0
  602. /package/dist/{chunk-SP44O3OU.js.map → chunk-FQM6L22H.js.map} +0 -0
  603. /package/dist/{chunk-2J77TWGH.js.map → chunk-FW22IREV.js.map} +0 -0
  604. /package/dist/{chunk-EBIVTDEG.js.map → chunk-G4M6AYDB.js.map} +0 -0
  605. /package/dist/{chunk-BASI553K.js.map → chunk-G6AZ2WIU.js.map} +0 -0
  606. /package/dist/{chunk-SJYTQLN3.js.map → chunk-GJ5IDSAX.js.map} +0 -0
  607. /package/dist/{chunk-TDTD66BK.js.map → chunk-GRDSEZWZ.js.map} +0 -0
  608. /package/dist/{chunk-MV2CLIO6.js.map → chunk-HBVJIGY2.js.map} +0 -0
  609. /package/dist/{chunk-R4JA5JFI.js.map → chunk-HCWQLIOE.js.map} +0 -0
  610. /package/dist/{chunk-MZY3VKKM.js.map → chunk-HEVD4A5G.js.map} +0 -0
  611. /package/dist/{chunk-DLVIRJGK.js.map → chunk-HNDHSEVJ.js.map} +0 -0
  612. /package/dist/{chunk-LPKJ77EK.js.map → chunk-HNTZ7B7M.js.map} +0 -0
  613. /package/dist/{chunk-IN3VQFKS.js.map → chunk-I2FC7CAI.js.map} +0 -0
  614. /package/dist/{chunk-ZBHGNE2J.js.map → chunk-IEHZFYMH.js.map} +0 -0
  615. /package/dist/{chunk-DWJ6J3YW.js.map → chunk-IXISEVD7.js.map} +0 -0
  616. /package/dist/{chunk-TK5FWVZR.js.map → chunk-IZEDVQUD.js.map} +0 -0
  617. /package/dist/{chunk-HEGV4QMS.js.map → chunk-J42QE4VO.js.map} +0 -0
  618. /package/dist/{chunk-PRT4J2DL.js.map → chunk-J555XSUM.js.map} +0 -0
  619. /package/dist/{chunk-SBXSKRFA.js.map → chunk-JNMHFSDF.js.map} +0 -0
  620. /package/dist/{chunk-KI46GKMD.js.map → chunk-JTBAOPYO.js.map} +0 -0
  621. /package/dist/{chunk-SXGJL7UT.js.map → chunk-K376MPJH.js.map} +0 -0
  622. /package/dist/{chunk-OSJ366KR.js.map → chunk-KEBVT55V.js.map} +0 -0
  623. /package/dist/{chunk-U5UGM5XD.js.map → chunk-KFIZAXHI.js.map} +0 -0
  624. /package/dist/{chunk-KFNZZ2N6.js.map → chunk-KKGRDBMK.js.map} +0 -0
  625. /package/dist/{chunk-PLYVGZIN.js.map → chunk-KKIG6DN5.js.map} +0 -0
  626. /package/dist/{chunk-3OK7Y6ES.js.map → chunk-KKQO2GAA.js.map} +0 -0
  627. /package/dist/{chunk-DQPIEQGP.js.map → chunk-KO753ZCZ.js.map} +0 -0
  628. /package/dist/{chunk-YNTLWCF4.js.map → chunk-KYIRWU65.js.map} +0 -0
  629. /package/dist/{chunk-JKL5S7UQ.js.map → chunk-L6V63DVI.js.map} +0 -0
  630. /package/dist/{chunk-CV4VVLPZ.js.map → chunk-LCNJ2KNS.js.map} +0 -0
  631. /package/dist/{chunk-D74Z2N4K.js.map → chunk-LE7YKMTU.js.map} +0 -0
  632. /package/dist/{chunk-D5TIVCXG.js.map → chunk-LEBEOMVT.js.map} +0 -0
  633. /package/dist/{embedded-new-voice-GHJRY3YL.js.map → chunk-LKLQVANM.js.map} +0 -0
  634. /package/dist/{chunk-WXF2RTS4.js.map → chunk-M6URPYUB.js.map} +0 -0
  635. /package/dist/{chunk-H6BX6WOW.js.map → chunk-MDHFMRBC.js.map} +0 -0
  636. /package/dist/{chunk-3CDJSKDW.js.map → chunk-MGZO7CHI.js.map} +0 -0
  637. /package/dist/{chunk-DCEQCGVN.js.map → chunk-MIWU52TW.js.map} +0 -0
  638. /package/dist/{chunk-LVELUUK6.js.map → chunk-NF6QVVMP.js.map} +0 -0
  639. /package/dist/{chunk-UMX6DZME.js.map → chunk-NTZ5ZNVK.js.map} +0 -0
  640. /package/dist/{chunk-FBA2NXYH.js.map → chunk-NWLRABUR.js.map} +0 -0
  641. /package/dist/{chunk-TNSJFZ6Q.js.map → chunk-O2H2U7YS.js.map} +0 -0
  642. /package/dist/{chunk-BFFNINCC.js.map → chunk-OAL2PPX4.js.map} +0 -0
  643. /package/dist/{chunk-WTSQUCHB.js.map → chunk-OCYTHZ4A.js.map} +0 -0
  644. /package/dist/{chunk-ZAX4XQLN.js.map → chunk-OEDTCIXF.js.map} +0 -0
  645. /package/dist/{chunk-CHU3RDV4.js.map → chunk-OLVSYB3P.js.map} +0 -0
  646. /package/dist/{chunk-IFSXVU2S.js.map → chunk-OQHTFOCA.js.map} +0 -0
  647. /package/dist/{chunk-OXQ2SXVC.js.map → chunk-P56AVROH.js.map} +0 -0
  648. /package/dist/{chunk-CXAN2FHF.js.map → chunk-PCEJHHGP.js.map} +0 -0
  649. /package/dist/{chunk-5MIBQ4P5.js.map → chunk-PHGQGVVL.js.map} +0 -0
  650. /package/dist/{chunk-FLWQJDJ5.js.map → chunk-PUZRHEQI.js.map} +0 -0
  651. /package/dist/{chunk-OP2GD6QW.js.map → chunk-PV7U6OOJ.js.map} +0 -0
  652. /package/dist/{chunk-X2QJXDE4.js.map → chunk-PZQACDH5.js.map} +0 -0
  653. /package/dist/{chunk-CH4UQ4NO.js.map → chunk-PZTS4O6E.js.map} +0 -0
  654. /package/dist/{chunk-TKQL7EDB.js.map → chunk-Q42QHUAQ.js.map} +0 -0
  655. /package/dist/{chunk-MRECRNVU.js.map → chunk-QCYGB6TZ.js.map} +0 -0
  656. /package/dist/{chunk-GSCGKJNK.js.map → chunk-QECMETOF.js.map} +0 -0
  657. /package/dist/{chunk-RMCLFSMX.js.map → chunk-QGX3LE6H.js.map} +0 -0
  658. /package/dist/{chunk-HTMQGS63.js.map → chunk-QI3NDQFP.js.map} +0 -0
  659. /package/dist/{chunk-R5QAL43H.js.map → chunk-RA3Q52O2.js.map} +0 -0
  660. /package/dist/{chunk-AJDGP2N4.js.map → chunk-RJNOQEJJ.js.map} +0 -0
  661. /package/dist/{chunk-477DTTMH.js.map → chunk-RSFOFUR7.js.map} +0 -0
  662. /package/dist/{chunk-JV5ULONH.js.map → chunk-RXR6PMSH.js.map} +0 -0
  663. /package/dist/{chunk-J2BTILRR.js.map → chunk-SM7HFCGC.js.map} +0 -0
  664. /package/dist/{chunk-OBGOLHCP.js.map → chunk-T4HK4XCI.js.map} +0 -0
  665. /package/dist/{chunk-XVLEBB4Y.js.map → chunk-TBWL6YWL.js.map} +0 -0
  666. /package/dist/{chunk-AAS7OWV6.js.map → chunk-TIDXYWFX.js.map} +0 -0
  667. /package/dist/{chunk-N3FM4BNA.js.map → chunk-TKHRGY2P.js.map} +0 -0
  668. /package/dist/{chunk-GU7T2S5N.js.map → chunk-TU2GSZL7.js.map} +0 -0
  669. /package/dist/{chunk-OI6VI6SU.js.map → chunk-U6HGJXXQ.js.map} +0 -0
  670. /package/dist/{chunk-4BWMAGJJ.js.map → chunk-UGRW6RTR.js.map} +0 -0
  671. /package/dist/{chunk-AVXDIRRW.js.map → chunk-UMRUDYUK.js.map} +0 -0
  672. /package/dist/{chunk-FNXCFIPW.js.map → chunk-UOT2R5ZD.js.map} +0 -0
  673. /package/dist/{chunk-DIP7YALH.js.map → chunk-USURKJVT.js.map} +0 -0
  674. /package/dist/{chunk-S27VZ5DO.js.map → chunk-UU6Q67XM.js.map} +0 -0
  675. /package/dist/{chunk-LTJFV2JI.js.map → chunk-UZ7NP5CW.js.map} +0 -0
  676. /package/dist/{chunk-H6MJFMHZ.js.map → chunk-V4FO7UOE.js.map} +0 -0
  677. /package/dist/{chunk-RGR57NYY.js.map → chunk-V4ZOZRCW.js.map} +0 -0
  678. /package/dist/{chunk-LQKVNREV.js.map → chunk-V57YMKQZ.js.map} +0 -0
  679. /package/dist/{chunk-XZCCEKPW.js.map → chunk-VOIWZBY6.js.map} +0 -0
  680. /package/dist/{chunk-E5KOWRDU.js.map → chunk-VPHPLPDA.js.map} +0 -0
  681. /package/dist/{chunk-OGU73VUN.js.map → chunk-VUL4KPUU.js.map} +0 -0
  682. /package/dist/{chunk-SFIXTOOJ.js.map → chunk-VWF6ILAR.js.map} +0 -0
  683. /package/dist/{chunk-FER6EVIY.js.map → chunk-W54BHJO7.js.map} +0 -0
  684. /package/dist/{chunk-34NV52R3.js.map → chunk-WCYE4BLC.js.map} +0 -0
  685. /package/dist/{chunk-RISUROBM.js.map → chunk-WTV25ELY.js.map} +0 -0
  686. /package/dist/{chunk-UO35OEOX.js.map → chunk-WZYGH7CN.js.map} +0 -0
  687. /package/dist/{chunk-CEMSIU4Z.js.map → chunk-XG2RWUF7.js.map} +0 -0
  688. /package/dist/{chunk-K3D7IQQP.js.map → chunk-XV7QOT7W.js.map} +0 -0
  689. /package/dist/{chunk-GOCODNQS.js.map → chunk-XWECT3GX.js.map} +0 -0
  690. /package/dist/{chunk-5MHMCE2G.js.map → chunk-XZQK2ZLW.js.map} +0 -0
  691. /package/dist/{chunk-JV3UI7BH.js.map → chunk-Y5BR66OH.js.map} +0 -0
  692. /package/dist/{chunk-4F3AEJI6.js.map → chunk-YD6XU6FY.js.map} +0 -0
  693. /package/dist/{chunk-VATYK3JQ.js.map → chunk-YFE47G3C.js.map} +0 -0
  694. /package/dist/{chunk-ZR5EKJT6.js.map → chunk-YG6TWPP7.js.map} +0 -0
  695. /package/dist/{chunk-44JWVYJB.js.map → chunk-YH3ARKBB.js.map} +0 -0
  696. /package/dist/{chunk-752WXSDN.js.map → chunk-YI66STKJ.js.map} +0 -0
  697. /package/dist/{chunk-QRECBCJM.js.map → chunk-YMVPYMKB.js.map} +0 -0
  698. /package/dist/{chunk-77SYIH6O.js.map → chunk-YPIXBAF6.js.map} +0 -0
  699. /package/dist/{chunk-WRMUXZ7C.js.map → chunk-YSWPNY6G.js.map} +0 -0
  700. /package/dist/{chunk-GTHCHCWW.js.map → chunk-YWNNMBZG.js.map} +0 -0
  701. /package/dist/{chunk-3DRLCX5V.js.map → chunk-Z3HYM2JT.js.map} +0 -0
  702. /package/dist/{chunk-M3HGBO2Y.js.map → chunk-ZAC7YPRA.js.map} +0 -0
  703. /package/dist/{chunk-2VJOSU4H.js.map → chunk-ZENESDAF.js.map} +0 -0
  704. /package/dist/{chunk-4JXPLTWV.js.map → chunk-ZHAPMETO.js.map} +0 -0
  705. /package/dist/{chunk-IJR6VOLU.js.map → chunk-ZVR6DUZH.js.map} +0 -0
  706. /package/dist/{embedded-voice-ASQXBSTX.js.map → computer-viewer-FOIOZUF5.js.map} +0 -0
  707. /package/dist/{model-policy-picker-menu-E6XKMFTA.js.map → embedded-new-voice-WTXAJNGO.js.map} +0 -0
  708. /package/dist/{sandbox-files-W5W2LW4K.js.map → embedded-voice-SIJOPN2G.js.map} +0 -0
  709. /package/dist/{fleet-decision-row-U7LDVBEM.js.map → fleet-decision-row-XKQ3GMYT.js.map} +0 -0
  710. /package/dist/{latest-question-RNVF262Q.js.map → latest-question-KA7AQYVI.js.map} +0 -0
  711. /package/dist/{session-connect-cards-HPH7JOZP.js.map → model-policy-picker-menu-6N2G7VGX.js.map} +0 -0
  712. /package/dist/{payment-page-card-DJDKV2LW.js.map → payment-page-card-IJFZHQ52.js.map} +0 -0
  713. /package/dist/{platform-activity-row-MSDCSMET.js.map → platform-activity-row-MFCMGI43.js.map} +0 -0
  714. /package/dist/{queue-surface-implementation-GUAIG6TK.js.map → queue-surface-implementation-BBCDWWOP.js.map} +0 -0
  715. /package/dist/{recorder-host-2MYDJPQW.js.map → recorder-host-LDYYOKG7.js.map} +0 -0
  716. /package/dist/{session-realtime-SDTKFFIR.js.map → sandbox-files-VYRBIXJY.js.map} +0 -0
  717. /package/dist/{timeline-annotation-markers-FNILLWNU.js.map → timeline-annotation-markers-LL6ZVBZH.js.map} +0 -0
  718. /package/dist/{timeline-annotation-selection-MBCIDO2Q.js.map → timeline-annotation-selection-WQA76WYC.js.map} +0 -0
  719. /package/dist/{timeline-annotations-dialog-JPNKLOTE.js.map → timeline-annotations-dialog-HHETAEZA.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  CopyField
4
- } from "./chunk-DIP7YALH.js";
4
+ } from "./chunk-USURKJVT.js";
5
5
  import {
6
6
  Dialog,
7
7
  DialogContent,
@@ -21,7 +21,7 @@ import {
21
21
  } from "./chunk-HJO32O7Z.js";
22
22
  import {
23
23
  RelativeTime
24
- } from "./chunk-MKDFYE2E.js";
24
+ } from "./chunk-BVNGDFBC.js";
25
25
  import {
26
26
  Button
27
27
  } from "./chunk-7QQN3KNP.js";
@@ -188,4 +188,4 @@ function ShareChatDialog({
188
188
  export {
189
189
  ShareChatDialog
190
190
  };
191
- //# sourceMappingURL=chunk-YNTLWCF4.js.map
191
+ //# sourceMappingURL=chunk-KYIRWU65.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  ConnectionLogo
4
- } from "./chunk-R4JA5JFI.js";
4
+ } from "./chunk-HCWQLIOE.js";
5
5
  import {
6
6
  ConnectSetup,
7
7
  accountServiceCapability,
@@ -9,14 +9,14 @@ import {
9
9
  connectionServicePresentation,
10
10
  gmail_default,
11
11
  isServiceConnectProvider
12
- } from "./chunk-YJSCLGAW.js";
12
+ } from "./chunk-6EZYHJTL.js";
13
13
  import {
14
14
  McpConnectionCard
15
- } from "./chunk-34NV52R3.js";
15
+ } from "./chunk-WCYE4BLC.js";
16
16
  import {
17
17
  mcpConnectionDiscoveryState,
18
18
  useConnect
19
- } from "./chunk-HYEIA25Y.js";
19
+ } from "./chunk-CTZRCBKH.js";
20
20
  import {
21
21
  useNobodyToShareWith
22
22
  } from "./chunk-RNC6B4BN.js";
@@ -25,7 +25,7 @@ import {
25
25
  } from "./chunk-PEHTX3V7.js";
26
26
  import {
27
27
  useOpenGeniText
28
- } from "./chunk-QPQ7R77C.js";
28
+ } from "./chunk-7SU4YVZ5.js";
29
29
 
30
30
  // src/capability-catalog-row.tsx
31
31
  import { AlertTriangleIcon, CheckIcon, Loader2Icon, PlusIcon } from "lucide-react";
@@ -1785,4 +1785,4 @@ export {
1785
1785
  ConnectionTypePicker,
1786
1786
  PluginDiscovery
1787
1787
  };
1788
- //# sourceMappingURL=chunk-JKL5S7UQ.js.map
1788
+ //# sourceMappingURL=chunk-L6V63DVI.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  formatElapsed
4
- } from "./chunk-ZW5YTIH3.js";
4
+ } from "./chunk-5PB46DAA.js";
5
5
  import {
6
6
  timelineGroupContainsPresentedImage
7
7
  } from "./chunk-EWZ2RLNG.js";
@@ -91,7 +91,7 @@ function isPreparingWork(group, options) {
91
91
  if (!group.work) return false;
92
92
  if (group.work.steps && group.work.steps.state !== "complete") return false;
93
93
  const phases = group.items.filter((item) => item.kind === "startup-phase");
94
- return !options.startupDetails && !options.startupDismissed && !group.work.endedAt && !group.work.waiting && phases.length > 0 && group.items.every(
94
+ return !options.startupDetails && !options.startupDismissed && !group.work.endedAt && !group.work.waiting && !group.work.pausedAt && phases.length > 0 && group.items.every(
95
95
  (item) => item.kind === "startup-phase" || item.kind === "reasoning" && !item.text.trim()
96
96
  ) && !phases.some((item) => item.status === "failed" || item.status === "cancelled");
97
97
  }
@@ -120,8 +120,15 @@ function readableWorkStatus(t, group) {
120
120
  durationMs: durationMs === void 0 ? void 0 : Math.max(0, durationMs - pausedMs)
121
121
  };
122
122
  }
123
+ if (group.work.pausedAt) {
124
+ const durationMs = durationBetween(group.work.startedAt, group.work.pausedAt);
125
+ return {
126
+ kind: "paused",
127
+ durationMs: durationMs === void 0 ? void 0 : Math.max(0, durationMs - pausedMs)
128
+ };
129
+ }
123
130
  if (group.work.waiting) {
124
- const { untimed, since, ...waiting } = group.work.waiting;
131
+ const { untimed, since, waitingOn: _waitingOn, ...waiting } = group.work.waiting;
125
132
  return { kind: "waiting", ...waiting, ...untimed ? {} : { since } };
126
133
  }
127
134
  const started = Date.parse(group.work.startedAt);
@@ -256,4 +263,4 @@ export {
256
263
  noticeTone,
257
264
  recordedWaitSummaryText
258
265
  };
259
- //# sourceMappingURL=chunk-M5IQVMLR.js.map
266
+ //# sourceMappingURL=chunk-LAZ2QZTJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/timeline/question-nav-model.ts","../src/timeline/focus-sequence.ts","../src/timeline/work-presentation.ts","../src/timeline/notice-presentation.ts"],"sourcesContent":["/**\n * \"Back to your message\": which prompt the reader is reading the answer to, and\n * whether that prompt has scrolled out of view. Renderer-neutral geometry so\n * the web timeline (DOM rects) and native timelines (layout offsets) agree.\n */\n\n/** How far above the viewport a prompt must be before the pill appears. */\nexport const QUESTION_NAV_HIDDEN_PX = 24;\n/** Breathing room above the question when the reader jumps back to it. */\nexport const QUESTION_NAV_MARGIN_PX = 12;\n\nexport type QuestionNavPrompt = { key: string; top: number; bottom: number };\n\n/**\n * The last prompt before the reading position (the viewport's middle) owns the\n * response in view; it is a target only once it has scrolled fully above the\n * viewport. Prompts are in document order; coordinates share one axis.\n */\nexport function questionNavTarget(\n prompts: readonly QuestionNavPrompt[],\n view: { top: number; height: number },\n): string | null {\n const middle = view.top + view.height / 2;\n const prompt = [...prompts].reverse().find((candidate) => candidate.top <= middle);\n if (!prompt) return null;\n if (prompt.top >= view.top - QUESTION_NAV_HIDDEN_PX || prompt.bottom > view.top) return null;\n return prompt.key;\n}\n","import type { TimelineGroup, TimelineItem } from \"./types\";\n\n/*\n * Landing on a moment in a session: an inbox item or a phone notification\n * points at the durable event that raised it, and the timeline opens on the\n * row that holds that moment. Events that render no row of their own (an\n * agent's notification, a goal change) land on the nearest row before them.\n */\n\nfunction itemSequences(item: TimelineItem): number[] {\n const sources =\n item.sourceEvents ??\n (\"annotationSource\" in item && item.annotationSource ? [item.annotationSource] : []);\n return sources.map((source) => source.sequence);\n}\n\n/** Every durable event sequence a group renders, nested work included. */\nexport function timelineGroupSequences(group: TimelineGroup): number[] {\n if (group.kind === \"item\") return itemSequences(group.item);\n if (group.kind === \"turn\") return group.groups.flatMap(timelineGroupSequences);\n return [\n ...group.items.flatMap((item) => itemSequences(item)),\n ...(group.work?.details.flatMap(timelineGroupSequences) ?? []),\n ];\n}\n\n/**\n * The index of the group to land on for `sequence`: the group that holds it,\n * else the last group that starts before it. -1 when every loaded group is\n * later (the moment is in older history) or nothing is loaded.\n */\nexport function timelineGroupIndexAtSequence(\n groups: readonly TimelineGroup[],\n sequence: number,\n): number {\n let landing = -1;\n for (let index = 0; index < groups.length; index += 1) {\n const sequences = timelineGroupSequences(groups[index]!);\n if (sequences.length === 0) continue;\n if (sequences.includes(sequence)) return index;\n if (Math.min(...sequences) <= sequence) landing = index;\n }\n return landing;\n}\n","// Pure presentation decisions for a timeline turn's work, shared by the web and native\n// timelines. Every function here is extracted verbatim from the web MessageTimeline so both\n// renderers decide identically what a turn shows (preparing, working, waiting, worked).\nimport { timelineGroupContainsPresentedImage } from \"./presented-image\";\nimport type { TurnSummaryStatus } from \"./turn-summary-model\";\nimport type { ActivityItem, TimelineGroup, TimelineItem } from \"./types\";\nimport { type OpenGeniText } from \"../messages/runtime\";\n\nexport type ActivityGroup = Extract<TimelineGroup, { kind: \"activity\" }>;\nexport type TurnGroup = Extract<TimelineGroup, { kind: \"turn\" }>;\n\n/** Once useful output exists, startup decoration must not compete with it. */\nexport function timelineTurnsWithOutput(items: readonly TimelineItem[]): Set<string> {\n return new Set(\n items.flatMap((item) =>\n \"turnId\" in item &&\n item.turnId &&\n (item.kind === \"tool-call\" ||\n ((item.kind === \"agent-message\" || item.kind === \"reasoning\") && item.text.trim()))\n ? [item.turnId]\n : [],\n ),\n );\n}\n\nexport function durationBetween(startedAt: string, endedAt: string): number | undefined {\n const started = Date.parse(startedAt);\n const ended = Date.parse(endedAt);\n if (!Number.isFinite(started) || !Number.isFinite(ended) || ended < started) {\n return undefined;\n }\n return ended - started;\n}\n\n/**\n * Compaction landmarks among a fold's groups (secondary summary facet). The\n * one-time rebuild for a new model has its own note and is not counted.\n */\nexport function compactedLandmarkCount(groups: readonly TimelineGroup[]): number {\n return groups.filter(\n (group) =>\n group.kind === \"item\" &&\n group.item.kind === \"context-compaction\" &&\n group.item.phase === \"compacted\" &&\n group.item.implementation !== \"portable_model_switch\",\n ).length;\n}\n\nexport function clusterIsSettled(group: ActivityGroup): boolean {\n return group.items.every((item) => {\n if (item.kind === \"reasoning\" || item.kind === \"agent-message\") {\n return !item.streaming;\n }\n // Memory writes and fleet observations are discrete, already-settled events.\n if (item.kind === \"memory\" || item.kind === \"fleet-decision\") {\n return true;\n }\n return item.status !== \"running\";\n });\n}\n\nexport function flattenActivityItems(groups: readonly TimelineGroup[]): ActivityItem[] {\n const items: ActivityItem[] = [];\n for (const group of groups) {\n if (group.kind === \"activity\") {\n items.push(...flattenActivityItems(group.work?.details ?? []), ...group.items);\n } else if (group.kind === \"turn\") {\n items.push(...flattenActivityItems(group.groups));\n }\n }\n return items;\n}\n\nexport type ReadableWorkOptions = {\n /** Host shows startup phases as ordinary details (web: startup-details context). */\n startupDetails: boolean;\n /** Startup chrome was dismissed by the reader. */\n startupDismissed: boolean;\n};\n\n/**\n * A readable turn whose only work so far is environment preparation renders as one quiet\n * preparation surface instead of a \"Working\" fold.\n */\nexport function isPreparingWork(group: ActivityGroup, options: ReadableWorkOptions): boolean {\n if (!group.work) return false;\n // Steps not loaded yet are work the reader can open, not preparation.\n if (group.work.steps && group.work.steps.state !== \"complete\") return false;\n const phases = group.items.filter((item) => item.kind === \"startup-phase\");\n return (\n !options.startupDetails &&\n !options.startupDismissed &&\n !group.work.endedAt &&\n !group.work.waiting &&\n !group.work.pausedAt &&\n phases.length > 0 &&\n group.items.every(\n (item) => item.kind === \"startup-phase\" || (item.kind === \"reasoning\" && !item.text.trim()),\n ) &&\n !phases.some((item) => item.status === \"failed\" || item.status === \"cancelled\")\n );\n}\n\n/**\n * Whether a readable turn's work row has anything to reveal when expanded.\n * Unless the host shows startup phases as details, the work row's rail only\n * renders failed or cancelled preparation steps, so a detail made only of\n * completed or still-running steps (for example the queue phase before a turn\n * was parked on a usage limit) renders nothing and does not make the row\n * expandable.\n */\nexport function readableWorkHasDetails(\n group: ActivityGroup & { work: NonNullable<ActivityGroup[\"work\"]> },\n options: Pick<ReadableWorkOptions, \"startupDetails\">,\n): boolean {\n // Steps not loaded yet are revealed (and loaded) by opening the row.\n if (group.work.steps && group.work.steps.state !== \"complete\") return true;\n return group.work.details.some(\n (detail) =>\n options.startupDetails ||\n detail.kind !== \"activity\" ||\n Boolean(detail.work) ||\n !detail.items.every(\n (item) =>\n (item.kind === \"startup-phase\" &&\n item.status !== \"failed\" &&\n item.status !== \"cancelled\") ||\n (item.kind === \"reasoning\" && !item.text.trim()),\n ),\n );\n}\n\n/**\n * Status of a readable turn's work row, minus the host-rendered live preview.\n * Time spent waiting for model capacity, or between a failed attempt and its\n * Retry, or paused, is not work: the worked duration and the live working\n * clock exclude it, and a capacity wait itself shows no clock. A turn parked\n * by a pause still in force reads as paused, its clock stopped where the\n * pause began. A wait's `detail` is its one quiet secondary line.\n */\nexport function readableWorkStatus(\n t: OpenGeniText,\n group: ActivityGroup & { work: NonNullable<ActivityGroup[\"work\"]> },\n): Omit<TurnSummaryStatus, \"preview\"> & { detail?: string | undefined } {\n const end = group.work.endedAt;\n const pausedMs = group.work.pausedMs ?? 0;\n if (end) {\n const durationMs = durationBetween(group.work.startedAt, end);\n const cycles = group.work.cycles;\n // Folded quiet cycles report their wall-clock span: waits are the point.\n if (cycles)\n return {\n kind: \"worked\",\n label: t(\"timeline.workPresentation.countUpdatesOver\", { count: cycles.count }),\n durationMs,\n };\n return {\n kind: \"worked\",\n durationMs: durationMs === undefined ? undefined : Math.max(0, durationMs - pausedMs),\n };\n }\n if (group.work.pausedAt) {\n const durationMs = durationBetween(group.work.startedAt, group.work.pausedAt);\n return {\n kind: \"paused\",\n durationMs: durationMs === undefined ? undefined : Math.max(0, durationMs - pausedMs),\n };\n }\n if (group.work.waiting) {\n const { untimed, since, waitingOn: _waitingOn, ...waiting } = group.work.waiting;\n return { kind: \"waiting\", ...waiting, ...(untimed ? {} : { since }) };\n }\n const started = Date.parse(group.work.startedAt);\n return {\n kind: \"working\",\n since:\n pausedMs > 0 && Number.isFinite(started)\n ? new Date(started + pausedMs).toISOString()\n : group.work.startedAt,\n };\n}\n\n/** Whether a readable turn's work fold starts expanded. */\nexport function readableWorkDefaultOpen(group: ActivityGroup): true | undefined {\n return timelineGroupContainsPresentedImage(group) ||\n group.outcome === \"failed\" ||\n group.items.some(\n (item) =>\n item.kind === \"startup-phase\" &&\n (item.status === \"failed\" ||\n // A cancelled phase with a blocked reason is an expected wait (for\n // example compacting the conversation first), not an interruption.\n (item.status === \"cancelled\" && !item.blockedReason)),\n )\n ? true\n : undefined;\n}\n\n/** Whether the live preview should show (images stay primary output instead). */\nexport function readableWorkShowsPreview(group: ActivityGroup): boolean {\n return !timelineGroupContainsPresentedImage(group);\n}\n\n/**\n * The step a rolling preview shows: steps advance with event order (progress notes and\n * startup phases have their own surfaces). Mirrors the web RollingActivity selection.\n */\nexport function rollingActivityItem(\n items: readonly ActivityItem[],\n previousItem?: ActivityItem,\n mounted = true,\n): { item: ActivityItem; running: boolean; earlierCount: number } | null {\n const work = items.filter(\n (item) => item.kind !== \"startup-phase\" && item.kind !== \"agent-message\",\n );\n const active = work.filter((item) =>\n item.kind === \"reasoning\" ? item.streaming : \"status\" in item && item.status === \"running\",\n );\n const item =\n !mounted && previousItem && previousItem.kind !== \"agent-message\" ? previousItem : work.at(-1);\n if (!item) return null;\n return {\n item,\n running: active.some((entry) => entry.id === item.id),\n earlierCount: Math.max(\n 0,\n work.findIndex((entry) => entry.id === item.id),\n ),\n };\n}\n","import { formatClockTime } from \"../lib/format\";\nimport { formatElapsed } from \"./turn-summary-model\";\nimport type { NoticeItem } from \"./types\";\nimport { durationBetween } from \"./work-presentation\";\nimport { type OpenGeniText } from \"../messages/runtime\";\n\n/** An approval notice the person has since answered. */\nexport function noticeIsResolvedApproval(\n item: Pick<NoticeItem, \"approval\" | \"resolvedAt\">,\n): boolean {\n return Boolean(item.resolvedAt && item.approval);\n}\n\n/**\n * What an approval asked, as history: its question without the question mark\n * or anything after it (\"Remove the Gmail connection for anna@example.com?\n * …\" → \"Remove the Gmail connection for anna@example.com\"). A quoted name\n * (“…”) keeps its own punctuation.\n */\nexport function approvalHistoryTitle(title: string): string {\n // A question cut short lost its own \"?\": an earlier one is a name's.\n if (title.trimEnd().endsWith(\"…\")) return title.trim();\n let quoted = 0;\n let end = -1;\n for (let index = 0; index < title.length; index += 1) {\n const char = title[index];\n if (char === \"“\") quoted += 1;\n else if (char === \"”\") quoted = Math.max(0, quoted - 1);\n // The question ends at the last \"?\" that ends the title or starts\n // another sentence, so a \"?\" inside a name doesn't cut it short.\n else if (char === \"?\" && quoted === 0 && /^(\\s+\\p{Lu}|\\s*$)/u.test(title.slice(index + 1)))\n end = index;\n }\n return (end < 0 ? title : title.slice(0, end)).trim();\n}\n\ntype ApprovalAction = NonNullable<NoticeItem[\"approvalActions\"]>[number];\n\n/**\n * \"Added: 2 Oct 2026, 10:12 UTC\": the first of this action's facts whose\n * value differs from every other alike action's, or undefined when none do.\n */\nfunction tellingFact(action: ApprovalAction, alike: ApprovalAction[]): string | undefined {\n const valueOf = (other: ApprovalAction, label: string) =>\n other.facts?.find((fact) => fact.label === label)?.value;\n const fact = action.facts?.find((candidate) =>\n alike.every((other) => other === action || valueOf(other, candidate.label) !== candidate.value),\n );\n return fact ? `${fact.label}: ${fact.value}` : undefined;\n}\n\n/**\n * A resolved approval notice reads as history, saying what the person\n * decided for each action whose answer is known, one line each: \"You\n * approved “Remove the Gmail connection for anna@example.com”.\" Actions it\n * asked about but never got an answer for here (a later wait asked again)\n * are left out. Two that would read the same get the first fact that tells\n * them apart: \"(Added: 2 Oct 2026, 10:12 UTC)\".\n */\nexport function noticeDisplayText(\n t: OpenGeniText,\n item: Pick<NoticeItem, \"text\" | \"approval\" | \"resolvedAt\" | \"approvalActions\">,\n): string {\n if (!noticeIsResolvedApproval(item)) return item.text;\n const actions = item.approvalActions ?? [];\n const decided = actions.filter((action) => action.decision !== undefined);\n // Without any answer (an older replay), say only that it was answered.\n if (decided.length === 0) return t(\"timeline.noticePresentation.youRespondedToThisApproval\");\n // Each answered action, by what it asked.\n if (decided.every((action) => action.title)) {\n const titled = decided.map((action) => ({\n action,\n title: approvalHistoryTitle(action.title!),\n }));\n return titled\n .map(({ action, title }) => {\n const alike = titled.filter((other) => other.title === title).map((other) => other.action);\n const detail = alike.length > 1 ? tellingFact(action, alike) : undefined;\n if (detail)\n return action.decision === \"approve\"\n ? t(\"timeline.noticePresentation.youApprovedTitleWithDetail\", { title, detail })\n : action.decision === \"reject\"\n ? t(\"timeline.noticePresentation.youRejectedTitleWithDetail\", { title, detail })\n : t(\"timeline.noticePresentation.declinedAutomaticallyTitleWithDetail\", {\n title,\n detail,\n });\n return action.decision === \"approve\"\n ? t(\"timeline.noticePresentation.youApprovedTitle\", { title })\n : action.decision === \"reject\"\n ? t(\"timeline.noticePresentation.youRejectedTitle\", { title })\n : t(\"timeline.noticePresentation.declinedAutomaticallyTitle\", { title });\n })\n .join(\"\\n\");\n }\n // Declined by Opengeni rather than the person: never say \"You\".\n const automatic = decided.filter((action) => action.decision === \"automatic_reject\").length;\n if (automatic === decided.length) return t(\"timeline.noticePresentation.declinedAutomatically\");\n if (automatic > 0) return t(\"timeline.noticePresentation.youRespondedToThisApproval\");\n const approved = decided.filter((action) => action.decision === \"approve\").length;\n const rejected = decided.length - approved;\n if (decided.length === 1)\n return approved === 1\n ? t(\"timeline.noticePresentation.youApprovedThis\")\n : t(\"timeline.noticePresentation.youRejectedThis\");\n if (rejected === 0)\n return t(\"timeline.noticePresentation.youApprovedActions\", { count: approved });\n if (approved === 0)\n return t(\"timeline.noticePresentation.youRejectedActions\", { count: rejected });\n return t(\"timeline.noticePresentation.youApprovedAndRejected\", { approved, rejected });\n}\n\n/** Notice pill tone: failures stay red, an open wait keeps the waiting hue. */\nexport function noticeTone(\n item: Pick<NoticeItem, \"tone\" | \"resolvedAt\">,\n): \"failed\" | \"waiting\" | \"neutral\" {\n return item.tone === \"failed\"\n ? \"failed\"\n : item.tone === \"waiting\" && !item.resolvedAt\n ? \"waiting\"\n : \"neutral\";\n}\n\n/**\n * Plain-text summary of a recorded agent wait, as web's quiet disclosure reads\n * it: \"Waited for 2 agents · 3m 5s\" once later input ended the wait, otherwise\n * \"Waiting · since 10:32\" (with the date on a later day).\n */\nexport function recordedWaitSummaryText(\n t: OpenGeniText,\n item: Pick<NoticeItem, \"occurredAt\" | \"waitingAgents\" | \"waitEndedAt\">,\n now: Date = new Date(),\n): string {\n const agents = item.waitingAgents ?? 0;\n const waitedMs = item.waitEndedAt\n ? durationBetween(item.occurredAt, item.waitEndedAt)\n : undefined;\n if (waitedMs !== undefined) {\n const elapsed = formatElapsed(t, waitedMs);\n return agents > 0\n ? t(\"timeline.noticePresentation.waitedForAgentsElapsed\", { count: agents, elapsed })\n : t(\"timeline.noticePresentation.waitedElapsed\", { elapsed });\n }\n const started = new Date(item.occurredAt);\n const since =\n started.toDateString() === now.toDateString()\n ? formatClockTime(t, item.occurredAt)\n : started.toLocaleString(t.locale, { dateStyle: \"medium\", timeStyle: \"short\" });\n if (item.waitEndedAt)\n return agents > 0\n ? t(\"timeline.noticePresentation.waitedForAgentsSince\", { count: agents, since })\n : t(\"timeline.noticePresentation.waitedSince\", { since });\n return agents > 0\n ? t(\"timeline.noticePresentation.waitingForAgentsSince\", { count: agents, since })\n : t(\"timeline.noticePresentation.waitingSince\", { since });\n}\n"],"mappings":"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","names":["item","fact"]}
@@ -3,7 +3,7 @@ import {
3
3
  SessionAvatar,
4
4
  sessionAvatarFallbackHue,
5
5
  sessionAvatarInitials
6
- } from "./chunk-UO35OEOX.js";
6
+ } from "./chunk-WZYGH7CN.js";
7
7
  import {
8
8
  Link
9
9
  } from "./chunk-BXBDYNRP.js";
@@ -81,4 +81,4 @@ function BotTemplateShortcuts({
81
81
  export {
82
82
  BotTemplateShortcuts
83
83
  };
84
- //# sourceMappingURL=chunk-CV4VVLPZ.js.map
84
+ //# sourceMappingURL=chunk-LCNJ2KNS.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  useDesktopThisComputer
4
- } from "./chunk-DWJ6J3YW.js";
4
+ } from "./chunk-IXISEVD7.js";
5
5
  import {
6
6
  lastSessionMemoryId,
7
7
  readLastSessionId
@@ -233,4 +233,4 @@ export {
233
233
  appShotFileName,
234
234
  AppShotCoordinator
235
235
  };
236
- //# sourceMappingURL=chunk-D74Z2N4K.js.map
236
+ //# sourceMappingURL=chunk-LE7YKMTU.js.map
@@ -3,7 +3,7 @@ import {
3
3
  resolveRenameSubmission,
4
4
  sessionDisplayTitle,
5
5
  sessionRenameSeed
6
- } from "./chunk-D3PTVN2I.js";
6
+ } from "./chunk-BGIYL26H.js";
7
7
 
8
8
  // src/app/lib/session-rename.tsx
9
9
  import { useCallback, useEffect, useRef, useState } from "react";
@@ -70,4 +70,4 @@ export {
70
70
  performRename,
71
71
  useInlineRename
72
72
  };
73
- //# sourceMappingURL=chunk-D5TIVCXG.js.map
73
+ //# sourceMappingURL=chunk-LEBEOMVT.js.map
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ //# sourceMappingURL=chunk-LKLQVANM.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  mergeSessionForRail
4
- } from "./chunk-7Z76QP64.js";
4
+ } from "./chunk-2PY5XD3F.js";
5
5
 
6
6
  // src/app/lib/session-branch-cache.tsx
7
7
  function sessionBranchSummaryKey(session, readRevision = 0) {
@@ -17,6 +17,7 @@ function sessionBranchSummaryKey(session, readRevision = 0) {
17
17
  stats.queuedDescendants,
18
18
  stats.attentionDescendants,
19
19
  stats.pausedDescendants,
20
+ stats.pausedWorkDescendants ?? 0,
20
21
  stats.failedDescendants,
21
22
  stats.unreadFailedDescendants ?? stats.failedDescendants,
22
23
  stats.unreadDescendants ?? 0,
@@ -183,4 +184,4 @@ export {
183
184
  sessionBranchNeedsHydration,
184
185
  sessionBranchSummaryDecision
185
186
  };
186
- //# sourceMappingURL=chunk-2OXSB2OL.js.map
187
+ //# sourceMappingURL=chunk-LKWVBUH6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/lib/session-branch-cache.tsx"],"sourcesContent":["import type { Session as SessionDetails } from \"../types\";\nimport type { RailSession as Session } from \"./session-list-entry\";\n\nimport { mergeSessionForRail } from \"./sessions-group\";\n\nexport type SessionBranchPage<T extends Session = SessionDetails> = {\n sessions: T[];\n /** Per-row causal generations for rows returned by accepted branch reads. */\n channelGenerations: ReadonlyMap<string, number>;\n nextCursor: string | null;\n loading: boolean;\n /** Whether this load cycle may paint loading or retry feedback in the tree. */\n feedbackVisible: boolean;\n failed: boolean;\n stale: boolean;\n requestId: number | null;\n retryCursor: string | null;\n};\n\nexport type SessionBranchSummaryDecision = {\n acknowledge: boolean;\n refresh: boolean;\n markStale: boolean;\n};\n\n/**\n * Stable summary of the server-owned descendant facts that make an already\n * loaded branch stale. Child creation changes direct/total counts; lifecycle\n * changes advance the status aggregates. Title/content stays owned by the\n * child page or active route projection.\n */\nexport function sessionBranchSummaryKey(session: Session, readRevision = 0): string {\n const stats = session.treeStats;\n if (!stats) return `${session.id}:${session.updatedAt}:unknown:${readRevision}`;\n return [\n readRevision,\n session.id,\n session.updatedAt,\n stats.directChildren,\n stats.totalDescendants,\n stats.runningDescendants,\n stats.queuedDescendants,\n stats.attentionDescendants,\n stats.pausedDescendants,\n stats.pausedWorkDescendants ?? 0,\n stats.failedDescendants,\n stats.unreadFailedDescendants ?? stats.failedDescendants,\n stats.unreadDescendants ?? 0,\n stats.activelyWorkingDescendants ?? 0,\n stats.attentionSince ?? \"\",\n stats.truncated ? 1 : 0,\n ].join(\":\");\n}\n\n/**\n * Persist a route/lineage child in its already-loaded parent branch. The route\n * owns current lifecycle/content while the cached row retains rail ordering\n * timestamps and may own treeStats.\n */\nexport function upsertSessionBranchChild(\n pages: ReadonlyMap<string, SessionBranchPage<SessionDetails>>,\n child: SessionDetails,\n): ReadonlyMap<string, SessionBranchPage<SessionDetails>>;\nexport function upsertSessionBranchChild<T extends Session = SessionDetails>(\n pages: ReadonlyMap<string, SessionBranchPage<T>>,\n child: T,\n): ReadonlyMap<string, SessionBranchPage<T>>;\nexport function upsertSessionBranchChild<T extends Session = SessionDetails>(\n pages: ReadonlyMap<string, SessionBranchPage<T>>,\n child: T,\n): ReadonlyMap<string, SessionBranchPage<T>> {\n const parentSessionId = child.parentSessionId;\n if (!parentSessionId) return pages;\n const page = pages.get(parentSessionId);\n const sessions = page?.sessions ?? [];\n const index = sessions.findIndex((session) => session.id === child.id);\n const nextSessions = [...sessions];\n if (index === -1) {\n nextSessions.push(child);\n } else {\n const cached = sessions[index]!;\n const merged = {\n ...mergeSessionForRail(cached, child),\n // Route/detail timestamps can be millisecond-truncated or ahead of the\n // list activity clock. Only a branch-page commit replaces rail ordering.\n createdAt: cached.createdAt,\n updatedAt: cached.updatedAt,\n };\n nextSessions[index] = page?.channelGenerations.has(child.id)\n ? { ...merged, channelId: cached.channelId ?? null }\n : merged;\n }\n return new Map(pages).set(parentSessionId, {\n sessions: nextSessions,\n channelGenerations: page?.channelGenerations ?? new Map(),\n nextCursor: page?.nextCursor ?? null,\n loading: page?.loading ?? false,\n feedbackVisible: page?.feedbackVisible ?? false,\n failed: page?.failed ?? false,\n stale: page?.stale ?? false,\n requestId: page?.requestId ?? null,\n retryCursor: page?.retryCursor ?? null,\n });\n}\n\n/** Mark one exact branch request active without discarding loaded children. */\nexport function beginSessionBranchRequest<T extends Session = SessionDetails>(\n pages: ReadonlyMap<string, SessionBranchPage<T>>,\n parentSessionId: string,\n requestId: number,\n cursor?: string,\n options: { feedbackVisible?: boolean | undefined } = {},\n): ReadonlyMap<string, SessionBranchPage<T>> {\n const previous = pages.get(parentSessionId);\n return new Map(pages).set(parentSessionId, {\n sessions: previous?.sessions ?? [],\n channelGenerations: previous?.channelGenerations ?? new Map(),\n nextCursor: previous?.nextCursor ?? null,\n loading: true,\n feedbackVisible: options.feedbackVisible ?? true,\n failed: false,\n stale: false,\n requestId,\n retryCursor: cursor ?? null,\n });\n}\n\n/** Refresh the already-loaded window with bounded, opaque-cursor reads. */\nexport async function readLoadedSessionBranchWindow<T extends Session = SessionDetails>(\n readPage: (cursor?: string) => Promise<{ sessions: T[]; pinned: T[]; nextCursor: string | null }>,\n minimumCount: number,\n initialCursor?: string,\n): Promise<{ sessions: T[]; nextCursor: string | null }> {\n const sessions = new Map<string, T>();\n const seen = new Set<string>();\n let cursor = initialCursor;\n for (let reads = 0; reads <= Math.max(1, minimumCount); reads += 1) {\n const page = await readPage(cursor);\n for (const session of [...page.sessions, ...page.pinned]) sessions.set(session.id, session);\n if (!page.nextCursor || sessions.size >= minimumCount) {\n return { sessions: [...sessions.values()], nextCursor: page.nextCursor };\n }\n if (seen.has(page.nextCursor)) throw new Error(\"Child pagination cursor repeated\");\n seen.add(page.nextCursor);\n cursor = page.nextCursor;\n }\n throw new Error(\"Child pagination made no progress\");\n}\n\n/** Commit one server child page or a fully refreshed loaded window. */\nexport function commitSessionBranchPage(\n pages: ReadonlyMap<string, SessionBranchPage<SessionDetails>>,\n parentSessionId: string,\n input: { sessions: readonly SessionDetails[]; nextCursor: string | null },\n options?: {\n append?: boolean | undefined;\n replaceWindow?: boolean | undefined;\n preserve?: readonly SessionDetails[] | undefined;\n requestId?: number | undefined;\n readGeneration?: number | undefined;\n },\n): ReadonlyMap<string, SessionBranchPage<SessionDetails>>;\nexport function commitSessionBranchPage<T extends Session = SessionDetails>(\n pages: ReadonlyMap<string, SessionBranchPage<T>>,\n parentSessionId: string,\n input: { sessions: readonly T[]; nextCursor: string | null },\n options?: {\n append?: boolean | undefined;\n replaceWindow?: boolean | undefined;\n preserve?: readonly T[] | undefined;\n requestId?: number | undefined;\n readGeneration?: number | undefined;\n },\n): ReadonlyMap<string, SessionBranchPage<T>>;\nexport function commitSessionBranchPage<T extends Session = SessionDetails>(\n pages: ReadonlyMap<string, SessionBranchPage<T>>,\n parentSessionId: string,\n input: { sessions: readonly T[]; nextCursor: string | null },\n options: {\n append?: boolean | undefined;\n replaceWindow?: boolean | undefined;\n preserve?: readonly T[] | undefined;\n requestId?: number | undefined;\n readGeneration?: number | undefined;\n } = {},\n): ReadonlyMap<string, SessionBranchPage<T>> {\n const previous = pages.get(parentSessionId);\n if (options.requestId !== undefined && previous?.requestId !== options.requestId) return pages;\n const merged = new Map<string, T>();\n const channelGenerations = options.append\n ? new Map(previous?.channelGenerations ?? [])\n : new Map<string, number>();\n if (options.append) {\n for (const session of [\n ...(previous?.sessions ?? []),\n ...(options.preserve ?? []),\n ...input.sessions,\n ]) {\n merged.set(session.id, session);\n }\n } else {\n // A refreshed first page owns the leading order. Retain already-loaded\n // tail entries (including an active child outside the first 50) behind it.\n for (const session of input.sessions) merged.set(session.id, session);\n for (const session of [\n ...(options.replaceWindow ? [] : (previous?.sessions ?? [])),\n ...(options.preserve ?? []),\n ]) {\n if (!merged.has(session.id)) merged.set(session.id, session);\n }\n }\n const readGeneration = options.readGeneration ?? 0;\n if (readGeneration > 0) {\n for (const session of input.sessions) {\n channelGenerations.set(session.id, readGeneration);\n }\n }\n return new Map(pages).set(parentSessionId, {\n sessions: [...merged.values()],\n channelGenerations,\n nextCursor: input.nextCursor,\n loading: false,\n feedbackVisible: false,\n failed: false,\n stale: false,\n requestId: null,\n retryCursor: null,\n });\n}\n\n/** Current branch rows that may own channel filing, with their actual read starts. */\nexport function authoritativeSessionBranchChannels<T extends Session = SessionDetails>(\n page: SessionBranchPage<T>,\n): Array<readonly [session: T, readGeneration: number]> {\n const byId = new Map(page.sessions.map((session) => [session.id, session]));\n const evidence: Array<readonly [session: T, readGeneration: number]> = [];\n for (const [sessionId, readGeneration] of page.channelGenerations) {\n const session = byId.get(sessionId);\n if (session && readGeneration > 0) evidence.push([session, readGeneration]);\n }\n return evidence;\n}\n\n/** Fail only the still-current request and expose its exact retry cursor. */\nexport function failSessionBranchRequest<T extends Session = SessionDetails>(\n pages: ReadonlyMap<string, SessionBranchPage<T>>,\n parentSessionId: string,\n requestId: number,\n): ReadonlyMap<string, SessionBranchPage<T>> {\n const previous = pages.get(parentSessionId);\n if (!previous || previous.requestId !== requestId) return pages;\n return new Map(pages).set(parentSessionId, {\n ...previous,\n loading: false,\n // Background hydration may suppress transient loading feedback, but a\n // failure must become actionable instead of leaving the branch silently\n // incomplete for the rest of the active route.\n feedbackVisible: true,\n failed: true,\n stale: false,\n requestId: null,\n });\n}\n\n/** A fresh cached page already owns the active child's parent branch. */\nexport function sessionBranchNeedsHydration<T extends Session = SessionDetails>(\n page: SessionBranchPage<T> | undefined,\n): boolean {\n return page === undefined || page.failed || page.stale;\n}\n\n/** Decide whether a changed parent summary can be acknowledged right now. */\nexport function sessionBranchSummaryDecision(input: {\n previousKey: string | undefined;\n nextKey: string;\n loading: boolean;\n expanded: boolean;\n stale: boolean;\n}): SessionBranchSummaryDecision {\n if (input.loading) {\n return {\n acknowledge: input.previousKey === input.nextKey,\n refresh: false,\n markStale: false,\n };\n }\n if (input.previousKey === undefined || input.previousKey === input.nextKey) {\n return { acknowledge: true, refresh: false, markStale: false };\n }\n return {\n acknowledge: true,\n refresh: input.expanded,\n markStale: !input.expanded && !input.stale,\n };\n}\n"],"mappings":"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","names":[]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  useConnect
4
- } from "./chunk-HYEIA25Y.js";
4
+ } from "./chunk-CTZRCBKH.js";
5
5
  import {
6
6
  attachSessionCapability
7
7
  } from "./chunk-52Y2X66Q.js";
@@ -105,4 +105,4 @@ export {
105
105
  usePreparedMcpSetupAttempt,
106
106
  usePreparedMcpSetupAccess
107
107
  };
108
- //# sourceMappingURL=chunk-WXF2RTS4.js.map
108
+ //# sourceMappingURL=chunk-M6URPYUB.js.map
@@ -10,13 +10,13 @@ import {
10
10
  decisionButtonClass,
11
11
  decisionCardClass,
12
12
  decisionCardPad
13
- } from "./chunk-EKJHOWTZ.js";
13
+ } from "./chunk-74UGYVCA.js";
14
14
  import {
15
15
  cn
16
16
  } from "./chunk-TXS65BB2.js";
17
17
  import {
18
18
  useOpenGeniText
19
- } from "./chunk-QPQ7R77C.js";
19
+ } from "./chunk-7SU4YVZ5.js";
20
20
 
21
21
  // src/components/auth-needed-row.tsx
22
22
  import { RefreshCwIcon } from "lucide-react";
@@ -191,4 +191,4 @@ function monogram(label) {
191
191
  export {
192
192
  AuthNeededRow
193
193
  };
194
- //# sourceMappingURL=chunk-H6BX6WOW.js.map
194
+ //# sourceMappingURL=chunk-MDHFMRBC.js.map
@@ -3,7 +3,7 @@ import {
3
3
  SESSION_AVATAR_ICON_COMPONENTS,
4
4
  SessionAvatar,
5
5
  sessionAvatarInitials
6
- } from "./chunk-UO35OEOX.js";
6
+ } from "./chunk-WZYGH7CN.js";
7
7
  import {
8
8
  cn
9
9
  } from "./chunk-A3MTTRCX.js";
@@ -16,7 +16,7 @@ import {
16
16
  import {
17
17
  Field,
18
18
  TextInput
19
- } from "./chunk-PRT4J2DL.js";
19
+ } from "./chunk-J555XSUM.js";
20
20
  import {
21
21
  Button
22
22
  } from "./chunk-7QQN3KNP.js";
@@ -365,4 +365,4 @@ export {
365
365
  SessionAvatarPicker,
366
366
  SessionAvatarPickerButton
367
367
  };
368
- //# sourceMappingURL=chunk-3CDJSKDW.js.map
368
+ //# sourceMappingURL=chunk-MGZO7CHI.js.map
@@ -21,7 +21,7 @@ import {
21
21
  } from "./chunk-JDFDPMKX.js";
22
22
  import {
23
23
  ConfirmDialog
24
- } from "./chunk-KO3OHHY2.js";
24
+ } from "./chunk-CAZDRDQT.js";
25
25
  import {
26
26
  userErrorText
27
27
  } from "./chunk-O4OOG3D6.js";
@@ -787,4 +787,4 @@ export {
787
787
  useRepositoryCatalogRefresh,
788
788
  useFollowUpRepositories
789
789
  };
790
- //# sourceMappingURL=chunk-DCEQCGVN.js.map
790
+ //# sourceMappingURL=chunk-MIWU52TW.js.map
@@ -2175,6 +2175,97 @@ function sessionStatusFromEvents(events) {
2175
2175
  }
2176
2176
  return null;
2177
2177
  }
2178
+ var PAUSE_INTERRUPTION_REASONS = /* @__PURE__ */ new Set([
2179
+ "session_pause",
2180
+ "workspace_pause"
2181
+ ]);
2182
+ function timelineLivePause(control) {
2183
+ if (!control) return void 0;
2184
+ if (control.state !== "paused") return { paused: false };
2185
+ let since = null;
2186
+ for (const blocker of [control.primaryBlocker, ...control.blockers ?? []]) {
2187
+ const changedAt = blocker?.changedAt;
2188
+ if (changedAt && (since === null || Date.parse(changedAt) < Date.parse(since)))
2189
+ since = changedAt;
2190
+ }
2191
+ return { paused: true, since };
2192
+ }
2193
+ var PAUSE_EVENT_TYPES = /* @__PURE__ */ new Set([
2194
+ "session.control.paused",
2195
+ "session.control.resumed",
2196
+ "turn.recovery.requested",
2197
+ "session.status.changed",
2198
+ "turn.started"
2199
+ ]);
2200
+ function timelinePauseSpans(events, live, observed = []) {
2201
+ let latest;
2202
+ const relevant = [];
2203
+ for (const event of events) {
2204
+ if (!latest || event.sequence > latest.sequence) latest = event;
2205
+ if (PAUSE_EVENT_TYPES.has(event.type)) relevant.push(event);
2206
+ }
2207
+ relevant.sort((left, right) => left.sequence - right.sequence);
2208
+ const spans = [];
2209
+ let open = null;
2210
+ let cancelling = false;
2211
+ for (const event of relevant) {
2212
+ const payload = asRecord2(event.payload);
2213
+ if (event.type === "session.control.paused" && payload.terminal === true || // A parent's Cancel reaches its sub-chats as their status alone.
2214
+ event.type === "session.status.changed" && payload.status === "cancelled") {
2215
+ cancelling = true;
2216
+ continue;
2217
+ }
2218
+ const starts = event.type === "session.control.paused" || event.type === "turn.recovery.requested" && PAUSE_INTERRUPTION_REASONS.has(payload.reason) || event.type === "session.status.changed" && payload.status === "idle" && payload.reason === "paused_recovery_settled";
2219
+ if (starts) {
2220
+ open ??= { startedAt: event.occurredAt };
2221
+ continue;
2222
+ }
2223
+ if (event.type === "session.control.resumed" || event.type === "turn.started" || event.type === "session.status.changed" && payload.status === "running") {
2224
+ cancelling = false;
2225
+ if (open) {
2226
+ spans.push({ startedAt: open.startedAt, endedAt: event.occurredAt });
2227
+ open = null;
2228
+ }
2229
+ }
2230
+ }
2231
+ const latestAt = latest?.occurredAt;
2232
+ if (live?.paused && !cancelling) {
2233
+ const startedAt = open?.startedAt ?? live.since ?? latestAt;
2234
+ if (startedAt) spans.push({ startedAt });
2235
+ } else if (open) {
2236
+ if (live) {
2237
+ const endedAt = live.resumedAt ?? latestAt ?? open.startedAt;
2238
+ spans.push({
2239
+ startedAt: open.startedAt,
2240
+ endedAt: Date.parse(endedAt) > Date.parse(open.startedAt) ? endedAt : open.startedAt
2241
+ });
2242
+ } else {
2243
+ spans.push(open);
2244
+ }
2245
+ }
2246
+ const recorded = [...spans];
2247
+ for (const span of observed) {
2248
+ if (!span.endedAt) continue;
2249
+ const start = Date.parse(span.startedAt);
2250
+ const end = Date.parse(span.endedAt);
2251
+ const overlaps = recorded.some(
2252
+ (other) => Date.parse(other.startedAt) < end && (other.endedAt === void 0 || Date.parse(other.endedAt) > start)
2253
+ );
2254
+ if (!overlaps) spans.push(span);
2255
+ }
2256
+ return spans;
2257
+ }
2258
+ function unionLength(intervals, from, to) {
2259
+ const clipped = intervals.map(([start, end]) => [Math.max(start, from), Math.min(end, to)]).filter(([start, end]) => Number.isFinite(start) && Number.isFinite(end) && end > start).sort((left, right) => left[0] - right[0]);
2260
+ let total = 0;
2261
+ let cursor = Number.NEGATIVE_INFINITY;
2262
+ for (const [start, end] of clipped) {
2263
+ const begin = Math.max(start, cursor);
2264
+ if (end > begin) total += end - begin;
2265
+ cursor = Math.max(cursor, end);
2266
+ }
2267
+ return total;
2268
+ }
2178
2269
  function turnStepsAnchors(ordered, turnSteps) {
2179
2270
  const anchors = /* @__PURE__ */ new Map();
2180
2271
  if (!turnSteps || turnSteps.size === 0) return anchors;
@@ -2217,7 +2308,8 @@ function isActivityItem(item) {
2217
2308
  }
2218
2309
  }
2219
2310
  function groupTimeline(t, items, options = {}) {
2220
- if (options.readableTurns || options.foldExchanges) return groupReadableTurns(t, items);
2311
+ if (options.readableTurns || options.foldExchanges)
2312
+ return groupReadableTurns(t, items, options.pauses ?? []);
2221
2313
  const groups = [];
2222
2314
  for (const item of items) {
2223
2315
  if (item.kind === "notice" && item.capacityWait && item.resolvedAt) continue;
@@ -2243,7 +2335,7 @@ function groupTimeline(t, items, options = {}) {
2243
2335
  }
2244
2336
  return groups;
2245
2337
  }
2246
- function groupReadableTurns(t, items) {
2338
+ function groupReadableTurns(t, items, pauses) {
2247
2339
  let groups = [];
2248
2340
  const turns = /* @__PURE__ */ new Map();
2249
2341
  const seenTurns = /* @__PURE__ */ new Set();
@@ -2332,12 +2424,12 @@ function groupReadableTurns(t, items) {
2332
2424
  group.work.details.push({ kind: "activity", id: `work-item-${item.id}`, items: [item] });
2333
2425
  delete group.work.waiting;
2334
2426
  } else if (item.kind === "notice" && item.capacityWait) {
2335
- const pauses = idleSpans.get(key) ?? [];
2336
- pauses.push({
2427
+ const idle = idleSpans.get(key) ?? [];
2428
+ idle.push({
2337
2429
  startedAt: item.occurredAt,
2338
2430
  ...item.resolvedAt ? { endedAt: item.resolvedAt } : {}
2339
2431
  });
2340
- idleSpans.set(key, pauses);
2432
+ idleSpans.set(key, idle);
2341
2433
  if (!item.resolvedAt) {
2342
2434
  if (settlements.has(key)) groups.push({ kind: "item", item });
2343
2435
  else {
@@ -2413,12 +2505,14 @@ function groupReadableTurns(t, items) {
2413
2505
  if (item.kind === "notice" && item.tone === "waiting" && !item.recordedOutcome && !item.resolvedAt) {
2414
2506
  current.waiting = {
2415
2507
  label: item.approval === true ? t("timeline.projection.waitingForYou") : t("timeline.projection.waiting"),
2416
- since: item.occurredAt
2508
+ since: item.occurredAt,
2509
+ ...item.approval === true ? { waitingOn: "you" } : {}
2417
2510
  };
2418
2511
  } else if (item.kind === "session-status" && item.status === "requires_action" && !item.blocked && !item.resolvedAt) {
2419
2512
  current.waiting = {
2420
2513
  label: t("timeline.projection.waitingForYou"),
2421
- since: item.occurredAt
2514
+ since: item.occurredAt,
2515
+ waitingOn: "you"
2422
2516
  };
2423
2517
  } else if (item.kind === "session-status" && ["paused", "cancelled", "failed"].includes(item.status) && !item.resolvedAt) {
2424
2518
  current.endedAt = item.occurredAt;
@@ -2446,15 +2540,22 @@ function groupReadableTurns(t, items) {
2446
2540
  untimed: true
2447
2541
  };
2448
2542
  }
2449
- const pausedMs = (idleSpans.get(key) ?? []).reduce((total, pause) => {
2450
- if (!pause.endedAt) return total;
2451
- const start = Math.max(Date.parse(work.startedAt), Date.parse(pause.startedAt));
2452
- const end = Math.min(
2453
- work.endedAt ? Date.parse(work.endedAt) : Number.POSITIVE_INFINITY,
2454
- Date.parse(pause.endedAt)
2455
- );
2456
- return Number.isFinite(start) && Number.isFinite(end) && end > start ? total + end - start : total;
2457
- }, 0);
2543
+ const workStart = Date.parse(work.startedAt);
2544
+ const workEnd = work.endedAt ? Date.parse(work.endedAt) : Number.POSITIVE_INFINITY;
2545
+ const openPause = work.endedAt || work.waiting?.waitingOn === "you" ? void 0 : pauses.find((pause) => !pause.endedAt && Date.parse(pause.startedAt) < workEnd);
2546
+ const pausedAt = openPause ? Math.max(workStart, Date.parse(openPause.startedAt)) : Number.POSITIVE_INFINITY;
2547
+ if (openPause && Number.isFinite(pausedAt)) {
2548
+ work.pausedAt = new Date(pausedAt).toISOString();
2549
+ delete work.waiting;
2550
+ }
2551
+ const until = Math.min(workEnd, pausedAt);
2552
+ const pausedMs = unionLength(
2553
+ [...idleSpans.get(key) ?? [], ...pauses].flatMap(
2554
+ (span) => span.endedAt ? [[Date.parse(span.startedAt), Date.parse(span.endedAt)]] : Number.isFinite(until) ? [[Date.parse(span.startedAt), until]] : []
2555
+ ),
2556
+ workStart,
2557
+ until
2558
+ );
2458
2559
  if (pausedMs > 0) work.pausedMs = pausedMs;
2459
2560
  }
2460
2561
  groups = groups.filter((entry) => {
@@ -3483,8 +3584,10 @@ export {
3483
3584
  creditExhaustedFromEvents,
3484
3585
  creditRefusalFromEvents,
3485
3586
  sessionStatusFromEvents,
3587
+ timelineLivePause,
3588
+ timelinePauseSpans,
3486
3589
  groupTimeline,
3487
3590
  timelineQuestionPlacement,
3488
3591
  extractSessionRef
3489
3592
  };
3490
- //# sourceMappingURL=chunk-PF2WU2IL.js.map
3593
+ //# sourceMappingURL=chunk-ND4IQJUM.js.map