@opengeni/react 4.4.1 → 4.5.0

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 (700) hide show
  1. package/dist/app/app-state.js +25 -25
  2. package/dist/app/components/Composer.js +27 -27
  3. package/dist/app/components/agent/agent-capability-picker.js +4 -4
  4. package/dist/app/components/artifacts/artifact-browse-controls.js +3 -3
  5. package/dist/app/components/artifacts/artifact-library.js +19 -19
  6. package/dist/app/components/artifacts/artifact-page-chrome.js +2 -2
  7. package/dist/app/components/artifacts/chat-interactive-block.js +15 -15
  8. package/dist/app/components/artifacts/inline-chat-image.js +30 -29
  9. package/dist/app/components/artifacts/retained-file-preview.js +34 -33
  10. package/dist/app/components/artifacts/retained-text-preview.js +5 -5
  11. package/dist/app/components/artifacts/site-audience.js +4 -4
  12. package/dist/app/components/artifacts/site-conversations.js +20 -19
  13. package/dist/app/components/artifacts/site-data.js +18 -18
  14. package/dist/app/components/artifacts/site-publishing.js +39 -39
  15. package/dist/app/components/artifacts/site-settings.js +46 -46
  16. package/dist/app/components/billing-class-mark.js +5 -5
  17. package/dist/app/components/capabilities/capability-detail-sheet.js +8 -8
  18. package/dist/app/components/capabilities/capability-logo-source.js +11 -11
  19. package/dist/app/components/capabilities/connector-tool-permissions.js +4 -4
  20. package/dist/app/components/capabilities/native-connect-setup.js +14 -14
  21. package/dist/app/components/capabilities/perform-capability-action.js +1 -1
  22. package/dist/app/components/capabilities/prepared-mcp-setup-card.js +15 -15
  23. package/dist/app/components/capabilities/session-capability-card.js +77 -75
  24. package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
  25. package/dist/app/components/capabilities/session-chrome-card.js +35 -33
  26. package/dist/app/components/capabilities/session-custom-mcp-card.js +19 -19
  27. package/dist/app/components/capabilities/session-github-card.js +22 -22
  28. package/dist/app/components/capabilities/session-machine-card.js +34 -32
  29. package/dist/app/components/capabilities/use-capabilities-catalog.js +3 -3
  30. package/dist/app/components/capabilities/use-connection-accounts.js +1 -1
  31. package/dist/app/components/command-menu/chat-status.js +15 -14
  32. package/dist/app/components/command-menu/chat-switcher.js +16 -15
  33. package/dist/app/components/command-menu/chat-switcher.js.map +1 -1
  34. package/dist/app/components/command-menu/command-menu.js +32 -110
  35. package/dist/app/components/command-menu/command-menu.js.map +1 -1
  36. package/dist/app/components/command-menu/shortcut-sheet.js +15 -15
  37. package/dist/app/components/composer-capabilities-menu-body.js +3 -3
  38. package/dist/app/components/composer-mobile-plus-panel.js +17 -17
  39. package/dist/app/components/composer-mobile-plus.js +1 -1
  40. package/dist/app/components/credit-required-gate.js +1 -1
  41. package/dist/app/components/credit-required-prompt.js +9 -9
  42. package/dist/app/components/credits/coupon-redeem.js +2 -2
  43. package/dist/app/components/credits/credit-refusal-notice.js +2 -2
  44. package/dist/app/components/desktop/app-shots.js +6 -6
  45. package/dist/app/components/desktop/this-computer.js +4 -4
  46. package/dist/app/components/feedback.js +4 -4
  47. package/dist/app/components/follow-up-repository-menu-body.js +4 -4
  48. package/dist/app/components/follow-up-repository-picker.js +1 -1
  49. package/dist/app/components/github-app-connect-launcher.js +2 -2
  50. package/dist/app/components/in-app-help-link.js +2 -2
  51. package/dist/app/components/knowledge/agent-learning-settings.js +3 -3
  52. package/dist/app/components/machines/connect-machine-dialog.js +18 -18
  53. package/dist/app/components/markdown.js +8 -8
  54. package/dist/app/components/message-context-pills.js +2 -2
  55. package/dist/app/components/models/models-ui.js +8 -8
  56. package/dist/app/components/new-session-starters.js +2 -2
  57. package/dist/app/components/pickers.js +8 -8
  58. package/dist/app/components/rail/rail-context.js +3 -3
  59. package/dist/app/components/rail/rail-sections.js +65 -62
  60. package/dist/app/components/rail/session-header.js +48 -47
  61. package/dist/app/components/rail/session-list.js +64 -61
  62. package/dist/app/components/rail/session-row-content.d.ts +6 -2
  63. package/dist/app/components/rail/session-row-content.js +1 -1
  64. package/dist/app/components/rail/session-row-hover-details.js +20 -19
  65. package/dist/app/components/rail/session-shell.js +104 -101
  66. package/dist/app/components/rail/site-session-group-heading.d.ts +7 -1
  67. package/dist/app/components/rail/site-session-group-heading.js +20 -3
  68. package/dist/app/components/repository-picker.js +4 -4
  69. package/dist/app/components/secrets/session-secrets-panel.js +3 -3
  70. package/dist/app/components/session/agent-configuration-panel.js +33 -33
  71. package/dist/app/components/session/artifact-link-boundary.js +2 -2
  72. package/dist/app/components/session/artifact-session-page.js +5 -5
  73. package/dist/app/components/session/banners.js +10 -10
  74. package/dist/app/components/session/codex-account-indicator.js +11 -11
  75. package/dist/app/components/session/editable-artifacts-workspace.js +44 -44
  76. package/dist/app/components/session/failed-session-banner.js +10 -10
  77. package/dist/app/components/session/human-input.js +57 -53
  78. package/dist/app/components/session/inspector.js +94 -90
  79. package/dist/app/components/session/inspector.js.map +1 -1
  80. package/dist/app/components/session/message-actions.js +4 -4
  81. package/dist/app/components/session/message-resource-attachments.js +20 -19
  82. package/dist/app/components/session/message-resource-attachments.js.map +1 -1
  83. package/dist/app/components/session/model-account-indicator.js +11 -11
  84. package/dist/app/components/session/model-context-inspector.js +2 -2
  85. package/dist/app/components/session/model-recovery-notice.js +3 -3
  86. package/dist/app/components/session/new-session-settings-menu.js +9 -9
  87. package/dist/app/components/session/sandbox-switcher.js +16 -16
  88. package/dist/app/components/session/sandbox-workspace.js +81 -77
  89. package/dist/app/components/session/search-markdown-highlight.js +9 -9
  90. package/dist/app/components/session/search-results-view.js +10 -10
  91. package/dist/app/components/session/session-admin-access.js +8 -8
  92. package/dist/app/components/session/session-admission-notice.js +6 -6
  93. package/dist/app/components/session/session-machine-access-notice.js +6 -6
  94. package/dist/app/components/session/session-retention.js +4 -4
  95. package/dist/app/components/session/session-search-dialog.js +11 -11
  96. package/dist/app/components/session/session-skill-reviews.js +1 -1
  97. package/dist/app/components/session/session-tenancy-control.d.ts +2 -0
  98. package/dist/app/components/session/session-tenancy-control.js +40 -25
  99. package/dist/app/components/session/session-tenancy-control.js.map +1 -1
  100. package/dist/app/components/session/session-usage-limit-section.js +11 -11
  101. package/dist/app/components/session/session-wait-status.js +9 -8
  102. package/dist/app/components/session/session-wait-status.js.map +1 -1
  103. package/dist/app/components/session/site-origin-link.d.ts +1 -0
  104. package/dist/app/components/session/site-origin-link.js +2 -2
  105. package/dist/app/components/session/subagents.js +16 -15
  106. package/dist/app/components/session-connectors-menu-body.js +5 -5
  107. package/dist/app/components/settings/row-select.js +3 -3
  108. package/dist/app/components/transcription-settings.js +4 -4
  109. package/dist/app/components/ui/destructive-confirm.js +6 -6
  110. package/dist/app/components/usage/usage-entry.js +8 -8
  111. package/dist/app/components/workspace-composer-plus.js +21 -21
  112. package/dist/app/embed/memory-navigation.js +2 -2
  113. package/dist/app/embed/session-app.js +256 -250
  114. package/dist/app/lib/actions/actions-provider.js +15 -15
  115. package/dist/app/lib/actions/held-modifier.d.ts +11 -0
  116. package/dist/app/lib/app-surfaces.js +2 -2
  117. package/dist/app/lib/codex-usage-query.js +6 -6
  118. package/dist/app/lib/composer-connectors.js +12 -12
  119. package/dist/app/lib/console-site.d.ts +6 -0
  120. package/dist/app/lib/console-site.js +14 -0
  121. package/dist/app/lib/console-text.js +2 -2
  122. package/dist/app/lib/events.js +17 -16
  123. package/dist/app/lib/failed-session-copy.js +3 -3
  124. package/dist/app/lib/model-access-onboarding.js +3 -3
  125. package/dist/app/lib/move-chat-to-machine.js +3 -3
  126. package/dist/app/lib/navigation.d.ts +5 -0
  127. package/dist/app/lib/navigation.js +1 -1
  128. package/dist/app/lib/routes.d.ts +17 -0
  129. package/dist/app/lib/routes.js +9 -3
  130. package/dist/app/lib/session-branch-cache.js +13 -12
  131. package/dist/app/lib/session-deep-link.js +2 -2
  132. package/dist/app/lib/session-failure-toasts.d.ts +8 -0
  133. package/dist/app/lib/session-group-pagination.js +13 -12
  134. package/dist/app/lib/session-hover-facts.js +14 -13
  135. package/dist/app/lib/session-model.js +3 -3
  136. package/dist/app/lib/session-rail.js +9 -8
  137. package/dist/app/lib/session-rename.js +3 -3
  138. package/dist/app/lib/session-ui-features.d.ts +6 -1
  139. package/dist/app/lib/session-ui-features.js +1 -1
  140. package/dist/app/lib/sessions-group.d.ts +43 -3
  141. package/dist/app/lib/sessions-group.js +21 -14
  142. package/dist/app/lib/shared-query.js +3 -3
  143. package/dist/app/lib/site-opened.d.ts +6 -0
  144. package/dist/app/lib/site-opened.js +10 -0
  145. package/dist/app/lib/turn-failure-analytics.js +4 -4
  146. package/dist/app/lib/use-duplicate-site.js +3 -3
  147. package/dist/app/lib/use-follow-up-repositories.js +4 -4
  148. package/dist/app/lib/use-session-list-hint-refresh.d.ts +20 -2
  149. package/dist/app/lib/use-session-list-hint-refresh.js +5 -1
  150. package/dist/app/lib/use-workspace-machines.js +6 -6
  151. package/dist/app/lib/use-workspace-model-catalog.js +7 -7
  152. package/dist/app/lib/use-workspace-rigs.js +8 -8
  153. package/dist/app/lib/workspace-navigation-preference.js +5 -5
  154. package/dist/app/lib/workspace-scope-context.js +4 -4
  155. package/dist/app/routes/artifacts.js +132 -149
  156. package/dist/app/routes/artifacts.js.map +1 -1
  157. package/dist/app/routes/retained-artifact.js +63 -62
  158. package/dist/app/routes/retained-artifact.js.map +1 -1
  159. package/dist/app/routes/session-unavailable.js +7 -5
  160. package/dist/app/routes/session.js +170 -166
  161. package/dist/app/routes/sessions-index.js +110 -108
  162. package/dist/app/routes/site-view.d.ts +11 -0
  163. package/dist/app/routes/site-view.js +597 -0
  164. package/dist/app/routes/site-view.js.map +1 -0
  165. package/dist/artifacts-document.js +4 -4
  166. package/dist/artifacts-presentation.js +4 -4
  167. package/dist/artifacts-spreadsheet.js +4 -4
  168. package/dist/artifacts.js +39 -39
  169. package/dist/{browser-viewer-RYYQSRTC.js → browser-viewer-QMCNV4RI.js} +9 -7
  170. package/dist/{chat-interactive-block-ABCRKXJ4.js → chat-interactive-block-PMIAUXSO.js} +6 -6
  171. package/dist/{chunk-TGVVEGZG.js → chunk-22FFOHPT.js} +9 -9
  172. package/dist/chunk-22GTC4MZ.js +15 -0
  173. package/dist/chunk-22GTC4MZ.js.map +1 -0
  174. package/dist/{chunk-Z5WMLJKI.js → chunk-22JFMNMF.js} +92 -4
  175. package/dist/chunk-22JFMNMF.js.map +1 -0
  176. package/dist/{chunk-UHFWF6ZU.js → chunk-2FPS5H2D.js} +2 -2
  177. package/dist/{chunk-NAWXARTY.js → chunk-2KO2G3RI.js} +72 -6
  178. package/dist/chunk-2KO2G3RI.js.map +1 -0
  179. package/dist/{chunk-5POTDNQT.js → chunk-2NC7NZCE.js} +6 -6
  180. package/dist/{chunk-ZKYYZH6L.js → chunk-2QBYDGWO.js} +9 -9
  181. package/dist/{chunk-TWXIFWBD.js → chunk-34EU25RL.js} +2 -2
  182. package/dist/{chunk-R63QEVPK.js → chunk-35BC2FU2.js} +16 -16
  183. package/dist/{chunk-PTGRFAMH.js → chunk-3ABPIUCK.js} +2 -2
  184. package/dist/{chunk-S4SC5SSV.js → chunk-3GU7AWG7.js} +18 -18
  185. package/dist/{chunk-722UO6YQ.js → chunk-3PEXVG4D.js} +2 -2
  186. package/dist/{chunk-63VGE4OH.js → chunk-3RMKPHBL.js} +3 -3
  187. package/dist/{chunk-6JKZILLF.js → chunk-3RQUWFZT.js} +67 -67
  188. package/dist/{chunk-6JKZILLF.js.map → chunk-3RQUWFZT.js.map} +1 -1
  189. package/dist/{chunk-RQDFYQHA.js → chunk-3STBLX4O.js} +9 -9
  190. package/dist/{chunk-S4EZ3JUB.js → chunk-3X5FKDYQ.js} +23 -23
  191. package/dist/{chunk-KTRKZRID.js → chunk-4GLLWX33.js} +11 -11
  192. package/dist/{chunk-ROQOVH4N.js → chunk-4HEXNAFI.js} +20 -20
  193. package/dist/chunk-4HEXNAFI.js.map +1 -0
  194. package/dist/{chunk-SD2K5ZN5.js → chunk-4LPA25NQ.js} +4 -4
  195. package/dist/{chunk-KWKGBGAF.js → chunk-4RMN4E2Y.js} +9 -9
  196. package/dist/{chunk-X7ASQHR6.js → chunk-4SAGYEVB.js} +2 -2
  197. package/dist/{chunk-HTT3FB7T.js → chunk-4VK2R5QC.js} +3 -3
  198. package/dist/{chunk-DDK4WFJ3.js → chunk-4XQC7VLT.js} +9 -9
  199. package/dist/{chunk-IVOA3DXA.js → chunk-4YXAQMTD.js} +12 -12
  200. package/dist/{chunk-HOJGAJAB.js → chunk-52WK2GGK.js} +8 -8
  201. package/dist/{chunk-NYZQ7LO7.js → chunk-552UYIQ7.js} +20 -20
  202. package/dist/{chunk-LEXPBQ56.js → chunk-5DSKMG2I.js} +4 -4
  203. package/dist/{chunk-WNG757ID.js → chunk-5FA455GR.js} +4 -4
  204. package/dist/{chunk-HWDGJFM4.js → chunk-5FEN3KYH.js} +11 -11
  205. package/dist/{chunk-OSVHU2WU.js → chunk-5JHRMUAZ.js} +12 -12
  206. package/dist/{chunk-PM3OSANE.js → chunk-5MJHH72T.js} +14 -3
  207. package/dist/chunk-5MJHH72T.js.map +1 -0
  208. package/dist/{chunk-RKB2Z457.js → chunk-5VGJXWQ2.js} +2 -2
  209. package/dist/{chunk-GFUUFM2O.js → chunk-5W6ZDKRR.js} +6 -6
  210. package/dist/{chunk-6PQNLL4E.js → chunk-5W7KJ5NQ.js} +37 -37
  211. package/dist/{chunk-Q35YZVDZ.js → chunk-5Y2FPLZE.js} +9 -9
  212. package/dist/{chunk-6W3LF3DB.js → chunk-5YFY4SFC.js} +2 -12
  213. package/dist/chunk-5YFY4SFC.js.map +1 -0
  214. package/dist/{chunk-F3NERYBQ.js → chunk-62VER7O4.js} +6 -6
  215. package/dist/{chunk-FBMU3VK5.js → chunk-6DCEDIF6.js} +2 -2
  216. package/dist/{chunk-LE2EDBXU.js → chunk-73WI7FL2.js} +18 -18
  217. package/dist/chunk-756MKA2J.js +45 -0
  218. package/dist/chunk-756MKA2J.js.map +1 -0
  219. package/dist/{chunk-ZRJCGBVV.js → chunk-7FJMRJDG.js} +2 -2
  220. package/dist/{chunk-7KGKDWWR.js → chunk-7HFLYNWN.js} +2 -2
  221. package/dist/{chunk-72J6C2AJ.js → chunk-7KIENXRE.js} +2 -2
  222. package/dist/{chunk-CBY5CXBD.js → chunk-7NPCEBZE.js} +5 -5
  223. package/dist/{chunk-46VBQG2D.js → chunk-7P4AQMGA.js} +13 -13
  224. package/dist/{chunk-X7L4H4VG.js → chunk-7TCT7KPQ.js} +742 -644
  225. package/dist/chunk-7TCT7KPQ.js.map +1 -0
  226. package/dist/{chunk-CVG4FILQ.js → chunk-7XO7YKPC.js} +280 -1035
  227. package/dist/chunk-7XO7YKPC.js.map +1 -0
  228. package/dist/{chunk-S7PVL7XH.js → chunk-A4BD4ZVB.js} +4 -4
  229. package/dist/{chunk-EF5SYXAY.js → chunk-ACL2V2KE.js} +30 -22
  230. package/dist/chunk-ACL2V2KE.js.map +1 -0
  231. package/dist/{chunk-73SOCVLS.js → chunk-AIEXYO2X.js} +3 -3
  232. package/dist/{chunk-U7TC2XJQ.js → chunk-AJPW3SV4.js} +3 -3
  233. package/dist/{chunk-HRJQAFKR.js → chunk-AX6YJA5U.js} +2 -2
  234. package/dist/{chunk-P5WABK2H.js → chunk-BCM7C3MJ.js} +9 -9
  235. package/dist/{chunk-DT7BORXG.js → chunk-BMJTNPWK.js} +2 -2
  236. package/dist/{chunk-HIHO2QE7.js → chunk-BT2MVGHT.js} +2 -2
  237. package/dist/{chunk-3XOISKZC.js → chunk-BXQYAAVE.js} +4 -4
  238. package/dist/{chunk-IBTXYLBW.js → chunk-CCFWY4GF.js} +2 -2
  239. package/dist/{chunk-ZOC3OP6F.js → chunk-CCR33J7L.js} +2 -2
  240. package/dist/{chunk-GTQ3SNEI.js → chunk-CD3MO3IC.js} +2 -2
  241. package/dist/{chunk-WSMYOLHG.js → chunk-CDEXRJB6.js} +5 -5
  242. package/dist/{chunk-3GLAPCVI.js → chunk-CFFNT2OY.js} +8 -8
  243. package/dist/{chunk-HO5Y2OOX.js → chunk-CMLJSF2F.js} +10 -10
  244. package/dist/{chunk-RA3FNMWF.js → chunk-CP7ZQHBW.js} +10 -10
  245. package/dist/{chunk-IOKSNX74.js → chunk-D5OWJZQR.js} +2 -2
  246. package/dist/{chunk-SQGXMHJO.js → chunk-DGLRZMXL.js} +3 -3
  247. package/dist/{chunk-GNEHAPKV.js → chunk-DJFTH2DI.js} +3 -3
  248. package/dist/{chunk-HQG4SLTE.js → chunk-DYJGYGPB.js} +2 -2
  249. package/dist/{chunk-4EAF3HSD.js → chunk-EJ7WARW7.js} +2 -2
  250. package/dist/{chunk-3AA6RNGE.js → chunk-ENS6E4RZ.js} +2 -2
  251. package/dist/{chunk-OOEO4MKY.js → chunk-EPWD4KRA.js} +2 -2
  252. package/dist/{chunk-PN66T6JA.js → chunk-EQE3MNQN.js} +5 -5
  253. package/dist/{chunk-TSBE4KOQ.js → chunk-EWL6NDOO.js} +3 -3
  254. package/dist/{chunk-OO2T63BY.js → chunk-EYS4ZOF5.js} +2 -2
  255. package/dist/{chunk-7CZTKBTI.js → chunk-FDAV72IX.js} +5 -5
  256. package/dist/{chunk-AG7VGUIW.js → chunk-FFNPUSVO.js} +7 -7
  257. package/dist/{chunk-P5T36BA3.js → chunk-FRP64DEK.js} +2 -2
  258. package/dist/{chunk-KBF3SE7G.js → chunk-FSP334UU.js} +2 -2
  259. package/dist/{chunk-BSX2R4CW.js → chunk-FTX5CNHA.js} +4 -4
  260. package/dist/{chunk-O756O2I7.js → chunk-FWOBNL2A.js} +1 -1
  261. package/dist/{chunk-6NIB2KGJ.js → chunk-FWYEZ3LE.js} +33 -33
  262. package/dist/{chunk-DLOYMWUQ.js → chunk-G4HQUBO4.js} +7 -7
  263. package/dist/{chunk-CSHBR2IZ.js → chunk-GDLDBR6B.js} +2 -2
  264. package/dist/chunk-GGV4NSG3.js +792 -0
  265. package/dist/chunk-GGV4NSG3.js.map +1 -0
  266. package/dist/{chunk-U36PO27Q.js → chunk-GHHM6WN4.js} +3 -3
  267. package/dist/{chunk-OANSIX34.js → chunk-GRSODLVO.js} +4 -4
  268. package/dist/{chunk-4R3JCVID.js → chunk-GT7JFQ4E.js} +410 -153
  269. package/dist/chunk-GT7JFQ4E.js.map +1 -0
  270. package/dist/{chunk-EU6XSQFM.js → chunk-GXW2I2M2.js} +2 -2
  271. package/dist/{chunk-5JEIDFPD.js → chunk-GZS37O3G.js} +1 -1
  272. package/dist/{chunk-XFNLU7EW.js → chunk-H5M33DAL.js} +15 -6
  273. package/dist/chunk-H5M33DAL.js.map +1 -0
  274. package/dist/{chunk-HNYJEAES.js → chunk-HQWVDQXW.js} +7 -7
  275. package/dist/{chunk-YXOKAG66.js → chunk-HU6JTNWF.js} +2 -2
  276. package/dist/{chunk-QRVNI5V6.js → chunk-I6KIQKU6.js} +3 -3
  277. package/dist/{chunk-APU42QDI.js → chunk-IBA5FMRE.js} +115 -111
  278. package/dist/chunk-IBA5FMRE.js.map +1 -0
  279. package/dist/{chunk-BNUPYHHZ.js → chunk-IDXTASGN.js} +4 -4
  280. package/dist/{chunk-KF3MF6FP.js → chunk-IECRGM6K.js} +3 -2
  281. package/dist/chunk-IECRGM6K.js.map +1 -0
  282. package/dist/chunk-IJYL5BZM.js +38 -0
  283. package/dist/chunk-IJYL5BZM.js.map +1 -0
  284. package/dist/{chunk-L6RXRRN3.js → chunk-ILDOW2IQ.js} +3 -3
  285. package/dist/{chunk-VUHPA3XQ.js → chunk-ITX2TB4K.js} +6 -6
  286. package/dist/{chunk-BXRIQZAH.js → chunk-J22HD2PB.js} +5 -5
  287. package/dist/{chunk-U47YDYLQ.js → chunk-J5MEDX7C.js} +8 -8
  288. package/dist/{chunk-F6LBGYS6.js → chunk-J7FBBLHF.js} +35 -35
  289. package/dist/{chunk-5JZYPZ72.js → chunk-JFK7NTEA.js} +4 -4
  290. package/dist/chunk-JFK7NTEA.js.map +1 -0
  291. package/dist/{chunk-QZRDCFHI.js → chunk-JM4HQPAI.js} +5 -5
  292. package/dist/{chunk-PIVGX42P.js → chunk-JNY5MT3I.js} +2 -2
  293. package/dist/{chunk-XWWXIZFP.js → chunk-JO6R5EXF.js} +7 -7
  294. package/dist/{chunk-NWZW2WHN.js → chunk-JQCGPTZ6.js} +9 -9
  295. package/dist/chunk-JRSNCSZN.js +37 -0
  296. package/dist/chunk-JRSNCSZN.js.map +1 -0
  297. package/dist/{chunk-OR37STQZ.js → chunk-KEXYBG7Q.js} +3 -3
  298. package/dist/{chunk-AZVANYMB.js → chunk-KUNFUSZ7.js} +2 -2
  299. package/dist/{chunk-DXZNDKQD.js → chunk-LEEJBZ5B.js} +2 -2
  300. package/dist/{chunk-STUCI6QA.js → chunk-LEKBNKLD.js} +1 -1
  301. package/dist/{chunk-STUCI6QA.js.map → chunk-LEKBNKLD.js.map} +1 -1
  302. package/dist/{chunk-AOLE4IRZ.js → chunk-LF5CBAOS.js} +5 -5
  303. package/dist/{chunk-BJIZ7PL7.js → chunk-LHLK7FUA.js} +145 -29
  304. package/dist/chunk-LHLK7FUA.js.map +1 -0
  305. package/dist/{chunk-RIMKJBCD.js → chunk-LMPTC4CX.js} +2 -2
  306. package/dist/{chunk-3KVWXKD6.js → chunk-LQ47YL6E.js} +2 -2
  307. package/dist/{chunk-RSNYGEVZ.js → chunk-LT4J7RHI.js} +13 -13
  308. package/dist/{chunk-U3HSFCON.js → chunk-MCTTONOW.js} +28 -28
  309. package/dist/{chunk-7DU35P5J.js → chunk-MIECLOQC.js} +9 -9
  310. package/dist/{chunk-FM4OUCC2.js → chunk-MOKYT3X3.js} +3 -3
  311. package/dist/{chunk-GZ64CASI.js → chunk-MVZYNZXE.js} +5 -4
  312. package/dist/chunk-MVZYNZXE.js.map +1 -0
  313. package/dist/{chunk-L7YURQI2.js → chunk-MXLKI7BI.js} +3 -3
  314. package/dist/{chunk-XRRSFQEV.js → chunk-NAZZLAWX.js} +2 -2
  315. package/dist/{chunk-UWJ5P5CU.js → chunk-NEK4WB5P.js} +3 -3
  316. package/dist/{chunk-6L7U46Y2.js → chunk-NKNVIO66.js} +2 -2
  317. package/dist/{chunk-JKUICTLM.js → chunk-NLAFNMPK.js} +2 -2
  318. package/dist/{chunk-4LKNIGHB.js → chunk-O2SBHS2N.js} +2 -2
  319. package/dist/{chunk-DWPOQ3S5.js → chunk-OTMWHZBY.js} +2 -2
  320. package/dist/{chunk-JTN3T4QN.js → chunk-PCFK7HKD.js} +14 -14
  321. package/dist/{chunk-VVCDB2T7.js → chunk-PCJLH45G.js} +3 -3
  322. package/dist/{chunk-PZ24CYDO.js → chunk-PFAUGEV5.js} +2 -2
  323. package/dist/{chunk-HGMWMK5K.js → chunk-PO3BH3KQ.js} +2 -2
  324. package/dist/{chunk-B74GSYR6.js → chunk-PUTS4DYW.js} +2 -2
  325. package/dist/{chunk-JSIDLTTG.js → chunk-PZ2V2XIK.js} +2 -2
  326. package/dist/{chunk-TMEQPODK.js → chunk-PZ37VDB5.js} +2 -2
  327. package/dist/{chunk-Q35DT6I6.js → chunk-QFMLAT7L.js} +234 -225
  328. package/dist/chunk-QFMLAT7L.js.map +1 -0
  329. package/dist/{chunk-LVONK3YQ.js → chunk-QRKTESVE.js} +2 -2
  330. package/dist/{chunk-HT5WSUC7.js → chunk-QXEDIDBZ.js} +3 -3
  331. package/dist/{chunk-WURSS6MP.js → chunk-R66YMYJU.js} +2 -2
  332. package/dist/{chunk-HDHK3SXK.js → chunk-RFLYID6H.js} +5 -5
  333. package/dist/{chunk-ADJJQSYC.js → chunk-RIYZFKIM.js} +39 -37
  334. package/dist/chunk-RIYZFKIM.js.map +1 -0
  335. package/dist/{chunk-JK7C5A4I.js → chunk-RQNZDTKT.js} +19 -19
  336. package/dist/{chunk-EHCUFCXM.js → chunk-RYSRFAHN.js} +32 -22
  337. package/dist/chunk-RYSRFAHN.js.map +1 -0
  338. package/dist/{chunk-I6VUUEXH.js → chunk-S2U4CDAC.js} +150 -150
  339. package/dist/chunk-S2U4CDAC.js.map +1 -0
  340. package/dist/{chunk-ST22GONV.js → chunk-S37GP7LX.js} +19 -19
  341. package/dist/{chunk-A2EWJQXX.js → chunk-SM5QX6UK.js} +4 -4
  342. package/dist/{chunk-FBE6AIIW.js → chunk-SOKNCW5U.js} +2 -2
  343. package/dist/{chunk-4W7VISE7.js → chunk-SSOO4GWN.js} +193 -194
  344. package/dist/chunk-SSOO4GWN.js.map +1 -0
  345. package/dist/{chunk-UP4BE32Y.js → chunk-SY2AAZNB.js} +5 -5
  346. package/dist/{chunk-33TPANCR.js → chunk-TFK4KFKA.js} +4 -4
  347. package/dist/{chunk-4432A3HQ.js → chunk-TIQPKOFW.js} +4 -4
  348. package/dist/{chunk-HPPKLBTJ.js → chunk-TJQDL3JH.js} +2 -2
  349. package/dist/chunk-TL7BOFFL.js +89 -0
  350. package/dist/chunk-TL7BOFFL.js.map +1 -0
  351. package/dist/{chunk-FD4Q5KFL.js → chunk-TLL22FFO.js} +2 -2
  352. package/dist/{chunk-QM5H4FPT.js → chunk-TV6BWONY.js} +3 -3
  353. package/dist/{chunk-4VKA5O7T.js → chunk-U6MPB3K6.js} +4 -4
  354. package/dist/{chunk-XOFUXMPP.js → chunk-ULJAOMJA.js} +2 -2
  355. package/dist/chunk-ULYQEFNH.js +529 -0
  356. package/dist/chunk-ULYQEFNH.js.map +1 -0
  357. package/dist/{chunk-H5EVWF6L.js → chunk-UNNJUJVD.js} +2 -2
  358. package/dist/{chunk-RGW24ZZM.js → chunk-UP7I3W6O.js} +51 -49
  359. package/dist/chunk-UP7I3W6O.js.map +1 -0
  360. package/dist/{chunk-5MZTJMZ3.js → chunk-UUGR3X5I.js} +17 -11
  361. package/dist/chunk-UUGR3X5I.js.map +1 -0
  362. package/dist/{chunk-Z6DKXQG7.js → chunk-UXXFMF4X.js} +2 -2
  363. package/dist/{chunk-OBQVTCTW.js → chunk-UYNCMZX5.js} +4 -4
  364. package/dist/{chunk-RGPYMHKI.js → chunk-V3K4RQO7.js} +9 -3
  365. package/dist/chunk-V3K4RQO7.js.map +1 -0
  366. package/dist/{chunk-KZHW27BV.js → chunk-V4QZ7UBK.js} +2 -2
  367. package/dist/{chunk-SUVEDKE2.js → chunk-VH5EGTH2.js} +3 -3
  368. package/dist/{chunk-MYNUBDU7.js → chunk-VYKW6TB2.js} +1 -1
  369. package/dist/chunk-VYKW6TB2.js.map +1 -0
  370. package/dist/{chunk-QEJTQTF5.js → chunk-W6T5HR3Z.js} +3 -3
  371. package/dist/{chunk-VP62LPLW.js → chunk-WCMG4HYI.js} +10 -10
  372. package/dist/{chunk-GZLLDA6P.js → chunk-WEFN327U.js} +2 -2
  373. package/dist/{chunk-7BST7BA6.js → chunk-WKHUZIOW.js} +1 -1
  374. package/dist/{chunk-ANHUMDJX.js → chunk-WNDTLK44.js} +2 -2
  375. package/dist/{chunk-2DS4UOYQ.js → chunk-WSZQNTVN.js} +2 -2
  376. package/dist/{chunk-GALB2G3W.js → chunk-X2AH4DRF.js} +2 -2
  377. package/dist/{chunk-Z2DAWUO3.js → chunk-XMNUZUUA.js} +6 -6
  378. package/dist/{chunk-GAIM5RNE.js → chunk-XN7NSPE6.js} +3 -3
  379. package/dist/chunk-XV6ZYRHK.js +59 -0
  380. package/dist/chunk-XV6ZYRHK.js.map +1 -0
  381. package/dist/{chunk-FLGUVRR7.js → chunk-Y5BSA3I7.js} +5 -5
  382. package/dist/{chunk-WRLWLGEF.js → chunk-Y5E3XQ2S.js} +25 -2
  383. package/dist/{chunk-WRLWLGEF.js.map → chunk-Y5E3XQ2S.js.map} +1 -1
  384. package/dist/{chunk-QCD5Y7K5.js → chunk-YEROLKOA.js} +16 -16
  385. package/dist/{chunk-NDF3SH3X.js → chunk-YJPKDRI2.js} +15 -15
  386. package/dist/{chunk-TQGJN5UZ.js → chunk-YV56F4UP.js} +318 -700
  387. package/dist/chunk-YV56F4UP.js.map +1 -0
  388. package/dist/{chunk-VAIESMPY.js → chunk-YVBHGMKC.js} +4 -4
  389. package/dist/{chunk-AD22P5X3.js → chunk-YXA2EKV3.js} +3 -3
  390. package/dist/{chunk-FDNJVZRE.js → chunk-YYCOSTUU.js} +17 -17
  391. package/dist/{chunk-NLMTNEWW.js → chunk-Z6E6TUAE.js} +2 -2
  392. package/dist/{chunk-BJW7G6EF.js → chunk-Z7IGO5EA.js} +3 -3
  393. package/dist/{chunk-NCX5SAQY.js → chunk-ZEIFJ6PX.js} +5 -5
  394. package/dist/{chunk-JRXHSVD5.js → chunk-ZS2UQ3DV.js} +65 -8
  395. package/dist/chunk-ZS2UQ3DV.js.map +1 -0
  396. package/dist/{chunk-4EONHNJU.js → chunk-ZVVT72MT.js} +2 -2
  397. package/dist/components/browser-viewer.d.ts +1 -1
  398. package/dist/composer.js +13 -13
  399. package/dist/{computer-viewer-KEDVLD42.js → computer-viewer-25AJIDYA.js} +9 -9
  400. package/dist/connect.js +10 -10
  401. package/dist/desktop.js +2 -2
  402. package/dist/editor.js +2 -2
  403. package/dist/{embedded-new-voice-LFHWWYD2.js → embedded-new-voice-RZZEJT6M.js} +7 -7
  404. package/dist/{embedded-voice-6QS4ANNX.js → embedded-voice-6OKSSPLW.js} +7 -7
  405. package/dist/{fleet-decision-row-QNSTP3VX.js → fleet-decision-row-NN2HXDX3.js} +2 -2
  406. package/dist/hooks/internal.d.ts +38 -0
  407. package/dist/hooks/use-client-config-flags.d.ts +12 -0
  408. package/dist/hooks/use-workspace-sessions.d.ts +10 -1
  409. package/dist/index.js +233 -227
  410. package/dist/interaction.js +11 -9
  411. package/dist/interaction.js.map +1 -1
  412. package/dist/{latest-question-AW3PPDUM.js → latest-question-2PFWQSSG.js} +4 -3
  413. package/dist/{latest-question-AW3PPDUM.js.map → latest-question-2PFWQSSG.js.map} +1 -1
  414. package/dist/machines.js +5 -5
  415. package/dist/messages/en.d.ts +3 -3
  416. package/dist/messages.js +1 -1
  417. package/dist/{model-policy-picker-menu-CURJ247L.js → model-policy-picker-menu-VVFGGAI6.js} +6 -6
  418. package/dist/native-previews.js +3 -3
  419. package/dist/{platform-activity-row-BMXXNZKX.js → platform-activity-row-ENQVIFTL.js} +2 -2
  420. package/dist/{queue-surface-implementation-2X5AXB6I.js → queue-surface-implementation-4SHOQPQQ.js} +10 -8
  421. package/dist/{queue-surface-implementation-2X5AXB6I.js.map → queue-surface-implementation-4SHOQPQQ.js.map} +1 -1
  422. package/dist/realtime.js +6 -6
  423. package/dist/{sandbox-files-4FBG3GS2.js → sandbox-files-CCOTGXXA.js} +11 -11
  424. package/dist/sandbox-files-CCOTGXXA.js.map +1 -0
  425. package/dist/session-app.js +258 -252
  426. package/dist/session-list-model.d.ts +1 -0
  427. package/dist/session-list-model.js +8 -2
  428. package/dist/{session-realtime-2XIB254N.js → session-realtime-JNKDSGH7.js} +3 -3
  429. package/dist/session-realtime-JNKDSGH7.js.map +1 -0
  430. package/dist/session-realtime.js +2 -2
  431. package/dist/session-ui.js +76 -71
  432. package/dist/session.js +24 -22
  433. package/dist/sites.js +2 -2
  434. package/dist/terminal.js +2 -2
  435. package/dist/this-computer.js +3 -3
  436. package/dist/timeline/invoked-tool.d.ts +5 -0
  437. package/dist/timeline/tool-display-name.d.ts +2 -2
  438. package/dist/timeline/tool-icon.d.ts +14 -0
  439. package/dist/timeline/tool-presentation.d.ts +8 -3
  440. package/dist/{timeline-annotation-markers-X4K2IEOO.js → timeline-annotation-markers-KHNYNY2J.js} +5 -5
  441. package/dist/{timeline-annotation-selection-MEHBW676.js → timeline-annotation-selection-AXEDJHBP.js} +7 -7
  442. package/dist/{timeline-annotations-dialog-U2FPQ3UY.js → timeline-annotations-dialog-AV4ZBXRC.js} +9 -9
  443. package/dist/timeline-model.js +25 -23
  444. package/dist/ui/access-list.js +18 -18
  445. package/dist/ui/cadence-picker.js +2 -2
  446. package/dist/ui/choice-cards.js +2 -2
  447. package/dist/ui/detail-page.js +2 -2
  448. package/dist/ui/detail-sheet.js +2 -2
  449. package/dist/ui/diff-view.js +2 -2
  450. package/dist/ui/disclosure.js +4 -4
  451. package/dist/ui/flush-form-page.js +3 -3
  452. package/dist/ui/form-dialog.js +2 -2
  453. package/dist/ui/list-row.js +4 -4
  454. package/dist/ui/revision-history.js +11 -11
  455. package/dist/ui/role-select.js +7 -7
  456. package/dist/ui/select-menu.js +2 -2
  457. package/dist/ui/settings-nav.js +3 -3
  458. package/dist/usage.js +3 -3
  459. package/dist/workbench.js +11 -11
  460. package/package.json +4 -4
  461. package/src/app/app-state.tsx +3 -1
  462. package/src/app/components/capabilities/session-machine-card.tsx +9 -2
  463. package/src/app/components/rail/session-list.tsx +254 -44
  464. package/src/app/components/rail/session-row-content.tsx +24 -2
  465. package/src/app/components/rail/session-shell.tsx +14 -9
  466. package/src/app/components/rail/site-session-group-heading.tsx +59 -20
  467. package/src/app/components/session/session-tenancy-control.tsx +18 -0
  468. package/src/app/components/session/site-origin-link.test.tsx +73 -0
  469. package/src/app/components/session/site-origin-link.tsx +4 -2
  470. package/src/app/embed/memory-navigation.tsx +1 -0
  471. package/src/app/lib/actions/held-modifier.test.ts +101 -0
  472. package/src/app/lib/actions/held-modifier.ts +108 -0
  473. package/src/app/lib/console-site.tsx +38 -0
  474. package/src/app/lib/navigation.tsx +4 -0
  475. package/src/app/lib/routes.tsx +42 -0
  476. package/src/app/lib/session-failure-toasts.ts +26 -0
  477. package/src/app/lib/session-ui-features.tsx +18 -4
  478. package/src/app/lib/sessions-group.tsx +219 -30
  479. package/src/app/lib/site-opened.tsx +48 -0
  480. package/src/app/lib/site-session-groups.test.ts +173 -6
  481. package/src/app/lib/site-view-routes.test.ts +55 -0
  482. package/src/app/lib/use-session-list-hint-refresh.tsx +44 -4
  483. package/src/app/routes/artifacts.tsx +2 -29
  484. package/src/app/routes/session-transient-failures.test.tsx +343 -0
  485. package/src/app/routes/session-unavailable.tsx +74 -3
  486. package/src/app/routes/session.tsx +4 -13
  487. package/src/app/routes/sessions-index.tsx +13 -9
  488. package/src/app/routes/site-view.test.tsx +476 -0
  489. package/src/app/routes/site-view.tsx +583 -0
  490. package/src/components/browser-viewer.tsx +16 -2
  491. package/src/hooks/internal.ts +129 -6
  492. package/src/hooks/use-client-config-flags.ts +8 -0
  493. package/src/hooks/use-session-events.ts +83 -9
  494. package/src/hooks/use-workspace-sessions.ts +21 -1
  495. package/src/messages/en.ts +3 -3
  496. package/src/session-list-model.ts +4 -0
  497. package/src/timeline/activity-rail.tsx +3 -2
  498. package/src/timeline/invoked-tool.ts +14 -4
  499. package/src/timeline/projection.ts +11 -6
  500. package/src/timeline/rolling-activity.tsx +6 -2
  501. package/src/timeline/tool-display-name.ts +2 -2
  502. package/src/timeline/tool-icon.tsx +165 -0
  503. package/src/timeline/tool-presentation.ts +207 -48
  504. package/src/timeline/tool-renderers.tsx +1 -70
  505. package/styles/compiled.css +38 -0
  506. package/dist/chunk-22ZBT6CN.js +0 -50
  507. package/dist/chunk-22ZBT6CN.js.map +0 -1
  508. package/dist/chunk-4R3JCVID.js.map +0 -1
  509. package/dist/chunk-4W7VISE7.js.map +0 -1
  510. package/dist/chunk-5JZYPZ72.js.map +0 -1
  511. package/dist/chunk-5MZTJMZ3.js.map +0 -1
  512. package/dist/chunk-6W3LF3DB.js.map +0 -1
  513. package/dist/chunk-ADJJQSYC.js.map +0 -1
  514. package/dist/chunk-APU42QDI.js.map +0 -1
  515. package/dist/chunk-BJIZ7PL7.js.map +0 -1
  516. package/dist/chunk-CVG4FILQ.js.map +0 -1
  517. package/dist/chunk-EF5SYXAY.js.map +0 -1
  518. package/dist/chunk-EHCUFCXM.js.map +0 -1
  519. package/dist/chunk-GZ64CASI.js.map +0 -1
  520. package/dist/chunk-I6VUUEXH.js.map +0 -1
  521. package/dist/chunk-JRXHSVD5.js.map +0 -1
  522. package/dist/chunk-KF3MF6FP.js.map +0 -1
  523. package/dist/chunk-MYNUBDU7.js.map +0 -1
  524. package/dist/chunk-NAWXARTY.js.map +0 -1
  525. package/dist/chunk-PM3OSANE.js.map +0 -1
  526. package/dist/chunk-Q35DT6I6.js.map +0 -1
  527. package/dist/chunk-R25ZKOZR.js +0 -24
  528. package/dist/chunk-R25ZKOZR.js.map +0 -1
  529. package/dist/chunk-RGPYMHKI.js.map +0 -1
  530. package/dist/chunk-RGW24ZZM.js.map +0 -1
  531. package/dist/chunk-ROQOVH4N.js.map +0 -1
  532. package/dist/chunk-TQGJN5UZ.js.map +0 -1
  533. package/dist/chunk-X7L4H4VG.js.map +0 -1
  534. package/dist/chunk-XFNLU7EW.js.map +0 -1
  535. package/dist/chunk-Z5WMLJKI.js.map +0 -1
  536. /package/dist/{browser-viewer-RYYQSRTC.js.map → app/lib/console-site.js.map} +0 -0
  537. /package/dist/{chat-interactive-block-ABCRKXJ4.js.map → app/lib/site-opened.js.map} +0 -0
  538. /package/dist/{computer-viewer-KEDVLD42.js.map → browser-viewer-QMCNV4RI.js.map} +0 -0
  539. /package/dist/{embedded-new-voice-LFHWWYD2.js.map → chat-interactive-block-PMIAUXSO.js.map} +0 -0
  540. /package/dist/{chunk-TGVVEGZG.js.map → chunk-22FFOHPT.js.map} +0 -0
  541. /package/dist/{chunk-UHFWF6ZU.js.map → chunk-2FPS5H2D.js.map} +0 -0
  542. /package/dist/{chunk-5POTDNQT.js.map → chunk-2NC7NZCE.js.map} +0 -0
  543. /package/dist/{chunk-ZKYYZH6L.js.map → chunk-2QBYDGWO.js.map} +0 -0
  544. /package/dist/{chunk-TWXIFWBD.js.map → chunk-34EU25RL.js.map} +0 -0
  545. /package/dist/{chunk-R63QEVPK.js.map → chunk-35BC2FU2.js.map} +0 -0
  546. /package/dist/{chunk-PTGRFAMH.js.map → chunk-3ABPIUCK.js.map} +0 -0
  547. /package/dist/{chunk-S4SC5SSV.js.map → chunk-3GU7AWG7.js.map} +0 -0
  548. /package/dist/{chunk-722UO6YQ.js.map → chunk-3PEXVG4D.js.map} +0 -0
  549. /package/dist/{chunk-63VGE4OH.js.map → chunk-3RMKPHBL.js.map} +0 -0
  550. /package/dist/{chunk-RQDFYQHA.js.map → chunk-3STBLX4O.js.map} +0 -0
  551. /package/dist/{chunk-S4EZ3JUB.js.map → chunk-3X5FKDYQ.js.map} +0 -0
  552. /package/dist/{chunk-KTRKZRID.js.map → chunk-4GLLWX33.js.map} +0 -0
  553. /package/dist/{chunk-SD2K5ZN5.js.map → chunk-4LPA25NQ.js.map} +0 -0
  554. /package/dist/{chunk-KWKGBGAF.js.map → chunk-4RMN4E2Y.js.map} +0 -0
  555. /package/dist/{chunk-X7ASQHR6.js.map → chunk-4SAGYEVB.js.map} +0 -0
  556. /package/dist/{chunk-HTT3FB7T.js.map → chunk-4VK2R5QC.js.map} +0 -0
  557. /package/dist/{chunk-DDK4WFJ3.js.map → chunk-4XQC7VLT.js.map} +0 -0
  558. /package/dist/{chunk-IVOA3DXA.js.map → chunk-4YXAQMTD.js.map} +0 -0
  559. /package/dist/{chunk-HOJGAJAB.js.map → chunk-52WK2GGK.js.map} +0 -0
  560. /package/dist/{chunk-NYZQ7LO7.js.map → chunk-552UYIQ7.js.map} +0 -0
  561. /package/dist/{chunk-LEXPBQ56.js.map → chunk-5DSKMG2I.js.map} +0 -0
  562. /package/dist/{chunk-WNG757ID.js.map → chunk-5FA455GR.js.map} +0 -0
  563. /package/dist/{chunk-HWDGJFM4.js.map → chunk-5FEN3KYH.js.map} +0 -0
  564. /package/dist/{chunk-OSVHU2WU.js.map → chunk-5JHRMUAZ.js.map} +0 -0
  565. /package/dist/{chunk-RKB2Z457.js.map → chunk-5VGJXWQ2.js.map} +0 -0
  566. /package/dist/{chunk-GFUUFM2O.js.map → chunk-5W6ZDKRR.js.map} +0 -0
  567. /package/dist/{chunk-6PQNLL4E.js.map → chunk-5W7KJ5NQ.js.map} +0 -0
  568. /package/dist/{chunk-Q35YZVDZ.js.map → chunk-5Y2FPLZE.js.map} +0 -0
  569. /package/dist/{chunk-F3NERYBQ.js.map → chunk-62VER7O4.js.map} +0 -0
  570. /package/dist/{chunk-FBMU3VK5.js.map → chunk-6DCEDIF6.js.map} +0 -0
  571. /package/dist/{chunk-LE2EDBXU.js.map → chunk-73WI7FL2.js.map} +0 -0
  572. /package/dist/{chunk-ZRJCGBVV.js.map → chunk-7FJMRJDG.js.map} +0 -0
  573. /package/dist/{chunk-7KGKDWWR.js.map → chunk-7HFLYNWN.js.map} +0 -0
  574. /package/dist/{chunk-72J6C2AJ.js.map → chunk-7KIENXRE.js.map} +0 -0
  575. /package/dist/{chunk-CBY5CXBD.js.map → chunk-7NPCEBZE.js.map} +0 -0
  576. /package/dist/{chunk-46VBQG2D.js.map → chunk-7P4AQMGA.js.map} +0 -0
  577. /package/dist/{chunk-S7PVL7XH.js.map → chunk-A4BD4ZVB.js.map} +0 -0
  578. /package/dist/{chunk-73SOCVLS.js.map → chunk-AIEXYO2X.js.map} +0 -0
  579. /package/dist/{chunk-U7TC2XJQ.js.map → chunk-AJPW3SV4.js.map} +0 -0
  580. /package/dist/{chunk-HRJQAFKR.js.map → chunk-AX6YJA5U.js.map} +0 -0
  581. /package/dist/{chunk-P5WABK2H.js.map → chunk-BCM7C3MJ.js.map} +0 -0
  582. /package/dist/{chunk-DT7BORXG.js.map → chunk-BMJTNPWK.js.map} +0 -0
  583. /package/dist/{chunk-HIHO2QE7.js.map → chunk-BT2MVGHT.js.map} +0 -0
  584. /package/dist/{chunk-3XOISKZC.js.map → chunk-BXQYAAVE.js.map} +0 -0
  585. /package/dist/{chunk-IBTXYLBW.js.map → chunk-CCFWY4GF.js.map} +0 -0
  586. /package/dist/{chunk-ZOC3OP6F.js.map → chunk-CCR33J7L.js.map} +0 -0
  587. /package/dist/{chunk-GTQ3SNEI.js.map → chunk-CD3MO3IC.js.map} +0 -0
  588. /package/dist/{chunk-WSMYOLHG.js.map → chunk-CDEXRJB6.js.map} +0 -0
  589. /package/dist/{chunk-3GLAPCVI.js.map → chunk-CFFNT2OY.js.map} +0 -0
  590. /package/dist/{chunk-HO5Y2OOX.js.map → chunk-CMLJSF2F.js.map} +0 -0
  591. /package/dist/{chunk-RA3FNMWF.js.map → chunk-CP7ZQHBW.js.map} +0 -0
  592. /package/dist/{chunk-IOKSNX74.js.map → chunk-D5OWJZQR.js.map} +0 -0
  593. /package/dist/{chunk-SQGXMHJO.js.map → chunk-DGLRZMXL.js.map} +0 -0
  594. /package/dist/{chunk-GNEHAPKV.js.map → chunk-DJFTH2DI.js.map} +0 -0
  595. /package/dist/{chunk-HQG4SLTE.js.map → chunk-DYJGYGPB.js.map} +0 -0
  596. /package/dist/{chunk-4EAF3HSD.js.map → chunk-EJ7WARW7.js.map} +0 -0
  597. /package/dist/{chunk-3AA6RNGE.js.map → chunk-ENS6E4RZ.js.map} +0 -0
  598. /package/dist/{chunk-OOEO4MKY.js.map → chunk-EPWD4KRA.js.map} +0 -0
  599. /package/dist/{chunk-PN66T6JA.js.map → chunk-EQE3MNQN.js.map} +0 -0
  600. /package/dist/{chunk-TSBE4KOQ.js.map → chunk-EWL6NDOO.js.map} +0 -0
  601. /package/dist/{chunk-OO2T63BY.js.map → chunk-EYS4ZOF5.js.map} +0 -0
  602. /package/dist/{chunk-7CZTKBTI.js.map → chunk-FDAV72IX.js.map} +0 -0
  603. /package/dist/{chunk-AG7VGUIW.js.map → chunk-FFNPUSVO.js.map} +0 -0
  604. /package/dist/{chunk-P5T36BA3.js.map → chunk-FRP64DEK.js.map} +0 -0
  605. /package/dist/{chunk-KBF3SE7G.js.map → chunk-FSP334UU.js.map} +0 -0
  606. /package/dist/{chunk-BSX2R4CW.js.map → chunk-FTX5CNHA.js.map} +0 -0
  607. /package/dist/{chunk-O756O2I7.js.map → chunk-FWOBNL2A.js.map} +0 -0
  608. /package/dist/{chunk-6NIB2KGJ.js.map → chunk-FWYEZ3LE.js.map} +0 -0
  609. /package/dist/{chunk-DLOYMWUQ.js.map → chunk-G4HQUBO4.js.map} +0 -0
  610. /package/dist/{chunk-CSHBR2IZ.js.map → chunk-GDLDBR6B.js.map} +0 -0
  611. /package/dist/{chunk-U36PO27Q.js.map → chunk-GHHM6WN4.js.map} +0 -0
  612. /package/dist/{chunk-OANSIX34.js.map → chunk-GRSODLVO.js.map} +0 -0
  613. /package/dist/{chunk-EU6XSQFM.js.map → chunk-GXW2I2M2.js.map} +0 -0
  614. /package/dist/{chunk-5JEIDFPD.js.map → chunk-GZS37O3G.js.map} +0 -0
  615. /package/dist/{chunk-HNYJEAES.js.map → chunk-HQWVDQXW.js.map} +0 -0
  616. /package/dist/{chunk-YXOKAG66.js.map → chunk-HU6JTNWF.js.map} +0 -0
  617. /package/dist/{chunk-QRVNI5V6.js.map → chunk-I6KIQKU6.js.map} +0 -0
  618. /package/dist/{chunk-BNUPYHHZ.js.map → chunk-IDXTASGN.js.map} +0 -0
  619. /package/dist/{chunk-L6RXRRN3.js.map → chunk-ILDOW2IQ.js.map} +0 -0
  620. /package/dist/{chunk-VUHPA3XQ.js.map → chunk-ITX2TB4K.js.map} +0 -0
  621. /package/dist/{chunk-BXRIQZAH.js.map → chunk-J22HD2PB.js.map} +0 -0
  622. /package/dist/{chunk-U47YDYLQ.js.map → chunk-J5MEDX7C.js.map} +0 -0
  623. /package/dist/{chunk-F6LBGYS6.js.map → chunk-J7FBBLHF.js.map} +0 -0
  624. /package/dist/{chunk-QZRDCFHI.js.map → chunk-JM4HQPAI.js.map} +0 -0
  625. /package/dist/{chunk-PIVGX42P.js.map → chunk-JNY5MT3I.js.map} +0 -0
  626. /package/dist/{chunk-XWWXIZFP.js.map → chunk-JO6R5EXF.js.map} +0 -0
  627. /package/dist/{chunk-NWZW2WHN.js.map → chunk-JQCGPTZ6.js.map} +0 -0
  628. /package/dist/{chunk-OR37STQZ.js.map → chunk-KEXYBG7Q.js.map} +0 -0
  629. /package/dist/{chunk-AZVANYMB.js.map → chunk-KUNFUSZ7.js.map} +0 -0
  630. /package/dist/{chunk-DXZNDKQD.js.map → chunk-LEEJBZ5B.js.map} +0 -0
  631. /package/dist/{chunk-AOLE4IRZ.js.map → chunk-LF5CBAOS.js.map} +0 -0
  632. /package/dist/{chunk-RIMKJBCD.js.map → chunk-LMPTC4CX.js.map} +0 -0
  633. /package/dist/{chunk-3KVWXKD6.js.map → chunk-LQ47YL6E.js.map} +0 -0
  634. /package/dist/{chunk-RSNYGEVZ.js.map → chunk-LT4J7RHI.js.map} +0 -0
  635. /package/dist/{chunk-U3HSFCON.js.map → chunk-MCTTONOW.js.map} +0 -0
  636. /package/dist/{chunk-7DU35P5J.js.map → chunk-MIECLOQC.js.map} +0 -0
  637. /package/dist/{chunk-FM4OUCC2.js.map → chunk-MOKYT3X3.js.map} +0 -0
  638. /package/dist/{chunk-L7YURQI2.js.map → chunk-MXLKI7BI.js.map} +0 -0
  639. /package/dist/{chunk-XRRSFQEV.js.map → chunk-NAZZLAWX.js.map} +0 -0
  640. /package/dist/{chunk-UWJ5P5CU.js.map → chunk-NEK4WB5P.js.map} +0 -0
  641. /package/dist/{chunk-6L7U46Y2.js.map → chunk-NKNVIO66.js.map} +0 -0
  642. /package/dist/{chunk-JKUICTLM.js.map → chunk-NLAFNMPK.js.map} +0 -0
  643. /package/dist/{chunk-4LKNIGHB.js.map → chunk-O2SBHS2N.js.map} +0 -0
  644. /package/dist/{chunk-DWPOQ3S5.js.map → chunk-OTMWHZBY.js.map} +0 -0
  645. /package/dist/{chunk-JTN3T4QN.js.map → chunk-PCFK7HKD.js.map} +0 -0
  646. /package/dist/{chunk-VVCDB2T7.js.map → chunk-PCJLH45G.js.map} +0 -0
  647. /package/dist/{chunk-PZ24CYDO.js.map → chunk-PFAUGEV5.js.map} +0 -0
  648. /package/dist/{chunk-HGMWMK5K.js.map → chunk-PO3BH3KQ.js.map} +0 -0
  649. /package/dist/{chunk-B74GSYR6.js.map → chunk-PUTS4DYW.js.map} +0 -0
  650. /package/dist/{chunk-JSIDLTTG.js.map → chunk-PZ2V2XIK.js.map} +0 -0
  651. /package/dist/{chunk-TMEQPODK.js.map → chunk-PZ37VDB5.js.map} +0 -0
  652. /package/dist/{chunk-LVONK3YQ.js.map → chunk-QRKTESVE.js.map} +0 -0
  653. /package/dist/{chunk-HT5WSUC7.js.map → chunk-QXEDIDBZ.js.map} +0 -0
  654. /package/dist/{chunk-WURSS6MP.js.map → chunk-R66YMYJU.js.map} +0 -0
  655. /package/dist/{chunk-HDHK3SXK.js.map → chunk-RFLYID6H.js.map} +0 -0
  656. /package/dist/{chunk-JK7C5A4I.js.map → chunk-RQNZDTKT.js.map} +0 -0
  657. /package/dist/{chunk-ST22GONV.js.map → chunk-S37GP7LX.js.map} +0 -0
  658. /package/dist/{chunk-A2EWJQXX.js.map → chunk-SM5QX6UK.js.map} +0 -0
  659. /package/dist/{chunk-FBE6AIIW.js.map → chunk-SOKNCW5U.js.map} +0 -0
  660. /package/dist/{chunk-UP4BE32Y.js.map → chunk-SY2AAZNB.js.map} +0 -0
  661. /package/dist/{chunk-33TPANCR.js.map → chunk-TFK4KFKA.js.map} +0 -0
  662. /package/dist/{chunk-4432A3HQ.js.map → chunk-TIQPKOFW.js.map} +0 -0
  663. /package/dist/{chunk-HPPKLBTJ.js.map → chunk-TJQDL3JH.js.map} +0 -0
  664. /package/dist/{chunk-FD4Q5KFL.js.map → chunk-TLL22FFO.js.map} +0 -0
  665. /package/dist/{chunk-QM5H4FPT.js.map → chunk-TV6BWONY.js.map} +0 -0
  666. /package/dist/{chunk-4VKA5O7T.js.map → chunk-U6MPB3K6.js.map} +0 -0
  667. /package/dist/{chunk-XOFUXMPP.js.map → chunk-ULJAOMJA.js.map} +0 -0
  668. /package/dist/{chunk-H5EVWF6L.js.map → chunk-UNNJUJVD.js.map} +0 -0
  669. /package/dist/{chunk-Z6DKXQG7.js.map → chunk-UXXFMF4X.js.map} +0 -0
  670. /package/dist/{chunk-OBQVTCTW.js.map → chunk-UYNCMZX5.js.map} +0 -0
  671. /package/dist/{chunk-KZHW27BV.js.map → chunk-V4QZ7UBK.js.map} +0 -0
  672. /package/dist/{chunk-SUVEDKE2.js.map → chunk-VH5EGTH2.js.map} +0 -0
  673. /package/dist/{chunk-QEJTQTF5.js.map → chunk-W6T5HR3Z.js.map} +0 -0
  674. /package/dist/{chunk-VP62LPLW.js.map → chunk-WCMG4HYI.js.map} +0 -0
  675. /package/dist/{chunk-GZLLDA6P.js.map → chunk-WEFN327U.js.map} +0 -0
  676. /package/dist/{chunk-7BST7BA6.js.map → chunk-WKHUZIOW.js.map} +0 -0
  677. /package/dist/{chunk-ANHUMDJX.js.map → chunk-WNDTLK44.js.map} +0 -0
  678. /package/dist/{chunk-2DS4UOYQ.js.map → chunk-WSZQNTVN.js.map} +0 -0
  679. /package/dist/{chunk-GALB2G3W.js.map → chunk-X2AH4DRF.js.map} +0 -0
  680. /package/dist/{chunk-Z2DAWUO3.js.map → chunk-XMNUZUUA.js.map} +0 -0
  681. /package/dist/{chunk-GAIM5RNE.js.map → chunk-XN7NSPE6.js.map} +0 -0
  682. /package/dist/{chunk-FLGUVRR7.js.map → chunk-Y5BSA3I7.js.map} +0 -0
  683. /package/dist/{chunk-QCD5Y7K5.js.map → chunk-YEROLKOA.js.map} +0 -0
  684. /package/dist/{chunk-NDF3SH3X.js.map → chunk-YJPKDRI2.js.map} +0 -0
  685. /package/dist/{chunk-VAIESMPY.js.map → chunk-YVBHGMKC.js.map} +0 -0
  686. /package/dist/{chunk-AD22P5X3.js.map → chunk-YXA2EKV3.js.map} +0 -0
  687. /package/dist/{chunk-FDNJVZRE.js.map → chunk-YYCOSTUU.js.map} +0 -0
  688. /package/dist/{chunk-NLMTNEWW.js.map → chunk-Z6E6TUAE.js.map} +0 -0
  689. /package/dist/{chunk-BJW7G6EF.js.map → chunk-Z7IGO5EA.js.map} +0 -0
  690. /package/dist/{chunk-NCX5SAQY.js.map → chunk-ZEIFJ6PX.js.map} +0 -0
  691. /package/dist/{chunk-4EONHNJU.js.map → chunk-ZVVT72MT.js.map} +0 -0
  692. /package/dist/{embedded-voice-6QS4ANNX.js.map → computer-viewer-25AJIDYA.js.map} +0 -0
  693. /package/dist/{model-policy-picker-menu-CURJ247L.js.map → embedded-new-voice-RZZEJT6M.js.map} +0 -0
  694. /package/dist/{sandbox-files-4FBG3GS2.js.map → embedded-voice-6OKSSPLW.js.map} +0 -0
  695. /package/dist/{fleet-decision-row-QNSTP3VX.js.map → fleet-decision-row-NN2HXDX3.js.map} +0 -0
  696. /package/dist/{session-realtime-2XIB254N.js.map → model-policy-picker-menu-VVFGGAI6.js.map} +0 -0
  697. /package/dist/{platform-activity-row-BMXXNZKX.js.map → platform-activity-row-ENQVIFTL.js.map} +0 -0
  698. /package/dist/{timeline-annotation-markers-X4K2IEOO.js.map → timeline-annotation-markers-KHNYNY2J.js.map} +0 -0
  699. /package/dist/{timeline-annotation-selection-MEHBW676.js.map → timeline-annotation-selection-AXEDJHBP.js.map} +0 -0
  700. /package/dist/{timeline-annotations-dialog-U2FPQ3UY.js.map → timeline-annotations-dialog-AV4ZBXRC.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/app/lib/session-ui-features.tsx"],"sourcesContent":["// Which parts of the session UI a surface shows. The web app shows everything;\n// an embed picks a preset and switches single features on or off. A feature\n// also needs the server and the person's permissions to allow it, which the\n// components check themselves; a switch can only hide, never grant.\nimport { createContext, useContext, useMemo, type ReactNode } from \"react\";\n\nexport type SessionUiFeatures = Readonly<{\n /** The chat list: search, filters, projects, pins, archive, subagent rows. */\n chatList: boolean;\n /**\n * The session panel beside the chat: files, terminal, desktop, browser and\n * computer viewers, artifacts, the agent inspector. Loaded on demand.\n */\n dock: boolean;\n /** The workspace-admin access indicator and grant dialog in the header. */\n adminAccess: boolean;\n /**\n * Page-wide keyboard shortcuts and the ⌘K command menu (⌘/Ctrl+⇧O for a new\n * chat, ⌘/Ctrl+K, next and previous chat, the shortcut sheet).\n */\n keyboardShortcuts: boolean;\n /** The Opengeni logo and wordmark at the top of the chat list. */\n brand: boolean;\n}>;\n\nexport type SessionUiPreset = \"app\" | \"companion\" | \"embed\";\n\nexport const SESSION_UI_PRESETS: Readonly<Record<SessionUiPreset, SessionUiFeatures>> = {\n /** The web app and the desktop app. */\n app: { chatList: true, dock: true, adminAccess: true, keyboardShortcuts: true, brand: true },\n /**\n * First-party side panes (the Excel add-in): everything but admin access and\n * page-wide keyboard shortcuts.\n */\n companion: {\n chatList: true,\n dock: true,\n adminAccess: false,\n keyboardShortcuts: false,\n brand: true,\n },\n /**\n * A customer product page (the default): the chat list, chats and composer,\n * without Opengeni's brand, the session panel, admin access or page-wide\n * shortcuts until the host turns them on.\n */\n embed: {\n chatList: true,\n dock: false,\n adminAccess: false,\n keyboardShortcuts: false,\n brand: false,\n },\n};\n\nconst SessionUiFeaturesContext = createContext<SessionUiFeatures>(SESSION_UI_PRESETS.app);\n\n/** Feature switches a host may pass, including names from earlier releases. */\nexport type SessionUiFeatureOverrides = Partial<SessionUiFeatures> & {\n /** @deprecated Use `keyboardShortcuts`. */\n newChatShortcut?: boolean | undefined;\n};\n\nexport function SessionUiFeaturesProvider(props: {\n preset?: SessionUiPreset | undefined;\n features?: SessionUiFeatureOverrides | undefined;\n children?: ReactNode;\n}) {\n const preset = props.preset ?? \"app\";\n const { newChatShortcut, ...current } = props.features ?? {};\n const overrides: Partial<SessionUiFeatures> =\n newChatShortcut === undefined || current.keyboardShortcuts !== undefined\n ? current\n : { ...current, keyboardShortcuts: newChatShortcut };\n const value = useMemo(\n () => ({ ...SESSION_UI_PRESETS[preset], ...overrides }),\n // Hosts often pass an inline object; compare by content.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [preset, JSON.stringify(overrides)],\n );\n return (\n <SessionUiFeaturesContext.Provider value={value}>\n {props.children}\n </SessionUiFeaturesContext.Provider>\n );\n}\n\n/** Whether this surface shows a feature. Without a provider: the web app's full UI. */\nexport function useSessionUiFeature(feature: keyof SessionUiFeatures): boolean {\n return useContext(SessionUiFeaturesContext)[feature];\n}\n"],"mappings":";;;AAIA,SAAS,eAAe,YAAY,eAA+B;AA6E/D;AAtDG,IAAM,qBAA2E;AAAA;AAAA,EAEtF,KAAK,EAAE,UAAU,MAAM,MAAM,MAAM,aAAa,MAAM,mBAAmB,MAAM,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,EAK3F,WAAW;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,OAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,MAAM;AAAA,IACN,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,OAAO;AAAA,EACT;AACF;AAEA,IAAM,2BAA2B,cAAiC,mBAAmB,GAAG;AAQjF,SAAS,0BAA0B,OAIvC;AACD,QAAM,SAAS,MAAM,UAAU;AAC/B,QAAM,EAAE,iBAAiB,GAAG,QAAQ,IAAI,MAAM,YAAY,CAAC;AAC3D,QAAM,YACJ,oBAAoB,UAAa,QAAQ,sBAAsB,SAC3D,UACA,EAAE,GAAG,SAAS,mBAAmB,gBAAgB;AACvD,QAAM,QAAQ;AAAA,IACZ,OAAO,EAAE,GAAG,mBAAmB,MAAM,GAAG,GAAG,UAAU;AAAA;AAAA;AAAA,IAGrD,CAAC,QAAQ,KAAK,UAAU,SAAS,CAAC;AAAA,EACpC;AACA,SACE,oBAAC,yBAAyB,UAAzB,EAAkC,OAChC,gBAAM,UACT;AAEJ;AAGO,SAAS,oBAAoB,SAA2C;AAC7E,SAAO,WAAW,wBAAwB,EAAE,OAAO;AACrD;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/session-list-model.ts"],"sourcesContent":["// Pure session-list presentation shared by the web app (rail and recent\n// sessions) and native renderers: relative-time labels, recency bucketing\n// (Today / Yesterday / Previous 7 days / Older), the running-first ordering\n// rule, status tones and the compact row metadata. No DOM, no React.\nimport {\n deriveAutomaticSessionTitlePreview,\n deriveSessionDisplayTitle,\n sessionTitleIsPending,\n type ClientModel,\n type Session,\n type SessionListEntry,\n type SessionStatus,\n} from \"@opengeni/sdk\";\nimport { modelDisplayName } from \"@opengeni/sdk/model-display\";\nimport { findPickerRow, type PickerModelRow } from \"./model-policy\";\nimport { sessionDisplayStatus, type SessionDisplayStatus } from \"./session-status-model\";\nimport { type OpenGeniText } from \"./messages/runtime\";\n\n/** A list row may be a compact page entry or a complete session response. */\nexport type SessionListRow = Session | SessionListEntry;\n\n/**\n * The title shown for a session: durable agent/user metadata once available,\n * otherwise a bounded opening-prompt preview while automatic naming is still\n * pending. Every list, header and row reads identically.\n */\nexport function sessionDisplayTitle(session: SessionListRow): string {\n return \"displayTitle\" in session ? session.displayTitle : deriveSessionDisplayTitle(session);\n}\n\n/** The maximum length a session title may be renamed to. */\nexport const SESSION_TITLE_MAX_LENGTH = 200;\n\n/**\n * The value a rename editor seeds from. A safe provisional prompt preview is\n * editable because it is also what the user sees; the UUID-derived reference\n * remains an empty draft rather than becoming an accidental rename.\n */\nexport function sessionRenameSeed(session: SessionListRow): string {\n if (\"renameSeed\" in session) return session.renameSeed;\n if (!sessionTitleIsPending(session)) {\n return session.title?.trim() || \"\";\n }\n return deriveAutomaticSessionTitlePreview(session.initialMessage) ?? \"\";\n}\n\n/**\n * Resolve a submitted draft against the current display title. Returns the\n * trimmed title to persist, or `null` when the edit is a no-op (empty,\n * unchanged from what is already shown, or still equal to the value that\n * seeded this edit) and should simply cancel.\n */\nexport function resolveRenameSubmission(\n draft: string,\n display: string,\n editSeed?: string,\n): string | null {\n const next = draft.trim();\n if (!next || next === display || (editSeed !== undefined && next === editSeed.trim())) {\n return null;\n }\n return next;\n}\n\nexport type SessionRecencyGroup = \"today\" | \"yesterday\" | \"previous7\" | \"older\";\n\nexport const SESSION_GROUP_LABELS = (t: OpenGeniText): Record<SessionRecencyGroup, string> => ({\n today: t(\"sessionListModel.today\"),\n yesterday: t(\"sessionListModel.yesterday\"),\n previous7: t(\"sessionListModel.previous7Days\"),\n older: t(\"sessionListModel.older\"),\n});\n\n/** The render order of recency groups, top → bottom. */\nexport const SESSION_GROUP_ORDER: SessionRecencyGroup[] = [\n \"today\",\n \"yesterday\",\n \"previous7\",\n \"older\",\n];\n\n/** Live states that earn the pinned-to-top, breathing-dot treatment. */\nconst RUNNING_STATUSES = new Set<SessionStatus>([\n \"running\",\n \"queued\",\n \"waiting_capacity\",\n \"recovering\",\n \"requires_action\",\n]);\n\nexport function isRunningStatus(status: SessionStatus): boolean {\n return RUNNING_STATUSES.has(status);\n}\n\n/** An idle session waiting on its own timer, while its control is active. */\nexport function sessionInputWait(\n session: Pick<SessionListRow, \"status\" | \"effectiveControl\" | \"inputWait\">,\n) {\n return session.status === \"idle\" && session.effectiveControl?.state === \"active\"\n ? (session.inputWait ?? null)\n : null;\n}\n\n/**\n * A schedule targeting this session can still start a run. Paused schedules\n * and one-time schedules whose time has passed are not upcoming. Servers\n * without the field keep the earlier any-schedule meaning.\n */\nexport function sessionHasUpcomingSchedule(\n session: Pick<SessionListRow, \"hasSchedules\" | \"hasUpcomingSchedules\">,\n): boolean {\n return session.hasUpcomingSchedules ?? session.hasSchedules === true;\n}\n\nexport function hasActiveEffectiveControl(session: SessionListRow): boolean {\n return (session.effectiveControl?.state ?? \"active\") === \"active\";\n}\n\nexport function isEffectivelyRunning(session: SessionListRow): boolean {\n // Background commands have their own chat indicator, not agent working status.\n return (\n hasActiveEffectiveControl(session) &&\n (isRunningStatus(session.status) || Boolean(sessionInputWait(session)))\n );\n}\n\n/** Most-recent activity timestamp for a session (updatedAt, then createdAt). */\nexport function sessionActivityTime(session: SessionListRow): number {\n const updated = Date.parse(session.updatedAt);\n if (!Number.isNaN(updated)) {\n return updated;\n }\n const created = Date.parse(session.createdAt);\n return Number.isNaN(created) ? 0 : created;\n}\n\n/** Deterministic newest-first ordering for every flat or forest session list. */\nexport function compareSessionActivity(left: SessionListRow, right: SessionListRow): number {\n return sessionActivityTime(right) - sessionActivityTime(left) || right.id.localeCompare(left.id);\n}\n\n/** Deterministic personal-pin order: newest pin first, then descending id. */\nexport function compareSessionPins(left: SessionListRow, right: SessionListRow): number {\n const leftPinnedAt = Date.parse(left.pinnedAt ?? \"\");\n const rightPinnedAt = Date.parse(right.pinnedAt ?? \"\");\n const leftTime = Number.isNaN(leftPinnedAt) ? 0 : leftPinnedAt;\n const rightTime = Number.isNaN(rightPinnedAt) ? 0 : rightPinnedAt;\n return rightTime - leftTime || right.id.localeCompare(left.id);\n}\n\n/** Split explicit personal pins from ordinary rows without changing the input. */\nexport function partitionPinnedSessions<T extends SessionListRow>(\n sessions: T[],\n): {\n pinned: T[];\n ordinary: T[];\n} {\n const pinned: T[] = [];\n const ordinary: T[] = [];\n for (const session of sessions) {\n (session.pinned ? pinned : ordinary).push(session);\n }\n return { pinned: pinned.sort(compareSessionPins), ordinary };\n}\n\n/** A pin-aware list as the session page returns it: the person's pins, then ordinary rows. */\nexport type PinnedSessionLists<T extends SessionListRow> = {\n pinned: T[];\n sessions: T[];\n};\n\n/** The personal pin fields a pin change or a newer read carries. */\nexport type SessionPinProjection = Pick<Session, \"id\"> &\n Partial<Pick<Session, \"pinned\" | \"pinnedAt\" | \"pinVersion\">>;\n\n/**\n * Apply one session's pin state to a pin-aware list: the row moves between the\n * pinned section (newest pin first) and the ordinary rows (newest activity\n * first). Pin revisions are monotonic, so a projection older than the row\n * already shown (a slow response after a newer change) leaves the lists as\n * they are, unless it is `authoritative` (a fresh read after a failed change,\n * which replaces an optimistic revision). A session in neither list is left out.\n */\nexport function applySessionPinToLists<T extends SessionListRow>(\n lists: PinnedSessionLists<T>,\n projection: SessionPinProjection,\n options: { authoritative?: boolean } = {},\n): PinnedSessionLists<T> {\n const current =\n lists.pinned.find((row) => row.id === projection.id) ??\n lists.sessions.find((row) => row.id === projection.id);\n if (!current) return lists;\n const pinVersion = projection.pinVersion ?? current.pinVersion ?? 0;\n if (!options.authoritative && pinVersion < (current.pinVersion ?? 0)) return lists;\n const pinned = Boolean(projection.pinned);\n const next = {\n ...current,\n pinned,\n pinnedAt: pinned ? (projection.pinnedAt ?? current.pinnedAt ?? null) : null,\n pinVersion,\n } as T;\n const others = (rows: T[]) => rows.filter((row) => row.id !== projection.id);\n return pinned\n ? {\n pinned: [...others(lists.pinned), next].sort(compareSessionPins),\n sessions: others(lists.sessions),\n }\n : {\n pinned: others(lists.pinned),\n sessions: [...others(lists.sessions), next].sort(compareSessionActivity),\n };\n}\n\n/**\n * Which recency bucket a timestamp falls into, relative to `now`. \"Today\" and\n * \"Yesterday\" are calendar-local; \"Previous 7 days\" is the rest of the trailing\n * week; everything earlier is \"Older\".\n */\nexport function recencyGroupFor(timestampMs: number, now: Date = new Date()): SessionRecencyGroup {\n const startOfToday = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime();\n const startOfYesterday = startOfToday - 24 * 60 * 60 * 1000;\n const startOfWeekWindow = startOfToday - 7 * 24 * 60 * 60 * 1000;\n if (timestampMs >= startOfToday) {\n return \"today\";\n }\n if (timestampMs >= startOfYesterday) {\n return \"yesterday\";\n }\n if (timestampMs >= startOfWeekWindow) {\n return \"previous7\";\n }\n return \"older\";\n}\n\nexport type SessionRecencyBucket<T extends SessionListRow = SessionListRow> = {\n group: SessionRecencyGroup;\n label: string;\n sessions: T[];\n};\n\nexport type GroupedSessions<T extends SessionListRow = SessionListRow> = {\n /** Running sessions, pinned above every recency group, most-recent first. */\n running: T[];\n /** Non-running sessions bucketed by recency (empty buckets dropped). */\n grouped: SessionRecencyBucket<T>[];\n};\n\n/**\n * Order + bucket the sessions for the rail. Running sessions are lifted into a\n * synthetic, always-first position regardless of recency (rendered with a\n * \"running\" marker); the remainder are bucketed by recency, most-recent first\n * within each bucket. Empty groups are dropped.\n */\nexport function groupSessionsForRail<T extends SessionListRow>(\n t: OpenGeniText,\n sessions: T[],\n now: Date = new Date(),\n): GroupedSessions<T> {\n const running = sessions.filter(isEffectivelyRunning).sort(compareSessionActivity);\n const rest = sessions\n .filter((session) => !isEffectivelyRunning(session))\n .sort(compareSessionActivity);\n\n const buckets = new Map<SessionRecencyGroup, T[]>();\n for (const session of rest) {\n const group = recencyGroupFor(sessionActivityTime(session), now);\n const list = buckets.get(group) ?? [];\n list.push(session);\n buckets.set(group, list);\n }\n\n const grouped: SessionRecencyBucket<T>[] = [];\n for (const group of SESSION_GROUP_ORDER) {\n const list = buckets.get(group);\n if (list && list.length > 0) {\n grouped.push({\n group,\n label: SESSION_GROUP_LABELS(t)[group],\n sessions: list,\n });\n }\n }\n return { running, grouped };\n}\n\nexport function relativeTimeLabel(t: OpenGeniText, value: string, now: Date = new Date()): string {\n const timestamp = Date.parse(value);\n if (Number.isNaN(timestamp)) {\n return \"\";\n }\n const diffSeconds = Math.max(0, Math.floor((now.getTime() - timestamp) / 1000));\n if (diffSeconds < 45) {\n return \"now\";\n }\n // 45 to 59 seconds reads as a minute, never \"0m\".\n const minutes = Math.max(1, Math.floor(diffSeconds / 60));\n if (minutes < 60) {\n return `${minutes}m`;\n }\n const hours = Math.floor(minutes / 60);\n if (hours < 24) {\n return `${hours}h`;\n }\n // Past a day, count calendar days in the viewer's time zone, like the long\n // form (\"4 days ago\"), so both read the same for the same chat.\n const days = Math.max(1, localCalendarDaysBetween(new Date(timestamp), now));\n if (days < 7) {\n return `${days}d`;\n }\n return new Date(timestamp).toLocaleDateString(t.locale, {\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nfunction localCalendarDaysBetween(from: Date, to: Date): number {\n const start = Date.UTC(from.getFullYear(), from.getMonth(), from.getDate());\n const end = Date.UTC(to.getFullYear(), to.getMonth(), to.getDate());\n return Math.round((end - start) / 86_400_000);\n}\n\n/** Codex subscription product ids are prefixed `codex/`. */\nexport function isCodexProductModel(modelId: string): boolean {\n return modelId.startsWith(\"codex/\");\n}\n\nexport type SessionStatusTone = \"queued\" | \"running\" | \"waiting\" | \"idle\" | \"failed\" | \"cancelled\";\n\nexport const SESSION_STATUS_TONE: Record<SessionDisplayStatus, SessionStatusTone> = {\n queued: \"queued\",\n running: \"running\",\n recovering: \"running\",\n waiting_capacity: \"waiting\",\n requires_action: \"waiting\",\n blocked: \"failed\",\n idle: \"idle\",\n failed: \"failed\",\n cancelled: \"cancelled\",\n};\n\n/** The status dot of a recent-session row: a background command reads as running. */\nexport function recentSessionStatus(\n session: Pick<SessionListRow, \"status\" | \"backgroundCommandActivity\" | \"admissionBlock\">,\n): { tone: SessionStatusTone; pulse: boolean } {\n const hasBackgroundCommand = session.backgroundCommandActivity !== undefined;\n return {\n tone: hasBackgroundCommand ? \"running\" : SESSION_STATUS_TONE[sessionDisplayStatus(session)],\n pulse: hasBackgroundCommand || session.status === \"running\",\n };\n}\n\n/** A short `owner/repo` label from the session's first repository resource. */\nexport function sessionRepoLabel(session: Pick<Session, \"resources\">): string | null {\n const repo = session.resources.find((resource) => resource.kind === \"repository\");\n if (!repo || repo.kind !== \"repository\") {\n return null;\n }\n const parts = repo.uri\n .replace(/\\.git$/, \"\")\n .split(\"/\")\n .filter(Boolean);\n return parts.length >= 2 ? parts.slice(-2).join(\"/\") : (parts.at(-1) ?? null);\n}\n\nexport function recentSessionModelPresentation<TCatalog extends ClientModel>(\n modelId: string,\n catalogRows: readonly PickerModelRow<TCatalog>[],\n): {\n label: string;\n billingClass: PickerModelRow[\"billingClass\"];\n logoUrl?: string | undefined;\n} {\n const row = findPickerRow([...catalogRows], modelId);\n return {\n label: row?.label ?? modelDisplayName(modelId),\n logoUrl: row?.catalog.logoUrl,\n billingClass:\n row?.billingClass ??\n (isCodexProductModel(modelId) ? \"codex_subscription\" : \"opengeni_credits\"),\n };\n}\n\n/**\n * The home screen's recent sessions: server pins first, then running, then\n * recency buckets, capped. `sessions` keeps the all-visible-row contract, so\n * its pins are removed before recombining the explicit pinned section.\n */\nexport function recentSessionsForHome<T extends SessionListRow>(\n t: OpenGeniText,\n sessions: T[],\n pinned: T[],\n limit = 6,\n now: Date = new Date(),\n): T[] {\n // Sub-agent sessions are reached from their parent. In a workspace that runs\n // many sub-agents they would otherwise take every slot (they run often) and\n // push the person's own conversations out of the list.\n const ordinary = sessions.filter((session) => !session.pinned && !session.parentSessionId);\n const { running, grouped } = groupSessionsForRail(t, ordinary, now);\n const topLevelPinned = pinned.filter((session) => !session.parentSessionId);\n return [...topLevelPinned, ...running, ...grouped.flatMap((bucket) => bucket.sessions)].slice(\n 0,\n limit,\n );\n}\n\n/**\n * The phone home screen's chats in two sections: every pinned conversation,\n * then the most recently used others (running first, then by recency), so\n * pins never push recent work off the screen. Sub-agent sessions are reached\n * from their parent and are left out of both.\n */\nexport function homeSessionSections<T extends SessionListRow>(\n t: OpenGeniText,\n sessions: T[],\n pinned: T[],\n recentLimit = 15,\n now: Date = new Date(),\n): { pinned: T[]; recent: T[] } {\n const ordinary = sessions.filter((session) => !session.pinned && !session.parentSessionId);\n const { running, grouped } = groupSessionsForRail(t, ordinary, now);\n return {\n pinned: pinned.filter((session) => !session.parentSessionId),\n recent: [...running, ...grouped.flatMap((bucket) => bucket.sessions)].slice(0, recentLimit),\n };\n}\n\n/** One project (workspace channel) and its sessions, as the web rail groups them. */\nexport type SessionProjectSection<T extends SessionListRow = SessionListRow> = {\n /** The channel id, or \"default\" for unfiled sessions. */\n key: string;\n channelId: string | null;\n name: string;\n sessions: T[];\n};\n\n/**\n * Group top-level sessions by project in the server's project order (pinned\n * projects first), then \"Default\" for unfiled ones and those whose project no\n * longer exists. Running sessions lead each project, then the most recent.\n * Sub-agent sessions are reached from their parent, so they are left out.\n * Projects without sessions are kept only when `keepEmpty` is set.\n */\nexport function groupSessionsByProject<T extends SessionListRow & { channelId?: string | null }>(\n sessions: readonly T[],\n projects: readonly { id: string; name: string }[],\n options: { keepEmpty?: boolean } = {},\n): SessionProjectSection<T>[] {\n const known = new Set(projects.map((project) => project.id));\n const byProject = new Map<string | null, T[]>();\n for (const session of sessions) {\n if (\"parentSessionId\" in session && session.parentSessionId) continue;\n const channelId = session.channelId ?? null;\n const key = channelId !== null && known.has(channelId) ? channelId : null;\n byProject.set(key, [...(byProject.get(key) ?? []), session]);\n }\n const order = (list: T[]) =>\n [...list].sort(\n (left, right) =>\n Number(isEffectivelyRunning(right)) - Number(isEffectivelyRunning(left)) ||\n compareSessionActivity(left, right),\n );\n const sections: SessionProjectSection<T>[] = projects\n .map((project) => ({\n key: project.id,\n channelId: project.id,\n name: project.name,\n sessions: order(byProject.get(project.id) ?? []),\n }))\n .filter((section) => options.keepEmpty || section.sessions.length > 0);\n const unfiled = byProject.get(null) ?? [];\n if (unfiled.length > 0) {\n sections.push({ key: \"default\", channelId: null, name: \"Default\", sessions: order(unfiled) });\n }\n return sections;\n}\n\nexport { findPickerRow };\n"],"mappings":"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","names":[]}