@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
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-TXS65BB2.js";
8
8
  import {
9
9
  useOpenGeniText
10
- } from "./chunk-5JZYPZ72.js";
10
+ } from "./chunk-JFK7NTEA.js";
11
11
 
12
12
  // src/components/code-editor.tsx
13
13
  import { Loader2Icon, SaveIcon } from "lucide-react";
@@ -383,4 +383,4 @@ export {
383
383
  languageForPath,
384
384
  CodeEditor
385
385
  };
386
- //# sourceMappingURL=chunk-Z6DKXQG7.js.map
386
+ //# sourceMappingURL=chunk-UXXFMF4X.js.map
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-TXS65BB2.js";
11
11
  import {
12
12
  useOpenGeniText
13
- } from "./chunk-5JZYPZ72.js";
13
+ } from "./chunk-JFK7NTEA.js";
14
14
 
15
15
  // src/timeline/screenshot-lightbox.tsx
16
16
  import { ChevronLeftIcon, ChevronRightIcon, DownloadIcon, XIcon } from "lucide-react";
@@ -485,10 +485,10 @@ export {
485
485
  useLightbox,
486
486
  useLightboxOptional,
487
487
  LightboxProvider,
488
+ ShimmerText,
488
489
  TooltipProvider,
489
490
  Tooltip,
490
491
  TooltipTrigger,
491
- TooltipContent,
492
- ShimmerText
492
+ TooltipContent
493
493
  };
494
- //# sourceMappingURL=chunk-OBQVTCTW.js.map
494
+ //# sourceMappingURL=chunk-UYNCMZX5.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  usePolledValue
4
- } from "./chunk-NAWXARTY.js";
4
+ } from "./chunk-2KO2G3RI.js";
5
5
  import {
6
6
  useOpenGeni
7
7
  } from "./chunk-TVQCDDSZ.js";
@@ -24,6 +24,7 @@ function useWorkspaceSessions(options = {}) {
24
24
  const archivedOnly = options.archivedOnly;
25
25
  const sortBy = options.sortBy;
26
26
  const archiveStatus = options.archiveStatus;
27
+ const siteConversations = options.siteConversations;
27
28
  const enabled = options.enabled ?? true;
28
29
  const nextReadRevision = useRef(0);
29
30
  const nextReadGeneration = useRef(0);
@@ -43,7 +44,8 @@ function useWorkspaceSessions(options = {}) {
43
44
  includePinned === false ? "no-pins" : "",
44
45
  archivedOnly ? "archived" : "active",
45
46
  sortBy ?? "",
46
- archiveStatus ?? ""
47
+ archiveStatus ?? "",
48
+ siteConversations ?? ""
47
49
  ].join("\0");
48
50
  const previousQueryKey = useRef(queryKey);
49
51
  const queryKeyTransition = previousQueryKey.current !== queryKey;
@@ -67,6 +69,7 @@ function useWorkspaceSessions(options = {}) {
67
69
  ...archivedOnly ? { archivedOnly: true } : {},
68
70
  ...sortBy ? { sortBy } : {},
69
71
  ...archiveStatus ? { archiveStatus } : {},
72
+ ...siteConversations ? { siteConversations } : {},
70
73
  signal
71
74
  };
72
75
  const page2 = projection === "summary" ? client.listSessionSummaryPage ? await client.listSessionSummaryPage(workspaceId, query) : await client.listSessionPage(workspaceId, query).then(async (full) => {
@@ -102,6 +105,7 @@ function useWorkspaceSessions(options = {}) {
102
105
  archivedOnly,
103
106
  sortBy,
104
107
  archiveStatus,
108
+ siteConversations,
105
109
  queryKey
106
110
  ]
107
111
  );
@@ -120,6 +124,8 @@ function useWorkspaceSessions(options = {}) {
120
124
  pinned,
121
125
  pinnedTruncated: page?.pinnedTruncated ?? false,
122
126
  totals: page?.totals ?? null,
127
+ siteGroups: page?.siteGroups ?? null,
128
+ siteGroupsTruncated: page?.siteGroupsTruncated === true,
123
129
  nextCursor: page?.nextCursor ?? null,
124
130
  // `usePolledValue` clears the old data and starts the new request in an
125
131
  // effect. During that query-key transition render, its old loading flag
@@ -136,4 +142,4 @@ function useWorkspaceSessions(options = {}) {
136
142
  export {
137
143
  useWorkspaceSessions
138
144
  };
139
- //# sourceMappingURL=chunk-RGPYMHKI.js.map
145
+ //# sourceMappingURL=chunk-V3K4RQO7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-workspace-sessions.ts"],"sourcesContent":["import type {\n Session,\n SessionListEntry,\n SessionListTotals,\n SiteConversationGroup,\n} from \"@opengeni/sdk\";\nimport { useCallback, useEffect, useRef } from \"react\";\nimport { useOpenGeni, type ClientOverride } from \"../provider\";\nimport { usePolledValue } from \"./internal\";\n\nexport type UseWorkspaceSessionsOptions = ClientOverride & {\n includeTotals?: boolean | undefined;\n needsYouOnly?: boolean | undefined;\n /** Only read-only sessions moved to the idle-session archive. */\n contentArchivedOnly?: boolean | undefined;\n /** Only workstreams the signed-in person started or messaged. */\n mineOnly?: boolean | undefined;\n /** Compact list records; detail reads remain full sessions. */\n projection?: \"summary\" | undefined;\n limit?: number | undefined;\n parentSessionId?: string | null | undefined;\n cursor?: string | undefined;\n search?: string | undefined;\n /** Return only the complete personal pinned projection. */\n pinsOnly?: boolean | undefined;\n /** Skip pinned details when the pinned section is loaded separately. */\n includePinned?: boolean | undefined;\n archivedOnly?: boolean | undefined;\n sortBy?: \"updatedAt\" | \"createdAt\" | \"name\" | undefined;\n archiveStatus?: \"active\" | \"archived\" | \"all\" | undefined;\n /**\n * Conversations that run inside a Site: `include` lists them as rows,\n * `group` (root pages) returns them as `siteGroups` instead.\n */\n siteConversations?: \"include\" | \"group\" | undefined;\n /** Refresh interval (ms) for fleet/manager views. Off by default. */\n pollIntervalMs?: number | undefined;\n enabled?: boolean | undefined;\n /** Optional shared causal clock invoked when each network read starts. */\n beginRead?: (() => number) | undefined;\n};\n\nexport type UseWorkspaceSessionsResult<T extends Session | SessionListEntry = Session> = {\n /**\n * All visible rows, with pins first. This preserves the pre-pinning hook\n * contract for consumers that only read `sessions`.\n */\n sessions: T[];\n /** The complete personal pinned section, also present in `sessions`. */\n pinned: T[];\n /** True when the server omitted older pins from its bounded pinned section. */\n pinnedTruncated: boolean;\n totals: SessionListTotals | null;\n /** Complete Site rows for a `group` page; null when not requested or unsupported. */\n siteGroups: SiteConversationGroup[] | null;\n /** True when the server omitted Site rows beyond its bound. */\n siteGroupsTruncated: boolean;\n nextCursor: string | null;\n loading: boolean;\n error: Error | null;\n /** Monotonic revision of accepted authoritative list-page reads. */\n readRevision: number;\n /** Causal generation captured when the accepted network read started. */\n readGeneration: number;\n refresh: () => Promise<void>;\n};\n\n/** List the workspace's sessions — the data behind fleet and manager views. */\nexport function useWorkspaceSessions(\n options: UseWorkspaceSessionsOptions & { projection: \"summary\" },\n): UseWorkspaceSessionsResult<SessionListEntry>;\nexport function useWorkspaceSessions(\n options?: UseWorkspaceSessionsOptions & { projection?: undefined },\n): UseWorkspaceSessionsResult;\nexport function useWorkspaceSessions(\n options: UseWorkspaceSessionsOptions,\n): UseWorkspaceSessionsResult<Session | SessionListEntry>;\nexport function useWorkspaceSessions(\n options: UseWorkspaceSessionsOptions = {},\n): UseWorkspaceSessionsResult<Session | SessionListEntry> {\n const { client, workspaceId } = useOpenGeni(options);\n const projection = options.projection;\n const includeTotals = options.includeTotals;\n const needsYouOnly = options.needsYouOnly;\n const contentArchivedOnly = options.contentArchivedOnly;\n const mineOnly = options.mineOnly;\n const limit = options.limit;\n const parentSessionId = options.parentSessionId;\n const cursor = options.cursor;\n const search = options.search;\n const pinsOnly = options.pinsOnly;\n const includePinned = options.includePinned;\n const archivedOnly = options.archivedOnly;\n const sortBy = options.sortBy;\n const archiveStatus = options.archiveStatus;\n const siteConversations = options.siteConversations;\n const enabled = options.enabled ?? true;\n const nextReadRevision = useRef(0);\n const nextReadGeneration = useRef(0);\n const beginRead = options.beginRead;\n const queryKey = [\n workspaceId,\n projection ?? \"full\",\n includeTotals ? \"totals\" : \"\",\n needsYouOnly ? \"needs-you\" : \"\",\n contentArchivedOnly ? \"read-only\" : \"\",\n mineOnly ? \"mine\" : \"\",\n limit ?? \"\",\n parentSessionId === null ? \"null\" : (parentSessionId ?? \"\"),\n cursor ?? \"\",\n search ?? \"\",\n pinsOnly ? \"1\" : \"\",\n includePinned === false ? \"no-pins\" : \"\",\n archivedOnly ? \"archived\" : \"active\",\n sortBy ?? \"\",\n archiveStatus ?? \"\",\n siteConversations ?? \"\",\n ].join(\"\\u0000\");\n const previousQueryKey = useRef(queryKey);\n const queryKeyTransition = previousQueryKey.current !== queryKey;\n useEffect(() => {\n previousQueryKey.current = queryKey;\n }, [queryKey]);\n const load = useCallback(\n async (signal?: AbortSignal) => {\n const readGeneration = beginRead?.() ?? ++nextReadGeneration.current;\n const query = {\n ...(includeTotals ? { includeTotals: true } : {}),\n ...(needsYouOnly ? { needsYouOnly: true } : {}),\n ...(contentArchivedOnly ? { contentArchivedOnly: true } : {}),\n ...(mineOnly ? { mineOnly: true } : {}),\n ...(limit !== undefined ? { limit } : {}),\n ...(parentSessionId !== undefined ? { parentSessionId } : {}),\n ...(cursor !== undefined ? { cursor } : {}),\n ...(search !== undefined ? { search } : {}),\n ...(pinsOnly ? { pinsOnly: true } : {}),\n ...(includePinned === false ? { includePinned: false } : {}),\n ...(archivedOnly ? { archivedOnly: true } : {}),\n ...(sortBy ? { sortBy } : {}),\n ...(archiveStatus ? { archiveStatus } : {}),\n ...(siteConversations ? { siteConversations } : {}),\n signal,\n };\n const page =\n projection === \"summary\"\n ? client.listSessionSummaryPage\n ? await client.listSessionSummaryPage(workspaceId, query)\n : await client.listSessionPage(workspaceId, query).then(async (full) => {\n const { sessionListEntry } = await import(\"@opengeni/sdk/session-list-entries\");\n return {\n ...full,\n pinned: full.pinned.map(sessionListEntry),\n sessions: full.sessions.map(sessionListEntry),\n };\n })\n : await client.listSessionPage(workspaceId, query);\n return {\n queryKey,\n page,\n revision: ++nextReadRevision.current,\n readGeneration,\n };\n },\n [\n beginRead,\n client,\n workspaceId,\n projection,\n includeTotals,\n needsYouOnly,\n contentArchivedOnly,\n mineOnly,\n limit,\n parentSessionId,\n cursor,\n search,\n pinsOnly,\n includePinned,\n archivedOnly,\n sortBy,\n archiveStatus,\n siteConversations,\n queryKey,\n ],\n );\n const state = usePolledValue(load, {\n pollIntervalMs: options.pollIntervalMs,\n enabled,\n });\n // usePolledValue drops stale async completions, while the explicit query key\n // also prevents the previous query's cached value from painting for the one\n // render before its loader-change effect clears state.\n const page = state.data?.queryKey === queryKey ? state.data.page : null;\n const pinned = page?.pinned ?? [];\n const ordinary = page?.sessions ?? [];\n return {\n // The old hook returned every visible session. Keep that public behavior\n // while exposing `pinned` separately for the compact section. The API page\n // itself continues to paginate only `ordinary` rows via nextCursor.\n sessions: [...pinned, ...ordinary],\n pinned,\n pinnedTruncated: page?.pinnedTruncated ?? false,\n totals: page?.totals ?? null,\n siteGroups: page?.siteGroups ?? null,\n siteGroupsTruncated: page?.siteGroupsTruncated === true,\n nextCursor: page?.nextCursor ?? null,\n // `usePolledValue` clears the old data and starts the new request in an\n // effect. During that query-key transition render, its old loading flag\n // can still be false; expose loading immediately so consumers do not\n // announce a transient false zero-match result.\n loading:\n enabled &&\n (state.loading ||\n queryKeyTransition ||\n (state.data !== null && state.data.queryKey !== queryKey)),\n error: state.error,\n readRevision: page ? (state.data?.revision ?? 0) : 0,\n readGeneration: page ? (state.data?.readGeneration ?? 0) : 0,\n refresh: state.refresh,\n };\n}\n"],"mappings":";;;;;;;;;AAMA,SAAS,aAAa,WAAW,cAAc;AAuExC,SAAS,qBACd,UAAuC,CAAC,GACgB;AACxD,QAAM,EAAE,QAAQ,YAAY,IAAI,YAAY,OAAO;AACnD,QAAM,aAAa,QAAQ;AAC3B,QAAM,gBAAgB,QAAQ;AAC9B,QAAM,eAAe,QAAQ;AAC7B,QAAM,sBAAsB,QAAQ;AACpC,QAAM,WAAW,QAAQ;AACzB,QAAM,QAAQ,QAAQ;AACtB,QAAM,kBAAkB,QAAQ;AAChC,QAAM,SAAS,QAAQ;AACvB,QAAM,SAAS,QAAQ;AACvB,QAAM,WAAW,QAAQ;AACzB,QAAM,gBAAgB,QAAQ;AAC9B,QAAM,eAAe,QAAQ;AAC7B,QAAM,SAAS,QAAQ;AACvB,QAAM,gBAAgB,QAAQ;AAC9B,QAAM,oBAAoB,QAAQ;AAClC,QAAM,UAAU,QAAQ,WAAW;AACnC,QAAM,mBAAmB,OAAO,CAAC;AACjC,QAAM,qBAAqB,OAAO,CAAC;AACnC,QAAM,YAAY,QAAQ;AAC1B,QAAM,WAAW;AAAA,IACf;AAAA,IACA,cAAc;AAAA,IACd,gBAAgB,WAAW;AAAA,IAC3B,eAAe,cAAc;AAAA,IAC7B,sBAAsB,cAAc;AAAA,IACpC,WAAW,SAAS;AAAA,IACpB,SAAS;AAAA,IACT,oBAAoB,OAAO,SAAU,mBAAmB;AAAA,IACxD,UAAU;AAAA,IACV,UAAU;AAAA,IACV,WAAW,MAAM;AAAA,IACjB,kBAAkB,QAAQ,YAAY;AAAA,IACtC,eAAe,aAAa;AAAA,IAC5B,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,EACvB,EAAE,KAAK,IAAQ;AACf,QAAM,mBAAmB,OAAO,QAAQ;AACxC,QAAM,qBAAqB,iBAAiB,YAAY;AACxD,YAAU,MAAM;AACd,qBAAiB,UAAU;AAAA,EAC7B,GAAG,CAAC,QAAQ,CAAC;AACb,QAAM,OAAO;AAAA,IACX,OAAO,WAAyB;AAC9B,YAAM,iBAAiB,YAAY,KAAK,EAAE,mBAAmB;AAC7D,YAAM,QAAQ;AAAA,QACZ,GAAI,gBAAgB,EAAE,eAAe,KAAK,IAAI,CAAC;AAAA,QAC/C,GAAI,eAAe,EAAE,cAAc,KAAK,IAAI,CAAC;AAAA,QAC7C,GAAI,sBAAsB,EAAE,qBAAqB,KAAK,IAAI,CAAC;AAAA,QAC3D,GAAI,WAAW,EAAE,UAAU,KAAK,IAAI,CAAC;AAAA,QACrC,GAAI,UAAU,SAAY,EAAE,MAAM,IAAI,CAAC;AAAA,QACvC,GAAI,oBAAoB,SAAY,EAAE,gBAAgB,IAAI,CAAC;AAAA,QAC3D,GAAI,WAAW,SAAY,EAAE,OAAO,IAAI,CAAC;AAAA,QACzC,GAAI,WAAW,SAAY,EAAE,OAAO,IAAI,CAAC;AAAA,QACzC,GAAI,WAAW,EAAE,UAAU,KAAK,IAAI,CAAC;AAAA,QACrC,GAAI,kBAAkB,QAAQ,EAAE,eAAe,MAAM,IAAI,CAAC;AAAA,QAC1D,GAAI,eAAe,EAAE,cAAc,KAAK,IAAI,CAAC;AAAA,QAC7C,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,QAC3B,GAAI,gBAAgB,EAAE,cAAc,IAAI,CAAC;AAAA,QACzC,GAAI,oBAAoB,EAAE,kBAAkB,IAAI,CAAC;AAAA,QACjD;AAAA,MACF;AACA,YAAMA,QACJ,eAAe,YACX,OAAO,yBACL,MAAM,OAAO,uBAAuB,aAAa,KAAK,IACtD,MAAM,OAAO,gBAAgB,aAAa,KAAK,EAAE,KAAK,OAAO,SAAS;AACpE,cAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,oCAAoC;AAC9E,eAAO;AAAA,UACL,GAAG;AAAA,UACH,QAAQ,KAAK,OAAO,IAAI,gBAAgB;AAAA,UACxC,UAAU,KAAK,SAAS,IAAI,gBAAgB;AAAA,QAC9C;AAAA,MACF,CAAC,IACH,MAAM,OAAO,gBAAgB,aAAa,KAAK;AACrD,aAAO;AAAA,QACL;AAAA,QACA,MAAAA;AAAA,QACA,UAAU,EAAE,iBAAiB;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAQ,eAAe,MAAM;AAAA,IACjC,gBAAgB,QAAQ;AAAA,IACxB;AAAA,EACF,CAAC;AAID,QAAM,OAAO,MAAM,MAAM,aAAa,WAAW,MAAM,KAAK,OAAO;AACnE,QAAM,SAAS,MAAM,UAAU,CAAC;AAChC,QAAM,WAAW,MAAM,YAAY,CAAC;AACpC,SAAO;AAAA;AAAA;AAAA;AAAA,IAIL,UAAU,CAAC,GAAG,QAAQ,GAAG,QAAQ;AAAA,IACjC;AAAA,IACA,iBAAiB,MAAM,mBAAmB;AAAA,IAC1C,QAAQ,MAAM,UAAU;AAAA,IACxB,YAAY,MAAM,cAAc;AAAA,IAChC,qBAAqB,MAAM,wBAAwB;AAAA,IACnD,YAAY,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,IAKhC,SACE,YACC,MAAM,WACL,sBACC,MAAM,SAAS,QAAQ,MAAM,KAAK,aAAa;AAAA,IACpD,OAAO,MAAM;AAAA,IACb,cAAc,OAAQ,MAAM,MAAM,YAAY,IAAK;AAAA,IACnD,gBAAgB,OAAQ,MAAM,MAAM,kBAAkB,IAAK;AAAA,IAC3D,SAAS,MAAM;AAAA,EACjB;AACF;","names":["page"]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  isCodexProductModel
4
- } from "./chunk-Z5WMLJKI.js";
4
+ } from "./chunk-22JFMNMF.js";
5
5
 
6
6
  // src/app/lib/session-model.tsx
7
7
  function resolveSessionComposerModel(input) {
@@ -14,4 +14,4 @@ function resolveSessionComposerModel(input) {
14
14
  export {
15
15
  resolveSessionComposerModel
16
16
  };
17
- //# sourceMappingURL=chunk-KZHW27BV.js.map
17
+ //# sourceMappingURL=chunk-V4QZ7UBK.js.map
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  import {
3
3
  SearchMarkdown
4
- } from "./chunk-4EONHNJU.js";
4
+ } from "./chunk-ZVVT72MT.js";
5
5
  import {
6
6
  SearchText
7
7
  } from "./chunk-72VDQKH4.js";
8
8
  import {
9
9
  MarkdownText
10
- } from "./chunk-YXOKAG66.js";
10
+ } from "./chunk-HU6JTNWF.js";
11
11
  import {
12
12
  cn
13
13
  } from "./chunk-A3MTTRCX.js";
@@ -266,4 +266,4 @@ export {
266
266
  SearchResultsView,
267
267
  SearchPreviewView
268
268
  };
269
- //# sourceMappingURL=chunk-SUVEDKE2.js.map
269
+ //# sourceMappingURL=chunk-VH5EGTH2.js.map
@@ -72,4 +72,4 @@ export {
72
72
  usePage,
73
73
  useStringifySearch
74
74
  };
75
- //# sourceMappingURL=chunk-MYNUBDU7.js.map
75
+ //# sourceMappingURL=chunk-VYKW6TB2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/lib/navigation.tsx"],"sourcesContent":["// Navigation for the session UI, independent of any one router. The web app\n// backs it with its TanStack router (see `configurePageAppHost`), so links,\n// history and URLs there are exactly the router's own. An embed backs it with\n// its own routing or in-memory state.\nimport type { AnchorHTMLAttributes, ComponentType, ReactNode, Ref } from \"react\";\n\nimport { useAppHost } from \"./app-host\";\n\n/** History state the session UI writes and reads. */\nexport type NavigationHistoryState = {\n /** Set only on the Settings \"Back to sessions\" link that reopens this session. */\n restoredSessionId?: string | undefined;\n [key: string]: unknown;\n};\n\nexport type NavigationLocation = Readonly<{\n pathname: string;\n search: Record<string, unknown>;\n searchStr: string;\n hash: string;\n href: string;\n state: NavigationHistoryState;\n}>;\n\nexport type NavigationState = Readonly<{ location: NavigationLocation }>;\n\nexport type NavigationSearch = Record<string, unknown>;\nexport type NavigationParams = Record<string, string>;\n\n/** A value, `(previous) => next`, or `true` to keep the current one. */\nexport type NavigationUpdater<T> = true | T | ((previous: T) => T);\n\nexport type NavigateOptions = {\n /** A route path such as `/workspaces/$workspaceId`, filled from `params`. */\n to?: string | undefined;\n from?: string | undefined;\n params?: NavigationUpdater<NavigationParams> | undefined;\n search?: NavigationUpdater<NavigationSearch> | undefined;\n hash?: NavigationUpdater<string> | undefined;\n state?: NavigationUpdater<NavigationHistoryState> | undefined;\n replace?: boolean | undefined;\n resetScroll?: boolean | undefined;\n ignoreBlocker?: boolean | undefined;\n reloadDocument?: boolean | undefined;\n href?: string | undefined;\n};\n\nexport type NavigateFunction = (options: NavigateOptions) => Promise<void>;\n\nexport type LinkProps = NavigateOptions &\n Omit<AnchorHTMLAttributes<HTMLAnchorElement>, \"href\" | \"children\"> & {\n children?:\n | ReactNode\n | ((state: { isActive: boolean; isTransitioning: boolean }) => ReactNode)\n | undefined;\n preload?: false | \"intent\" | \"viewport\" | \"render\" | undefined;\n disabled?: boolean | undefined;\n /** When the link counts as the current page (`aria-current`); the router's default otherwise. */\n activeOptions?:\n | { exact?: boolean | undefined; includeSearch?: boolean | undefined }\n | undefined;\n ref?: Ref<HTMLAnchorElement> | undefined;\n };\n\n/**\n * The page around the session UI, for flows that leave it or return to it\n * (provider authorization, checkout, connect returns). The web app maps these\n * to `window.location` and `history`; an embed keeps the host page untouched.\n */\nexport type PageHost = Readonly<{\n /** Absolute URL of the console page being shown. */\n href: () => string;\n /** The console origin that app paths (`/workspaces/...`) resolve against. */\n origin: () => string;\n /** The page's query, where authorization and connect returns land. */\n readQuery: () => URLSearchParams;\n /** Replaces the page's query after handling a return, without a navigation. */\n replaceQuery: (query: URLSearchParams, options?: { keepHistoryState?: boolean }) => void;\n /**\n * Leaves for a URL: an external flow, or an app page outside the session UI.\n * An embed opens it beside the host page instead of replacing it.\n */\n assign: (url: string, options?: { replace?: boolean }) => void;\n /**\n * True when `assign` opens outside URLs beside the page rather than leaving\n * it (an embed), so a flow that leaves for checkout stays here and waits.\n */\n opensBeside: boolean;\n /** Opens a URL beside the page (a file, an image, a provider page). */\n open: (url: string) => void;\n /**\n * Opens an empty tab inside a click, for a URL known only after an await\n * (checkout, a freshly signed link). Null when the browser blocks it or the\n * host shows URLs its own way; the caller then leaves through `assign`.\n */\n openTab: () => Window | null;\n}>;\n\nexport type NavigationHost = Readonly<{\n useNavigate: () => NavigateFunction;\n useLocation: () => NavigationLocation;\n useRouterState: <T>(options: { select: (state: NavigationState) => T }) => T;\n /** Live, non-reactive read for event handlers. */\n useRouter: () => { readonly state: NavigationState };\n useSearch: (options: { strict: false }) => NavigationSearch;\n Link: ComponentType<LinkProps>;\n stringifySearch: (search: NavigationSearch) => string;\n page: PageHost;\n}>;\n\n/**\n * The browser window as the page: the default when nothing scopes another one,\n * and what a host that owns the URL (the web app) passes as its `page`.\n */\nexport const browserPage: PageHost = {\n href: () => window.location.href,\n origin: () => window.location.origin,\n readQuery: () => new URLSearchParams(window.location.search),\n replaceQuery: (query, options) =>\n window.history.replaceState(\n options?.keepHistoryState ? window.history.state : null,\n \"\",\n `${window.location.pathname}${query.size ? `?${query}` : \"\"}`,\n ),\n assign: (url, options) =>\n options?.replace ? window.location.replace(url) : window.location.assign(url),\n opensBeside: false,\n open: (url) => void window.open(url, \"_blank\", \"noopener,noreferrer\"),\n openTab: openBlankTab,\n};\n\n/** An empty new tab with no handle back to this page, or null when blocked. */\nexport function openBlankTab(): Window | null {\n let tab: Window | null = null;\n try {\n tab = window.open(\"\", \"_blank\");\n } catch {\n return null;\n }\n if (tab) tab.opener = null;\n return tab;\n}\n\nfunction useNavigationHost(): NavigationHost {\n const host = useAppHost().navigation;\n if (!host) throw new Error(\"Opengeni navigation is not configured\");\n return host;\n}\n\nexport function useNavigate(): NavigateFunction {\n return useNavigationHost().useNavigate();\n}\n\nexport function useLocation(): NavigationLocation {\n return useNavigationHost().useLocation();\n}\n\nexport function useRouterState<T>(options: { select: (state: NavigationState) => T }): T {\n return useNavigationHost().useRouterState(options);\n}\n\nexport function useRouter(): { readonly state: NavigationState } {\n return useNavigationHost().useRouter();\n}\n\nexport function useSearch(options: { strict: false }): NavigationSearch {\n return useNavigationHost().useSearch(options);\n}\n\nexport function Link(props: LinkProps) {\n const HostLink = useNavigationHost().Link;\n return <HostLink {...props} />;\n}\n\n/** The page around the session UI; the browser window unless a host scopes another. */\nexport function usePage(): PageHost {\n return useAppHost().navigation?.page ?? browserPage;\n}\n\n/** The host's search serializer (`?a=1&b=%22x%22`), for hrefs built outside `Link`. */\nexport function useStringifySearch(): (search: NavigationSearch) => string {\n return useNavigationHost().stringifySearch;\n}\n"],"mappings":";;;;;;AA2KS;AAzDF,IAAM,cAAwB;AAAA,EACnC,MAAM,MAAM,OAAO,SAAS;AAAA,EAC5B,QAAQ,MAAM,OAAO,SAAS;AAAA,EAC9B,WAAW,MAAM,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAAA,EAC3D,cAAc,CAAC,OAAO,YACpB,OAAO,QAAQ;AAAA,IACb,SAAS,mBAAmB,OAAO,QAAQ,QAAQ;AAAA,IACnD;AAAA,IACA,GAAG,OAAO,SAAS,QAAQ,GAAG,MAAM,OAAO,IAAI,KAAK,KAAK,EAAE;AAAA,EAC7D;AAAA,EACF,QAAQ,CAAC,KAAK,YACZ,SAAS,UAAU,OAAO,SAAS,QAAQ,GAAG,IAAI,OAAO,SAAS,OAAO,GAAG;AAAA,EAC9E,aAAa;AAAA,EACb,MAAM,CAAC,QAAQ,KAAK,OAAO,KAAK,KAAK,UAAU,qBAAqB;AAAA,EACpE,SAAS;AACX;AAGO,SAAS,eAA8B;AAC5C,MAAI,MAAqB;AACzB,MAAI;AACF,UAAM,OAAO,KAAK,IAAI,QAAQ;AAAA,EAChC,QAAQ;AACN,WAAO;AAAA,EACT;AACA,MAAI,IAAK,KAAI,SAAS;AACtB,SAAO;AACT;AAEA,SAAS,oBAAoC;AAC3C,QAAM,OAAO,WAAW,EAAE;AAC1B,MAAI,CAAC,KAAM,OAAM,IAAI,MAAM,uCAAuC;AAClE,SAAO;AACT;AAEO,SAAS,cAAgC;AAC9C,SAAO,kBAAkB,EAAE,YAAY;AACzC;AAEO,SAAS,cAAkC;AAChD,SAAO,kBAAkB,EAAE,YAAY;AACzC;AAEO,SAAS,eAAkB,SAAuD;AACvF,SAAO,kBAAkB,EAAE,eAAe,OAAO;AACnD;AAEO,SAAS,YAAiD;AAC/D,SAAO,kBAAkB,EAAE,UAAU;AACvC;AAEO,SAAS,UAAU,SAA8C;AACtE,SAAO,kBAAkB,EAAE,UAAU,OAAO;AAC9C;AAEO,SAAS,KAAK,OAAkB;AACrC,QAAM,WAAW,kBAAkB,EAAE;AACrC,SAAO,oBAAC,YAAU,GAAG,OAAO;AAC9B;AAGO,SAAS,UAAoB;AAClC,SAAO,WAAW,EAAE,YAAY,QAAQ;AAC1C;AAGO,SAAS,qBAA2D;AACzE,SAAO,kBAAkB,EAAE;AAC7B;","names":[]}
@@ -2,13 +2,13 @@
2
2
  import {
3
3
  deniesRetainedView,
4
4
  useRetainedSessionView
5
- } from "./chunk-TWXIFWBD.js";
5
+ } from "./chunk-34EU25RL.js";
6
6
  import {
7
7
  projectionReadThrough,
8
8
  useDebouncedCallback,
9
9
  usePolledValue,
10
10
  useSessionEventTrigger
11
- } from "./chunk-NAWXARTY.js";
11
+ } from "./chunk-2KO2G3RI.js";
12
12
  import {
13
13
  useEmbeddedSessionLineage
14
14
  } from "./chunk-TVQCDDSZ.js";
@@ -145,4 +145,4 @@ export {
145
145
  isLineageRefreshEvent,
146
146
  useSessionLineage
147
147
  };
148
- //# sourceMappingURL=chunk-QEJTQTF5.js.map
148
+ //# sourceMappingURL=chunk-W6T5HR3Z.js.map
@@ -17,7 +17,7 @@ import {
17
17
  ListRow,
18
18
  ListRowSkeleton,
19
19
  RowList
20
- } from "./chunk-NWZW2WHN.js";
20
+ } from "./chunk-JQCGPTZ6.js";
21
21
  import {
22
22
  clearGitHubInstallRequest,
23
23
  readGitHubInstallRequest,
@@ -25,7 +25,7 @@ import {
25
25
  } from "./chunk-PVNI2KHS.js";
26
26
  import {
27
27
  capabilityLogoSource
28
- } from "./chunk-ZRJCGBVV.js";
28
+ } from "./chunk-7FJMRJDG.js";
29
29
  import {
30
30
  cn
31
31
  } from "./chunk-A3MTTRCX.js";
@@ -38,6 +38,9 @@ import {
38
38
  import {
39
39
  repositoryDisplayName
40
40
  } from "./chunk-L6Y4ALSM.js";
41
+ import {
42
+ usePage
43
+ } from "./chunk-VYKW6TB2.js";
41
44
  import {
42
45
  hasWorkspacePermission
43
46
  } from "./chunk-FIDD34ZF.js";
@@ -45,23 +48,20 @@ import {
45
48
  isPersonalWorkspace
46
49
  } from "./chunk-74JEZLLQ.js";
47
50
  import {
48
- usePage
49
- } from "./chunk-MYNUBDU7.js";
51
+ useAppContext
52
+ } from "./chunk-W6KAUGXO.js";
50
53
  import {
51
54
  userErrorText
52
55
  } from "./chunk-L4OF77LE.js";
53
56
  import {
54
- useAppContext
55
- } from "./chunk-W6KAUGXO.js";
57
+ SessionCapabilityFrame
58
+ } from "./chunk-AX6YJA5U.js";
56
59
  import {
57
60
  Notice
58
61
  } from "./chunk-WLEDGIVS.js";
59
62
  import {
60
63
  Button
61
64
  } from "./chunk-HMU5IELG.js";
62
- import {
63
- SessionCapabilityFrame
64
- } from "./chunk-HRJQAFKR.js";
65
65
 
66
66
  // src/app/components/capabilities/session-github-card.tsx
67
67
  import { ArrowUpRightIcon, BookMarkedIcon, CheckIcon, Loader2Icon, LockIcon } from "lucide-react";
@@ -740,4 +740,4 @@ function repositoryGroups(rows, accountLabel) {
740
740
  export {
741
741
  SessionGitHubCapabilityCard
742
742
  };
743
- //# sourceMappingURL=chunk-VP62LPLW.js.map
743
+ //# sourceMappingURL=chunk-WCMG4HYI.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  usePolledValue
4
- } from "./chunk-NAWXARTY.js";
4
+ } from "./chunk-2KO2G3RI.js";
5
5
  import {
6
6
  useOpenGeni
7
7
  } from "./chunk-TVQCDDSZ.js";
@@ -106,4 +106,4 @@ export {
106
106
  useVaultFieldVersions,
107
107
  useSessionSecrets
108
108
  };
109
- //# sourceMappingURL=chunk-GZLLDA6P.js.map
109
+ //# sourceMappingURL=chunk-WEFN327U.js.map
@@ -84,4 +84,4 @@ export {
84
84
  FollowUpRepositoryMenuBody,
85
85
  FollowUpRepositoryPicker
86
86
  };
87
- //# sourceMappingURL=chunk-7BST7BA6.js.map
87
+ //# sourceMappingURL=chunk-WKHUZIOW.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  mcpToolLeaf
4
- } from "./chunk-STUCI6QA.js";
4
+ } from "./chunk-LEKBNKLD.js";
5
5
 
6
6
  // src/timeline/presented-image.ts
7
7
  import { normalizeMcpOutput, parseSandboxFileArtifactReceipt } from "@opengeni/sdk";
@@ -48,4 +48,4 @@ export {
48
48
  isPatchFilename,
49
49
  timelineGroupContainsPresentedImage
50
50
  };
51
- //# sourceMappingURL=chunk-ANHUMDJX.js.map
51
+ //# sourceMappingURL=chunk-WNDTLK44.js.map
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-TXS65BB2.js";
12
12
  import {
13
13
  useOpenGeniText
14
- } from "./chunk-5JZYPZ72.js";
14
+ } from "./chunk-JFK7NTEA.js";
15
15
 
16
16
  // src/types/machines.ts
17
17
  function connectionStatusForState(state) {
@@ -2551,4 +2551,4 @@ export {
2551
2551
  EnrollmentDeviceFlow,
2552
2552
  EnrollmentConsent
2553
2553
  };
2554
- //# sourceMappingURL=chunk-2DS4UOYQ.js.map
2554
+ //# sourceMappingURL=chunk-WSZQNTVN.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  SelectMenu
4
- } from "./chunk-33TPANCR.js";
4
+ } from "./chunk-TFK4KFKA.js";
5
5
  import {
6
6
  useSettingRowField
7
7
  } from "./chunk-XSOPQZGH.js";
@@ -24,4 +24,4 @@ function RowSelect(props) {
24
24
  export {
25
25
  RowSelect
26
26
  };
27
- //# sourceMappingURL=chunk-GALB2G3W.js.map
27
+ //# sourceMappingURL=chunk-X2AH4DRF.js.map
@@ -5,21 +5,21 @@ import {
5
5
  import {
6
6
  SettingRow
7
7
  } from "./chunk-XSOPQZGH.js";
8
- import {
9
- hasWorkspacePermission
10
- } from "./chunk-FIDD34ZF.js";
11
8
  import {
12
9
  toast
13
10
  } from "./chunk-YG6NARQY.js";
14
11
  import {
15
- apiErrorFacts
16
- } from "./chunk-L4OF77LE.js";
12
+ hasWorkspacePermission
13
+ } from "./chunk-FIDD34ZF.js";
17
14
  import {
18
15
  useAppContext
19
16
  } from "./chunk-W6KAUGXO.js";
20
17
  import {
21
18
  RelativeTime
22
19
  } from "./chunk-XG57V2BN.js";
20
+ import {
21
+ apiErrorFacts
22
+ } from "./chunk-L4OF77LE.js";
23
23
  import {
24
24
  Notice
25
25
  } from "./chunk-WLEDGIVS.js";
@@ -150,4 +150,4 @@ export {
150
150
  ReadOnlySessionNotice,
151
151
  KeepActiveSetting
152
152
  };
153
- //# sourceMappingURL=chunk-Z2DAWUO3.js.map
153
+ //# sourceMappingURL=chunk-XMNUZUUA.js.map
@@ -7,10 +7,10 @@ import {
7
7
  } from "./chunk-3SMJ2BIQ.js";
8
8
  import {
9
9
  BillingClassMark
10
- } from "./chunk-HGMWMK5K.js";
10
+ } from "./chunk-PO3BH3KQ.js";
11
11
  import {
12
12
  useSessionModelAccount
13
- } from "./chunk-DT7BORXG.js";
13
+ } from "./chunk-BMJTNPWK.js";
14
14
 
15
15
  // src/app/components/session/model-account-indicator.tsx
16
16
  import { jsx } from "react/jsx-runtime";
@@ -129,4 +129,4 @@ function ModelAccountIndicator({
129
129
  export {
130
130
  ModelAccountIndicator
131
131
  };
132
- //# sourceMappingURL=chunk-GAIM5RNE.js.map
132
+ //# sourceMappingURL=chunk-XN7NSPE6.js.map
@@ -0,0 +1,59 @@
1
+ "use client";
2
+ import {
3
+ cachedClientConfigRead
4
+ } from "./chunk-IGVL3ELX.js";
5
+
6
+ // src/hooks/use-client-config-flags.ts
7
+ import { useEffect, useState } from "react";
8
+ var INITIAL_FLAGS = {
9
+ loaded: false,
10
+ uploads: false,
11
+ modelSelection: false,
12
+ sandboxFiles: false,
13
+ defaultReasoningEffort: null,
14
+ artifacts: true,
15
+ sessionCreation: true,
16
+ archive: true,
17
+ voiceInput: null,
18
+ realtimeVoice: false,
19
+ realtimeVoiceOffered: false,
20
+ browserExtension: null
21
+ };
22
+ function useClientConfigFlags(client) {
23
+ const [flags, setFlags] = useState(INITIAL_FLAGS);
24
+ useEffect(() => {
25
+ if (typeof client.getClientConfig !== "function") return;
26
+ let live = true;
27
+ cachedClientConfigRead(client).then(
28
+ (config) => {
29
+ if (live) {
30
+ setFlags({
31
+ loaded: true,
32
+ uploads: config.fileUploads?.enabled === true,
33
+ // Only an explicit offer shows end users the picker.
34
+ modelSelection: config.modelSelection === true,
35
+ sandboxFiles: config.sandboxFiles !== false,
36
+ defaultReasoningEffort: config.defaultReasoningEffort ?? null,
37
+ artifacts: config.artifacts !== false,
38
+ sessionCreation: config.sessionCreation !== false,
39
+ archive: config.archive !== false,
40
+ voiceInput: config.voiceInput?.available === true ? config.voiceInput : null,
41
+ realtimeVoice: config.realtimeVoice !== false,
42
+ realtimeVoiceOffered: config.realtimeVoice === true,
43
+ browserExtension: config.browserExtension ?? null
44
+ });
45
+ }
46
+ },
47
+ () => void 0
48
+ );
49
+ return () => {
50
+ live = false;
51
+ };
52
+ }, [client]);
53
+ return flags;
54
+ }
55
+
56
+ export {
57
+ useClientConfigFlags
58
+ };
59
+ //# sourceMappingURL=chunk-XV6ZYRHK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-client-config-flags.ts"],"sourcesContent":["import type { ClientVoiceInputConfig, ReasoningEffort } from \"@opengeni/sdk\";\nimport { useEffect, useState } from \"react\";\nimport { cachedClientConfigRead } from \"../lib/client-config-read\";\n\n/** The client-config fields the stock conversation and chat read. */\nexport type ClientConfigFlagsSource = {\n getClientConfig: () => Promise<{\n fileUploads?: { enabled?: boolean };\n modelSelection?: boolean | undefined;\n sandboxFiles?: boolean | undefined;\n defaultReasoningEffort?: ReasoningEffort | undefined;\n artifacts?: unknown;\n sessionCreation?: boolean | undefined;\n archive?: boolean | undefined;\n voiceInput?: ClientVoiceInputConfig | undefined;\n realtimeVoice?: boolean | undefined;\n browserExtension?: { name: string; installUrl: string } | undefined;\n }>;\n};\n\nexport type ClientConfigFlags = {\n /** Whether the config has loaded. Proxy capability flags stay `true` until it says otherwise. */\n loaded: boolean;\n uploads: boolean;\n modelSelection: boolean;\n sandboxFiles: boolean;\n defaultReasoningEffort: ReasoningEffort | null;\n /**\n * Inline Site previews and the artifact viewer. `false` only when a session\n * proxy says it does not serve them; native deployments omit the flag.\n */\n artifacts: boolean;\n /** Browser chat creation. `false` only when a session proxy has no `createSession` hook. */\n sessionCreation: boolean;\n /** Chat archive/restore. `false` only when a session proxy disables it. */\n archive: boolean;\n /** Native voice input when the deployment can transcribe, else null. */\n voiceInput: ClientVoiceInputConfig | null;\n /**\n * Live voice. `false` until the config loads and when a session proxy turns\n * it off; availability otherwise comes from the realtime model catalog.\n */\n realtimeVoice: boolean;\n /**\n * The host explicitly offers live voice to end users (a session proxy with\n * `realtimeVoice: true`). Embedded conversations show the voice button only\n * then or when their `realtimeVoice` prop is `true`.\n */\n realtimeVoiceOffered: boolean;\n /**\n * The Chrome extension the deployment offers for people's own Chrome, or\n * null until the config loads or when the server doesn't say (Opengeni Browser).\n */\n browserExtension: { name: string; installUrl: string } | null;\n};\n\nconst INITIAL_FLAGS: ClientConfigFlags = {\n loaded: false,\n uploads: false,\n modelSelection: false,\n sandboxFiles: false,\n defaultReasoningEffort: null,\n artifacts: true,\n sessionCreation: true,\n archive: true,\n voiceInput: null,\n realtimeVoice: false,\n realtimeVoiceOffered: false,\n browserExtension: null,\n};\n\n/** Deployment and session-proxy capabilities from the client config. */\nexport function useClientConfigFlags(\n client: Partial<ClientConfigFlagsSource> | ClientConfigFlagsSource,\n): ClientConfigFlags {\n const [flags, setFlags] = useState<ClientConfigFlags>(INITIAL_FLAGS);\n useEffect(() => {\n // Custom clients without a config read keep the defaults.\n if (typeof client.getClientConfig !== \"function\") return;\n let live = true;\n // One read per client: the chat, its list, the new-chat composer and the\n // conversation all ask, and behind a session proxy each read is a round trip.\n cachedClientConfigRead(client as ClientConfigFlagsSource).then(\n (config) => {\n if (live) {\n setFlags({\n loaded: true,\n uploads: config.fileUploads?.enabled === true,\n // Only an explicit offer shows end users the picker.\n modelSelection: config.modelSelection === true,\n sandboxFiles: config.sandboxFiles !== false,\n defaultReasoningEffort: config.defaultReasoningEffort ?? null,\n artifacts: config.artifacts !== false,\n sessionCreation: config.sessionCreation !== false,\n archive: config.archive !== false,\n voiceInput: config.voiceInput?.available === true ? config.voiceInput : null,\n realtimeVoice: config.realtimeVoice !== false,\n realtimeVoiceOffered: config.realtimeVoice === true,\n browserExtension: config.browserExtension ?? null,\n });\n }\n },\n () => undefined,\n );\n return () => {\n live = false;\n };\n }, [client]);\n return flags;\n}\n"],"mappings":";;;;;;AACA,SAAS,WAAW,gBAAgB;AAuDpC,IAAM,gBAAmC;AAAA,EACvC,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,wBAAwB;AAAA,EACxB,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,sBAAsB;AAAA,EACtB,kBAAkB;AACpB;AAGO,SAAS,qBACd,QACmB;AACnB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAA4B,aAAa;AACnE,YAAU,MAAM;AAEd,QAAI,OAAO,OAAO,oBAAoB,WAAY;AAClD,QAAI,OAAO;AAGX,2BAAuB,MAAiC,EAAE;AAAA,MACxD,CAAC,WAAW;AACV,YAAI,MAAM;AACR,mBAAS;AAAA,YACP,QAAQ;AAAA,YACR,SAAS,OAAO,aAAa,YAAY;AAAA;AAAA,YAEzC,gBAAgB,OAAO,mBAAmB;AAAA,YAC1C,cAAc,OAAO,iBAAiB;AAAA,YACtC,wBAAwB,OAAO,0BAA0B;AAAA,YACzD,WAAW,OAAO,cAAc;AAAA,YAChC,iBAAiB,OAAO,oBAAoB;AAAA,YAC5C,SAAS,OAAO,YAAY;AAAA,YAC5B,YAAY,OAAO,YAAY,cAAc,OAAO,OAAO,aAAa;AAAA,YACxE,eAAe,OAAO,kBAAkB;AAAA,YACxC,sBAAsB,OAAO,kBAAkB;AAAA,YAC/C,kBAAkB,OAAO,oBAAoB;AAAA,UAC/C,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,MAAM;AAAA,IACR;AACA,WAAO,MAAM;AACX,aAAO;AAAA,IACT;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AACX,SAAO;AACT;","names":[]}
@@ -1,19 +1,19 @@
1
1
  "use client";
2
2
  import {
3
3
  ComposerUsageNotice
4
- } from "./chunk-Q35YZVDZ.js";
4
+ } from "./chunk-5Y2FPLZE.js";
5
5
  import {
6
6
  useAppShotTarget
7
- } from "./chunk-73SOCVLS.js";
7
+ } from "./chunk-AIEXYO2X.js";
8
8
  import {
9
9
  MessageContextPills
10
- } from "./chunk-A2EWJQXX.js";
10
+ } from "./chunk-SM5QX6UK.js";
11
11
  import {
12
12
  useAppContext
13
13
  } from "./chunk-W6KAUGXO.js";
14
14
  import {
15
15
  ChatComposer
16
- } from "./chunk-AD22P5X3.js";
16
+ } from "./chunk-YXA2EKV3.js";
17
17
  import {
18
18
  useFileAttachments
19
19
  } from "./chunk-I6FIXEL4.js";
@@ -79,4 +79,4 @@ export {
79
79
  useDraftAttachments,
80
80
  ConsoleComposer
81
81
  };
82
- //# sourceMappingURL=chunk-FLGUVRR7.js.map
82
+ //# sourceMappingURL=chunk-Y5BSA3I7.js.map
@@ -40,6 +40,26 @@ function artifactReturnSearch(search) {
40
40
  tab: search.tab === "versions" || search.tab === "conversations" || search.tab === "data" || search.tab === "settings" ? search.tab : void 0
41
41
  };
42
42
  }
43
+ var UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/iu;
44
+ function siteViewSearch(search) {
45
+ return {
46
+ conversation: typeof search.conversation === "string" && UUID.test(search.conversation) ? search.conversation : void 0
47
+ };
48
+ }
49
+ function workspaceSitePath(workspaceId, siteId, conversation) {
50
+ const path = `${workspacePath(workspaceId)}/sites/${encodeURIComponent(siteId)}`;
51
+ return conversation ? `${path}?conversation=${encodeURIComponent(conversation)}` : path;
52
+ }
53
+ function railRouteSelection(location) {
54
+ const session = /\/sessions\/([^/]+)/u.exec(location.pathname);
55
+ if (session) return { sessionId: session[1] ?? null, siteId: null };
56
+ const site = /^\/workspaces\/[^/]+\/sites\/([^/]+)\/?$/u.exec(location.pathname);
57
+ if (!site || !UUID.test(site[1] ?? "")) return { sessionId: null, siteId: null };
58
+ return {
59
+ sessionId: siteViewSearch(location.search).conversation ?? null,
60
+ siteId: site[1].toLowerCase()
61
+ };
62
+ }
43
63
 
44
64
  export {
45
65
  workspacePath,
@@ -51,6 +71,9 @@ export {
51
71
  workspaceSettingsPath,
52
72
  orgSettingsPath,
53
73
  parseCheckoutOutcome,
54
- artifactReturnSearch
74
+ artifactReturnSearch,
75
+ siteViewSearch,
76
+ workspaceSitePath,
77
+ railRouteSelection
55
78
  };
56
- //# sourceMappingURL=chunk-WRLWLGEF.js.map
79
+ //# sourceMappingURL=chunk-Y5E3XQ2S.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/app/lib/routes.tsx"],"sourcesContent":["// Canonical console paths. Everything is workspace-scoped; there are no\n// legacy unscoped session URLs.\n\nexport function workspacePath(workspaceId: string): string {\n return `/workspaces/${encodeURIComponent(workspaceId)}`;\n}\n\nexport function workspaceSessionsPath(workspaceId: string): string {\n return `${workspacePath(workspaceId)}/sessions`;\n}\n\n/** Back-compat name: the old \"agent\" home is now the sessions index. */\nexport function workspaceAgentPath(workspaceId: string): string {\n return workspaceSessionsPath(workspaceId);\n}\n\nexport function workspaceSessionPath(workspaceId: string, sessionId: string): string {\n return `${workspaceSessionsPath(workspaceId)}/${encodeURIComponent(sessionId)}`;\n}\n\n/** First-class durable workspace memory surface. */\nexport function workspaceMemoryPath(workspaceId: string): string {\n return `${workspacePath(workspaceId)}/memory`;\n}\n\n/** Workspace Insights — usage, spend, live ops (preview surface). */\nexport function workspaceInsightsPath(workspaceId: string): string {\n return `${workspacePath(workspaceId)}/insights`;\n}\n\n/** Workspace settings: workspace name, API keys, environments link, danger zone. */\nexport function workspaceSettingsPath(workspaceId: string): string {\n return `${workspacePath(workspaceId)}/settings`;\n}\n\n/** Organization (formerly \"account\") settings: billing, usage, plan, members. */\nexport function orgSettingsPath(workspaceId: string): string {\n return `${workspacePath(workspaceId)}/organization`;\n}\n\n// Stripe Checkout may return directly to organization billing or through the\n// API's `/billing` fallback. Keep only known outcome values for the balance\n// confirmation; a stray `?checkout=foo` never renders one.\nexport type CheckoutOutcome = \"success\" | \"cancelled\";\n\nexport function parseCheckoutOutcome(search: Record<string, unknown>): CheckoutOutcome | undefined {\n return search.checkout === \"success\" || search.checkout === \"cancelled\"\n ? search.checkout\n : undefined;\n}\n\n/** Full-page artifact return context belongs to route assembly, not the session graph. */\nexport type ArtifactReturnSearch = {\n fromSession?: string | undefined;\n kind?: \"site\" | \"image\" | \"document\" | \"spreadsheet\" | \"presentation\" | \"file\" | undefined;\n q?: string | undefined;\n sort?: \"newest\" | \"title\" | undefined;\n status?: \"archived\" | undefined;\n /**\n * Opened from the Artifacts list: show the artifact's detail page with the\n * list's previous/next controls. Without it (a link from a chat, a\n * notification, a copied or pasted URL) the artifact opens straight in its\n * full view, and leaving the full view shows the detail page.\n */\n browse?: boolean | undefined;\n /**\n * A Site's own sub-page. `publish` is kept for links made before Publish to\n * web moved into the Site's Settings tab, and opens that tab.\n */\n view?: \"publish\" | undefined;\n /** A Site page's tab other than the Site itself. */\n tab?: SiteDetailTab | undefined;\n};\n\nexport type SiteDetailTab = \"versions\" | \"conversations\" | \"data\" | \"settings\";\n\nexport function artifactReturnSearch(search: Record<string, unknown>): ArtifactReturnSearch {\n // Router match search merges validation over raw input. An omitted key would\n // leave an invalid raw fromSession available to useSearch() consumers.\n return {\n fromSession:\n typeof search.fromSession === \"string\" &&\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/iu.test(search.fromSession)\n ? search.fromSession\n : undefined,\n kind:\n search.kind === \"site\" ||\n search.kind === \"image\" ||\n search.kind === \"document\" ||\n search.kind === \"spreadsheet\" ||\n search.kind === \"presentation\" ||\n search.kind === \"file\"\n ? search.kind\n : undefined,\n q: typeof search.q === \"string\" ? search.q.slice(0, 500) || undefined : undefined,\n sort: search.sort === \"newest\" || search.sort === \"title\" ? search.sort : undefined,\n status: search.status === \"archived\" ? \"archived\" : undefined,\n browse: search.browse === true ? true : undefined,\n view: search.view === \"publish\" ? \"publish\" : undefined,\n tab:\n search.tab === \"versions\" ||\n search.tab === \"conversations\" ||\n search.tab === \"data\" ||\n search.tab === \"settings\"\n ? search.tab\n : undefined,\n };\n}\n"],"mappings":";;;AAGO,SAAS,cAAc,aAA6B;AACzD,SAAO,eAAe,mBAAmB,WAAW,CAAC;AACvD;AAEO,SAAS,sBAAsB,aAA6B;AACjE,SAAO,GAAG,cAAc,WAAW,CAAC;AACtC;AAGO,SAAS,mBAAmB,aAA6B;AAC9D,SAAO,sBAAsB,WAAW;AAC1C;AAEO,SAAS,qBAAqB,aAAqB,WAA2B;AACnF,SAAO,GAAG,sBAAsB,WAAW,CAAC,IAAI,mBAAmB,SAAS,CAAC;AAC/E;AAGO,SAAS,oBAAoB,aAA6B;AAC/D,SAAO,GAAG,cAAc,WAAW,CAAC;AACtC;AAGO,SAAS,sBAAsB,aAA6B;AACjE,SAAO,GAAG,cAAc,WAAW,CAAC;AACtC;AAGO,SAAS,sBAAsB,aAA6B;AACjE,SAAO,GAAG,cAAc,WAAW,CAAC;AACtC;AAGO,SAAS,gBAAgB,aAA6B;AAC3D,SAAO,GAAG,cAAc,WAAW,CAAC;AACtC;AAOO,SAAS,qBAAqB,QAA8D;AACjG,SAAO,OAAO,aAAa,aAAa,OAAO,aAAa,cACxD,OAAO,WACP;AACN;AA2BO,SAAS,qBAAqB,QAAuD;AAG1F,SAAO;AAAA,IACL,aACE,OAAO,OAAO,gBAAgB,YAC9B,mEAAmE,KAAK,OAAO,WAAW,IACtF,OAAO,cACP;AAAA,IACN,MACE,OAAO,SAAS,UAChB,OAAO,SAAS,WAChB,OAAO,SAAS,cAChB,OAAO,SAAS,iBAChB,OAAO,SAAS,kBAChB,OAAO,SAAS,SACZ,OAAO,OACP;AAAA,IACN,GAAG,OAAO,OAAO,MAAM,WAAW,OAAO,EAAE,MAAM,GAAG,GAAG,KAAK,SAAY;AAAA,IACxE,MAAM,OAAO,SAAS,YAAY,OAAO,SAAS,UAAU,OAAO,OAAO;AAAA,IAC1E,QAAQ,OAAO,WAAW,aAAa,aAAa;AAAA,IACpD,QAAQ,OAAO,WAAW,OAAO,OAAO;AAAA,IACxC,MAAM,OAAO,SAAS,YAAY,YAAY;AAAA,IAC9C,KACE,OAAO,QAAQ,cACf,OAAO,QAAQ,mBACf,OAAO,QAAQ,UACf,OAAO,QAAQ,aACX,OAAO,MACP;AAAA,EACR;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/app/lib/routes.tsx"],"sourcesContent":["// Canonical console paths. Everything is workspace-scoped; there are no\n// legacy unscoped session URLs.\n\nexport function workspacePath(workspaceId: string): string {\n return `/workspaces/${encodeURIComponent(workspaceId)}`;\n}\n\nexport function workspaceSessionsPath(workspaceId: string): string {\n return `${workspacePath(workspaceId)}/sessions`;\n}\n\n/** Back-compat name: the old \"agent\" home is now the sessions index. */\nexport function workspaceAgentPath(workspaceId: string): string {\n return workspaceSessionsPath(workspaceId);\n}\n\nexport function workspaceSessionPath(workspaceId: string, sessionId: string): string {\n return `${workspaceSessionsPath(workspaceId)}/${encodeURIComponent(sessionId)}`;\n}\n\n/** First-class durable workspace memory surface. */\nexport function workspaceMemoryPath(workspaceId: string): string {\n return `${workspacePath(workspaceId)}/memory`;\n}\n\n/** Workspace Insights — usage, spend, live ops (preview surface). */\nexport function workspaceInsightsPath(workspaceId: string): string {\n return `${workspacePath(workspaceId)}/insights`;\n}\n\n/** Workspace settings: workspace name, API keys, environments link, danger zone. */\nexport function workspaceSettingsPath(workspaceId: string): string {\n return `${workspacePath(workspaceId)}/settings`;\n}\n\n/** Organization (formerly \"account\") settings: billing, usage, plan, members. */\nexport function orgSettingsPath(workspaceId: string): string {\n return `${workspacePath(workspaceId)}/organization`;\n}\n\n// Stripe Checkout may return directly to organization billing or through the\n// API's `/billing` fallback. Keep only known outcome values for the balance\n// confirmation; a stray `?checkout=foo` never renders one.\nexport type CheckoutOutcome = \"success\" | \"cancelled\";\n\nexport function parseCheckoutOutcome(search: Record<string, unknown>): CheckoutOutcome | undefined {\n return search.checkout === \"success\" || search.checkout === \"cancelled\"\n ? search.checkout\n : undefined;\n}\n\n/** Full-page artifact return context belongs to route assembly, not the session graph. */\nexport type ArtifactReturnSearch = {\n fromSession?: string | undefined;\n kind?: \"site\" | \"image\" | \"document\" | \"spreadsheet\" | \"presentation\" | \"file\" | undefined;\n q?: string | undefined;\n sort?: \"newest\" | \"title\" | undefined;\n status?: \"archived\" | undefined;\n /**\n * Opened from the Artifacts list: show the artifact's detail page with the\n * list's previous/next controls. Without it (a link from a chat, a\n * notification, a copied or pasted URL) the artifact opens straight in its\n * full view, and leaving the full view shows the detail page.\n */\n browse?: boolean | undefined;\n /**\n * A Site's own sub-page. `publish` is kept for links made before Publish to\n * web moved into the Site's Settings tab, and opens that tab.\n */\n view?: \"publish\" | undefined;\n /** A Site page's tab other than the Site itself. */\n tab?: SiteDetailTab | undefined;\n};\n\nexport type SiteDetailTab = \"versions\" | \"conversations\" | \"data\" | \"settings\";\n\nexport function artifactReturnSearch(search: Record<string, unknown>): ArtifactReturnSearch {\n // Router match search merges validation over raw input. An omitted key would\n // leave an invalid raw fromSession available to useSearch() consumers.\n return {\n fromSession:\n typeof search.fromSession === \"string\" &&\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/iu.test(search.fromSession)\n ? search.fromSession\n : undefined,\n kind:\n search.kind === \"site\" ||\n search.kind === \"image\" ||\n search.kind === \"document\" ||\n search.kind === \"spreadsheet\" ||\n search.kind === \"presentation\" ||\n search.kind === \"file\"\n ? search.kind\n : undefined,\n q: typeof search.q === \"string\" ? search.q.slice(0, 500) || undefined : undefined,\n sort: search.sort === \"newest\" || search.sort === \"title\" ? search.sort : undefined,\n status: search.status === \"archived\" ? \"archived\" : undefined,\n browse: search.browse === true ? true : undefined,\n view: search.view === \"publish\" ? \"publish\" : undefined,\n tab:\n search.tab === \"versions\" ||\n search.tab === \"conversations\" ||\n search.tab === \"data\" ||\n search.tab === \"settings\"\n ? search.tab\n : undefined,\n };\n}\n\nconst UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/iu;\n\n/** The Site view: the Site with its conversations beside it, one of them open. */\nexport type SiteViewSearch = { conversation?: string | undefined };\n\nexport function siteViewSearch(search: Record<string, unknown>): SiteViewSearch {\n return {\n conversation:\n typeof search.conversation === \"string\" && UUID.test(search.conversation)\n ? search.conversation\n : undefined,\n };\n}\n\nexport function workspaceSitePath(\n workspaceId: string,\n siteId: string,\n conversation?: string | undefined,\n): string {\n const path = `${workspacePath(workspaceId)}/sites/${encodeURIComponent(siteId)}`;\n return conversation ? `${path}?conversation=${encodeURIComponent(conversation)}` : path;\n}\n\n/**\n * What the rail marks as open for a location: a session page's session, or a\n * Site view's Site and its selected conversation.\n */\nexport function railRouteSelection(location: {\n pathname: string;\n search: Record<string, unknown>;\n}): { sessionId: string | null; siteId: string | null } {\n const session = /\\/sessions\\/([^/]+)/u.exec(location.pathname);\n if (session) return { sessionId: session[1] ?? null, siteId: null };\n const site = /^\\/workspaces\\/[^/]+\\/sites\\/([^/]+)\\/?$/u.exec(location.pathname);\n // Site ids are UUIDs; anything else (including a malformed escape) is no Site.\n if (!site || !UUID.test(site[1] ?? \"\")) return { sessionId: null, siteId: null };\n return {\n sessionId: siteViewSearch(location.search).conversation ?? null,\n siteId: site[1]!.toLowerCase(),\n };\n}\n"],"mappings":";;;AAGO,SAAS,cAAc,aAA6B;AACzD,SAAO,eAAe,mBAAmB,WAAW,CAAC;AACvD;AAEO,SAAS,sBAAsB,aAA6B;AACjE,SAAO,GAAG,cAAc,WAAW,CAAC;AACtC;AAGO,SAAS,mBAAmB,aAA6B;AAC9D,SAAO,sBAAsB,WAAW;AAC1C;AAEO,SAAS,qBAAqB,aAAqB,WAA2B;AACnF,SAAO,GAAG,sBAAsB,WAAW,CAAC,IAAI,mBAAmB,SAAS,CAAC;AAC/E;AAGO,SAAS,oBAAoB,aAA6B;AAC/D,SAAO,GAAG,cAAc,WAAW,CAAC;AACtC;AAGO,SAAS,sBAAsB,aAA6B;AACjE,SAAO,GAAG,cAAc,WAAW,CAAC;AACtC;AAGO,SAAS,sBAAsB,aAA6B;AACjE,SAAO,GAAG,cAAc,WAAW,CAAC;AACtC;AAGO,SAAS,gBAAgB,aAA6B;AAC3D,SAAO,GAAG,cAAc,WAAW,CAAC;AACtC;AAOO,SAAS,qBAAqB,QAA8D;AACjG,SAAO,OAAO,aAAa,aAAa,OAAO,aAAa,cACxD,OAAO,WACP;AACN;AA2BO,SAAS,qBAAqB,QAAuD;AAG1F,SAAO;AAAA,IACL,aACE,OAAO,OAAO,gBAAgB,YAC9B,mEAAmE,KAAK,OAAO,WAAW,IACtF,OAAO,cACP;AAAA,IACN,MACE,OAAO,SAAS,UAChB,OAAO,SAAS,WAChB,OAAO,SAAS,cAChB,OAAO,SAAS,iBAChB,OAAO,SAAS,kBAChB,OAAO,SAAS,SACZ,OAAO,OACP;AAAA,IACN,GAAG,OAAO,OAAO,MAAM,WAAW,OAAO,EAAE,MAAM,GAAG,GAAG,KAAK,SAAY;AAAA,IACxE,MAAM,OAAO,SAAS,YAAY,OAAO,SAAS,UAAU,OAAO,OAAO;AAAA,IAC1E,QAAQ,OAAO,WAAW,aAAa,aAAa;AAAA,IACpD,QAAQ,OAAO,WAAW,OAAO,OAAO;AAAA,IACxC,MAAM,OAAO,SAAS,YAAY,YAAY;AAAA,IAC9C,KACE,OAAO,QAAQ,cACf,OAAO,QAAQ,mBACf,OAAO,QAAQ,UACf,OAAO,QAAQ,aACX,OAAO,MACP;AAAA,EACR;AACF;AAEA,IAAM,OAAO;AAKN,SAAS,eAAe,QAAiD;AAC9E,SAAO;AAAA,IACL,cACE,OAAO,OAAO,iBAAiB,YAAY,KAAK,KAAK,OAAO,YAAY,IACpE,OAAO,eACP;AAAA,EACR;AACF;AAEO,SAAS,kBACd,aACA,QACA,cACQ;AACR,QAAM,OAAO,GAAG,cAAc,WAAW,CAAC,UAAU,mBAAmB,MAAM,CAAC;AAC9E,SAAO,eAAe,GAAG,IAAI,iBAAiB,mBAAmB,YAAY,CAAC,KAAK;AACrF;AAMO,SAAS,mBAAmB,UAGqB;AACtD,QAAM,UAAU,uBAAuB,KAAK,SAAS,QAAQ;AAC7D,MAAI,QAAS,QAAO,EAAE,WAAW,QAAQ,CAAC,KAAK,MAAM,QAAQ,KAAK;AAClE,QAAM,OAAO,4CAA4C,KAAK,SAAS,QAAQ;AAE/E,MAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE,EAAG,QAAO,EAAE,WAAW,MAAM,QAAQ,KAAK;AAC/E,SAAO;AAAA,IACL,WAAW,eAAe,SAAS,MAAM,EAAE,gBAAgB;AAAA,IAC3D,QAAQ,KAAK,CAAC,EAAG,YAAY;AAAA,EAC/B;AACF;","names":[]}
@@ -1,23 +1,23 @@
1
1
  "use client";
2
- import {
3
- ListRow,
4
- ListRowSkeleton,
5
- RowList
6
- } from "./chunk-NWZW2WHN.js";
7
2
  import {
8
3
  Toolbar,
9
4
  ToolbarGroup,
10
5
  ToolbarSearch
11
6
  } from "./chunk-BBWKPNJB.js";
12
7
  import {
13
- sessionStateLabel
14
- } from "./chunk-GTQ3SNEI.js";
8
+ ListRow,
9
+ ListRowSkeleton,
10
+ RowList
11
+ } from "./chunk-JQCGPTZ6.js";
15
12
  import {
16
- EmptyState
17
- } from "./chunk-5CIUQX6D.js";
13
+ sessionStateLabel
14
+ } from "./chunk-CD3MO3IC.js";
18
15
  import {
19
16
  SegmentedControl
20
17
  } from "./chunk-325C2TCI.js";
18
+ import {
19
+ EmptyState
20
+ } from "./chunk-5CIUQX6D.js";
21
21
  import {
22
22
  LogoTile
23
23
  } from "./chunk-FQQEZUSN.js";
@@ -26,22 +26,22 @@ import {
26
26
  } from "./chunk-YG6NARQY.js";
27
27
  import {
28
28
  useNavigate
29
- } from "./chunk-MYNUBDU7.js";
29
+ } from "./chunk-VYKW6TB2.js";
30
+ import {
31
+ useAppContext
32
+ } from "./chunk-W6KAUGXO.js";
30
33
  import {
31
34
  userErrorText
32
35
  } from "./chunk-L4OF77LE.js";
33
36
  import {
34
- useAppContext
35
- } from "./chunk-W6KAUGXO.js";
37
+ sessionDisplayTitle
38
+ } from "./chunk-22JFMNMF.js";
36
39
  import {
37
40
  Notice
38
41
  } from "./chunk-WLEDGIVS.js";
39
42
  import {
40
43
  Button
41
44
  } from "./chunk-HMU5IELG.js";
42
- import {
43
- sessionDisplayTitle
44
- } from "./chunk-Z5WMLJKI.js";
45
45
 
46
46
  // src/app/components/artifacts/site-conversations.tsx
47
47
  import { useCallback, useEffect, useRef, useState } from "react";
@@ -248,4 +248,4 @@ export {
248
248
  SiteConversations,
249
249
  SiteConversationsPanel
250
250
  };
251
- //# sourceMappingURL=chunk-QCD5Y7K5.js.map
251
+ //# sourceMappingURL=chunk-YEROLKOA.js.map