@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
@@ -0,0 +1,832 @@
1
+ "use client";
2
+ import {
3
+ readChatDirectory,
4
+ recordChatVisit
5
+ } from "./chunk-4IWBQUQU.js";
6
+ import {
7
+ applicableChords,
8
+ chordAccelerator,
9
+ chordAriaKeys,
10
+ chordLabel,
11
+ currentPlatform,
12
+ isTextEntry,
13
+ matchesChord
14
+ } from "./chunk-MF464AKA.js";
15
+ import {
16
+ applySessionArchiveProjection
17
+ } from "./chunk-OSI2QWSL.js";
18
+ import {
19
+ notifySessionListChanged
20
+ } from "./chunk-O5S57N6H.js";
21
+ import {
22
+ OPEN_COMMAND_MENU_EVENT,
23
+ RENAME_CURRENT_CHAT_EVENT,
24
+ useRail
25
+ } from "./chunk-SF3M27AN.js";
26
+ import {
27
+ requestSessionSearch
28
+ } from "./chunk-TXIIBNCA.js";
29
+ import {
30
+ requestConversationFind
31
+ } from "./chunk-7ZEGSUR7.js";
32
+ import {
33
+ useSessionUiFeature
34
+ } from "./chunk-XFNLU7EW.js";
35
+ import {
36
+ useUiEventTarget
37
+ } from "./chunk-WGPLDFEC.js";
38
+ import {
39
+ desktopBridge,
40
+ desktopCapability
41
+ } from "./chunk-FABYS4WM.js";
42
+ import {
43
+ toast
44
+ } from "./chunk-YG6NARQY.js";
45
+ import {
46
+ useNavigate,
47
+ usePage,
48
+ useRouterState
49
+ } from "./chunk-MYNUBDU7.js";
50
+ import {
51
+ useAppContext
52
+ } from "./chunk-W6KAUGXO.js";
53
+
54
+ // src/app/lib/actions/actions-provider.tsx
55
+ import {
56
+ createContext,
57
+ lazy,
58
+ Suspense,
59
+ useCallback as useCallback2,
60
+ useContext,
61
+ useEffect,
62
+ useMemo as useMemo2,
63
+ useRef as useRef2,
64
+ useState
65
+ } from "react";
66
+
67
+ // src/app/lib/actions/chat-switcher.ts
68
+ var SWITCHER_LIMIT = 10;
69
+ var SWITCHER_SHOW_DELAY_MS = 140;
70
+ function openChatSwitcher(directory, currentChatId, backwards) {
71
+ const switchable = directory.recent.filter((id) => {
72
+ const record = directory.rows.get(id);
73
+ if (!record || record.archived) return false;
74
+ return !record.row || record.row.parentSessionId === null;
75
+ });
76
+ const ids = currentChatId ? [currentChatId, ...switchable.filter((id) => id !== currentChatId)] : switchable;
77
+ const limited = ids.slice(0, SWITCHER_LIMIT);
78
+ const first = currentChatId ? 1 : 0;
79
+ if (limited.length <= first) return null;
80
+ return { ids: limited, index: backwards ? limited.length - 1 : first, visible: false };
81
+ }
82
+ function stepChatSwitcher(state, step) {
83
+ const count = state.ids.length;
84
+ return { ...state, index: (state.index + step + count) % count, visible: true };
85
+ }
86
+ function isSwitcherKey(event) {
87
+ return event.code === "Tab" && event.ctrlKey && !event.metaKey && !event.altKey;
88
+ }
89
+
90
+ // src/app/lib/actions/chat-operations.ts
91
+ import { useCallback, useMemo, useRef } from "react";
92
+ function chatPath(chat) {
93
+ return `/workspaces/${encodeURIComponent(chat.workspaceId)}/sessions/${encodeURIComponent(chat.id)}`;
94
+ }
95
+ async function writeClipboard(text) {
96
+ if (typeof navigator !== "undefined" && navigator.clipboard?.writeText) {
97
+ await navigator.clipboard.writeText(text);
98
+ return;
99
+ }
100
+ const area = document.createElement("textarea");
101
+ area.value = text;
102
+ area.setAttribute("readonly", "");
103
+ area.style.position = "fixed";
104
+ area.style.opacity = "0";
105
+ document.body.append(area);
106
+ area.select();
107
+ const copied = document.execCommand("copy");
108
+ area.remove();
109
+ if (!copied) throw new Error("The browser blocked copying.");
110
+ }
111
+ function useChatOperations() {
112
+ const context = useAppContext();
113
+ const page = usePage();
114
+ const archiving = useRef(/* @__PURE__ */ new Set());
115
+ const linkTo = useCallback(
116
+ (chat) => `${page.origin()}${chatPath(chat)}`,
117
+ [page]
118
+ );
119
+ const copyLink = useCallback(
120
+ async (chat) => {
121
+ try {
122
+ await writeClipboard(linkTo(chat));
123
+ toast.success("Link copied");
124
+ } catch (error) {
125
+ toast.error("Couldn't copy the link.", {
126
+ description: error instanceof Error ? error.message : String(error)
127
+ });
128
+ }
129
+ },
130
+ [linkTo]
131
+ );
132
+ const setPinned = useCallback(
133
+ async (chat, pinned) => {
134
+ const updated = await context.updateSessionPin(
135
+ chat.workspaceId,
136
+ chat.id,
137
+ pinned,
138
+ chat.pinVersion ?? 0
139
+ );
140
+ if (updated) toast.success(pinned ? "Chat pinned" : "Chat unpinned");
141
+ else toast.error(pinned ? "Couldn't pin the chat." : "Couldn't unpin the chat.");
142
+ },
143
+ [context]
144
+ );
145
+ const setArchived = useCallback(
146
+ async (chat, archived) => {
147
+ if (archiving.current.has(chat.id)) return;
148
+ const accepted = context.captureWorkspaceInvocation(chat.workspaceId);
149
+ if (!accepted) return;
150
+ archiving.current.add(chat.id);
151
+ try {
152
+ const updated = await context.client.updateSessionArchive(chat.workspaceId, chat.id, {
153
+ archived,
154
+ expectedVersion: chat.archiveVersion ?? 0
155
+ });
156
+ if (!context.ownsWorkspaceInvocation(chat.workspaceId, accepted)) return;
157
+ context.setSession(
158
+ (current) => current?.id === updated.id && current.workspaceId === updated.workspaceId ? applySessionArchiveProjection(current, updated) : current
159
+ );
160
+ notifySessionListChanged({
161
+ workspaceId: chat.workspaceId,
162
+ sessionId: chat.id,
163
+ archived: updated.archived
164
+ });
165
+ toast.success(updated.archived ? "Chat archived." : "Chat restored.");
166
+ } catch (error) {
167
+ if (!context.ownsWorkspaceInvocation(chat.workspaceId, accepted)) return;
168
+ toast.error(archived ? "Couldn't archive the chat." : "Couldn't restore the chat.", {
169
+ description: error instanceof Error ? error.message : String(error)
170
+ });
171
+ } finally {
172
+ archiving.current.delete(chat.id);
173
+ }
174
+ },
175
+ [context]
176
+ );
177
+ const setUnread = useCallback(
178
+ async (chat, unread) => {
179
+ try {
180
+ const updated = await context.client.updateSessionAttention(chat.workspaceId, chat.id, {
181
+ unread,
182
+ expectedVersion: chat.attentionVersion ?? 0
183
+ });
184
+ context.setSession(
185
+ (current) => current?.id === updated.id ? {
186
+ ...current,
187
+ ...updated.unread !== void 0 ? { unread: updated.unread } : {},
188
+ ...updated.attentionVersion !== void 0 ? { attentionVersion: updated.attentionVersion } : {}
189
+ } : current
190
+ );
191
+ notifySessionListChanged({ workspaceId: chat.workspaceId, sessionId: chat.id });
192
+ toast.success(unread ? "Marked as unread" : "Marked as read");
193
+ } catch (error) {
194
+ toast.error("Couldn't update the chat.", {
195
+ description: error instanceof Error ? error.message : String(error)
196
+ });
197
+ }
198
+ },
199
+ [context]
200
+ );
201
+ return useMemo(
202
+ () => ({ linkTo, copyLink, setPinned, setArchived, setUnread }),
203
+ [linkTo, copyLink, setPinned, setArchived, setUnread]
204
+ );
205
+ }
206
+
207
+ // src/app/lib/actions/registry.ts
208
+ import {
209
+ ArchiveIcon,
210
+ ArchiveRestoreIcon,
211
+ ArrowDownIcon,
212
+ ArrowUpIcon,
213
+ CommandIcon,
214
+ HistoryIcon,
215
+ InboxIcon,
216
+ KeyboardIcon,
217
+ LinkIcon,
218
+ MailIcon,
219
+ MailOpenIcon,
220
+ PanelLeftIcon,
221
+ PencilIcon,
222
+ PinIcon,
223
+ PinOffIcon,
224
+ PlusIcon,
225
+ SearchIcon,
226
+ TextSearchIcon
227
+ } from "lucide-react";
228
+ function actionTitle(action, env, chat) {
229
+ return typeof action.title === "string" ? action.title : action.title(env, chat);
230
+ }
231
+ function actionIcon(action, chat) {
232
+ return action.iconFor?.(chat) ?? action.icon;
233
+ }
234
+ var ALWAYS = () => true;
235
+ function stepChat(env, direction) {
236
+ const order = env.sidebarOrder();
237
+ if (order.length === 0) return;
238
+ const index = env.currentChat ? order.indexOf(env.currentChat.id) : -1;
239
+ const next = index < 0 ? direction === 1 ? 0 : order.length - 1 : index + direction;
240
+ if (next < 0 || next >= order.length) return;
241
+ env.openChat(order[next]);
242
+ }
243
+ var PINNED_CHORDS = Array.from({ length: 9 }, (_, index) => ({
244
+ code: `Digit${index + 1}`,
245
+ mod: true,
246
+ only: "desktop"
247
+ }));
248
+ var APP_ACTIONS = [
249
+ {
250
+ id: "commandMenu.open",
251
+ title: "Command menu",
252
+ group: "help",
253
+ icon: CommandIcon,
254
+ chords: [{ code: "KeyK", mod: true }],
255
+ inCommandMenu: false,
256
+ desktopMenu: "go",
257
+ available: ALWAYS,
258
+ run: (env) => env.openCommandMenu()
259
+ },
260
+ {
261
+ id: "chat.new",
262
+ title: "New chat",
263
+ group: "chat",
264
+ icon: PlusIcon,
265
+ keywords: ["start", "create", "session"],
266
+ // The desktop menu shows its first key, the familiar ⌘N; browsers keep ⌘N for windows.
267
+ chords: [
268
+ { code: "KeyN", mod: true, only: "desktop" },
269
+ { code: "KeyO", mod: true, shift: true }
270
+ ],
271
+ suggested: true,
272
+ desktopMenu: "file",
273
+ available: ALWAYS,
274
+ run: (env) => env.newChat()
275
+ },
276
+ {
277
+ id: "chat.copyLink",
278
+ title: "Copy link",
279
+ group: "chat",
280
+ icon: LinkIcon,
281
+ keywords: ["share", "url", "address"],
282
+ chords: [{ code: "Comma", mod: true, shift: true }],
283
+ forChat: true,
284
+ suggested: true,
285
+ desktopMenu: "chat",
286
+ available: (_env, chat) => chat !== null,
287
+ run: (env, chat) => chat ? env.ops.copyLink(chat) : void 0
288
+ },
289
+ {
290
+ id: "chat.pin",
291
+ title: (_env, chat) => chat?.pinned ? "Unpin" : "Pin",
292
+ group: "chat",
293
+ icon: PinIcon,
294
+ iconFor: (chat) => chat?.pinned ? PinOffIcon : PinIcon,
295
+ keywords: ["unpin", "favorite", "star"],
296
+ chords: [{ code: "KeyP", mod: true, alt: true }],
297
+ forChat: true,
298
+ suggested: true,
299
+ desktopMenu: "chat",
300
+ available: (_env, chat) => chat !== null && !chat.archived,
301
+ run: (env, chat) => chat ? env.ops.setPinned(chat, !chat.pinned) : void 0
302
+ },
303
+ {
304
+ id: "chat.rename",
305
+ title: "Rename",
306
+ group: "chat",
307
+ icon: PencilIcon,
308
+ keywords: ["title", "name"],
309
+ forChat: true,
310
+ desktopMenu: "chat",
311
+ // Renaming happens in the chat's own title, so only for the chat on screen.
312
+ available: (env, chat) => chat !== null && env.currentChat?.id === chat.id,
313
+ run: (env) => env.renameCurrentChat()
314
+ },
315
+ {
316
+ id: "chat.unread",
317
+ title: (_env, chat) => chat?.unread ? "Mark as read" : "Mark as unread",
318
+ group: "chat",
319
+ icon: MailIcon,
320
+ iconFor: (chat) => chat?.unread ? MailOpenIcon : MailIcon,
321
+ keywords: ["read", "unread"],
322
+ forChat: true,
323
+ desktopMenu: "chat",
324
+ available: (_env, chat) => chat !== null && !chat.archived,
325
+ run: (env, chat) => chat ? env.ops.setUnread(chat, !chat.unread) : void 0
326
+ },
327
+ {
328
+ id: "chat.archive",
329
+ title: (_env, chat) => chat?.archived ? "Restore" : "Archive",
330
+ group: "chat",
331
+ icon: ArchiveIcon,
332
+ iconFor: (chat) => chat?.archived ? ArchiveRestoreIcon : ArchiveIcon,
333
+ keywords: ["restore", "hide", "done"],
334
+ forChat: true,
335
+ desktopMenu: "chat",
336
+ available: (_env, chat) => chat !== null && chat.parentSessionId === null,
337
+ run: (env, chat) => chat ? env.ops.setArchived(chat, !chat.archived) : void 0
338
+ },
339
+ {
340
+ id: "chat.find",
341
+ title: "Find in chat",
342
+ group: "chat",
343
+ icon: TextSearchIcon,
344
+ keywords: ["search", "find"],
345
+ chords: [{ code: "KeyF", mod: true }],
346
+ desktopMenu: "chat",
347
+ // The conversation owns ⌘F itself; the registry lists it so it is discoverable.
348
+ available: (env) => env.currentChat !== null,
349
+ run: (env) => env.findInChat()
350
+ },
351
+ {
352
+ id: "go.inbox",
353
+ title: "Inbox",
354
+ group: "navigate",
355
+ icon: InboxIcon,
356
+ keywords: ["notifications", "replies", "needs you"],
357
+ chords: [
358
+ { code: "KeyI", mod: true, shift: true, platform: "mac" },
359
+ // Browsers on Windows and Linux open developer tools with Ctrl+Shift+I.
360
+ { code: "KeyI", mod: true, shift: true, platform: "other", only: "desktop" }
361
+ ],
362
+ suggested: true,
363
+ desktopMenu: "go",
364
+ available: ALWAYS,
365
+ run: (env) => env.openInbox()
366
+ },
367
+ {
368
+ id: "go.previousChat",
369
+ title: "Previous chat",
370
+ group: "navigate",
371
+ icon: ArrowUpIcon,
372
+ chords: [{ code: "ArrowUp", alt: true }],
373
+ inCommandMenu: false,
374
+ available: (env) => env.chatList,
375
+ run: (env) => stepChat(env, -1)
376
+ },
377
+ {
378
+ id: "go.nextChat",
379
+ title: "Next chat",
380
+ group: "navigate",
381
+ icon: ArrowDownIcon,
382
+ chords: [{ code: "ArrowDown", alt: true }],
383
+ inCommandMenu: false,
384
+ available: (env) => env.chatList,
385
+ run: (env) => stepChat(env, 1)
386
+ },
387
+ {
388
+ // Hold Control to see recent chats and keep pressing Tab; release to open.
389
+ // The actions provider runs the switcher itself because it needs Control's
390
+ // release, so the desktop menu bar never owns this key.
391
+ id: "go.recentChat",
392
+ title: "Switch to recent chat",
393
+ group: "navigate",
394
+ icon: HistoryIcon,
395
+ chords: [
396
+ { code: "Tab", control: true, platform: "mac", only: "desktop" },
397
+ // Browsers keep Control+Tab for their own tabs.
398
+ { code: "Tab", mod: true, platform: "other", only: "desktop" }
399
+ ],
400
+ inCommandMenu: false,
401
+ available: ALWAYS,
402
+ run: (env) => env.switchToRecentChat()
403
+ },
404
+ {
405
+ id: "go.pinnedChat",
406
+ title: "Pinned chat 1 to 9",
407
+ group: "navigate",
408
+ icon: PinIcon,
409
+ chords: PINNED_CHORDS,
410
+ chordSummary: (platform) => platform === "mac" ? "\u23181 \u2013 \u23189" : "Ctrl+1 \u2013 Ctrl+9",
411
+ inCommandMenu: false,
412
+ available: (env) => env.chatList,
413
+ run: (env, _chat, chord) => {
414
+ const index = chord ? Number(chord.code.slice(5)) - 1 : 0;
415
+ const id = env.pinnedOrder()[index];
416
+ if (id) env.openChat(id);
417
+ }
418
+ },
419
+ {
420
+ id: "go.searchMessages",
421
+ title: "Search messages",
422
+ group: "navigate",
423
+ icon: SearchIcon,
424
+ keywords: ["find", "history", "full text"],
425
+ opensDialog: true,
426
+ desktopMenu: "go",
427
+ available: ALWAYS,
428
+ run: (env) => env.searchMessages()
429
+ },
430
+ {
431
+ id: "view.sidebar",
432
+ title: "Toggle sidebar",
433
+ group: "view",
434
+ icon: PanelLeftIcon,
435
+ keywords: ["hide", "show", "collapse", "rail"],
436
+ chords: [
437
+ { code: "KeyS", mod: true, control: true, platform: "mac" },
438
+ { code: "KeyS", mod: true, shift: true, platform: "other" }
439
+ ],
440
+ desktopMenu: "view",
441
+ available: (env) => env.chatList,
442
+ run: (env) => env.toggleSidebar()
443
+ },
444
+ {
445
+ id: "help.shortcuts",
446
+ title: "Keyboard shortcuts",
447
+ group: "help",
448
+ icon: KeyboardIcon,
449
+ keywords: ["keys", "hotkeys", "cheat sheet", "help"],
450
+ chords: [{ code: "Slash", mod: true }],
451
+ desktopMenu: "help",
452
+ available: ALWAYS,
453
+ run: (env) => env.openShortcutSheet()
454
+ }
455
+ ];
456
+ function findAction(id) {
457
+ return APP_ACTIONS.find((action) => action.id === id);
458
+ }
459
+
460
+ // src/app/lib/actions/actions-provider.tsx
461
+ import { jsx, jsxs } from "react/jsx-runtime";
462
+ var CommandMenu = lazy(() => import("./app/components/command-menu/command-menu.js"));
463
+ var ShortcutSheet = lazy(() => import("./app/components/command-menu/shortcut-sheet.js"));
464
+ var loadChatSwitcher = () => import("./app/components/command-menu/chat-switcher.js");
465
+ var ChatSwitcher = lazy(loadChatSwitcher);
466
+ var ActionsContext = createContext(null);
467
+ function useAppActions() {
468
+ return useContext(ActionsContext);
469
+ }
470
+ function useActionShortcut(actionId) {
471
+ const enabled = useSessionUiFeature("keyboardShortcuts");
472
+ const action = findAction(actionId);
473
+ if (!enabled || !action) return null;
474
+ const platform = currentPlatform();
475
+ const chords = applicableChords(action.chords, surface, platform);
476
+ const chord = chords[0];
477
+ if (!chord) return null;
478
+ return {
479
+ label: chordLabel(chord, platform),
480
+ ariaKeys: chords.map((candidate) => chordAriaKeys(candidate, platform)).join(" "),
481
+ chord
482
+ };
483
+ }
484
+ var surface = desktopBridge ? "desktop" : "web";
485
+ function insideOtherOverlay(target) {
486
+ if (!(target instanceof Element)) return false;
487
+ const overlay = target.closest(
488
+ '[role="dialog"],[role="alertdialog"],[role="menu"],[role="listbox"]'
489
+ );
490
+ return Boolean(overlay && !overlay.closest("[data-og-command-menu],[data-og-shortcut-sheet]"));
491
+ }
492
+ function menuOwnedChord(action, platform) {
493
+ return applicableChords(action.chords, "desktop", platform).find(
494
+ (chord) => !chord.alt || chord.mod
495
+ );
496
+ }
497
+ function menuChord(action, platform) {
498
+ const chord = menuOwnedChord(action, platform);
499
+ return chord ? chordAccelerator(chord) : null;
500
+ }
501
+ function insideCommandMenu(target) {
502
+ return target instanceof Element && Boolean(target.closest("[data-og-command-menu]"));
503
+ }
504
+ function textEntryIsEmpty(target) {
505
+ if (target instanceof HTMLTextAreaElement || target instanceof HTMLInputElement) {
506
+ return target.value.length === 0;
507
+ }
508
+ if (target instanceof HTMLElement && target.isContentEditable) {
509
+ return (target.textContent ?? "").length === 0;
510
+ }
511
+ return true;
512
+ }
513
+ function ActionsProvider(props) {
514
+ const app = useAppContext();
515
+ const rail = useRail();
516
+ const navigate = useNavigate();
517
+ const ops = useChatOperations();
518
+ const uiEvents = useUiEventTarget("document");
519
+ const windowEvents = useUiEventTarget("window");
520
+ const chatList = useSessionUiFeature("chatList");
521
+ const keyboardShortcuts = useSessionUiFeature("keyboardShortcuts");
522
+ const platform = useMemo2(() => currentPlatform(), []);
523
+ const workspaceId = rail.workspaceId;
524
+ const subjectId = app.accessContext.subjectId;
525
+ const pathname = useRouterState({ select: (state) => state.location.pathname });
526
+ const routeChatId = /\/sessions\/([^/]+)/.exec(pathname)?.[1] ?? null;
527
+ const currentChat = app.session && app.session.id === routeChatId && app.session.workspaceId === workspaceId ? app.session : null;
528
+ const [menu, setMenu] = useState({ open: false, mounted: false, chat: null });
529
+ const [sheet, setSheet] = useState({ open: false, mounted: false });
530
+ const railRef = useRef2(rail);
531
+ railRef.current = rail;
532
+ const returnFocus = useRef2(null);
533
+ const menuOpen = useRef2(false);
534
+ const sheetOpen = useRef2(false);
535
+ menuOpen.current = menu.open;
536
+ sheetOpen.current = sheet.open;
537
+ const rememberFocus = useCallback2(() => {
538
+ if (menuOpen.current || sheetOpen.current || typeof document === "undefined") return;
539
+ const drawerTrigger = railRef.current.drawerOpen ? railRef.current.drawerTriggerRef.current : null;
540
+ if (drawerTrigger) {
541
+ returnFocus.current = drawerTrigger;
542
+ return;
543
+ }
544
+ const active = document.activeElement;
545
+ returnFocus.current = active instanceof HTMLElement && active !== document.body ? active : null;
546
+ }, []);
547
+ const openCommandMenu = useCallback2(() => {
548
+ rememberFocus();
549
+ setSheet((current) => current.open ? { ...current, open: false } : current);
550
+ railRef.current.handOffDrawer();
551
+ setMenu((current) => ({ open: !current.open, mounted: true, chat: null }));
552
+ }, [rememberFocus]);
553
+ const openShortcutSheet = useCallback2(() => {
554
+ rememberFocus();
555
+ setMenu((current) => current.open ? { ...current, open: false } : current);
556
+ setSheet((current) => ({ open: !current.open, mounted: true }));
557
+ }, [rememberFocus]);
558
+ useEffect(() => {
559
+ if (currentChat) recordChatVisit(subjectId, workspaceId, currentChat);
560
+ }, [currentChat?.id, subjectId, workspaceId]);
561
+ const env = useMemo2(
562
+ () => ({
563
+ workspaceId,
564
+ subjectId,
565
+ surface,
566
+ platform,
567
+ currentChat,
568
+ ops,
569
+ chatList,
570
+ newChat: () => rail.startNewSession(),
571
+ openChat: (chatId) => rail.openSession(chatId),
572
+ openInbox: () => {
573
+ rail.setDrawerOpen(false);
574
+ void navigate({ to: "/workspaces/$workspaceId/inbox", params: { workspaceId } });
575
+ },
576
+ toggleSidebar: () => rail.isMobile ? rail.setDrawerOpen(!rail.drawerOpen) : rail.toggleCollapsed(),
577
+ findInChat: () => requestConversationFind(uiEvents),
578
+ searchMessages: (query) => requestSessionSearch(windowEvents, workspaceId, void 0, query),
579
+ renameCurrentChat: () => uiEvents.dispatchEvent(new Event(RENAME_CURRENT_CHAT_EVENT)),
580
+ openCommandMenu,
581
+ openShortcutSheet,
582
+ switchToRecentChat: () => {
583
+ const target = openChatSwitcher(
584
+ readChatDirectory(subjectId, workspaceId),
585
+ routeChatId,
586
+ false
587
+ );
588
+ const id = target?.ids[target.index];
589
+ if (id) rail.openSession(id);
590
+ },
591
+ sidebarOrder: () => readChatDirectory(subjectId, workspaceId).sidebarOrder,
592
+ pinnedOrder: () => readChatDirectory(subjectId, workspaceId).pinnedOrder
593
+ }),
594
+ [
595
+ workspaceId,
596
+ subjectId,
597
+ platform,
598
+ currentChat,
599
+ routeChatId,
600
+ ops,
601
+ chatList,
602
+ rail,
603
+ navigate,
604
+ uiEvents,
605
+ windowEvents,
606
+ openCommandMenu,
607
+ openShortcutSheet
608
+ ]
609
+ );
610
+ const envRef = useRef2(env);
611
+ envRef.current = env;
612
+ const chordsFor = useCallback2(
613
+ (action) => applicableChords(action.chords, surface, platform),
614
+ [platform]
615
+ );
616
+ const run = useCallback2((action, chat, chord) => {
617
+ const current = envRef.current;
618
+ if (action.id !== "commandMenu.open") {
619
+ setMenu((state) => state.open ? { ...state, open: false } : state);
620
+ }
621
+ if (action.id !== "help.shortcuts") {
622
+ setSheet((state) => state.open ? { ...state, open: false } : state);
623
+ }
624
+ const target = chat === void 0 ? current.currentChat : chat;
625
+ if (!action.available(current, action.forChat ? target : null)) return;
626
+ void Promise.resolve(action.run(current, action.forChat ? target : null, chord)).catch(() => {
627
+ });
628
+ }, []);
629
+ const menuBridge = desktopCapability("menuActions")?.menuActions ?? null;
630
+ const menuSignature = useMemo2(() => {
631
+ if (!menuBridge) return "";
632
+ return JSON.stringify(
633
+ APP_ACTIONS.filter((action) => action.desktopMenu).map((action) => {
634
+ const chat = action.forChat ? env.currentChat : null;
635
+ return {
636
+ id: action.id,
637
+ label: actionTitle(action, env, chat),
638
+ section: action.desktopMenu,
639
+ accelerator: menuChord(action, platform),
640
+ enabled: action.available(env, chat)
641
+ };
642
+ })
643
+ );
644
+ }, [menuBridge, env, platform]);
645
+ useEffect(() => {
646
+ if (!menuBridge || !menuSignature) return;
647
+ menuBridge.set(JSON.parse(menuSignature));
648
+ }, [menuBridge, menuSignature]);
649
+ useEffect(() => {
650
+ if (!menuBridge) return;
651
+ return menuBridge.onAction((id) => {
652
+ const action = findAction(id);
653
+ if (action) run(action);
654
+ });
655
+ }, [menuBridge, run]);
656
+ useEffect(() => {
657
+ const open = () => openCommandMenu();
658
+ windowEvents.addEventListener(OPEN_COMMAND_MENU_EVENT, open);
659
+ return () => windowEvents.removeEventListener(OPEN_COMMAND_MENU_EVENT, open);
660
+ }, [windowEvents, openCommandMenu]);
661
+ useEffect(() => {
662
+ if (!keyboardShortcuts) return;
663
+ const menuOwnsKeys = Boolean(menuBridge);
664
+ function onKeyDown(event) {
665
+ if (event.defaultPrevented) return;
666
+ const current = envRef.current;
667
+ for (const action of APP_ACTIONS) {
668
+ if (action.id === "chat.find") continue;
669
+ if (action.id === "go.recentChat") continue;
670
+ const chord = applicableChords(action.chords, surface, platform).find(
671
+ (candidate) => matchesChord(event, candidate, platform)
672
+ );
673
+ if (!chord) continue;
674
+ if (menuOwnsKeys && action.desktopMenu && chord === menuOwnedChord(action, platform))
675
+ return;
676
+ const toggleMenu = action.id === "commandMenu.open";
677
+ if (action.forChat && insideCommandMenu(event.target)) return;
678
+ if (!toggleMenu && insideOtherOverlay(event.target)) return;
679
+ if (!chord.mod && isTextEntry(event.target) && !textEntryIsEmpty(event.target)) return;
680
+ if (!action.available(current, action.forChat ? current.currentChat : null)) return;
681
+ event.preventDefault();
682
+ event.stopPropagation();
683
+ run(action, void 0, chord);
684
+ return;
685
+ }
686
+ }
687
+ document.addEventListener("keydown", onKeyDown, true);
688
+ return () => document.removeEventListener("keydown", onKeyDown, true);
689
+ }, [keyboardShortcuts, menuBridge, platform, run]);
690
+ const [switcher, setSwitcherState] = useState(null);
691
+ const switcherRef = useRef2(null);
692
+ const setSwitcher = useCallback2((next) => {
693
+ switcherRef.current = next;
694
+ setSwitcherState(next);
695
+ }, []);
696
+ const routeChatIdRef = useRef2(routeChatId);
697
+ routeChatIdRef.current = routeChatId;
698
+ const switcherEnabled = keyboardShortcuts && chatList && surface === "desktop";
699
+ const pickSwitcherChat = useCallback2(
700
+ (index) => {
701
+ const state = switcherRef.current;
702
+ if (!state) return;
703
+ const id = state.ids[index ?? state.index];
704
+ setSwitcher(null);
705
+ if (id && id !== routeChatIdRef.current) envRef.current.openChat(id);
706
+ },
707
+ [setSwitcher]
708
+ );
709
+ useEffect(() => {
710
+ if (!switcherEnabled) {
711
+ setSwitcher(null);
712
+ return;
713
+ }
714
+ let showTimer;
715
+ const cancel = () => {
716
+ clearTimeout(showTimer);
717
+ if (switcherRef.current) setSwitcher(null);
718
+ };
719
+ function onKeyDown(event) {
720
+ const state = switcherRef.current;
721
+ if (isSwitcherKey(event)) {
722
+ event.preventDefault();
723
+ event.stopPropagation();
724
+ if (state) {
725
+ clearTimeout(showTimer);
726
+ setSwitcher(stepChatSwitcher(state, event.shiftKey ? -1 : 1));
727
+ return;
728
+ }
729
+ if (event.repeat || menuOpen.current || sheetOpen.current) return;
730
+ if (insideOtherOverlay(event.target)) return;
731
+ const opened = openChatSwitcher(
732
+ readChatDirectory(subjectId, workspaceId),
733
+ routeChatIdRef.current,
734
+ event.shiftKey
735
+ );
736
+ if (!opened) return;
737
+ void loadChatSwitcher();
738
+ setSwitcher(opened);
739
+ showTimer = setTimeout(() => {
740
+ const current = switcherRef.current;
741
+ if (current && !current.visible) setSwitcher({ ...current, visible: true });
742
+ }, SWITCHER_SHOW_DELAY_MS);
743
+ return;
744
+ }
745
+ if (!state) return;
746
+ if (!event.ctrlKey && event.key !== "Control") {
747
+ cancel();
748
+ return;
749
+ }
750
+ if (event.key === "Escape") {
751
+ event.preventDefault();
752
+ event.stopPropagation();
753
+ cancel();
754
+ } else if (event.key === "Enter") {
755
+ event.preventDefault();
756
+ event.stopPropagation();
757
+ clearTimeout(showTimer);
758
+ pickSwitcherChat();
759
+ } else if (event.key === "ArrowDown" || event.key === "ArrowUp") {
760
+ event.preventDefault();
761
+ event.stopPropagation();
762
+ clearTimeout(showTimer);
763
+ setSwitcher(stepChatSwitcher(state, event.key === "ArrowDown" ? 1 : -1));
764
+ }
765
+ }
766
+ function onKeyUp(event) {
767
+ if (event.key !== "Control" || !switcherRef.current) return;
768
+ clearTimeout(showTimer);
769
+ pickSwitcherChat();
770
+ }
771
+ document.addEventListener("keydown", onKeyDown, true);
772
+ document.addEventListener("keyup", onKeyUp, true);
773
+ window.addEventListener("blur", cancel);
774
+ return () => {
775
+ clearTimeout(showTimer);
776
+ document.removeEventListener("keydown", onKeyDown, true);
777
+ document.removeEventListener("keyup", onKeyUp, true);
778
+ window.removeEventListener("blur", cancel);
779
+ };
780
+ }, [switcherEnabled, subjectId, workspaceId, pickSwitcherChat, setSwitcher]);
781
+ const value = useMemo2(
782
+ () => ({ env, run, chordsFor }),
783
+ [env, run, chordsFor]
784
+ );
785
+ return /* @__PURE__ */ jsxs(ActionsContext.Provider, { value, children: [
786
+ props.children,
787
+ menu.mounted ? /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
788
+ CommandMenu,
789
+ {
790
+ open: menu.open,
791
+ onOpenChange: (open) => setMenu((current) => ({ ...current, open })),
792
+ returnFocus
793
+ }
794
+ ) }) : null,
795
+ sheet.mounted ? /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
796
+ ShortcutSheet,
797
+ {
798
+ open: sheet.open,
799
+ onOpenChange: (open) => setSheet((current) => ({ ...current, open })),
800
+ returnFocus
801
+ }
802
+ ) }) : null,
803
+ switcher?.visible ? /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
804
+ ChatSwitcher,
805
+ {
806
+ state: switcher,
807
+ subjectId,
808
+ workspaceId,
809
+ currentChatId: routeChatId,
810
+ platform,
811
+ onHover: (index) => {
812
+ const current = switcherRef.current;
813
+ if (current) setSwitcher({ ...current, index });
814
+ },
815
+ onPick: pickSwitcherChat,
816
+ onDismiss: () => setSwitcher(null)
817
+ }
818
+ ) }) : null
819
+ ] });
820
+ }
821
+
822
+ export {
823
+ useChatOperations,
824
+ actionTitle,
825
+ actionIcon,
826
+ APP_ACTIONS,
827
+ findAction,
828
+ useAppActions,
829
+ useActionShortcut,
830
+ ActionsProvider
831
+ };
832
+ //# sourceMappingURL=chunk-JRJUSKDY.js.map