@opengeni/react 4.2.1-canary.39642758903001 → 4.3.1

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 (693) hide show
  1. package/dist/app/app-state.js +27 -27
  2. package/dist/app/components/Composer.js +27 -26
  3. package/dist/app/components/agent/agent-capability-picker.js +5 -5
  4. package/dist/app/components/artifacts/artifact-library.js +19 -19
  5. package/dist/app/components/artifacts/chat-interactive-block.js +16 -16
  6. package/dist/app/components/artifacts/inline-chat-image.js +31 -30
  7. package/dist/app/components/artifacts/retained-file-preview.js +35 -34
  8. package/dist/app/components/artifacts/retained-text-preview.js +5 -5
  9. package/dist/app/components/artifacts/site-audience.js +5 -5
  10. package/dist/app/components/artifacts/site-conversations.js +24 -22
  11. package/dist/app/components/artifacts/site-data.js +20 -20
  12. package/dist/app/components/artifacts/site-publishing.js +39 -39
  13. package/dist/app/components/artifacts/site-settings.js +48 -48
  14. package/dist/app/components/billing-class-mark.js +5 -5
  15. package/dist/app/components/capabilities/capability-detail-sheet.js +9 -9
  16. package/dist/app/components/capabilities/capability-logo-source.js +13 -12
  17. package/dist/app/components/capabilities/connection-account-picker.js +2 -2
  18. package/dist/app/components/capabilities/connector-tool-permissions.js +5 -5
  19. package/dist/app/components/capabilities/native-connect-setup.js +14 -13
  20. package/dist/app/components/capabilities/native-connect-setup.js.map +1 -1
  21. package/dist/app/components/capabilities/perform-capability-action.js +3 -3
  22. package/dist/app/components/capabilities/prepared-mcp-setup-card.js +15 -14
  23. package/dist/app/components/capabilities/session-capability-card.js +78 -77
  24. package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
  25. package/dist/app/components/capabilities/session-custom-mcp-card.js +20 -19
  26. package/dist/app/components/capabilities/session-github-card.js +25 -24
  27. package/dist/app/components/capabilities/session-machine-card.js +38 -38
  28. package/dist/app/components/capabilities/use-capabilities-catalog.js +3 -3
  29. package/dist/app/components/capabilities/use-connection-accounts.js +1 -1
  30. package/dist/app/components/command-menu/chat-switcher.d.ts +12 -0
  31. package/dist/app/components/command-menu/chat-switcher.js +142 -0
  32. package/dist/app/components/command-menu/chat-switcher.js.map +1 -0
  33. package/dist/app/components/command-menu/command-menu.d.ts +15 -0
  34. package/dist/app/components/command-menu/command-menu.js +812 -0
  35. package/dist/app/components/command-menu/command-menu.js.map +1 -0
  36. package/dist/app/components/command-menu/keycaps.d.ts +21 -0
  37. package/dist/app/components/command-menu/keycaps.js +12 -0
  38. package/dist/app/components/command-menu/shortcut-sheet.d.ts +12 -0
  39. package/dist/app/components/command-menu/shortcut-sheet.js +150 -0
  40. package/dist/app/components/command-menu/shortcut-sheet.js.map +1 -0
  41. package/dist/app/components/composer-capabilities-menu-body.js +3 -3
  42. package/dist/app/components/composer-mobile-plus-panel.js +21 -21
  43. package/dist/app/components/composer-mobile-plus.js +3 -3
  44. package/dist/app/components/credit-required-gate.js +1 -1
  45. package/dist/app/components/credit-required-prompt.js +16 -16
  46. package/dist/app/components/credits/coupon-redeem.js +2 -2
  47. package/dist/app/components/credits/credit-refusal-notice.d.ts +18 -0
  48. package/dist/app/components/credits/credit-refusal-notice.js +17 -0
  49. package/dist/app/components/cross-slot-deep-link-recovery.js +1 -1
  50. package/dist/app/components/desktop/app-shots.js +6 -6
  51. package/dist/app/components/desktop/this-computer.js +4 -4
  52. package/dist/app/components/feedback.js +5 -5
  53. package/dist/app/components/follow-up-repository-menu-body.js +7 -7
  54. package/dist/app/components/follow-up-repository-picker.js +3 -3
  55. package/dist/app/components/github-app-connect-launcher.js +1 -1
  56. package/dist/app/components/knowledge/agent-learning-settings.js +6 -6
  57. package/dist/app/components/machines/connect-machine-dialog.js +18 -18
  58. package/dist/app/components/manual-repository-editor.js +2 -2
  59. package/dist/app/components/markdown.js +10 -9
  60. package/dist/app/components/message-context-pills.js +2 -2
  61. package/dist/app/components/models/models-ui.js +10 -10
  62. package/dist/app/components/pickers.js +10 -10
  63. package/dist/app/components/rail/rail-context.d.ts +6 -0
  64. package/dist/app/components/rail/rail-context.js +3 -3
  65. package/dist/app/components/rail/rail-sections.js +61 -55
  66. package/dist/app/components/rail/session-browse-order-controls.js +2 -2
  67. package/dist/app/components/rail/session-header.js +50 -36
  68. package/dist/app/components/rail/session-list.js +59 -52
  69. package/dist/app/components/rail/session-row-hover-details.js +25 -23
  70. package/dist/app/components/rail/session-shell.js +96 -91
  71. package/dist/app/components/repository-picker.js +7 -7
  72. package/dist/app/components/secrets/session-secrets-panel.js +4 -4
  73. package/dist/app/components/session/agent-configuration-panel.js +34 -34
  74. package/dist/app/components/session/banners.js +12 -11
  75. package/dist/app/components/session/codex-account-indicator.js +12 -12
  76. package/dist/app/components/session/composer-menu-radio.js +2 -2
  77. package/dist/app/components/session/conversation-find.js +1 -1
  78. package/dist/app/components/session/editable-artifacts-workspace.js +45 -45
  79. package/dist/app/components/session/failed-session-banner.js +12 -12
  80. package/dist/app/components/session/human-input.js +48 -47
  81. package/dist/app/components/session/inspector.js +80 -79
  82. package/dist/app/components/session/inspector.js.map +1 -1
  83. package/dist/app/components/session/message-actions.js +5 -5
  84. package/dist/app/components/session/message-resource-attachments.js +21 -20
  85. package/dist/app/components/session/message-resource-attachments.js.map +1 -1
  86. package/dist/app/components/session/model-account-indicator.js +11 -11
  87. package/dist/app/components/session/model-context-inspector.js +2 -2
  88. package/dist/app/components/session/model-recovery-notice.js +3 -3
  89. package/dist/app/components/session/new-session-settings-menu.js +13 -13
  90. package/dist/app/components/session/sandbox-switcher.js +16 -16
  91. package/dist/app/components/session/sandbox-workspace.js +68 -67
  92. package/dist/app/components/session/search-markdown-highlight.js +11 -10
  93. package/dist/app/components/session/search-results-view.js +12 -11
  94. package/dist/app/components/session/session-admin-access.js +11 -11
  95. package/dist/app/components/session/session-retention.js +4 -4
  96. package/dist/app/components/session/session-search-dialog.d.ts +5 -0
  97. package/dist/app/components/session/session-search-dialog.js +22 -12
  98. package/dist/app/components/session/session-search-dialog.js.map +1 -1
  99. package/dist/app/components/session/session-skill-reviews.js +3 -3
  100. package/dist/app/components/session/session-tenancy-control.js +25 -25
  101. package/dist/app/components/session/session-usage-limit-section.js +9 -9
  102. package/dist/app/components/session/session-wait-status.js +11 -9
  103. package/dist/app/components/session/session-wait-status.js.map +1 -1
  104. package/dist/app/components/session/subagents.js +17 -15
  105. package/dist/app/components/session/subscription-account-menu.js +2 -2
  106. package/dist/app/components/session-connectors-menu-body.js +6 -6
  107. package/dist/app/components/settings/row-select.js +1 -1
  108. package/dist/app/components/transcription-settings.js +2 -2
  109. package/dist/app/components/ui/destructive-confirm.js +8 -8
  110. package/dist/app/components/usage/usage-entry.js +6 -6
  111. package/dist/app/components/workspace-composer-plus.js +22 -21
  112. package/dist/app/embed/session-app.js +264 -258
  113. package/dist/app/lib/actions/actions-provider.d.ts +30 -0
  114. package/dist/app/lib/actions/actions-provider.js +32 -0
  115. package/dist/app/lib/actions/chat-directory.d.ts +30 -0
  116. package/dist/app/lib/actions/chat-operations.d.ts +11 -0
  117. package/dist/app/lib/actions/chat-switcher.d.ts +31 -0
  118. package/dist/app/lib/actions/chords.d.ts +40 -0
  119. package/dist/app/lib/actions/events.d.ts +6 -0
  120. package/dist/app/lib/actions/rank.d.ts +17 -0
  121. package/dist/app/lib/actions/registry.d.ts +71 -0
  122. package/dist/app/lib/codex-usage-query.js +3 -3
  123. package/dist/app/lib/composer-connectors.js +14 -13
  124. package/dist/app/lib/console-text.js +2 -2
  125. package/dist/app/lib/credit-coverage.d.ts +21 -0
  126. package/dist/app/lib/credit-coverage.js +15 -0
  127. package/dist/app/lib/deployment-free-model.js +2 -2
  128. package/dist/app/lib/events.js +19 -18
  129. package/dist/app/lib/failed-session-copy.js +5 -5
  130. package/dist/app/lib/free-credit-gap.d.ts +9 -0
  131. package/dist/app/lib/free-credit-gap.js +4 -2
  132. package/dist/app/lib/integration-connect-analytics.d.ts +1 -1
  133. package/dist/app/lib/integration-connect-analytics.js +1 -1
  134. package/dist/app/lib/integration-connect-redirect.js +1 -1
  135. package/dist/app/lib/model-access-onboarding.js +4 -4
  136. package/dist/app/lib/model-policy.js +1 -1
  137. package/dist/app/lib/models-route.d.ts +6 -2
  138. package/dist/app/lib/models-route.js +6 -3
  139. package/dist/app/lib/models-route.js.map +1 -1
  140. package/dist/app/lib/move-chat-to-machine.js +3 -3
  141. package/dist/app/lib/session-branch-cache.js +15 -13
  142. package/dist/app/lib/session-create.js +2 -2
  143. package/dist/app/lib/session-group-pagination.js +15 -13
  144. package/dist/app/lib/session-hover-facts.js +16 -14
  145. package/dist/app/lib/session-model.js +3 -3
  146. package/dist/app/lib/session-rail.js +11 -9
  147. package/dist/app/lib/session-rename.js +3 -3
  148. package/dist/app/lib/session-search-route.d.ts +1 -1
  149. package/dist/app/lib/session-search-route.js +1 -1
  150. package/dist/app/lib/session-ui-features.d.ts +11 -3
  151. package/dist/app/lib/session-ui-features.js +1 -1
  152. package/dist/app/lib/sessions-group.js +15 -13
  153. package/dist/app/lib/turn-failure-analytics.js +7 -7
  154. package/dist/app/lib/unavailable-session-model.js +2 -2
  155. package/dist/app/lib/use-duplicate-site.js +2 -2
  156. package/dist/app/lib/use-follow-up-repositories.js +3 -3
  157. package/dist/app/lib/use-workspace-machines.js +8 -8
  158. package/dist/app/lib/use-workspace-model-catalog.js +6 -6
  159. package/dist/app/lib/use-workspace-rigs.js +4 -4
  160. package/dist/app/lib/workspace-navigation-preference.js +5 -5
  161. package/dist/app/lib/workspace-scope-context.js +4 -4
  162. package/dist/app/routes/artifacts.js +124 -122
  163. package/dist/app/routes/artifacts.js.map +1 -1
  164. package/dist/app/routes/retained-artifact.js +69 -68
  165. package/dist/app/routes/retained-artifact.js.map +1 -1
  166. package/dist/app/routes/session-unavailable.js +3 -3
  167. package/dist/app/routes/session.js +168 -166
  168. package/dist/app/routes/sessions-index-hydration.js +3 -3
  169. package/dist/app/routes/sessions-index.js +122 -116
  170. package/dist/artifacts-document.js +4 -4
  171. package/dist/artifacts-presentation.js +4 -4
  172. package/dist/artifacts-spreadsheet.js +4 -4
  173. package/dist/artifacts.js +39 -39
  174. package/dist/{browser-viewer-ZRFZX3VN.js → browser-viewer-HPUMK7UP.js} +7 -7
  175. package/dist/{chat-interactive-block-HUMYWVCK.js → chat-interactive-block-22PPECCT.js} +6 -6
  176. package/dist/{chunk-GVIQ7H62.js → chunk-2LUBBDZV.js} +5 -5
  177. package/dist/{chunk-SWWYYGQO.js → chunk-325C2TCI.js} +5 -2
  178. package/dist/chunk-325C2TCI.js.map +1 -0
  179. package/dist/{chunk-XMMVIY7B.js → chunk-3CCJWHQY.js} +2 -2
  180. package/dist/{chunk-XS2FZ6DX.js → chunk-3F5ZPIWI.js} +2 -2
  181. package/dist/{chunk-72US6QNB.js → chunk-3J2YZRY5.js} +2 -2
  182. package/dist/{chunk-D4YQF4E3.js → chunk-3SMJ2BIQ.js} +2 -2
  183. package/dist/{chunk-TBJINQXA.js → chunk-3WCYK36X.js} +17 -17
  184. package/dist/{chunk-WPCF34V6.js → chunk-3WG3CRL7.js} +14 -14
  185. package/dist/{chunk-JI5BYQKO.js → chunk-3X46PNBX.js} +14 -14
  186. package/dist/{chunk-UO36FC3S.js → chunk-46I7MMAL.js} +6 -2
  187. package/dist/chunk-46I7MMAL.js.map +1 -0
  188. package/dist/{chunk-PBK44WJC.js → chunk-4GJ37O6G.js} +2 -2
  189. package/dist/chunk-4IWBQUQU.js +152 -0
  190. package/dist/chunk-4IWBQUQU.js.map +1 -0
  191. package/dist/{chunk-LEXPBQ56.js → chunk-4SKJX3C4.js} +6 -6
  192. package/dist/{chunk-ZA6YD2LW.js → chunk-57SYK776.js} +2 -2
  193. package/dist/{chunk-22LBKJDE.js → chunk-5DIAN5GQ.js} +12 -12
  194. package/dist/{chunk-LJ3TDK2L.js → chunk-5FA455GR.js} +4 -4
  195. package/dist/{chunk-N2BEUKXT.js → chunk-5FBZDEHE.js} +228 -228
  196. package/dist/chunk-5FBZDEHE.js.map +1 -0
  197. package/dist/{chunk-YPR5INHV.js → chunk-5X3E2Z3D.js} +4 -4
  198. package/dist/{chunk-OXNWZTEU.js → chunk-5ZJCL6X4.js} +5 -5
  199. package/dist/{chunk-62OAZ4LO.js → chunk-6C5GQQMC.js} +12 -12
  200. package/dist/{chunk-VGITH57T.js → chunk-6ERTXDZM.js} +4 -4
  201. package/dist/{chunk-ZQ7XQZCF.js → chunk-6FX73Y4I.js} +8 -8
  202. package/dist/{chunk-QZO2KK2F.js → chunk-6P44NG6Y.js} +2 -2
  203. package/dist/{chunk-N2DDJLTM.js → chunk-6T7Y33JA.js} +3 -3
  204. package/dist/{chunk-RBAGC2MJ.js → chunk-75VE5QUS.js} +22 -22
  205. package/dist/{chunk-MRXOGI3O.js → chunk-77CUDSHG.js} +9 -9
  206. package/dist/{chunk-F2GXK2Z6.js → chunk-7G446JFO.js} +431 -348
  207. package/dist/chunk-7G446JFO.js.map +1 -0
  208. package/dist/{chunk-GZ65XQR5.js → chunk-7T7FHSGS.js} +3 -3
  209. package/dist/{chunk-YGAH34CD.js → chunk-A3S26JSP.js} +8 -8
  210. package/dist/{chunk-GYPAO6RS.js → chunk-A664GSDM.js} +8 -8
  211. package/dist/{chunk-JSZSNMDR.js → chunk-ASUYLXKO.js} +2 -2
  212. package/dist/{chunk-RTK7SUPL.js → chunk-AUUJLVA3.js} +7 -7
  213. package/dist/{chunk-OOTBYSCA.js → chunk-BBWKPNJB.js} +5 -5
  214. package/dist/{chunk-BGZIMIUU.js → chunk-BCUYWOQU.js} +2 -2
  215. package/dist/{chunk-EKN4N4LS.js → chunk-BDFMNJZJ.js} +2 -2
  216. package/dist/{chunk-YZKGOWCC.js → chunk-BIDXQAGO.js} +2 -2
  217. package/dist/{chunk-Q2UUANHF.js → chunk-BIKAJ4DY.js} +5 -5
  218. package/dist/{chunk-5IQBF2X3.js → chunk-BJPJ2OUX.js} +3 -3
  219. package/dist/{chunk-EY2EMHZW.js → chunk-BPM2OTYK.js} +8 -8
  220. package/dist/{chunk-MT4TBRQB.js → chunk-BSWS2RUZ.js} +2 -2
  221. package/dist/{chunk-T7YD3VGK.js → chunk-C52MNKXU.js} +12 -12
  222. package/dist/{chunk-THNW33K7.js → chunk-CEUDV4OA.js} +18 -18
  223. package/dist/{chunk-GRLPRM56.js → chunk-CFEFYPNR.js} +8 -2
  224. package/dist/chunk-CFEFYPNR.js.map +1 -0
  225. package/dist/{chunk-LHGIS6SZ.js → chunk-CVK74BH7.js} +2 -2
  226. package/dist/{chunk-DFO2UCYG.js → chunk-CW5I65ZX.js} +11 -11
  227. package/dist/chunk-DKNTQDVL.js +86 -0
  228. package/dist/chunk-DKNTQDVL.js.map +1 -0
  229. package/dist/{chunk-SKRLKQEG.js → chunk-DOSC2HRQ.js} +79 -79
  230. package/dist/{chunk-KVB6XDLP.js → chunk-DPJ2CWVN.js} +2 -2
  231. package/dist/{chunk-4J6V4DH7.js → chunk-DXMRO2MU.js} +3 -3
  232. package/dist/{chunk-42I4O4WQ.js → chunk-EE55IDDR.js} +26 -26
  233. package/dist/{chunk-2RA6XABP.js → chunk-EEERTLFF.js} +12 -12
  234. package/dist/{chunk-PTOTKUKO.js → chunk-EEO744XR.js} +8 -8
  235. package/dist/{chunk-LD3HVI2J.js → chunk-EMFGBAQL.js} +6 -6
  236. package/dist/{chunk-FQGUK4ST.js → chunk-ENPJKVMN.js} +38 -38
  237. package/dist/{chunk-HDHK3SXK.js → chunk-EU6RLHMP.js} +4 -4
  238. package/dist/{chunk-G7VLL3PG.js → chunk-F2YABPRJ.js} +13 -4
  239. package/dist/chunk-F2YABPRJ.js.map +1 -0
  240. package/dist/{chunk-MRUWRQBX.js → chunk-FET6XHGS.js} +2 -2
  241. package/dist/{chunk-M6KUY3YH.js → chunk-FIICQA55.js} +2 -2
  242. package/dist/{chunk-NLWLCYCT.js → chunk-FTZXCPE3.js} +19 -19
  243. package/dist/{chunk-FN2KA3MJ.js → chunk-FUS76DO4.js} +3 -3
  244. package/dist/{chunk-AM4IIPWI.js → chunk-G7N5NPRJ.js} +2 -2
  245. package/dist/{chunk-CCQ7YKOD.js → chunk-GBYZ6653.js} +2 -2
  246. package/dist/{chunk-SOOWLNC5.js → chunk-GJUPLSC5.js} +330 -109
  247. package/dist/chunk-GJUPLSC5.js.map +1 -0
  248. package/dist/{chunk-YKKVIJVX.js → chunk-GQDSC6QZ.js} +5 -5
  249. package/dist/chunk-GQGNRL2L.js +53 -0
  250. package/dist/chunk-GQGNRL2L.js.map +1 -0
  251. package/dist/{chunk-5X6JP75Q.js → chunk-GRSODLVO.js} +4 -4
  252. package/dist/{chunk-73YP3R5X.js → chunk-GSESCQFY.js} +4 -4
  253. package/dist/{chunk-KWB5U3ZT.js → chunk-GWRW4N3T.js} +199 -137
  254. package/dist/chunk-GWRW4N3T.js.map +1 -0
  255. package/dist/{chunk-RTR7RNG4.js → chunk-GYRU4PNM.js} +9 -7
  256. package/dist/{chunk-RTR7RNG4.js.map → chunk-GYRU4PNM.js.map} +1 -1
  257. package/dist/{chunk-MZLEBFUZ.js → chunk-GZD6VBIK.js} +3 -3
  258. package/dist/{chunk-IZR2QRFF.js → chunk-H3HH5AHS.js} +4 -4
  259. package/dist/{chunk-DN3TKURW.js → chunk-H3LIIAGE.js} +4 -54
  260. package/dist/chunk-H3LIIAGE.js.map +1 -0
  261. package/dist/{chunk-NPLEQMNM.js → chunk-H5GWAG4I.js} +7 -5
  262. package/dist/{chunk-NPLEQMNM.js.map → chunk-H5GWAG4I.js.map} +1 -1
  263. package/dist/{chunk-OJPUVUB6.js → chunk-HAOZCLLA.js} +3 -3
  264. package/dist/{chunk-ZBHDGAYL.js → chunk-HEFE4OZJ.js} +2 -2
  265. package/dist/{chunk-WTG34JVA.js → chunk-HI75UTI6.js} +2 -2
  266. package/dist/{chunk-OMBIG3NC.js → chunk-HM633ROV.js} +14 -14
  267. package/dist/{chunk-WDFZWSKD.js → chunk-HRIP4M6H.js} +3 -3
  268. package/dist/{chunk-A2BCW6CQ.js → chunk-HU2DRFFI.js} +3 -3
  269. package/dist/{chunk-PO35PBAB.js → chunk-HVH7FFJH.js} +2 -2
  270. package/dist/{chunk-EG7KNUF7.js → chunk-HYTXTKST.js} +18 -18
  271. package/dist/{chunk-TFHG75A4.js → chunk-I4XMDFUJ.js} +7 -7
  272. package/dist/{chunk-IZHVZZQA.js → chunk-ICAUYWSL.js} +9 -9
  273. package/dist/{chunk-ZSERYHHT.js → chunk-IDMXEPHL.js} +150 -150
  274. package/dist/chunk-IDMXEPHL.js.map +1 -0
  275. package/dist/{chunk-DCLPWYP3.js → chunk-IEVPJ3G6.js} +2 -2
  276. package/dist/{chunk-EVWZHDSF.js → chunk-IKH3VTA4.js} +2 -2
  277. package/dist/{chunk-L5UCO2UV.js → chunk-ILBSBZGC.js} +13 -4
  278. package/dist/chunk-ILBSBZGC.js.map +1 -0
  279. package/dist/{chunk-IO6K6UYJ.js → chunk-IQ64BNAG.js} +4 -2
  280. package/dist/chunk-IQ64BNAG.js.map +1 -0
  281. package/dist/{chunk-TYHLEFD2.js → chunk-IZJNMRIR.js} +9 -9
  282. package/dist/{chunk-D2SR3TEB.js → chunk-J243WGUA.js} +2 -2
  283. package/dist/{chunk-QGSGIYE3.js → chunk-J2C6LB6W.js} +4 -4
  284. package/dist/{chunk-MT6TRTXF.js → chunk-J5MEDX7C.js} +9 -9
  285. package/dist/{chunk-6QHUKBJP.js → chunk-J7SKOO44.js} +2 -2
  286. package/dist/{chunk-W2QK7PYS.js → chunk-JAAST75A.js} +11 -11
  287. package/dist/{chunk-NQCMS4AJ.js → chunk-JQCGPTZ6.js} +9 -9
  288. package/dist/chunk-JRJUSKDY.js +832 -0
  289. package/dist/chunk-JRJUSKDY.js.map +1 -0
  290. package/dist/{chunk-CMUXJHGH.js → chunk-JRSCWQMC.js} +9 -9
  291. package/dist/{chunk-Q4OHNGGB.js → chunk-JRXHSVD5.js} +4 -4
  292. package/dist/{chunk-SD2K5ZN5.js → chunk-JXYLDT6X.js} +4 -4
  293. package/dist/{chunk-S3M5WCZW.js → chunk-KA4LV7G6.js} +35 -50
  294. package/dist/chunk-KA4LV7G6.js.map +1 -0
  295. package/dist/{chunk-IXX6ZOL2.js → chunk-KGTMHEAP.js} +7 -7
  296. package/dist/{chunk-22OBGVEJ.js → chunk-KOXVGPW4.js} +3 -3
  297. package/dist/{chunk-NOZ5CGZE.js → chunk-L5GPPMUB.js} +2 -2
  298. package/dist/{chunk-KIHYJM5F.js → chunk-LXJT4WAW.js} +58 -58
  299. package/dist/{chunk-KIHYJM5F.js.map → chunk-LXJT4WAW.js.map} +1 -1
  300. package/dist/{chunk-4FOOHMTU.js → chunk-LY6727IF.js} +1 -1
  301. package/dist/{chunk-PT7MTXRE.js → chunk-MAOCN7J6.js} +2 -2
  302. package/dist/{chunk-4K2JSJNX.js → chunk-MB5LZVDO.js} +2 -2
  303. package/dist/chunk-MF464AKA.js +139 -0
  304. package/dist/chunk-MF464AKA.js.map +1 -0
  305. package/dist/{chunk-UYSZKDQY.js → chunk-MK54JLE4.js} +1 -1
  306. package/dist/chunk-MK54JLE4.js.map +1 -0
  307. package/dist/{chunk-5LES64PP.js → chunk-MKOQAVOE.js} +21 -21
  308. package/dist/{chunk-BMV2SNYX.js → chunk-MUPWNSEJ.js} +18 -18
  309. package/dist/{chunk-Y5TRG22C.js → chunk-NRXIECWC.js} +2 -2
  310. package/dist/{chunk-GOE7G5JX.js → chunk-NWSAF6P5.js} +2 -2
  311. package/dist/chunk-OB3YGXHQ.js +158 -0
  312. package/dist/chunk-OB3YGXHQ.js.map +1 -0
  313. package/dist/{chunk-DUM363VS.js → chunk-OFZQJNF6.js} +5 -5
  314. package/dist/{chunk-CKN5QPEL.js → chunk-OMF7POEY.js} +2 -2
  315. package/dist/{chunk-MVXKO2BD.js → chunk-OXD6ET34.js} +1 -1
  316. package/dist/{chunk-47JUEVME.js → chunk-PALX6HWV.js} +21 -21
  317. package/dist/{chunk-B6OGSG7I.js → chunk-PE3BLBDT.js} +3 -3
  318. package/dist/{chunk-RVISSNVE.js → chunk-PMZKJOG6.js} +15 -15
  319. package/dist/{chunk-CESAMXWX.js → chunk-PQUTMG3S.js} +2 -2
  320. package/dist/{chunk-7VFCOKPG.js → chunk-PWBGODZU.js} +3 -3
  321. package/dist/{chunk-MOPAXD2H.js → chunk-QCADUTYX.js} +2 -2
  322. package/dist/{chunk-CT5FBO7E.js → chunk-RPOUJI25.js} +1 -1
  323. package/dist/{chunk-VE3FKXJ7.js → chunk-RUSXEE7X.js} +35 -32
  324. package/dist/chunk-RUSXEE7X.js.map +1 -0
  325. package/dist/{chunk-WKHYOS72.js → chunk-RW4GFE56.js} +3 -3
  326. package/dist/{chunk-FH4GO7HO.js → chunk-RYLVVDR7.js} +1 -1
  327. package/dist/{chunk-QZRDCFHI.js → chunk-S66SBBFQ.js} +5 -5
  328. package/dist/{chunk-CQJFIPAH.js → chunk-S7TNV2I7.js} +14 -14
  329. package/dist/{chunk-ZBQSIGGR.js → chunk-SC773IMJ.js} +13 -13
  330. package/dist/{chunk-RZV7SXED.js → chunk-SF3M27AN.js} +37 -12
  331. package/dist/chunk-SF3M27AN.js.map +1 -0
  332. package/dist/{chunk-FBJ2HK7A.js → chunk-SGPJ3YS2.js} +20 -20
  333. package/dist/{chunk-A2EWJQXX.js → chunk-SM5QX6UK.js} +4 -4
  334. package/dist/chunk-SWCLN6JE.js +40 -0
  335. package/dist/chunk-SWCLN6JE.js.map +1 -0
  336. package/dist/{chunk-OS3EQOIS.js → chunk-T4F5TW2X.js} +29 -24
  337. package/dist/chunk-T4F5TW2X.js.map +1 -0
  338. package/dist/{chunk-RKZWCTXV.js → chunk-TAEKDMEF.js} +2 -2
  339. package/dist/{chunk-6AVCAUGL.js → chunk-TASEV25T.js} +3 -3
  340. package/dist/{chunk-3XOISKZC.js → chunk-TLGDPMUX.js} +6 -6
  341. package/dist/{chunk-MOF3XSUM.js → chunk-TREHTIBD.js} +3 -2
  342. package/dist/chunk-TREHTIBD.js.map +1 -0
  343. package/dist/{chunk-HUQHJSPV.js → chunk-TTPXGD5S.js} +68 -33
  344. package/dist/chunk-TTPXGD5S.js.map +1 -0
  345. package/dist/{chunk-NFCYIZHX.js → chunk-TXIIBNCA.js} +7 -3
  346. package/dist/{chunk-NFCYIZHX.js.map → chunk-TXIIBNCA.js.map} +1 -1
  347. package/dist/{chunk-5IUW34PG.js → chunk-TY3QYPJ6.js} +7 -7
  348. package/dist/{chunk-VQFR4EU4.js → chunk-U3JK5VJV.js} +2 -2
  349. package/dist/{chunk-2AWMJO54.js → chunk-U42P3RMZ.js} +5 -5
  350. package/dist/{chunk-2RIUMV7S.js → chunk-UBIJBLUK.js} +234 -234
  351. package/dist/chunk-UBIJBLUK.js.map +1 -0
  352. package/dist/{chunk-GUU75DES.js → chunk-UEJTOPLW.js} +8 -8
  353. package/dist/{chunk-QWCTYLMD.js → chunk-URDONAEJ.js} +240 -204
  354. package/dist/chunk-URDONAEJ.js.map +1 -0
  355. package/dist/{chunk-OZOEWLGR.js → chunk-UT6JAORE.js} +4 -4
  356. package/dist/{chunk-5TELOQA6.js → chunk-UTHPUINA.js} +3 -3
  357. package/dist/{chunk-SOV7DTTU.js → chunk-V6HZ2HJZ.js} +67 -67
  358. package/dist/{chunk-SOV7DTTU.js.map → chunk-V6HZ2HJZ.js.map} +1 -1
  359. package/dist/{chunk-26RQ6JBR.js → chunk-VBVCNH6D.js} +5 -5
  360. package/dist/{chunk-P646DND6.js → chunk-VCMQPCME.js} +2 -2
  361. package/dist/{chunk-LV7FMIMM.js → chunk-VGUHAHHV.js} +2 -2
  362. package/dist/{chunk-GYVXARCY.js → chunk-VIBPFVU4.js} +41 -41
  363. package/dist/{chunk-KHPOKZ6Z.js → chunk-VMAC66JX.js} +6 -6
  364. package/dist/{chunk-SHKRS6I5.js → chunk-VRPNETPK.js} +3 -3
  365. package/dist/{chunk-6U4J6RVS.js → chunk-WCHW4XN7.js} +14 -14
  366. package/dist/{chunk-CJH6QUQJ.js → chunk-WD3UXNJV.js} +3 -3
  367. package/dist/{chunk-H5EVWF6L.js → chunk-WR67FJMX.js} +4 -4
  368. package/dist/{chunk-XLIJ36RG.js → chunk-WRMQ7EX4.js} +5 -5
  369. package/dist/{chunk-VVFWOBAM.js → chunk-WTJUKYB2.js} +15 -16
  370. package/dist/chunk-WTJUKYB2.js.map +1 -0
  371. package/dist/{chunk-7KLCFJ5G.js → chunk-X4PPGXQG.js} +2 -2
  372. package/dist/{chunk-ZE2JTVCQ.js → chunk-X5BMQXFD.js} +11 -11
  373. package/dist/{chunk-OYJY4Y4A.js → chunk-XFNLU7EW.js} +14 -7
  374. package/dist/chunk-XFNLU7EW.js.map +1 -0
  375. package/dist/{chunk-UECU6LZI.js → chunk-XXRBOSWV.js} +3 -3
  376. package/dist/{chunk-SPKAIDWX.js → chunk-XZEFCPBL.js} +2 -2
  377. package/dist/{chunk-EZ5NYRHK.js → chunk-YL6N7QLA.js} +5 -5
  378. package/dist/{chunk-Q2ZJOECN.js → chunk-YMVTIV5L.js} +19 -19
  379. package/dist/chunk-YMVTIV5L.js.map +1 -0
  380. package/dist/{chunk-VAIESMPY.js → chunk-YVBHGMKC.js} +4 -4
  381. package/dist/{chunk-AR62NQXE.js → chunk-Z2S5VQG7.js} +2 -2
  382. package/dist/{chunk-2MXUB3ZO.js → chunk-Z5OGTWMZ.js} +15 -2
  383. package/dist/chunk-Z5OGTWMZ.js.map +1 -0
  384. package/dist/{chunk-7UQJEADK.js → chunk-ZL2O4BYP.js} +2 -2
  385. package/dist/{chunk-FOOITLHR.js → chunk-ZZHBT5WQ.js} +2 -2
  386. package/dist/{chunk-X6VJQJYY.js → chunk-ZZWHKC6A.js} +3 -3
  387. package/dist/components/timeline-annotation-shared.d.ts +1 -9
  388. package/dist/composer-messages.js +2 -2
  389. package/dist/composer.js +15 -15
  390. package/dist/{computer-viewer-D4NHQB5D.js → computer-viewer-S6TE6TN7.js} +8 -8
  391. package/dist/connect.js +12 -11
  392. package/dist/desktop.js +2 -2
  393. package/dist/editor.js +2 -2
  394. package/dist/{embedded-new-voice-X4ZW6SY4.js → embedded-new-voice-ZDZPGX25.js} +8 -8
  395. package/dist/{embedded-voice-4OD6Z3HU.js → embedded-voice-FKCUXSJO.js} +8 -8
  396. package/dist/{fleet-decision-row-5UCJXTDP.js → fleet-decision-row-VCGWYJAV.js} +2 -2
  397. package/dist/hooks/page-wake.d.ts +21 -0
  398. package/dist/hooks/use-session-events.d.ts +1 -0
  399. package/dist/index.js +206 -205
  400. package/dist/interaction.js +9 -9
  401. package/dist/{latest-question-VGVNUGAU.js → latest-question-SINEV4U6.js} +3 -3
  402. package/dist/lib/format.d.ts +3 -2
  403. package/dist/machines.js +6 -6
  404. package/dist/messages/en.d.ts +12 -3
  405. package/dist/messages.js +1 -1
  406. package/dist/model-picker-model.js +2 -2
  407. package/dist/{model-policy-picker-menu-XOPYY6YA.js → model-policy-picker-menu-66JPM3G5.js} +6 -6
  408. package/dist/model-policy-picker-menu-66JPM3G5.js.map +1 -0
  409. package/dist/model-policy.js +1 -1
  410. package/dist/native-previews.js +3 -3
  411. package/dist/{platform-activity-row-56XOVTRA.js → platform-activity-row-LU5WABI2.js} +2 -2
  412. package/dist/{queue-surface-implementation-OZDOBJ6W.js → queue-surface-implementation-Y4OUVS7N.js} +8 -7
  413. package/dist/{queue-surface-implementation-OZDOBJ6W.js.map → queue-surface-implementation-Y4OUVS7N.js.map} +1 -1
  414. package/dist/realtime.js +7 -7
  415. package/dist/{sandbox-files-LJCR437H.js → sandbox-files-NBIVKVCZ.js} +11 -11
  416. package/dist/sandbox-files-NBIVKVCZ.js.map +1 -0
  417. package/dist/session-app.js +266 -260
  418. package/dist/session-list-model.js +3 -3
  419. package/dist/{session-realtime-UISLBZ4A.js → session-realtime-3PALSNMJ.js} +3 -3
  420. package/dist/session-realtime-3PALSNMJ.js.map +1 -0
  421. package/dist/session-realtime.js +2 -2
  422. package/dist/session-ui.js +62 -61
  423. package/dist/session.d.ts +1 -1
  424. package/dist/session.js +17 -17
  425. package/dist/sites.js +2 -2
  426. package/dist/terminal.js +2 -2
  427. package/dist/this-computer.js +3 -3
  428. package/dist/timeline/annotation-model.d.ts +48 -0
  429. package/dist/{timeline-annotation-markers-ACT7XRMW.js → timeline-annotation-markers-6526H2NM.js} +11 -9
  430. package/dist/{timeline-annotation-markers-ACT7XRMW.js.map → timeline-annotation-markers-6526H2NM.js.map} +1 -1
  431. package/dist/{timeline-annotation-selection-2IA7T5VR.js → timeline-annotation-selection-KV5SM6TA.js} +16 -62
  432. package/dist/timeline-annotation-selection-KV5SM6TA.js.map +1 -0
  433. package/dist/{timeline-annotations-dialog-W5B2HMYY.js → timeline-annotations-dialog-7CDHWC7Y.js} +12 -10
  434. package/dist/{timeline-annotations-dialog-W5B2HMYY.js.map → timeline-annotations-dialog-7CDHWC7Y.js.map} +1 -1
  435. package/dist/timeline-model.d.ts +3 -0
  436. package/dist/timeline-model.js +40 -14
  437. package/dist/ui/access-list.js +24 -24
  438. package/dist/ui/choice-cards.js +2 -2
  439. package/dist/ui/composer-menu-action.js +2 -2
  440. package/dist/ui/context-menu.d.ts +3 -1
  441. package/dist/ui/context-menu.js +3 -1
  442. package/dist/ui/detail-page.js +3 -3
  443. package/dist/ui/detail-sheet.js +3 -3
  444. package/dist/ui/diff-view.js +3 -3
  445. package/dist/ui/disclosure.js +5 -5
  446. package/dist/ui/dropdown-menu.js +1 -1
  447. package/dist/ui/flush-form-page.js +5 -5
  448. package/dist/ui/form-dialog.js +4 -4
  449. package/dist/ui/list-row.js +5 -5
  450. package/dist/ui/load-failure.js +3 -3
  451. package/dist/ui/page-actions.js +3 -3
  452. package/dist/ui/revision-history.js +11 -11
  453. package/dist/ui/role-select.js +8 -8
  454. package/dist/ui/segmented-control.js +1 -1
  455. package/dist/ui/settings-nav.js +3 -3
  456. package/dist/ui/toolbar.js +3 -3
  457. package/dist/usage.js +2 -2
  458. package/dist/workbench.js +11 -11
  459. package/package.json +4 -4
  460. package/src/app/app-state.tsx +2 -1
  461. package/src/app/components/command-menu/chat-switcher.tsx +135 -0
  462. package/src/app/components/command-menu/command-menu.tsx +840 -0
  463. package/src/app/components/command-menu/keycaps.tsx +56 -0
  464. package/src/app/components/command-menu/shortcut-sheet.tsx +155 -0
  465. package/src/app/components/credits/credit-refusal-notice.test.tsx +132 -0
  466. package/src/app/components/credits/credit-refusal-notice.tsx +92 -0
  467. package/src/app/components/rail/rail-context.tsx +28 -5
  468. package/src/app/components/rail/rail-sections.tsx +3 -5
  469. package/src/app/components/rail/session-header-mute.test.tsx +23 -1
  470. package/src/app/components/rail/session-header.test.tsx +21 -2
  471. package/src/app/components/rail/session-header.tsx +31 -1
  472. package/src/app/components/rail/session-list.tsx +89 -16
  473. package/src/app/components/rail/session-shell.tsx +0 -14
  474. package/src/app/components/session/session-search-dialog.tsx +12 -1
  475. package/src/app/embed/session-app.tsx +6 -3
  476. package/src/app/lib/actions/actions-provider.tsx +486 -0
  477. package/src/app/lib/actions/actions.test.ts +249 -0
  478. package/src/app/lib/actions/chat-directory.ts +231 -0
  479. package/src/app/lib/actions/chat-operations.ts +145 -0
  480. package/src/app/lib/actions/chat-switcher.ts +62 -0
  481. package/src/app/lib/actions/chords.ts +185 -0
  482. package/src/app/lib/actions/events.ts +10 -0
  483. package/src/app/lib/actions/rank.ts +119 -0
  484. package/src/app/lib/actions/registry.ts +333 -0
  485. package/src/app/lib/credit-coverage.test.ts +83 -0
  486. package/src/app/lib/credit-coverage.tsx +48 -0
  487. package/src/app/lib/free-credit-gap.test.ts +32 -1
  488. package/src/app/lib/free-credit-gap.tsx +32 -2
  489. package/src/app/lib/integration-connect-analytics.test.ts +1 -0
  490. package/src/app/lib/integration-connect-analytics.tsx +4 -0
  491. package/src/app/lib/models-route.test.ts +18 -0
  492. package/src/app/lib/models-route.tsx +26 -4
  493. package/src/app/lib/session-search-route.tsx +6 -1
  494. package/src/app/lib/session-ui-features.tsx +28 -9
  495. package/src/app/routes/session.tsx +74 -16
  496. package/src/app/routes/sessions-index.tsx +83 -4
  497. package/src/components/timeline-annotation-selection.tsx +9 -64
  498. package/src/components/timeline-annotation-shared.ts +9 -57
  499. package/src/hooks/page-wake.ts +80 -0
  500. package/src/hooks/use-session-events.ts +309 -81
  501. package/src/lib/format.ts +3 -2
  502. package/src/messages/en.ts +13 -3
  503. package/src/model-picker-model.ts +3 -0
  504. package/src/model-policy.ts +9 -1
  505. package/src/session.ts +1 -0
  506. package/src/timeline/annotation-model.ts +217 -0
  507. package/src/timeline/projection.ts +27 -21
  508. package/src/timeline-model.ts +14 -0
  509. package/src/ui/context-menu.tsx +16 -0
  510. package/src/ui/dropdown-menu.tsx +4 -1
  511. package/src/ui/segmented-control.tsx +3 -0
  512. package/styles/compiled.css +92 -0
  513. package/dist/app/lib/keyboard-shortcuts.d.ts +0 -51
  514. package/dist/app/lib/keyboard-shortcuts.js +0 -16
  515. package/dist/chunk-2MXUB3ZO.js.map +0 -1
  516. package/dist/chunk-2RIUMV7S.js.map +0 -1
  517. package/dist/chunk-53IXIUYP.js +0 -39
  518. package/dist/chunk-53IXIUYP.js.map +0 -1
  519. package/dist/chunk-DN3TKURW.js.map +0 -1
  520. package/dist/chunk-F2GXK2Z6.js.map +0 -1
  521. package/dist/chunk-G7VLL3PG.js.map +0 -1
  522. package/dist/chunk-GRLPRM56.js.map +0 -1
  523. package/dist/chunk-HUQHJSPV.js.map +0 -1
  524. package/dist/chunk-IO6K6UYJ.js.map +0 -1
  525. package/dist/chunk-KWB5U3ZT.js.map +0 -1
  526. package/dist/chunk-L5UCO2UV.js.map +0 -1
  527. package/dist/chunk-MOF3XSUM.js.map +0 -1
  528. package/dist/chunk-N2BEUKXT.js.map +0 -1
  529. package/dist/chunk-OS3EQOIS.js.map +0 -1
  530. package/dist/chunk-OYJY4Y4A.js.map +0 -1
  531. package/dist/chunk-Q2ZJOECN.js.map +0 -1
  532. package/dist/chunk-QWCTYLMD.js.map +0 -1
  533. package/dist/chunk-RZV7SXED.js.map +0 -1
  534. package/dist/chunk-S3M5WCZW.js.map +0 -1
  535. package/dist/chunk-SOOWLNC5.js.map +0 -1
  536. package/dist/chunk-SWWYYGQO.js.map +0 -1
  537. package/dist/chunk-UO36FC3S.js.map +0 -1
  538. package/dist/chunk-UYSZKDQY.js.map +0 -1
  539. package/dist/chunk-VE3FKXJ7.js.map +0 -1
  540. package/dist/chunk-VVFWOBAM.js.map +0 -1
  541. package/dist/chunk-ZSERYHHT.js.map +0 -1
  542. package/dist/timeline-annotation-selection-2IA7T5VR.js.map +0 -1
  543. package/src/app/lib/keyboard-shortcuts.test.ts +0 -47
  544. package/src/app/lib/keyboard-shortcuts.tsx +0 -58
  545. /package/dist/app/{lib/keyboard-shortcuts.js.map → components/command-menu/keycaps.js.map} +0 -0
  546. /package/dist/{browser-viewer-ZRFZX3VN.js.map → app/components/credits/credit-refusal-notice.js.map} +0 -0
  547. /package/dist/{chat-interactive-block-HUMYWVCK.js.map → app/lib/actions/actions-provider.js.map} +0 -0
  548. /package/dist/{computer-viewer-D4NHQB5D.js.map → app/lib/credit-coverage.js.map} +0 -0
  549. /package/dist/{embedded-new-voice-X4ZW6SY4.js.map → browser-viewer-HPUMK7UP.js.map} +0 -0
  550. /package/dist/{embedded-voice-4OD6Z3HU.js.map → chat-interactive-block-22PPECCT.js.map} +0 -0
  551. /package/dist/{chunk-GVIQ7H62.js.map → chunk-2LUBBDZV.js.map} +0 -0
  552. /package/dist/{chunk-XMMVIY7B.js.map → chunk-3CCJWHQY.js.map} +0 -0
  553. /package/dist/{chunk-XS2FZ6DX.js.map → chunk-3F5ZPIWI.js.map} +0 -0
  554. /package/dist/{chunk-72US6QNB.js.map → chunk-3J2YZRY5.js.map} +0 -0
  555. /package/dist/{chunk-D4YQF4E3.js.map → chunk-3SMJ2BIQ.js.map} +0 -0
  556. /package/dist/{chunk-TBJINQXA.js.map → chunk-3WCYK36X.js.map} +0 -0
  557. /package/dist/{chunk-WPCF34V6.js.map → chunk-3WG3CRL7.js.map} +0 -0
  558. /package/dist/{chunk-JI5BYQKO.js.map → chunk-3X46PNBX.js.map} +0 -0
  559. /package/dist/{chunk-PBK44WJC.js.map → chunk-4GJ37O6G.js.map} +0 -0
  560. /package/dist/{chunk-LEXPBQ56.js.map → chunk-4SKJX3C4.js.map} +0 -0
  561. /package/dist/{chunk-ZA6YD2LW.js.map → chunk-57SYK776.js.map} +0 -0
  562. /package/dist/{chunk-22LBKJDE.js.map → chunk-5DIAN5GQ.js.map} +0 -0
  563. /package/dist/{chunk-LJ3TDK2L.js.map → chunk-5FA455GR.js.map} +0 -0
  564. /package/dist/{chunk-YPR5INHV.js.map → chunk-5X3E2Z3D.js.map} +0 -0
  565. /package/dist/{chunk-OXNWZTEU.js.map → chunk-5ZJCL6X4.js.map} +0 -0
  566. /package/dist/{chunk-62OAZ4LO.js.map → chunk-6C5GQQMC.js.map} +0 -0
  567. /package/dist/{chunk-VGITH57T.js.map → chunk-6ERTXDZM.js.map} +0 -0
  568. /package/dist/{chunk-ZQ7XQZCF.js.map → chunk-6FX73Y4I.js.map} +0 -0
  569. /package/dist/{chunk-QZO2KK2F.js.map → chunk-6P44NG6Y.js.map} +0 -0
  570. /package/dist/{chunk-N2DDJLTM.js.map → chunk-6T7Y33JA.js.map} +0 -0
  571. /package/dist/{chunk-RBAGC2MJ.js.map → chunk-75VE5QUS.js.map} +0 -0
  572. /package/dist/{chunk-MRXOGI3O.js.map → chunk-77CUDSHG.js.map} +0 -0
  573. /package/dist/{chunk-GZ65XQR5.js.map → chunk-7T7FHSGS.js.map} +0 -0
  574. /package/dist/{chunk-YGAH34CD.js.map → chunk-A3S26JSP.js.map} +0 -0
  575. /package/dist/{chunk-GYPAO6RS.js.map → chunk-A664GSDM.js.map} +0 -0
  576. /package/dist/{chunk-JSZSNMDR.js.map → chunk-ASUYLXKO.js.map} +0 -0
  577. /package/dist/{chunk-RTK7SUPL.js.map → chunk-AUUJLVA3.js.map} +0 -0
  578. /package/dist/{chunk-OOTBYSCA.js.map → chunk-BBWKPNJB.js.map} +0 -0
  579. /package/dist/{chunk-BGZIMIUU.js.map → chunk-BCUYWOQU.js.map} +0 -0
  580. /package/dist/{chunk-EKN4N4LS.js.map → chunk-BDFMNJZJ.js.map} +0 -0
  581. /package/dist/{chunk-YZKGOWCC.js.map → chunk-BIDXQAGO.js.map} +0 -0
  582. /package/dist/{chunk-Q2UUANHF.js.map → chunk-BIKAJ4DY.js.map} +0 -0
  583. /package/dist/{chunk-5IQBF2X3.js.map → chunk-BJPJ2OUX.js.map} +0 -0
  584. /package/dist/{chunk-EY2EMHZW.js.map → chunk-BPM2OTYK.js.map} +0 -0
  585. /package/dist/{chunk-MT4TBRQB.js.map → chunk-BSWS2RUZ.js.map} +0 -0
  586. /package/dist/{chunk-T7YD3VGK.js.map → chunk-C52MNKXU.js.map} +0 -0
  587. /package/dist/{chunk-THNW33K7.js.map → chunk-CEUDV4OA.js.map} +0 -0
  588. /package/dist/{chunk-LHGIS6SZ.js.map → chunk-CVK74BH7.js.map} +0 -0
  589. /package/dist/{chunk-DFO2UCYG.js.map → chunk-CW5I65ZX.js.map} +0 -0
  590. /package/dist/{chunk-SKRLKQEG.js.map → chunk-DOSC2HRQ.js.map} +0 -0
  591. /package/dist/{chunk-KVB6XDLP.js.map → chunk-DPJ2CWVN.js.map} +0 -0
  592. /package/dist/{chunk-4J6V4DH7.js.map → chunk-DXMRO2MU.js.map} +0 -0
  593. /package/dist/{chunk-42I4O4WQ.js.map → chunk-EE55IDDR.js.map} +0 -0
  594. /package/dist/{chunk-2RA6XABP.js.map → chunk-EEERTLFF.js.map} +0 -0
  595. /package/dist/{chunk-PTOTKUKO.js.map → chunk-EEO744XR.js.map} +0 -0
  596. /package/dist/{chunk-LD3HVI2J.js.map → chunk-EMFGBAQL.js.map} +0 -0
  597. /package/dist/{chunk-FQGUK4ST.js.map → chunk-ENPJKVMN.js.map} +0 -0
  598. /package/dist/{chunk-HDHK3SXK.js.map → chunk-EU6RLHMP.js.map} +0 -0
  599. /package/dist/{chunk-MRUWRQBX.js.map → chunk-FET6XHGS.js.map} +0 -0
  600. /package/dist/{chunk-M6KUY3YH.js.map → chunk-FIICQA55.js.map} +0 -0
  601. /package/dist/{chunk-NLWLCYCT.js.map → chunk-FTZXCPE3.js.map} +0 -0
  602. /package/dist/{chunk-FN2KA3MJ.js.map → chunk-FUS76DO4.js.map} +0 -0
  603. /package/dist/{chunk-AM4IIPWI.js.map → chunk-G7N5NPRJ.js.map} +0 -0
  604. /package/dist/{chunk-CCQ7YKOD.js.map → chunk-GBYZ6653.js.map} +0 -0
  605. /package/dist/{chunk-YKKVIJVX.js.map → chunk-GQDSC6QZ.js.map} +0 -0
  606. /package/dist/{chunk-5X6JP75Q.js.map → chunk-GRSODLVO.js.map} +0 -0
  607. /package/dist/{chunk-73YP3R5X.js.map → chunk-GSESCQFY.js.map} +0 -0
  608. /package/dist/{chunk-MZLEBFUZ.js.map → chunk-GZD6VBIK.js.map} +0 -0
  609. /package/dist/{chunk-IZR2QRFF.js.map → chunk-H3HH5AHS.js.map} +0 -0
  610. /package/dist/{chunk-OJPUVUB6.js.map → chunk-HAOZCLLA.js.map} +0 -0
  611. /package/dist/{chunk-ZBHDGAYL.js.map → chunk-HEFE4OZJ.js.map} +0 -0
  612. /package/dist/{chunk-WTG34JVA.js.map → chunk-HI75UTI6.js.map} +0 -0
  613. /package/dist/{chunk-OMBIG3NC.js.map → chunk-HM633ROV.js.map} +0 -0
  614. /package/dist/{chunk-WDFZWSKD.js.map → chunk-HRIP4M6H.js.map} +0 -0
  615. /package/dist/{chunk-A2BCW6CQ.js.map → chunk-HU2DRFFI.js.map} +0 -0
  616. /package/dist/{chunk-PO35PBAB.js.map → chunk-HVH7FFJH.js.map} +0 -0
  617. /package/dist/{chunk-EG7KNUF7.js.map → chunk-HYTXTKST.js.map} +0 -0
  618. /package/dist/{chunk-TFHG75A4.js.map → chunk-I4XMDFUJ.js.map} +0 -0
  619. /package/dist/{chunk-IZHVZZQA.js.map → chunk-ICAUYWSL.js.map} +0 -0
  620. /package/dist/{chunk-DCLPWYP3.js.map → chunk-IEVPJ3G6.js.map} +0 -0
  621. /package/dist/{chunk-EVWZHDSF.js.map → chunk-IKH3VTA4.js.map} +0 -0
  622. /package/dist/{chunk-TYHLEFD2.js.map → chunk-IZJNMRIR.js.map} +0 -0
  623. /package/dist/{chunk-D2SR3TEB.js.map → chunk-J243WGUA.js.map} +0 -0
  624. /package/dist/{chunk-QGSGIYE3.js.map → chunk-J2C6LB6W.js.map} +0 -0
  625. /package/dist/{chunk-MT6TRTXF.js.map → chunk-J5MEDX7C.js.map} +0 -0
  626. /package/dist/{chunk-6QHUKBJP.js.map → chunk-J7SKOO44.js.map} +0 -0
  627. /package/dist/{chunk-W2QK7PYS.js.map → chunk-JAAST75A.js.map} +0 -0
  628. /package/dist/{chunk-NQCMS4AJ.js.map → chunk-JQCGPTZ6.js.map} +0 -0
  629. /package/dist/{chunk-CMUXJHGH.js.map → chunk-JRSCWQMC.js.map} +0 -0
  630. /package/dist/{chunk-Q4OHNGGB.js.map → chunk-JRXHSVD5.js.map} +0 -0
  631. /package/dist/{chunk-SD2K5ZN5.js.map → chunk-JXYLDT6X.js.map} +0 -0
  632. /package/dist/{chunk-IXX6ZOL2.js.map → chunk-KGTMHEAP.js.map} +0 -0
  633. /package/dist/{chunk-22OBGVEJ.js.map → chunk-KOXVGPW4.js.map} +0 -0
  634. /package/dist/{chunk-NOZ5CGZE.js.map → chunk-L5GPPMUB.js.map} +0 -0
  635. /package/dist/{chunk-4FOOHMTU.js.map → chunk-LY6727IF.js.map} +0 -0
  636. /package/dist/{chunk-PT7MTXRE.js.map → chunk-MAOCN7J6.js.map} +0 -0
  637. /package/dist/{chunk-4K2JSJNX.js.map → chunk-MB5LZVDO.js.map} +0 -0
  638. /package/dist/{chunk-5LES64PP.js.map → chunk-MKOQAVOE.js.map} +0 -0
  639. /package/dist/{chunk-BMV2SNYX.js.map → chunk-MUPWNSEJ.js.map} +0 -0
  640. /package/dist/{chunk-Y5TRG22C.js.map → chunk-NRXIECWC.js.map} +0 -0
  641. /package/dist/{chunk-GOE7G5JX.js.map → chunk-NWSAF6P5.js.map} +0 -0
  642. /package/dist/{chunk-DUM363VS.js.map → chunk-OFZQJNF6.js.map} +0 -0
  643. /package/dist/{chunk-CKN5QPEL.js.map → chunk-OMF7POEY.js.map} +0 -0
  644. /package/dist/{chunk-MVXKO2BD.js.map → chunk-OXD6ET34.js.map} +0 -0
  645. /package/dist/{chunk-47JUEVME.js.map → chunk-PALX6HWV.js.map} +0 -0
  646. /package/dist/{chunk-B6OGSG7I.js.map → chunk-PE3BLBDT.js.map} +0 -0
  647. /package/dist/{chunk-RVISSNVE.js.map → chunk-PMZKJOG6.js.map} +0 -0
  648. /package/dist/{chunk-CESAMXWX.js.map → chunk-PQUTMG3S.js.map} +0 -0
  649. /package/dist/{chunk-7VFCOKPG.js.map → chunk-PWBGODZU.js.map} +0 -0
  650. /package/dist/{chunk-MOPAXD2H.js.map → chunk-QCADUTYX.js.map} +0 -0
  651. /package/dist/{chunk-CT5FBO7E.js.map → chunk-RPOUJI25.js.map} +0 -0
  652. /package/dist/{chunk-WKHYOS72.js.map → chunk-RW4GFE56.js.map} +0 -0
  653. /package/dist/{chunk-FH4GO7HO.js.map → chunk-RYLVVDR7.js.map} +0 -0
  654. /package/dist/{chunk-QZRDCFHI.js.map → chunk-S66SBBFQ.js.map} +0 -0
  655. /package/dist/{chunk-CQJFIPAH.js.map → chunk-S7TNV2I7.js.map} +0 -0
  656. /package/dist/{chunk-ZBQSIGGR.js.map → chunk-SC773IMJ.js.map} +0 -0
  657. /package/dist/{chunk-FBJ2HK7A.js.map → chunk-SGPJ3YS2.js.map} +0 -0
  658. /package/dist/{chunk-A2EWJQXX.js.map → chunk-SM5QX6UK.js.map} +0 -0
  659. /package/dist/{chunk-RKZWCTXV.js.map → chunk-TAEKDMEF.js.map} +0 -0
  660. /package/dist/{chunk-6AVCAUGL.js.map → chunk-TASEV25T.js.map} +0 -0
  661. /package/dist/{chunk-3XOISKZC.js.map → chunk-TLGDPMUX.js.map} +0 -0
  662. /package/dist/{chunk-5IUW34PG.js.map → chunk-TY3QYPJ6.js.map} +0 -0
  663. /package/dist/{chunk-VQFR4EU4.js.map → chunk-U3JK5VJV.js.map} +0 -0
  664. /package/dist/{chunk-2AWMJO54.js.map → chunk-U42P3RMZ.js.map} +0 -0
  665. /package/dist/{chunk-GUU75DES.js.map → chunk-UEJTOPLW.js.map} +0 -0
  666. /package/dist/{chunk-OZOEWLGR.js.map → chunk-UT6JAORE.js.map} +0 -0
  667. /package/dist/{chunk-5TELOQA6.js.map → chunk-UTHPUINA.js.map} +0 -0
  668. /package/dist/{chunk-26RQ6JBR.js.map → chunk-VBVCNH6D.js.map} +0 -0
  669. /package/dist/{chunk-P646DND6.js.map → chunk-VCMQPCME.js.map} +0 -0
  670. /package/dist/{chunk-LV7FMIMM.js.map → chunk-VGUHAHHV.js.map} +0 -0
  671. /package/dist/{chunk-GYVXARCY.js.map → chunk-VIBPFVU4.js.map} +0 -0
  672. /package/dist/{chunk-KHPOKZ6Z.js.map → chunk-VMAC66JX.js.map} +0 -0
  673. /package/dist/{chunk-SHKRS6I5.js.map → chunk-VRPNETPK.js.map} +0 -0
  674. /package/dist/{chunk-6U4J6RVS.js.map → chunk-WCHW4XN7.js.map} +0 -0
  675. /package/dist/{chunk-CJH6QUQJ.js.map → chunk-WD3UXNJV.js.map} +0 -0
  676. /package/dist/{chunk-H5EVWF6L.js.map → chunk-WR67FJMX.js.map} +0 -0
  677. /package/dist/{chunk-XLIJ36RG.js.map → chunk-WRMQ7EX4.js.map} +0 -0
  678. /package/dist/{chunk-7KLCFJ5G.js.map → chunk-X4PPGXQG.js.map} +0 -0
  679. /package/dist/{chunk-ZE2JTVCQ.js.map → chunk-X5BMQXFD.js.map} +0 -0
  680. /package/dist/{chunk-UECU6LZI.js.map → chunk-XXRBOSWV.js.map} +0 -0
  681. /package/dist/{chunk-SPKAIDWX.js.map → chunk-XZEFCPBL.js.map} +0 -0
  682. /package/dist/{chunk-EZ5NYRHK.js.map → chunk-YL6N7QLA.js.map} +0 -0
  683. /package/dist/{chunk-VAIESMPY.js.map → chunk-YVBHGMKC.js.map} +0 -0
  684. /package/dist/{chunk-AR62NQXE.js.map → chunk-Z2S5VQG7.js.map} +0 -0
  685. /package/dist/{chunk-7UQJEADK.js.map → chunk-ZL2O4BYP.js.map} +0 -0
  686. /package/dist/{chunk-FOOITLHR.js.map → chunk-ZZHBT5WQ.js.map} +0 -0
  687. /package/dist/{chunk-X6VJQJYY.js.map → chunk-ZZWHKC6A.js.map} +0 -0
  688. /package/dist/{model-policy-picker-menu-XOPYY6YA.js.map → computer-viewer-S6TE6TN7.js.map} +0 -0
  689. /package/dist/{sandbox-files-LJCR437H.js.map → embedded-new-voice-ZDZPGX25.js.map} +0 -0
  690. /package/dist/{session-realtime-UISLBZ4A.js.map → embedded-voice-FKCUXSJO.js.map} +0 -0
  691. /package/dist/{fleet-decision-row-5UCJXTDP.js.map → fleet-decision-row-VCGWYJAV.js.map} +0 -0
  692. /package/dist/{latest-question-VGVNUGAU.js.map → latest-question-SINEV4U6.js.map} +0 -0
  693. /package/dist/{platform-activity-row-56XOVTRA.js.map → platform-activity-row-LU5WABI2.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/app/components/session/session-search-dialog.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState, type RefObject } from \"react\";\nimport { useNavigate } from \"../../lib/navigation\";\nimport { SearchIcon } from \"lucide-react\";\nimport { OpenGeniApiError } from \"@opengeni/sdk/browser\";\nimport { useAppContext } from \"../../app-context\";\nimport { Dialog, DialogContent, DialogDescription, DialogTitle } from \"../../../ui/dialog\";\nimport { Input } from \"../../../ui/input\";\nimport { Button } from \"../../../ui/button\";\nimport {\n useCommittedSearchQuery,\n useConversationSearch,\n type ConversationSearchMatch,\n} from \"../../lib/use-conversation-search\";\nimport { useSessionSearchResource } from \"../../lib/use-session-search-resource\";\nimport { cn } from \"../../lib/utils\";\nimport { selectedFormattedMessage } from \"./search-markdown-highlight\";\nimport {\n SearchPreviewView,\n SearchResultsView,\n type SearchPreviewMessage,\n type SearchResultSummary,\n} from \"./search-results-view\";\n\nexport default function SessionSearchDialog(props: {\n workspaceId: string;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n returnFocus?: RefObject<HTMLElement | null> | undefined;\n}) {\n const { onOpenChange } = props;\n const { client, accessContext } = useAppContext();\n const navigate = useNavigate();\n const [query, setQuery] = useState(\"\");\n const [archiveStatus, setArchiveStatus] = useState<\"active\" | \"archived\" | \"all\">(\"all\");\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [mobilePreview, setMobilePreview] = useState(false);\n const [titleCursor, setTitleCursor] = useState<string | undefined>();\n const [previewIndex, setPreviewIndex] = useState(0);\n const openRef = useRef(props.open);\n openRef.current = props.open;\n const restoreFocusOnClose = useRef(true);\n useEffect(() => {\n if (props.open) restoreFocusOnClose.current = true;\n }, [props.open]);\n const resultScroll = useRef(0);\n const previewScroll = useRef(0);\n const scope = JSON.stringify([accessContext.subjectId, props.workspaceId, archiveStatus]);\n const committedQuery = useCommittedSearchQuery(query, scope, props.open);\n const identity = JSON.stringify([\n accessContext.subjectId,\n props.workspaceId,\n committedQuery,\n archiveStatus,\n ]);\n const search = useConversationSearch({\n client,\n authority: accessContext.subjectId,\n workspaceId: props.workspaceId,\n query: committedQuery,\n debounceMs: 0,\n enabled: props.open,\n archiveStatus,\n });\n const loadTitles = useCallback(\n (signal: AbortSignal) =>\n client.listSessionPage(props.workspaceId, {\n search: committedQuery,\n signal,\n archiveStatus,\n limit: 20,\n ...(titleCursor ? { cursor: titleCursor } : {}),\n }),\n [client, props.workspaceId, committedQuery, archiveStatus, titleCursor],\n );\n const titles = useSessionSearchResource(\n `${identity}:${titleCursor ?? \"\"}`,\n loadTitles,\n props.open && !!committedQuery.trim(),\n 0,\n );\n const [deniedIdentity, setDeniedIdentity] = useState<string | null>(null);\n const [recoveringAccess, setRecoveringAccess] = useState(false);\n const accessDenied = search.accessDenied || titles.accessDenied || deniedIdentity === identity;\n const results = useMemo(() => {\n if (accessDenied || !committedQuery.trim()) return [];\n const grouped = new Map<string, SearchResultSummary>();\n for (const session of [...(titles.value?.pinned ?? []), ...(titles.value?.sessions ?? [])]) {\n grouped.set(session.id, {\n sessionId: session.id,\n title: session.title || \"Untitled session\",\n subtitle: new Date(session.updatedAt).toLocaleDateString(),\n snippet: session.initialMessage ?? \"\",\n matchingMessages: 0,\n titleMatch: true,\n });\n }\n const seen = new Set<string>();\n for (const match of search.page?.matches ?? []) {\n const current = grouped.get(match.sessionId);\n const firstForMessage = !seen.has(match.eventId);\n seen.add(match.eventId);\n grouped.set(match.sessionId, {\n sessionId: match.sessionId,\n title: match.sessionTitle || \"Untitled session\",\n subtitle: current?.subtitle ?? \"Message match\",\n snippet: current?.matchingMessages ? current.snippet : match.snippet.text,\n matchingMessages: (current?.matchingMessages ?? 0) + (firstForMessage ? 1 : 0),\n titleMatch: current?.titleMatch ?? false,\n });\n }\n return [...grouped.values()];\n }, [titles.value, search.page, accessDenied, committedQuery]);\n // Keep the selected session while closed/revalidating so its cursor and preview\n // survive the dialog → conversation → dialog round trip.\n const retainedSelection = useRef<{\n identity: string;\n selected: SearchResultSummary;\n } | null>(null);\n if (accessDenied || !committedQuery.trim()) retainedSelection.current = null;\n const selected =\n results.find((result) => result.sessionId === selectedId) ??\n (retainedSelection.current?.identity === identity &&\n retainedSelection.current.selected.sessionId === selectedId\n ? retainedSelection.current.selected\n : null) ??\n results[0] ??\n null;\n if (selected) retainedSelection.current = { identity, selected };\n const previewSelection =\n selected ??\n (retainedSelection.current?.identity === identity ? retainedSelection.current.selected : null);\n const selectedSearch = useConversationSearch({\n client,\n authority: accessContext.subjectId,\n workspaceId: props.workspaceId,\n sessionId: previewSelection?.sessionId,\n query: committedQuery,\n debounceMs: 0,\n enabled: props.open && !!previewSelection,\n });\n useEffect(() => {\n setTitleCursor(undefined);\n setSelectedId(null);\n setMobilePreview(false);\n setPreviewIndex(0);\n resultScroll.current = 0;\n previewScroll.current = 0;\n }, [identity]);\n useEffect(() => {\n if (search.accessDenied || titles.accessDenied) {\n retainedSelection.current = null;\n setSelectedId(null);\n setDeniedIdentity(identity);\n }\n }, [search.accessDenied, titles.accessDenied, identity]);\n useEffect(() => {\n // An authority failure invalidates every source. Do not reveal another\n // source's retained value while Retry is still rechecking live access.\n if (recoveringAccess && !search.loading && !titles.loading && !search.error && !titles.error) {\n setDeniedIdentity(null);\n setRecoveringAccess(false);\n }\n }, [recoveringAccess, search.loading, titles.loading, search.error, titles.error]);\n function select(id: string) {\n if (id !== selectedId) {\n setPreviewIndex(0);\n previewScroll.current = 0;\n }\n setSelectedId(id);\n setMobilePreview(true);\n }\n const onOpen = useCallback(\n (match?: ConversationSearchMatch) => {\n if (!previewSelection || accessDenied) return;\n // Result navigation owns the next focus target. Dismissal returns to\n // the opener; opening a conversation must not steal focus back later.\n restoreFocusOnClose.current = false;\n onOpenChange(false);\n void navigate({\n to: \"/workspaces/$workspaceId/sessions/$sessionId\",\n params: {\n workspaceId: props.workspaceId,\n sessionId: previewSelection.sessionId,\n },\n search: match\n ? {\n find: committedQuery,\n matchSequence: match.sequence,\n matchOffset: match.messageMatchOffset,\n searchOrigin: \"session-search\",\n }\n : { find: committedQuery, searchOrigin: \"session-search\" },\n });\n },\n [navigate, props.workspaceId, onOpenChange, previewSelection, committedQuery, accessDenied],\n );\n return (\n <Dialog open={props.open} onOpenChange={props.onOpenChange}>\n <DialogContent\n className=\"flex h-[min(760px,85dvh)] flex-col gap-0 overflow-hidden p-0 sm:max-w-5xl sm:p-0\"\n aria-describedby=\"session-search-description\"\n onCloseAutoFocus={(event) => {\n // This controlled dialog is mounted separately from its rail opener,\n // so Radix has no DialogTrigger ref to restore. A reopened dialog or\n // a result navigation owns focus independently of this retiring scope.\n event.preventDefault();\n if (openRef.current || !restoreFocusOnClose.current) return;\n const target = props.returnFocus?.current;\n if (target?.isConnected) target.focus({ preventScroll: true });\n }}\n >\n <div className=\"shrink-0 border-b border-border px-4 pb-3 pt-4 pr-12\">\n <DialogTitle className=\"mb-3 text-base\">Search sessions</DialogTitle>\n <div className=\"relative\">\n <SearchIcon\n className=\"pointer-events-none absolute left-3 top-2.5 size-4 text-fg-subtle\"\n aria-hidden=\"true\"\n />\n <Input\n autoFocus\n type=\"search\"\n aria-label=\"Search session titles and messages\"\n placeholder=\"Search titles and messages…\"\n value={query}\n maxLength={200}\n onChange={(event) => setQuery(event.target.value)}\n className=\"pl-9\"\n suppressAutofill\n />\n </div>\n {query !== committedQuery ? (\n <p className=\"mt-2 text-xs text-fg-muted\" role=\"status\">\n Showing results for “{committedQuery}”\n </p>\n ) : null}\n <div className=\"mt-3 flex flex-wrap items-center gap-3\">\n <DialogDescription id=\"session-search-description\" className=\"flex-1 text-xs\">\n Literal text in user and completed assistant messages.\n </DialogDescription>\n <label className=\"flex items-center gap-2 text-xs text-fg-muted\">\n Sessions\n <select\n aria-label=\"Search session status\"\n value={archiveStatus}\n onChange={(event) => {\n setArchiveStatus(event.target.value as typeof archiveStatus);\n setTitleCursor(undefined);\n setSelectedId(null);\n }}\n className=\"rounded-md border border-border bg-bg px-2 py-1 text-fg outline-hidden focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <option value=\"all\">All</option>\n <option value=\"active\">Active</option>\n <option value=\"archived\">Archived</option>\n </select>\n </label>\n </div>\n </div>\n <div className=\"grid min-h-0 min-w-0 flex-1 grid-cols-[minmax(0,1fr)] md:grid-cols-[minmax(250px,0.8fr)_minmax(0,1.2fr)]\">\n <div\n className={cn(\n \"flex min-h-0 flex-col md:border-r md:border-border\",\n mobilePreview && selected ? \"hidden md:flex\" : \"flex\",\n )}\n >\n <SearchResultsView\n query={committedQuery}\n results={results}\n selectedId={selected?.sessionId ?? null}\n onSelect={select}\n loading={search.loading || titles.loading}\n error={\n accessDenied\n ? \"Search access is unavailable. Try again.\"\n : (search.error ?? titles.error)\n }\n onRetry={() => {\n if (search.error || accessDenied) search.retry();\n if (titles.error || accessDenied) titles.retry();\n if (accessDenied) setRecoveringAccess(true);\n }}\n hasMore={!!search.page?.hasMore}\n onMore={() => {\n resultScroll.current = 0;\n search.next();\n }}\n scrollPosition={resultScroll}\n active={props.open}\n />\n <div className=\"mt-auto flex shrink-0 flex-wrap gap-2 border-t border-border px-3 py-2\">\n {search.pageIndex > 0 ? (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={search.previous}\n disabled={search.loading}\n >\n Previous message results\n </Button>\n ) : null}\n {titles.value?.nextCursor ? (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setTitleCursor(titles.value?.nextCursor ?? undefined)}\n >\n More title results\n </Button>\n ) : null}\n {search.loading ? (\n <span className=\"text-xs text-fg-muted\" role=\"status\">\n Searching saved history\n {search.scanned ? ` · ${search.scanned} messages visited` : \"…\"}\n </span>\n ) : search.page?.hasMore ? (\n <span className=\"text-xs text-fg-muted\">More history available</span>\n ) : null}\n </div>\n </div>\n <div\n className={cn(\n \"min-h-0 min-w-0 md:flex md:flex-col\",\n mobilePreview && selected ? \"flex flex-col\" : \"hidden\",\n )}\n >\n {previewSelection ? (\n <SessionSearchPreview\n client={client}\n authority={accessContext.subjectId}\n workspaceId={props.workspaceId}\n sessionId={previewSelection.sessionId}\n title={previewSelection.title}\n query={committedQuery}\n onAccessDenied={() => setDeniedIdentity(identity)}\n enabled={props.open}\n onOpen={onOpen}\n onBack={() => setMobilePreview(false)}\n search={selectedSearch}\n index={previewIndex}\n setIndex={setPreviewIndex}\n scrollPosition={previewScroll}\n />\n ) : (\n <div className=\"flex flex-1 items-center justify-center p-8 text-sm text-fg-subtle\">\n Select a result to read it in context.\n </div>\n )}\n </div>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\ntype SessionSearchPreviewProps = {\n client: ReturnType<typeof useAppContext>[\"client\"];\n authority: string;\n workspaceId: string;\n sessionId: string;\n title: string;\n query: string;\n enabled: boolean;\n onOpen: (match?: ConversationSearchMatch) => void;\n onBack: () => void;\n search: ReturnType<typeof useConversationSearch>;\n index: number;\n setIndex: (index: number) => void;\n scrollPosition: RefObject<number>;\n onAccessDenied?: (() => void) | undefined;\n};\n\nexport function SessionSearchPreview(props: SessionSearchPreviewProps) {\n const { search, setIndex, onAccessDenied } = props;\n const matches = search.page?.matches ?? [];\n // -1 means land on the last occurrence when a previous batch arrives.\n const index = props.index < 0 ? Math.max(0, matches.length - 1) : props.index;\n const match = matches[Math.min(index, Math.max(0, matches.length - 1))];\n const loadContext = useCallback(\n async (signal: AbortSignal): Promise<SearchPreviewMessage[]> => {\n if (!match) return [];\n const options = {\n signal,\n mode: \"forensic\" as const,\n // Bound transfer even for legacy events whose retained payload is enormous.\n payloadMode: \"summary\" as const,\n includeTypes: [\"user.message\", \"agent.message.completed\"] as Array<\n \"user.message\" | \"agent.message.completed\"\n >,\n limit: 2,\n };\n const [before, after, selectedPreview] = await Promise.all([\n props.client.listEvents(props.workspaceId, props.sessionId, {\n ...options,\n before: match.sequence,\n direction: \"before\",\n }),\n props.client.listEvents(props.workspaceId, props.sessionId, {\n ...options,\n after: match.sequence,\n direction: \"after\",\n }),\n props.client\n .getSessionMessagePreview(\n props.workspaceId,\n props.sessionId,\n { eventId: match.eventId, sequence: match.sequence },\n { signal },\n )\n .catch((error: unknown) => {\n // A stale result can disappear after the search read. Keep its\n // authoritative excerpt; do not swallow access or transport errors.\n if (error instanceof OpenGeniApiError && error.status === 404)\n return { status: \"unavailable\" as const };\n throw error;\n }),\n ]);\n const selectedText = selectedFormattedMessage(selectedPreview, match, props.query);\n const context = async (events: typeof before): Promise<SearchPreviewMessage[]> => {\n const messages = await Promise.all(\n events.map(async (event): Promise<SearchPreviewMessage | null> => {\n if (event.type !== \"user.message\" && event.type !== \"agent.message.completed\")\n return null;\n const payload = event.payload as Record<string, unknown>;\n if (\n match.messageId &&\n event.type === \"agent.message.completed\" &&\n payload.messageId === match.messageId &&\n event.turnId === match.turnId\n )\n return null;\n // Summary projections do not carry the payload codec version. Even\n // short context text may be an undecoded lossless storage marker.\n const preview = await props.client\n .getSessionMessagePreview(\n props.workspaceId,\n props.sessionId,\n { eventId: event.id, sequence: event.sequence },\n { signal },\n )\n .catch((error: unknown) => {\n if (error instanceof OpenGeniApiError && error.status === 404)\n return { status: \"unavailable\" as const };\n throw error;\n });\n if (preview.status !== \"available\") return null;\n let text = preview.text;\n if (text.length > 1800) {\n const end = /[\\uD800-\\uDBFF]/.test(text[1799]!) ? 1799 : 1800;\n text = `${text.slice(0, end)}…`;\n }\n return {\n key: event.id,\n role: event.type === \"user.message\" ? \"user\" : \"assistant\",\n text,\n selected: false,\n formatted: preview.text.length <= 1800,\n };\n }),\n );\n return messages.filter((message): message is SearchPreviewMessage => message !== null);\n };\n const [preceding, following] = await Promise.all([context(before), context(after)]);\n return [\n ...preceding,\n {\n key: match.eventId,\n role: match.role,\n text: selectedText ?? match.snippet.text,\n selected: true,\n formatted: selectedText !== null,\n snippet: match.snippet.text,\n offset: match.messageMatchOffset,\n },\n ...following,\n ];\n },\n [props.client, props.workspaceId, props.sessionId, props.query, match],\n );\n const preview = useSessionSearchResource(\n `${props.authority}:${props.workspaceId}:${props.sessionId}:${props.query}:${match?.eventId}:${match?.messageMatchOffset}`,\n loadContext,\n props.enabled && !!match,\n 100,\n );\n useEffect(() => {\n if (preview.accessDenied || search.accessDenied) onAccessDenied?.();\n }, [preview.accessDenied, search.accessDenied, onAccessDenied]);\n if (preview.accessDenied || search.accessDenied)\n return <div role=\"alert\">Search access is unavailable.</div>;\n const titleOnly = !!search.page && !search.page.hasMore && !matches.length;\n return (\n <SearchPreviewView\n active={props.enabled}\n title={props.title}\n query={props.query}\n messages={preview.value ?? []}\n loading={search.loading || preview.loading}\n error={search.error ?? preview.error}\n onRetry={() => {\n if (search.error) search.retry();\n if (preview.error) preview.retry();\n }}\n onOpen={() => props.onOpen(match)}\n onBack={props.onBack}\n titleOnly={titleOnly}\n scrollPosition={props.scrollPosition}\n counter={\n matches.length\n ? `Match ${(search.page?.matchedOccurrenceCount ?? matches.length) - matches.length + index + 1} of ${search.page?.matchedOccurrenceCount ?? matches.length}${search.page?.hasMore ? \"+\" : \"\"}`\n : search.loading\n ? \"Searching saved history…\"\n : search.error\n ? \"Search unavailable\"\n : \"No matching messages\"\n }\n previousDisabled={index === 0 && search.pageIndex === 0}\n nextDisabled={!search.page?.hasMore && index >= matches.length - 1}\n onPrevious={() => {\n props.scrollPosition.current = 0;\n if (index > 0) setIndex(index - 1);\n else {\n setIndex(-1);\n search.previous();\n }\n }}\n onNext={() => {\n props.scrollPosition.current = 0;\n if (index < matches.length - 1) setIndex(index + 1);\n else {\n setIndex(0);\n search.next();\n }\n }}\n />\n );\n}\n"],"mappings":"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","names":["preview"]}
1
+ {"version":3,"sources":["../../../../src/app/components/session/session-search-dialog.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState, type RefObject } from \"react\";\nimport { useNavigate } from \"../../lib/navigation\";\nimport { SearchIcon } from \"lucide-react\";\nimport { OpenGeniApiError } from \"@opengeni/sdk/browser\";\nimport { useAppContext } from \"../../app-context\";\nimport { Dialog, DialogContent, DialogDescription, DialogTitle } from \"../../../ui/dialog\";\nimport { Input } from \"../../../ui/input\";\nimport { Button } from \"../../../ui/button\";\nimport {\n useCommittedSearchQuery,\n useConversationSearch,\n type ConversationSearchMatch,\n} from \"../../lib/use-conversation-search\";\nimport { useSessionSearchResource } from \"../../lib/use-session-search-resource\";\nimport { cn } from \"../../lib/utils\";\nimport { selectedFormattedMessage } from \"./search-markdown-highlight\";\nimport {\n SearchPreviewView,\n SearchResultsView,\n type SearchPreviewMessage,\n type SearchResultSummary,\n} from \"./search-results-view\";\n\nexport default function SessionSearchDialog(props: {\n workspaceId: string;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n returnFocus?: RefObject<HTMLElement | null> | undefined;\n /** Start with this query (the ⌘K menu's \"Search messages for …\"). */\n seed?: { query: string; nonce: number } | null | undefined;\n}) {\n const { onOpenChange } = props;\n const { client, accessContext } = useAppContext();\n const navigate = useNavigate();\n const [query, setQuery] = useState(props.seed?.query ?? \"\");\n const seedNonce = props.seed?.nonce;\n const seedQuery = props.seed?.query;\n const appliedSeed = useRef(seedNonce);\n useEffect(() => {\n if (seedNonce === undefined || appliedSeed.current === seedNonce || seedQuery === undefined)\n return;\n appliedSeed.current = seedNonce;\n setQuery(seedQuery);\n }, [seedNonce, seedQuery]);\n const [archiveStatus, setArchiveStatus] = useState<\"active\" | \"archived\" | \"all\">(\"all\");\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [mobilePreview, setMobilePreview] = useState(false);\n const [titleCursor, setTitleCursor] = useState<string | undefined>();\n const [previewIndex, setPreviewIndex] = useState(0);\n const openRef = useRef(props.open);\n openRef.current = props.open;\n const restoreFocusOnClose = useRef(true);\n useEffect(() => {\n if (props.open) restoreFocusOnClose.current = true;\n }, [props.open]);\n const resultScroll = useRef(0);\n const previewScroll = useRef(0);\n const scope = JSON.stringify([accessContext.subjectId, props.workspaceId, archiveStatus]);\n const committedQuery = useCommittedSearchQuery(query, scope, props.open);\n const identity = JSON.stringify([\n accessContext.subjectId,\n props.workspaceId,\n committedQuery,\n archiveStatus,\n ]);\n const search = useConversationSearch({\n client,\n authority: accessContext.subjectId,\n workspaceId: props.workspaceId,\n query: committedQuery,\n debounceMs: 0,\n enabled: props.open,\n archiveStatus,\n });\n const loadTitles = useCallback(\n (signal: AbortSignal) =>\n client.listSessionPage(props.workspaceId, {\n search: committedQuery,\n signal,\n archiveStatus,\n limit: 20,\n ...(titleCursor ? { cursor: titleCursor } : {}),\n }),\n [client, props.workspaceId, committedQuery, archiveStatus, titleCursor],\n );\n const titles = useSessionSearchResource(\n `${identity}:${titleCursor ?? \"\"}`,\n loadTitles,\n props.open && !!committedQuery.trim(),\n 0,\n );\n const [deniedIdentity, setDeniedIdentity] = useState<string | null>(null);\n const [recoveringAccess, setRecoveringAccess] = useState(false);\n const accessDenied = search.accessDenied || titles.accessDenied || deniedIdentity === identity;\n const results = useMemo(() => {\n if (accessDenied || !committedQuery.trim()) return [];\n const grouped = new Map<string, SearchResultSummary>();\n for (const session of [...(titles.value?.pinned ?? []), ...(titles.value?.sessions ?? [])]) {\n grouped.set(session.id, {\n sessionId: session.id,\n title: session.title || \"Untitled session\",\n subtitle: new Date(session.updatedAt).toLocaleDateString(),\n snippet: session.initialMessage ?? \"\",\n matchingMessages: 0,\n titleMatch: true,\n });\n }\n const seen = new Set<string>();\n for (const match of search.page?.matches ?? []) {\n const current = grouped.get(match.sessionId);\n const firstForMessage = !seen.has(match.eventId);\n seen.add(match.eventId);\n grouped.set(match.sessionId, {\n sessionId: match.sessionId,\n title: match.sessionTitle || \"Untitled session\",\n subtitle: current?.subtitle ?? \"Message match\",\n snippet: current?.matchingMessages ? current.snippet : match.snippet.text,\n matchingMessages: (current?.matchingMessages ?? 0) + (firstForMessage ? 1 : 0),\n titleMatch: current?.titleMatch ?? false,\n });\n }\n return [...grouped.values()];\n }, [titles.value, search.page, accessDenied, committedQuery]);\n // Keep the selected session while closed/revalidating so its cursor and preview\n // survive the dialog → conversation → dialog round trip.\n const retainedSelection = useRef<{\n identity: string;\n selected: SearchResultSummary;\n } | null>(null);\n if (accessDenied || !committedQuery.trim()) retainedSelection.current = null;\n const selected =\n results.find((result) => result.sessionId === selectedId) ??\n (retainedSelection.current?.identity === identity &&\n retainedSelection.current.selected.sessionId === selectedId\n ? retainedSelection.current.selected\n : null) ??\n results[0] ??\n null;\n if (selected) retainedSelection.current = { identity, selected };\n const previewSelection =\n selected ??\n (retainedSelection.current?.identity === identity ? retainedSelection.current.selected : null);\n const selectedSearch = useConversationSearch({\n client,\n authority: accessContext.subjectId,\n workspaceId: props.workspaceId,\n sessionId: previewSelection?.sessionId,\n query: committedQuery,\n debounceMs: 0,\n enabled: props.open && !!previewSelection,\n });\n useEffect(() => {\n setTitleCursor(undefined);\n setSelectedId(null);\n setMobilePreview(false);\n setPreviewIndex(0);\n resultScroll.current = 0;\n previewScroll.current = 0;\n }, [identity]);\n useEffect(() => {\n if (search.accessDenied || titles.accessDenied) {\n retainedSelection.current = null;\n setSelectedId(null);\n setDeniedIdentity(identity);\n }\n }, [search.accessDenied, titles.accessDenied, identity]);\n useEffect(() => {\n // An authority failure invalidates every source. Do not reveal another\n // source's retained value while Retry is still rechecking live access.\n if (recoveringAccess && !search.loading && !titles.loading && !search.error && !titles.error) {\n setDeniedIdentity(null);\n setRecoveringAccess(false);\n }\n }, [recoveringAccess, search.loading, titles.loading, search.error, titles.error]);\n function select(id: string) {\n if (id !== selectedId) {\n setPreviewIndex(0);\n previewScroll.current = 0;\n }\n setSelectedId(id);\n setMobilePreview(true);\n }\n const onOpen = useCallback(\n (match?: ConversationSearchMatch) => {\n if (!previewSelection || accessDenied) return;\n // Result navigation owns the next focus target. Dismissal returns to\n // the opener; opening a conversation must not steal focus back later.\n restoreFocusOnClose.current = false;\n onOpenChange(false);\n void navigate({\n to: \"/workspaces/$workspaceId/sessions/$sessionId\",\n params: {\n workspaceId: props.workspaceId,\n sessionId: previewSelection.sessionId,\n },\n search: match\n ? {\n find: committedQuery,\n matchSequence: match.sequence,\n matchOffset: match.messageMatchOffset,\n searchOrigin: \"session-search\",\n }\n : { find: committedQuery, searchOrigin: \"session-search\" },\n });\n },\n [navigate, props.workspaceId, onOpenChange, previewSelection, committedQuery, accessDenied],\n );\n return (\n <Dialog open={props.open} onOpenChange={props.onOpenChange}>\n <DialogContent\n className=\"flex h-[min(760px,85dvh)] flex-col gap-0 overflow-hidden p-0 sm:max-w-5xl sm:p-0\"\n aria-describedby=\"session-search-description\"\n onCloseAutoFocus={(event) => {\n // This controlled dialog is mounted separately from its rail opener,\n // so Radix has no DialogTrigger ref to restore. A reopened dialog or\n // a result navigation owns focus independently of this retiring scope.\n event.preventDefault();\n if (openRef.current || !restoreFocusOnClose.current) return;\n const target = props.returnFocus?.current;\n if (target?.isConnected) target.focus({ preventScroll: true });\n }}\n >\n <div className=\"shrink-0 border-b border-border px-4 pb-3 pt-4 pr-12\">\n <DialogTitle className=\"mb-3 text-base\">Search sessions</DialogTitle>\n <div className=\"relative\">\n <SearchIcon\n className=\"pointer-events-none absolute left-3 top-2.5 size-4 text-fg-subtle\"\n aria-hidden=\"true\"\n />\n <Input\n autoFocus\n type=\"search\"\n aria-label=\"Search session titles and messages\"\n placeholder=\"Search titles and messages…\"\n value={query}\n maxLength={200}\n onChange={(event) => setQuery(event.target.value)}\n className=\"pl-9\"\n suppressAutofill\n />\n </div>\n {query !== committedQuery ? (\n <p className=\"mt-2 text-xs text-fg-muted\" role=\"status\">\n Showing results for “{committedQuery}”\n </p>\n ) : null}\n <div className=\"mt-3 flex flex-wrap items-center gap-3\">\n <DialogDescription id=\"session-search-description\" className=\"flex-1 text-xs\">\n Literal text in user and completed assistant messages.\n </DialogDescription>\n <label className=\"flex items-center gap-2 text-xs text-fg-muted\">\n Sessions\n <select\n aria-label=\"Search session status\"\n value={archiveStatus}\n onChange={(event) => {\n setArchiveStatus(event.target.value as typeof archiveStatus);\n setTitleCursor(undefined);\n setSelectedId(null);\n }}\n className=\"rounded-md border border-border bg-bg px-2 py-1 text-fg outline-hidden focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <option value=\"all\">All</option>\n <option value=\"active\">Active</option>\n <option value=\"archived\">Archived</option>\n </select>\n </label>\n </div>\n </div>\n <div className=\"grid min-h-0 min-w-0 flex-1 grid-cols-[minmax(0,1fr)] md:grid-cols-[minmax(250px,0.8fr)_minmax(0,1.2fr)]\">\n <div\n className={cn(\n \"flex min-h-0 flex-col md:border-r md:border-border\",\n mobilePreview && selected ? \"hidden md:flex\" : \"flex\",\n )}\n >\n <SearchResultsView\n query={committedQuery}\n results={results}\n selectedId={selected?.sessionId ?? null}\n onSelect={select}\n loading={search.loading || titles.loading}\n error={\n accessDenied\n ? \"Search access is unavailable. Try again.\"\n : (search.error ?? titles.error)\n }\n onRetry={() => {\n if (search.error || accessDenied) search.retry();\n if (titles.error || accessDenied) titles.retry();\n if (accessDenied) setRecoveringAccess(true);\n }}\n hasMore={!!search.page?.hasMore}\n onMore={() => {\n resultScroll.current = 0;\n search.next();\n }}\n scrollPosition={resultScroll}\n active={props.open}\n />\n <div className=\"mt-auto flex shrink-0 flex-wrap gap-2 border-t border-border px-3 py-2\">\n {search.pageIndex > 0 ? (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={search.previous}\n disabled={search.loading}\n >\n Previous message results\n </Button>\n ) : null}\n {titles.value?.nextCursor ? (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setTitleCursor(titles.value?.nextCursor ?? undefined)}\n >\n More title results\n </Button>\n ) : null}\n {search.loading ? (\n <span className=\"text-xs text-fg-muted\" role=\"status\">\n Searching saved history\n {search.scanned ? ` · ${search.scanned} messages visited` : \"…\"}\n </span>\n ) : search.page?.hasMore ? (\n <span className=\"text-xs text-fg-muted\">More history available</span>\n ) : null}\n </div>\n </div>\n <div\n className={cn(\n \"min-h-0 min-w-0 md:flex md:flex-col\",\n mobilePreview && selected ? \"flex flex-col\" : \"hidden\",\n )}\n >\n {previewSelection ? (\n <SessionSearchPreview\n client={client}\n authority={accessContext.subjectId}\n workspaceId={props.workspaceId}\n sessionId={previewSelection.sessionId}\n title={previewSelection.title}\n query={committedQuery}\n onAccessDenied={() => setDeniedIdentity(identity)}\n enabled={props.open}\n onOpen={onOpen}\n onBack={() => setMobilePreview(false)}\n search={selectedSearch}\n index={previewIndex}\n setIndex={setPreviewIndex}\n scrollPosition={previewScroll}\n />\n ) : (\n <div className=\"flex flex-1 items-center justify-center p-8 text-sm text-fg-subtle\">\n Select a result to read it in context.\n </div>\n )}\n </div>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\ntype SessionSearchPreviewProps = {\n client: ReturnType<typeof useAppContext>[\"client\"];\n authority: string;\n workspaceId: string;\n sessionId: string;\n title: string;\n query: string;\n enabled: boolean;\n onOpen: (match?: ConversationSearchMatch) => void;\n onBack: () => void;\n search: ReturnType<typeof useConversationSearch>;\n index: number;\n setIndex: (index: number) => void;\n scrollPosition: RefObject<number>;\n onAccessDenied?: (() => void) | undefined;\n};\n\nexport function SessionSearchPreview(props: SessionSearchPreviewProps) {\n const { search, setIndex, onAccessDenied } = props;\n const matches = search.page?.matches ?? [];\n // -1 means land on the last occurrence when a previous batch arrives.\n const index = props.index < 0 ? Math.max(0, matches.length - 1) : props.index;\n const match = matches[Math.min(index, Math.max(0, matches.length - 1))];\n const loadContext = useCallback(\n async (signal: AbortSignal): Promise<SearchPreviewMessage[]> => {\n if (!match) return [];\n const options = {\n signal,\n mode: \"forensic\" as const,\n // Bound transfer even for legacy events whose retained payload is enormous.\n payloadMode: \"summary\" as const,\n includeTypes: [\"user.message\", \"agent.message.completed\"] as Array<\n \"user.message\" | \"agent.message.completed\"\n >,\n limit: 2,\n };\n const [before, after, selectedPreview] = await Promise.all([\n props.client.listEvents(props.workspaceId, props.sessionId, {\n ...options,\n before: match.sequence,\n direction: \"before\",\n }),\n props.client.listEvents(props.workspaceId, props.sessionId, {\n ...options,\n after: match.sequence,\n direction: \"after\",\n }),\n props.client\n .getSessionMessagePreview(\n props.workspaceId,\n props.sessionId,\n { eventId: match.eventId, sequence: match.sequence },\n { signal },\n )\n .catch((error: unknown) => {\n // A stale result can disappear after the search read. Keep its\n // authoritative excerpt; do not swallow access or transport errors.\n if (error instanceof OpenGeniApiError && error.status === 404)\n return { status: \"unavailable\" as const };\n throw error;\n }),\n ]);\n const selectedText = selectedFormattedMessage(selectedPreview, match, props.query);\n const context = async (events: typeof before): Promise<SearchPreviewMessage[]> => {\n const messages = await Promise.all(\n events.map(async (event): Promise<SearchPreviewMessage | null> => {\n if (event.type !== \"user.message\" && event.type !== \"agent.message.completed\")\n return null;\n const payload = event.payload as Record<string, unknown>;\n if (\n match.messageId &&\n event.type === \"agent.message.completed\" &&\n payload.messageId === match.messageId &&\n event.turnId === match.turnId\n )\n return null;\n // Summary projections do not carry the payload codec version. Even\n // short context text may be an undecoded lossless storage marker.\n const preview = await props.client\n .getSessionMessagePreview(\n props.workspaceId,\n props.sessionId,\n { eventId: event.id, sequence: event.sequence },\n { signal },\n )\n .catch((error: unknown) => {\n if (error instanceof OpenGeniApiError && error.status === 404)\n return { status: \"unavailable\" as const };\n throw error;\n });\n if (preview.status !== \"available\") return null;\n let text = preview.text;\n if (text.length > 1800) {\n const end = /[\\uD800-\\uDBFF]/.test(text[1799]!) ? 1799 : 1800;\n text = `${text.slice(0, end)}…`;\n }\n return {\n key: event.id,\n role: event.type === \"user.message\" ? \"user\" : \"assistant\",\n text,\n selected: false,\n formatted: preview.text.length <= 1800,\n };\n }),\n );\n return messages.filter((message): message is SearchPreviewMessage => message !== null);\n };\n const [preceding, following] = await Promise.all([context(before), context(after)]);\n return [\n ...preceding,\n {\n key: match.eventId,\n role: match.role,\n text: selectedText ?? match.snippet.text,\n selected: true,\n formatted: selectedText !== null,\n snippet: match.snippet.text,\n offset: match.messageMatchOffset,\n },\n ...following,\n ];\n },\n [props.client, props.workspaceId, props.sessionId, props.query, match],\n );\n const preview = useSessionSearchResource(\n `${props.authority}:${props.workspaceId}:${props.sessionId}:${props.query}:${match?.eventId}:${match?.messageMatchOffset}`,\n loadContext,\n props.enabled && !!match,\n 100,\n );\n useEffect(() => {\n if (preview.accessDenied || search.accessDenied) onAccessDenied?.();\n }, [preview.accessDenied, search.accessDenied, onAccessDenied]);\n if (preview.accessDenied || search.accessDenied)\n return <div role=\"alert\">Search access is unavailable.</div>;\n const titleOnly = !!search.page && !search.page.hasMore && !matches.length;\n return (\n <SearchPreviewView\n active={props.enabled}\n title={props.title}\n query={props.query}\n messages={preview.value ?? []}\n loading={search.loading || preview.loading}\n error={search.error ?? preview.error}\n onRetry={() => {\n if (search.error) search.retry();\n if (preview.error) preview.retry();\n }}\n onOpen={() => props.onOpen(match)}\n onBack={props.onBack}\n titleOnly={titleOnly}\n scrollPosition={props.scrollPosition}\n counter={\n matches.length\n ? `Match ${(search.page?.matchedOccurrenceCount ?? matches.length) - matches.length + index + 1} of ${search.page?.matchedOccurrenceCount ?? matches.length}${search.page?.hasMore ? \"+\" : \"\"}`\n : search.loading\n ? \"Searching saved history…\"\n : search.error\n ? \"Search unavailable\"\n : \"No matching messages\"\n }\n previousDisabled={index === 0 && search.pageIndex === 0}\n nextDisabled={!search.page?.hasMore && index >= matches.length - 1}\n onPrevious={() => {\n props.scrollPosition.current = 0;\n if (index > 0) setIndex(index - 1);\n else {\n setIndex(-1);\n search.previous();\n }\n }}\n onNext={() => {\n props.scrollPosition.current = 0;\n if (index < matches.length - 1) setIndex(index + 1);\n else {\n setIndex(0);\n search.next();\n }\n }}\n />\n );\n}\n"],"mappings":"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","names":["preview"]}
@@ -7,12 +7,12 @@ import {
7
7
  hasWorkspacePermission
8
8
  } from "../../../chunk-OWQBERKV.js";
9
9
  import "../../../chunk-74JEZLLQ.js";
10
- import {
11
- userErrorText
12
- } from "../../../chunk-L4OF77LE.js";
13
10
  import {
14
11
  Button
15
12
  } from "../../../chunk-HMU5IELG.js";
13
+ import {
14
+ userErrorText
15
+ } from "../../../chunk-L4OF77LE.js";
16
16
  import "../../../chunk-7TEUNQ6T.js";
17
17
  import "../../../chunk-TXS65BB2.js";
18
18
 
@@ -1,7 +1,4 @@
1
1
  "use client";
2
- import {
3
- sessionTenancyOperationController
4
- } from "../../../chunk-HQ6SKOZ2.js";
5
2
  import {
6
3
  classifySessionTenancyFailure,
7
4
  isCurrentSessionTenancyTarget,
@@ -13,14 +10,17 @@ import {
13
10
  sessionVisibilityWorkStopsWork,
14
11
  sessionVisibilityWorkSummary
15
12
  } from "../../../chunk-ENGJ3OT6.js";
13
+ import {
14
+ sessionTenancyOperationController
15
+ } from "../../../chunk-HQ6SKOZ2.js";
16
16
  import {
17
17
  SessionUnavailableRoute
18
- } from "../../../chunk-Q4OHNGGB.js";
18
+ } from "../../../chunk-JRXHSVD5.js";
19
+ import "../../../chunk-YUVGBL7S.js";
19
20
  import "../../../chunk-FBMU3VK5.js";
20
21
  import {
21
22
  workspaceSessionsPath
22
23
  } from "../../../chunk-WRLWLGEF.js";
23
- import "../../../chunk-YUVGBL7S.js";
24
24
  import "../../../chunk-7LP3W5H5.js";
25
25
  import {
26
26
  ProblemPanel
@@ -29,19 +29,26 @@ import {
29
29
  isApiErrorStatus
30
30
  } from "../../../chunk-L5HJ4UYB.js";
31
31
  import "../../../chunk-A3MTTRCX.js";
32
- import {
33
- Notice
34
- } from "../../../chunk-WLEDGIVS.js";
35
32
  import {
36
33
  ConfirmDialog
37
34
  } from "../../../chunk-Q27G7PF6.js";
38
35
  import "../../../chunk-HZUL2CUH.js";
36
+ import {
37
+ DropdownMenu,
38
+ DropdownMenuContent,
39
+ DropdownMenuItem,
40
+ DropdownMenuSeparator,
41
+ DropdownMenuTrigger
42
+ } from "../../../chunk-TREHTIBD.js";
43
+ import {
44
+ Tooltip,
45
+ TooltipContent,
46
+ TooltipProvider,
47
+ TooltipTrigger
48
+ } from "../../../chunk-OLTGED2Q.js";
39
49
  import {
40
50
  runCurrentTransitionInvocation
41
51
  } from "../../../chunk-ANALJOJL.js";
42
- import {
43
- isPersonalWorkspace
44
- } from "../../../chunk-74JEZLLQ.js";
45
52
  import {
46
53
  toast
47
54
  } from "../../../chunk-YG6NARQY.js";
@@ -49,27 +56,20 @@ import {
49
56
  useNavigate
50
57
  } from "../../../chunk-MYNUBDU7.js";
51
58
  import "../../../chunk-IZUAIHR4.js";
52
- import "../../../chunk-L4OF77LE.js";
59
+ import {
60
+ isPersonalWorkspace
61
+ } from "../../../chunk-74JEZLLQ.js";
53
62
  import {
54
63
  useAppContext
55
64
  } from "../../../chunk-W6KAUGXO.js";
65
+ import "../../../chunk-5OTQA7CM.js";
56
66
  import {
57
- Tooltip,
58
- TooltipContent,
59
- TooltipProvider,
60
- TooltipTrigger
61
- } from "../../../chunk-OLTGED2Q.js";
67
+ Notice
68
+ } from "../../../chunk-WLEDGIVS.js";
62
69
  import {
63
70
  Button
64
71
  } from "../../../chunk-HMU5IELG.js";
65
- import {
66
- DropdownMenu,
67
- DropdownMenuContent,
68
- DropdownMenuItem,
69
- DropdownMenuSeparator,
70
- DropdownMenuTrigger
71
- } from "../../../chunk-MOF3XSUM.js";
72
- import "../../../chunk-5OTQA7CM.js";
72
+ import "../../../chunk-L4OF77LE.js";
73
73
  import "../../../chunk-J3BHDXQQ.js";
74
74
  import "../../../chunk-TXS65BB2.js";
75
75
 
@@ -3,33 +3,33 @@ import {
3
3
  SESSION_USAGE_LIMIT_UNKNOWN_RETRY_MS,
4
4
  SessionUsageLimitSection,
5
5
  sessionHref
6
- } from "../../../chunk-WPCF34V6.js";
6
+ } from "../../../chunk-3WG3CRL7.js";
7
7
  import "../../../chunk-RBRX5ZS3.js";
8
8
  import "../../../chunk-JM4XEJPM.js";
9
9
  import "../../../chunk-A3MTTRCX.js";
10
- import "../../../chunk-SWWYYGQO.js";
11
10
  import "../../../chunk-GQPRDEHX.js";
12
11
  import "../../../chunk-WHMKC7OQ.js";
12
+ import "../../../chunk-325C2TCI.js";
13
13
  import "../../../chunk-XSOPQZGH.js";
14
+ import "../../../chunk-XNTW77T6.js";
14
15
  import "../../../chunk-X6WZOHBI.js";
16
+ import "../../../chunk-YG6NARQY.js";
15
17
  import "../../../chunk-OWQBERKV.js";
16
18
  import "../../../chunk-74JEZLLQ.js";
17
- import "../../../chunk-YG6NARQY.js";
18
- import "../../../chunk-L4OF77LE.js";
19
19
  import "../../../chunk-W6KAUGXO.js";
20
- import "../../../chunk-XNTW77T6.js";
21
- import "../../../chunk-HY7EYWIG.js";
22
20
  import "../../../chunk-KS57MLGE.js";
23
21
  import "../../../chunk-HMU5IELG.js";
24
- import "../../../chunk-DCLPWYP3.js";
25
- import "../../../chunk-4U7SHFQ2.js";
22
+ import "../../../chunk-HY7EYWIG.js";
23
+ import "../../../chunk-L4OF77LE.js";
26
24
  import "../../../chunk-7TEUNQ6T.js";
25
+ import "../../../chunk-IEVPJ3G6.js";
27
26
  import "../../../chunk-J3BHDXQQ.js";
27
+ import "../../../chunk-4U7SHFQ2.js";
28
28
  import "../../../chunk-NAWXARTY.js";
29
29
  import "../../../chunk-CM7LVUKC.js";
30
30
  import "../../../chunk-TVQCDDSZ.js";
31
31
  import "../../../chunk-TXS65BB2.js";
32
- import "../../../chunk-G7VLL3PG.js";
32
+ import "../../../chunk-F2YABPRJ.js";
33
33
  export {
34
34
  SESSION_USAGE_LIMIT_UNKNOWN_RETRY_MS,
35
35
  SessionUsageLimitSection,
@@ -1,19 +1,21 @@
1
1
  "use client";
2
- import "../../../chunk-M6KUY3YH.js";
2
+ import "../../../chunk-FIICQA55.js";
3
3
  import {
4
4
  sessionInputWait
5
- } from "../../../chunk-QGSGIYE3.js";
6
- import "../../../chunk-4FOOHMTU.js";
7
- import "../../../chunk-ZSERYHHT.js";
8
- import "../../../chunk-2RIUMV7S.js";
5
+ } from "../../../chunk-J2C6LB6W.js";
6
+ import "../../../chunk-CFEFYPNR.js";
7
+ import "../../../chunk-LY6727IF.js";
8
+ import "../../../chunk-IDMXEPHL.js";
9
+ import "../../../chunk-LJUMYUBO.js";
10
+ import "../../../chunk-UBIJBLUK.js";
9
11
  import "../../../chunk-HEVQKE27.js";
10
12
  import "../../../chunk-ANHUMDJX.js";
11
- import "../../../chunk-IZV5FTJC.js";
12
- import "../../../chunk-STUCI6QA.js";
13
13
  import "../../../chunk-DNJ23AWQ.js";
14
+ import "../../../chunk-OB3YGXHQ.js";
14
15
  import "../../../chunk-DHXKEJBH.js";
15
- import "../../../chunk-GRLPRM56.js";
16
- import "../../../chunk-UYSZKDQY.js";
16
+ import "../../../chunk-IZV5FTJC.js";
17
+ import "../../../chunk-STUCI6QA.js";
18
+ import "../../../chunk-MK54JLE4.js";
17
19
  import "../../../chunk-4NHJ6EXL.js";
18
20
 
19
21
  // src/app/components/session/session-wait-status.tsx
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/app/components/session/session-wait-status.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { Clock3Icon } from \"lucide-react\";\nimport type { Session } from \"@opengeni/sdk\";\nimport { sessionInputWait } from \"../../lib/session-rail\";\n/** The agent's deliberate wait retains its own reason and deadline. */\nexport function SessionWaitStatus({\n session,\n}: {\n session: Pick<Session, \"status\" | \"effectiveControl\" | \"inputWait\">;\n}) {\n const waiting = sessionInputWait(session);\n const deadlineAt = waiting?.deadlineAt;\n const [now, setNow] = useState(Date.now);\n useEffect(() => {\n if (!deadlineAt) return;\n setNow(Date.now());\n const timer = setInterval(() => setNow(Date.now()), 15_000);\n return () => clearInterval(timer);\n }, [deadlineAt]);\n if (!waiting) return null;\n const deadline = new Date(waiting.deadlineAt);\n const time = deadline.toLocaleString(undefined, {\n ...(deadline.toDateString() === new Date(now).toDateString()\n ? {}\n : { month: \"short\", day: \"numeric\" }),\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n const reason = waiting.reason.trim();\n // Older agents used this field for verbose internal notes. Preserve those in\n // disclosure instead of promoting them into the current status headline.\n const compact = reason.length <= 180 && !/[\\n]|[0-9a-f]{8}-[0-9a-f-]{27,}/i.test(reason);\n return (\n <div className=\"shrink-0 px-4 py-2 sm:px-6\" data-session-wait-status=\"\">\n <div className=\"mx-auto flex w-full max-w-3xl items-start gap-2 text-sm text-fg-muted\">\n <Clock3Icon aria-hidden className=\"mt-0.5 size-4 shrink-0\" />\n <div className=\"min-w-0\">\n <div role=\"status\">\n <p className=\"font-medium text-fg\">\n {compact && reason ? reason : \"Waiting for work in progress\"}\n </p>\n <p className=\"mt-0.5 text-xs\">\n {deadline.getTime() <= now\n ? \"Recheck due · waiting to resume\"\n : `Checks again at ${time} · resumes sooner if an update arrives`}\n </p>\n </div>\n {!compact && (\n <details className=\"mt-1 text-xs\">\n <summary className=\"cursor-pointer\">Wait details</summary>\n <p className=\"mt-1 max-h-32 overflow-y-auto whitespace-pre-wrap break-words\">\n {reason}\n </p>\n </details>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,SAAS,WAAW,gBAAgB;AACpC,SAAS,kBAAkB;AAkCnB,cAEE,YAFF;AA9BD,SAAS,kBAAkB;AAAA,EAChC;AACF,GAEG;AACD,QAAM,UAAU,iBAAiB,OAAO;AACxC,QAAM,aAAa,SAAS;AAC5B,QAAM,CAAC,KAAK,MAAM,IAAI,SAAS,KAAK,GAAG;AACvC,YAAU,MAAM;AACd,QAAI,CAAC,WAAY;AACjB,WAAO,KAAK,IAAI,CAAC;AACjB,UAAM,QAAQ,YAAY,MAAM,OAAO,KAAK,IAAI,CAAC,GAAG,IAAM;AAC1D,WAAO,MAAM,cAAc,KAAK;AAAA,EAClC,GAAG,CAAC,UAAU,CAAC;AACf,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,WAAW,IAAI,KAAK,QAAQ,UAAU;AAC5C,QAAM,OAAO,SAAS,eAAe,QAAW;AAAA,IAC9C,GAAI,SAAS,aAAa,MAAM,IAAI,KAAK,GAAG,EAAE,aAAa,IACvD,CAAC,IACD,EAAE,OAAO,SAAS,KAAK,UAAU;AAAA,IACrC,MAAM;AAAA,IACN,QAAQ;AAAA,EACV,CAAC;AACD,QAAM,SAAS,QAAQ,OAAO,KAAK;AAGnC,QAAM,UAAU,OAAO,UAAU,OAAO,CAAC,mCAAmC,KAAK,MAAM;AACvF,SACE,oBAAC,SAAI,WAAU,8BAA6B,4BAAyB,IACnE,+BAAC,SAAI,WAAU,yEACb;AAAA,wBAAC,cAAW,eAAW,MAAC,WAAU,0BAAyB;AAAA,IAC3D,qBAAC,SAAI,WAAU,WACb;AAAA,2BAAC,SAAI,MAAK,UACR;AAAA,4BAAC,OAAE,WAAU,uBACV,qBAAW,SAAS,SAAS,gCAChC;AAAA,QACA,oBAAC,OAAE,WAAU,kBACV,mBAAS,QAAQ,KAAK,MACnB,uCACA,mBAAmB,IAAI,6CAC7B;AAAA,SACF;AAAA,MACC,CAAC,WACA,qBAAC,aAAQ,WAAU,gBACjB;AAAA,4BAAC,aAAQ,WAAU,kBAAiB,0BAAY;AAAA,QAChD,oBAAC,OAAE,WAAU,iEACV,kBACH;AAAA,SACF;AAAA,OAEJ;AAAA,KACF,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/app/components/session/session-wait-status.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { Clock3Icon } from \"lucide-react\";\nimport type { Session } from \"@opengeni/sdk\";\nimport { sessionInputWait } from \"../../lib/session-rail\";\n/** The agent's deliberate wait retains its own reason and deadline. */\nexport function SessionWaitStatus({\n session,\n}: {\n session: Pick<Session, \"status\" | \"effectiveControl\" | \"inputWait\">;\n}) {\n const waiting = sessionInputWait(session);\n const deadlineAt = waiting?.deadlineAt;\n const [now, setNow] = useState(Date.now);\n useEffect(() => {\n if (!deadlineAt) return;\n setNow(Date.now());\n const timer = setInterval(() => setNow(Date.now()), 15_000);\n return () => clearInterval(timer);\n }, [deadlineAt]);\n if (!waiting) return null;\n const deadline = new Date(waiting.deadlineAt);\n const time = deadline.toLocaleString(undefined, {\n ...(deadline.toDateString() === new Date(now).toDateString()\n ? {}\n : { month: \"short\", day: \"numeric\" }),\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n const reason = waiting.reason.trim();\n // Older agents used this field for verbose internal notes. Preserve those in\n // disclosure instead of promoting them into the current status headline.\n const compact = reason.length <= 180 && !/[\\n]|[0-9a-f]{8}-[0-9a-f-]{27,}/i.test(reason);\n return (\n <div className=\"shrink-0 px-4 py-2 sm:px-6\" data-session-wait-status=\"\">\n <div className=\"mx-auto flex w-full max-w-3xl items-start gap-2 text-sm text-fg-muted\">\n <Clock3Icon aria-hidden className=\"mt-0.5 size-4 shrink-0\" />\n <div className=\"min-w-0\">\n <div role=\"status\">\n <p className=\"font-medium text-fg\">\n {compact && reason ? reason : \"Waiting for work in progress\"}\n </p>\n <p className=\"mt-0.5 text-xs\">\n {deadline.getTime() <= now\n ? \"Recheck due · waiting to resume\"\n : `Checks again at ${time} · resumes sooner if an update arrives`}\n </p>\n </div>\n {!compact && (\n <details className=\"mt-1 text-xs\">\n <summary className=\"cursor-pointer\">Wait details</summary>\n <p className=\"mt-1 max-h-32 overflow-y-auto whitespace-pre-wrap break-words\">\n {reason}\n </p>\n </details>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,WAAW,gBAAgB;AACpC,SAAS,kBAAkB;AAkCnB,cAEE,YAFF;AA9BD,SAAS,kBAAkB;AAAA,EAChC;AACF,GAEG;AACD,QAAM,UAAU,iBAAiB,OAAO;AACxC,QAAM,aAAa,SAAS;AAC5B,QAAM,CAAC,KAAK,MAAM,IAAI,SAAS,KAAK,GAAG;AACvC,YAAU,MAAM;AACd,QAAI,CAAC,WAAY;AACjB,WAAO,KAAK,IAAI,CAAC;AACjB,UAAM,QAAQ,YAAY,MAAM,OAAO,KAAK,IAAI,CAAC,GAAG,IAAM;AAC1D,WAAO,MAAM,cAAc,KAAK;AAAA,EAClC,GAAG,CAAC,UAAU,CAAC;AACf,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,WAAW,IAAI,KAAK,QAAQ,UAAU;AAC5C,QAAM,OAAO,SAAS,eAAe,QAAW;AAAA,IAC9C,GAAI,SAAS,aAAa,MAAM,IAAI,KAAK,GAAG,EAAE,aAAa,IACvD,CAAC,IACD,EAAE,OAAO,SAAS,KAAK,UAAU;AAAA,IACrC,MAAM;AAAA,IACN,QAAQ;AAAA,EACV,CAAC;AACD,QAAM,SAAS,QAAQ,OAAO,KAAK;AAGnC,QAAM,UAAU,OAAO,UAAU,OAAO,CAAC,mCAAmC,KAAK,MAAM;AACvF,SACE,oBAAC,SAAI,WAAU,8BAA6B,4BAAyB,IACnE,+BAAC,SAAI,WAAU,yEACb;AAAA,wBAAC,cAAW,eAAW,MAAC,WAAU,0BAAyB;AAAA,IAC3D,qBAAC,SAAI,WAAU,WACb;AAAA,2BAAC,SAAI,MAAK,UACR;AAAA,4BAAC,OAAE,WAAU,uBACV,qBAAW,SAAS,SAAS,gCAChC;AAAA,QACA,oBAAC,OAAE,WAAU,kBACV,mBAAS,QAAQ,KAAK,MACnB,uCACA,mBAAmB,IAAI,6CAC7B;AAAA,SACF;AAAA,MACC,CAAC,WACA,qBAAC,aAAQ,WAAU,gBACjB;AAAA,4BAAC,aAAQ,WAAU,kBAAiB,0BAAY;AAAA,QAChD,oBAAC,OAAE,WAAU,iEACV,kBACH;AAAA,SACF;AAAA,OAEJ;AAAA,KACF,GACF;AAEJ;","names":[]}
@@ -5,34 +5,36 @@ import {
5
5
  SubagentsLabel,
6
6
  sessionStatusTone,
7
7
  subagentAttentionHint
8
- } from "../../../chunk-W2QK7PYS.js";
9
- import "../../../chunk-M6KUY3YH.js";
10
- import "../../../chunk-7UQJEADK.js";
8
+ } from "../../../chunk-JAAST75A.js";
9
+ import "../../../chunk-FIICQA55.js";
10
+ import "../../../chunk-ZL2O4BYP.js";
11
11
  import "../../../chunk-5TLEWXAB.js";
12
12
  import "../../../chunk-A3MTTRCX.js";
13
+ import "../../../chunk-TREHTIBD.js";
13
14
  import "../../../chunk-X6WZOHBI.js";
14
- import "../../../chunk-PT7MTXRE.js";
15
+ import "../../../chunk-MAOCN7J6.js";
15
16
  import "../../../chunk-MYNUBDU7.js";
16
17
  import "../../../chunk-IZUAIHR4.js";
17
- import "../../../chunk-MOF3XSUM.js";
18
18
  import "../../../chunk-5OTQA7CM.js";
19
+ import "../../../chunk-J2C6LB6W.js";
19
20
  import "../../../chunk-A3KMTJZS.js";
20
- import "../../../chunk-QGSGIYE3.js";
21
- import "../../../chunk-4FOOHMTU.js";
22
- import "../../../chunk-ZSERYHHT.js";
23
- import "../../../chunk-2RIUMV7S.js";
21
+ import "../../../chunk-J3BHDXQQ.js";
22
+ import "../../../chunk-CFEFYPNR.js";
23
+ import "../../../chunk-LY6727IF.js";
24
+ import "../../../chunk-IDMXEPHL.js";
25
+ import "../../../chunk-LJUMYUBO.js";
26
+ import "../../../chunk-UBIJBLUK.js";
24
27
  import "../../../chunk-HEVQKE27.js";
25
28
  import "../../../chunk-ANHUMDJX.js";
26
- import "../../../chunk-IZV5FTJC.js";
27
- import "../../../chunk-STUCI6QA.js";
28
29
  import "../../../chunk-DNJ23AWQ.js";
30
+ import "../../../chunk-OB3YGXHQ.js";
29
31
  import "../../../chunk-DHXKEJBH.js";
30
- import "../../../chunk-J3BHDXQQ.js";
31
- import "../../../chunk-GRLPRM56.js";
32
- import "../../../chunk-UYSZKDQY.js";
32
+ import "../../../chunk-IZV5FTJC.js";
33
+ import "../../../chunk-STUCI6QA.js";
34
+ import "../../../chunk-MK54JLE4.js";
33
35
  import "../../../chunk-4NHJ6EXL.js";
34
36
  import "../../../chunk-TXS65BB2.js";
35
- import "../../../chunk-G7VLL3PG.js";
37
+ import "../../../chunk-F2YABPRJ.js";
36
38
  export {
37
39
  SessionAncestryBreadcrumb,
38
40
  SubagentTree,
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import {
3
3
  SubscriptionAccountMenu
4
- } from "../../../chunk-D4YQF4E3.js";
4
+ } from "../../../chunk-3SMJ2BIQ.js";
5
5
  import "../../../chunk-A3MTTRCX.js";
6
- import "../../../chunk-MOF3XSUM.js";
6
+ import "../../../chunk-TREHTIBD.js";
7
7
  import "../../../chunk-5OTQA7CM.js";
8
8
  import "../../../chunk-J3BHDXQQ.js";
9
9
  import "../../../chunk-TXS65BB2.js";
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  ConnectionAccountPicker
4
- } from "../../chunk-PO35PBAB.js";
4
+ } from "../../chunk-HVH7FFJH.js";
5
5
  import {
6
6
  CapabilityLogo
7
7
  } from "../../chunk-LEDS7L3I.js";
@@ -9,26 +9,26 @@ import "../../chunk-22NENBA3.js";
9
9
  import {
10
10
  cn
11
11
  } from "../../chunk-A3MTTRCX.js";
12
- import {
13
- ConnectorAction
14
- } from "../../chunk-QZO2KK2F.js";
15
12
  import {
16
13
  ComposerMenuHeader,
17
14
  ComposerMenuRowsSkeleton,
18
15
  ComposerMenuSwitch,
19
16
  ComposerMenuSwitchIndicator
20
17
  } from "../../chunk-O2LGEYG4.js";
18
+ import {
19
+ ConnectorAction
20
+ } from "../../chunk-6P44NG6Y.js";
21
+ import "../../chunk-TREHTIBD.js";
21
22
  import {
22
23
  isComposerConnector
23
24
  } from "../../chunk-L6Y4ALSM.js";
24
- import "../../chunk-L4OF77LE.js";
25
- import "../../chunk-MOF3XSUM.js";
26
25
  import {
27
26
  MENU_BACK_BUTTON_CLASS,
28
27
  MENU_CHECK_CLASS,
29
28
  MENU_LABEL_CLASS,
30
29
  MENU_NOTE_CLASS
31
30
  } from "../../chunk-5OTQA7CM.js";
31
+ import "../../chunk-L4OF77LE.js";
32
32
  import "../../chunk-J3BHDXQQ.js";
33
33
  import "../../chunk-TXS65BB2.js";
34
34
 
@@ -5,8 +5,8 @@ import {
5
5
  import "../../../chunk-TFK4KFKA.js";
6
6
  import "../../../chunk-XSOPQZGH.js";
7
7
  import "../../../chunk-XNTW77T6.js";
8
- import "../../../chunk-KS57MLGE.js";
9
8
  import "../../../chunk-5OTQA7CM.js";
9
+ import "../../../chunk-KS57MLGE.js";
10
10
  import "../../../chunk-J3BHDXQQ.js";
11
11
  import "../../../chunk-TXS65BB2.js";
12
12
  export {
@@ -10,11 +10,11 @@ import "../../chunk-TFK4KFKA.js";
10
10
  import "../../chunk-A3MTTRCX.js";
11
11
  import "../../chunk-IZMUUUYD.js";
12
12
  import "../../chunk-XSOPQZGH.js";
13
+ import "../../chunk-XNTW77T6.js";
13
14
  import "../../chunk-YG6NARQY.js";
14
15
  import "../../chunk-W6KAUGXO.js";
15
- import "../../chunk-XNTW77T6.js";
16
- import "../../chunk-KS57MLGE.js";
17
16
  import "../../chunk-5OTQA7CM.js";
17
+ import "../../chunk-KS57MLGE.js";
18
18
  import "../../chunk-J3BHDXQQ.js";
19
19
  import "../../chunk-TXS65BB2.js";
20
20
  export {
@@ -5,20 +5,20 @@ import {
5
5
  UndoToast,
6
6
  confirmTextMatches,
7
7
  showUndoToast
8
- } from "../../../chunk-GYPAO6RS.js";
8
+ } from "../../../chunk-A664GSDM.js";
9
9
  import "../../../chunk-A3MTTRCX.js";
10
10
  import "../../../chunk-WHMKC7OQ.js";
11
- import "../../../chunk-MRXOGI3O.js";
12
- import "../../../chunk-WLEDGIVS.js";
13
- import "../../../chunk-WHWUWN2X.js";
14
- import "../../../chunk-ZMBJPN4T.js";
15
11
  import "../../../chunk-Q27G7PF6.js";
16
12
  import "../../../chunk-HZUL2CUH.js";
17
- import "../../../chunk-YG6NARQY.js";
18
- import "../../../chunk-L4OF77LE.js";
19
13
  import "../../../chunk-XNTW77T6.js";
20
- import "../../../chunk-HY7EYWIG.js";
14
+ import "../../../chunk-YG6NARQY.js";
15
+ import "../../../chunk-77CUDSHG.js";
16
+ import "../../../chunk-WHWUWN2X.js";
17
+ import "../../../chunk-WLEDGIVS.js";
18
+ import "../../../chunk-ZMBJPN4T.js";
21
19
  import "../../../chunk-HMU5IELG.js";
20
+ import "../../../chunk-HY7EYWIG.js";
21
+ import "../../../chunk-L4OF77LE.js";
22
22
  import "../../../chunk-J3BHDXQQ.js";
23
23
  import "../../../chunk-TXS65BB2.js";
24
24
  export {
@@ -2,22 +2,22 @@
2
2
  import {
3
3
  AccountUsageMenuItem,
4
4
  ComposerUsageNotice
5
- } from "../../../chunk-GUU75DES.js";
5
+ } from "../../../chunk-UEJTOPLW.js";
6
6
  import "../../../chunk-OF22GYK5.js";
7
- import "../../../chunk-74JEZLLQ.js";
7
+ import "../../../chunk-TREHTIBD.js";
8
8
  import "../../../chunk-MYNUBDU7.js";
9
9
  import "../../../chunk-IZUAIHR4.js";
10
+ import "../../../chunk-74JEZLLQ.js";
10
11
  import "../../../chunk-W6KAUGXO.js";
11
- import "../../../chunk-MOF3XSUM.js";
12
12
  import "../../../chunk-5OTQA7CM.js";
13
- import "../../../chunk-DCLPWYP3.js";
14
- import "../../../chunk-4U7SHFQ2.js";
13
+ import "../../../chunk-IEVPJ3G6.js";
15
14
  import "../../../chunk-J3BHDXQQ.js";
15
+ import "../../../chunk-4U7SHFQ2.js";
16
16
  import "../../../chunk-NAWXARTY.js";
17
17
  import "../../../chunk-CM7LVUKC.js";
18
18
  import "../../../chunk-TVQCDDSZ.js";
19
19
  import "../../../chunk-TXS65BB2.js";
20
- import "../../../chunk-G7VLL3PG.js";
20
+ import "../../../chunk-F2YABPRJ.js";
21
21
  export {
22
22
  AccountUsageMenuItem,
23
23
  ComposerUsageNotice
@@ -1,45 +1,46 @@
1
1
  "use client";
2
2
  import {
3
3
  WorkspaceComposerPlus
4
- } from "../../chunk-ZE2JTVCQ.js";
4
+ } from "../../chunk-X5BMQXFD.js";
5
+ import "../../chunk-U42P3RMZ.js";
5
6
  import "../../chunk-HUKUDAIP.js";
6
- import "../../chunk-CCQ7YKOD.js";
7
- import "../../chunk-XS2FZ6DX.js";
7
+ import "../../chunk-GBYZ6653.js";
8
+ import "../../chunk-3F5ZPIWI.js";
8
9
  import "../../chunk-22NENBA3.js";
9
- import "../../chunk-2AWMJO54.js";
10
10
  import "../../chunk-O2LGEYG4.js";
11
11
  import "../../chunk-HZUL2CUH.js";
12
- import "../../chunk-OWQBERKV.js";
13
- import "../../chunk-74JEZLLQ.js";
12
+ import "../../chunk-TREHTIBD.js";
14
13
  import "../../chunk-YG6NARQY.js";
15
14
  import "../../chunk-MYNUBDU7.js";
16
15
  import "../../chunk-IZUAIHR4.js";
17
- import "../../chunk-L4OF77LE.js";
16
+ import "../../chunk-OWQBERKV.js";
17
+ import "../../chunk-74JEZLLQ.js";
18
18
  import "../../chunk-W6KAUGXO.js";
19
- import "../../chunk-HMU5IELG.js";
20
- import "../../chunk-MOF3XSUM.js";
21
19
  import "../../chunk-5OTQA7CM.js";
22
- import "../../chunk-73YP3R5X.js";
20
+ import "../../chunk-HMU5IELG.js";
21
+ import "../../chunk-L4OF77LE.js";
22
+ import "../../chunk-GSESCQFY.js";
23
23
  import "../../chunk-M357MHH3.js";
24
- import "../../chunk-OJPUVUB6.js";
24
+ import "../../chunk-7TEUNQ6T.js";
25
+ import "../../chunk-HAOZCLLA.js";
25
26
  import "../../chunk-CUUJROYT.js";
26
- import "../../chunk-ZA6YD2LW.js";
27
- import "../../chunk-EG7KNUF7.js";
27
+ import "../../chunk-57SYK776.js";
28
+ import "../../chunk-HYTXTKST.js";
28
29
  import "../../chunk-OYQQJL3J.js";
29
- import "../../chunk-DN3TKURW.js";
30
+ import "../../chunk-H3LIIAGE.js";
30
31
  import "../../chunk-VHB3E6PT.js";
31
32
  import "../../chunk-RZLBICR5.js";
32
- import "../../chunk-DNJ23AWQ.js";
33
- import "../../chunk-UNJPZGNK.js";
34
- import "../../chunk-PEHTX3V7.js";
35
- import "../../chunk-7TEUNQ6T.js";
36
- import "../../chunk-Y5TRG22C.js";
33
+ import "../../chunk-NRXIECWC.js";
37
34
  import "../../chunk-J3BHDXQQ.js";
38
35
  import "../../chunk-XEA5BCMA.js";
39
- import "../../chunk-UYSZKDQY.js";
36
+ import "../../chunk-PEHTX3V7.js";
37
+ import "../../chunk-UNJPZGNK.js";
38
+ import "../../chunk-DNJ23AWQ.js";
39
+ import "../../chunk-OB3YGXHQ.js";
40
+ import "../../chunk-MK54JLE4.js";
40
41
  import "../../chunk-4NHJ6EXL.js";
41
42
  import "../../chunk-TXS65BB2.js";
42
- import "../../chunk-G7VLL3PG.js";
43
+ import "../../chunk-F2YABPRJ.js";
43
44
  export {
44
45
  WorkspaceComposerPlus
45
46
  };