@opengeni/react 6.5.2-canary.41607687019001 → 6.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1154) hide show
  1. package/dist/app/app-state.d.ts +4 -0
  2. package/dist/app/app-state.js +19 -14
  3. package/dist/app/components/Composer.js +25 -23
  4. package/dist/app/components/agent/agent-capability-picker.js +10 -8
  5. package/dist/app/components/artifacts/artifact-browse-controls.js +4 -4
  6. package/dist/app/components/artifacts/artifact-library.js +21 -19
  7. package/dist/app/components/artifacts/artifact-page-chrome.js +3 -3
  8. package/dist/app/components/artifacts/artifact-viewer.js +23 -22
  9. package/dist/app/components/artifacts/artifact-viewer.js.map +1 -1
  10. package/dist/app/components/artifacts/chat-interactive-block.js +12 -12
  11. package/dist/app/components/artifacts/copy-artifact-link.js +7 -5
  12. package/dist/app/components/artifacts/file-reach-dialog.js +11 -9
  13. package/dist/app/components/artifacts/inline-chat-image.js +18 -18
  14. package/dist/app/components/artifacts/retained-file-preview.js +24 -23
  15. package/dist/app/components/artifacts/retained-text-preview.js +3 -3
  16. package/dist/app/components/artifacts/site-audience.js +6 -5
  17. package/dist/app/components/artifacts/site-conversations.js +16 -14
  18. package/dist/app/components/artifacts/site-data.js +18 -16
  19. package/dist/app/components/artifacts/site-public-link.js +3 -2
  20. package/dist/app/components/artifacts/site-publishing-page.js +39 -37
  21. package/dist/app/components/artifacts/site-publishing.js +34 -32
  22. package/dist/app/components/artifacts/site-settings.js +38 -36
  23. package/dist/app/components/artifacts/site-version-menu.js +8 -7
  24. package/dist/app/components/billing-class-mark.js +3 -3
  25. package/dist/app/components/bots/bot-launch-strip.js +17 -17
  26. package/dist/app/components/bots/bot-template-dialog.js +30 -28
  27. package/dist/app/components/bots/bot-template-shortcuts.js +19 -19
  28. package/dist/app/components/bots/bot-templates-page.js +38 -36
  29. package/dist/app/components/bots/bot-templates-page.js.map +1 -1
  30. package/dist/app/components/capabilities/capability-detail-sheet.js +13 -11
  31. package/dist/app/components/capabilities/capability-logo-source.js +13 -13
  32. package/dist/app/components/capabilities/capability-logo.js +4 -3
  33. package/dist/app/components/capabilities/connector-tool-permissions.js +8 -6
  34. package/dist/app/components/capabilities/native-connect-setup.js +14 -14
  35. package/dist/app/components/capabilities/own-logins-shared-heads-up.js +7 -6
  36. package/dist/app/components/capabilities/perform-capability-action.js +7 -6
  37. package/dist/app/components/capabilities/prepared-mcp-setup-card.js +17 -17
  38. package/dist/app/components/capabilities/session-capability-card.js +72 -70
  39. package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
  40. package/dist/app/components/capabilities/session-chrome-card.js +28 -26
  41. package/dist/app/components/capabilities/session-connection-accounts.js +4 -3
  42. package/dist/app/components/capabilities/session-custom-mcp-card.js +20 -19
  43. package/dist/app/components/capabilities/session-github-card.js +22 -20
  44. package/dist/app/components/capabilities/session-machine-card.js +27 -25
  45. package/dist/app/components/capabilities/session-personal-github-card.js +16 -16
  46. package/dist/app/components/capabilities/session-plugin-card.js +10 -9
  47. package/dist/app/components/capabilities/use-capabilities-catalog.js +4 -3
  48. package/dist/app/components/capabilities/use-connection-accounts.js +5 -4
  49. package/dist/app/components/command-menu/chat-status.js +15 -13
  50. package/dist/app/components/command-menu/chat-switcher.js +35 -33
  51. package/dist/app/components/command-menu/chat-switcher.js.map +1 -1
  52. package/dist/app/components/command-menu/command-menu.js +53 -50
  53. package/dist/app/components/command-menu/command-menu.js.map +1 -1
  54. package/dist/app/components/command-menu/shortcut-sheet.js +18 -16
  55. package/dist/app/components/command-menu/shortcut-sheet.js.map +1 -1
  56. package/dist/app/components/common.js +4 -3
  57. package/dist/app/components/composer-capabilities-menu-body.js +4 -4
  58. package/dist/app/components/composer-mobile-plus-panel.js +8 -8
  59. package/dist/app/components/composer-mobile-plus.js +1 -1
  60. package/dist/app/components/credit-required-gate.js +3 -3
  61. package/dist/app/components/credit-required-prompt.js +10 -8
  62. package/dist/app/components/credit-required-prompt.js.map +1 -1
  63. package/dist/app/components/credits/checkout-credits-celebration.js +3 -2
  64. package/dist/app/components/credits/checkout-return.js +3 -2
  65. package/dist/app/components/credits/checkout-return.js.map +1 -1
  66. package/dist/app/components/credits/coupon-redeem.js +5 -4
  67. package/dist/app/components/credits/credit-refusal-notice.js +7 -5
  68. package/dist/app/components/cross-slot-deep-link-recovery.js +5 -4
  69. package/dist/app/components/desktop/app-shots.js +13 -11
  70. package/dist/app/components/desktop/computer-use.js +6 -4
  71. package/dist/app/components/desktop/this-computer.js +9 -7
  72. package/dist/app/components/feedback.js +5 -4
  73. package/dist/app/components/follow-up-repository-menu-body.js +8 -6
  74. package/dist/app/components/follow-up-repository-menu-body.js.map +1 -1
  75. package/dist/app/components/follow-up-repository-picker.js +1 -1
  76. package/dist/app/components/github-app-connect-launcher.js +5 -4
  77. package/dist/app/components/in-app-help-link.js +3 -3
  78. package/dist/app/components/knowledge/agent-learning-settings.js +3 -2
  79. package/dist/app/components/knowledge/agent-learning-settings.js.map +1 -1
  80. package/dist/app/components/machines/connect-machine-dialog.js +18 -16
  81. package/dist/app/components/manual-repository-editor.js +3 -2
  82. package/dist/app/components/markdown.js +6 -6
  83. package/dist/app/components/models/models-ui.js +12 -10
  84. package/dist/app/components/my-things.js +12 -10
  85. package/dist/app/components/my-things.js.map +1 -1
  86. package/dist/app/components/new-session-starters.js +3 -3
  87. package/dist/app/components/own-where-it-works.js +9 -7
  88. package/dist/app/components/personal-resource-attachment-surface.js +4 -4
  89. package/dist/app/components/pickers.js +5 -5
  90. package/dist/app/components/rail/channel-create-dialog.js +7 -5
  91. package/dist/app/components/rail/project-glyph.js +17 -17
  92. package/dist/app/components/rail/project-profile.js +31 -29
  93. package/dist/app/components/rail/rail-context.js +3 -3
  94. package/dist/app/components/rail/rail-sections.js +68 -66
  95. package/dist/app/components/rail/session-header.js +59 -57
  96. package/dist/app/components/rail/session-list.js +66 -64
  97. package/dist/app/components/rail/session-row-content.js +4 -4
  98. package/dist/app/components/rail/session-row-hover-details.js +14 -12
  99. package/dist/app/components/rail/session-shell.js +90 -88
  100. package/dist/app/components/rail/site-session-group-heading.js +8 -8
  101. package/dist/app/components/repository-picker.js +8 -6
  102. package/dist/app/components/secrets/session-secrets-panel.js +4 -3
  103. package/dist/app/components/secrets/vault-model.js +3 -2
  104. package/dist/app/components/session/agent-configuration-panel.js +25 -23
  105. package/dist/app/components/session/agent-configuration-panel.js.map +1 -1
  106. package/dist/app/components/session/artifact-link-boundary.js +3 -3
  107. package/dist/app/components/session/artifact-session-page.js +11 -9
  108. package/dist/app/components/session/banners.js +8 -8
  109. package/dist/app/components/session/codex-usage-notice.js +5 -3
  110. package/dist/app/components/session/console-new-conversation.js +42 -40
  111. package/dist/app/components/session/context-text-reader.js +3 -2
  112. package/dist/app/components/session/descendant-requests.js +39 -37
  113. package/dist/app/components/session/descendant-requests.js.map +1 -1
  114. package/dist/app/components/session/editable-artifacts-workspace.js +36 -34
  115. package/dist/app/components/session/editable-artifacts-workspace.js.map +1 -1
  116. package/dist/app/components/session/failed-session-banner.js +13 -11
  117. package/dist/app/components/session/failed-session-banner.js.map +1 -1
  118. package/dist/app/components/session/failure-recovery-boundary.js +3 -3
  119. package/dist/app/components/session/human-input-delegation-record.js +2 -2
  120. package/dist/app/components/session/human-input.js +33 -31
  121. package/dist/app/components/session/inspector.js +57 -55
  122. package/dist/app/components/session/inspector.js.map +1 -1
  123. package/dist/app/components/session/message-actions.js +5 -4
  124. package/dist/app/components/session/message-actions.js.map +1 -1
  125. package/dist/app/components/session/message-resource-attachments.js +12 -11
  126. package/dist/app/components/session/message-resource-attachments.js.map +1 -1
  127. package/dist/app/components/session/model-context-inspector.js +6 -4
  128. package/dist/app/components/session/model-recovery-notice.js +3 -3
  129. package/dist/app/components/session/new-session-settings-menu.js +11 -9
  130. package/dist/app/components/session/new-session-setup-strip.js +18 -18
  131. package/dist/app/components/session/sandbox-recovery-actions.js +3 -3
  132. package/dist/app/components/session/sandbox-switcher.js +10 -9
  133. package/dist/app/components/session/sandbox-workspace.js +47 -46
  134. package/dist/app/components/session/search-markdown-highlight.js +7 -7
  135. package/dist/app/components/session/search-results-view.js +8 -8
  136. package/dist/app/components/session/session-admin-access.js +13 -11
  137. package/dist/app/components/session/session-admission-notice.js +7 -5
  138. package/dist/app/components/session/session-avatar-picker.js +22 -20
  139. package/dist/app/components/session/session-avatar.js +16 -16
  140. package/dist/app/components/session/session-machine-access-notice.js +7 -5
  141. package/dist/app/components/session/session-profile-dialog.js +29 -27
  142. package/dist/app/components/session/session-profile-editor.js +30 -28
  143. package/dist/app/components/session/session-retention.js +10 -8
  144. package/dist/app/components/session/session-search-dialog.js +10 -10
  145. package/dist/app/components/session/session-skill-reviews.js +2 -1
  146. package/dist/app/components/session/session-skill-reviews.js.map +1 -1
  147. package/dist/app/components/session/session-tenancy-control.js +13 -11
  148. package/dist/app/components/session/session-tenancy-control.js.map +1 -1
  149. package/dist/app/components/session/session-unattended-setting.js +7 -5
  150. package/dist/app/components/session/session-usage-limit-section.js +11 -9
  151. package/dist/app/components/session/share-chat-dialog.js +9 -7
  152. package/dist/app/components/session/site-origin-link.js +3 -3
  153. package/dist/app/components/session/subagents.js +8 -8
  154. package/dist/app/components/session/subscription-account-indicator.js +6 -6
  155. package/dist/app/components/session-connectors-menu-body.js +4 -3
  156. package/dist/app/components/session-connectors-menu-body.js.map +1 -1
  157. package/dist/app/components/settings/row-select.js +7 -5
  158. package/dist/app/components/toaster.js +3 -2
  159. package/dist/app/components/transcription-settings.js +11 -9
  160. package/dist/app/components/ui/destructive-confirm.js +11 -9
  161. package/dist/app/components/usage/usage-entry.js +5 -5
  162. package/dist/app/components/window-bar.js +16 -14
  163. package/dist/app/components/workspace-composer-plus.js +22 -21
  164. package/dist/app/components/workspace-reach.js +6 -4
  165. package/dist/app/components/workspace-tenant-boundary.js +5 -4
  166. package/dist/app/embed/memory-navigation.js +3 -3
  167. package/dist/app/embed/session-app.js +211 -209
  168. package/dist/app/lib/actions/actions-provider.js +15 -13
  169. package/dist/app/lib/agent-capabilities.js +3 -3
  170. package/dist/app/lib/app-surfaces.js +7 -6
  171. package/dist/app/lib/archive-session.d.ts +9 -4
  172. package/dist/app/lib/archive-session.js +4 -2
  173. package/dist/app/lib/bot-templates.js +3 -2
  174. package/dist/app/lib/capabilities.js +3 -2
  175. package/dist/app/lib/codex-usage-query.js +2 -2
  176. package/dist/app/lib/composer-connectors.js +17 -16
  177. package/dist/app/lib/console-site.js +2 -2
  178. package/dist/app/lib/console-text.js +2 -2
  179. package/dist/app/lib/events.js +9 -9
  180. package/dist/app/lib/failed-session-copy.js +3 -3
  181. package/dist/app/lib/inbox.js +4 -2
  182. package/dist/app/lib/model-access-onboarding.js +3 -3
  183. package/dist/app/lib/move-chat-to-machine.js +3 -3
  184. package/dist/app/lib/navigation.js +2 -2
  185. package/dist/app/lib/session-branch-cache.js +6 -6
  186. package/dist/app/lib/session-create.js +4 -4
  187. package/dist/app/lib/session-group-pagination.js +6 -6
  188. package/dist/app/lib/session-hover-facts.js +13 -11
  189. package/dist/app/lib/session-model.js +2 -2
  190. package/dist/app/lib/session-rail.js +3 -3
  191. package/dist/app/lib/session-rename.js +3 -3
  192. package/dist/app/lib/session-restart-operation-controller.js +4 -3
  193. package/dist/app/lib/session-tenancy.js +3 -2
  194. package/dist/app/lib/session-usage-limit.js +3 -2
  195. package/dist/app/lib/sessions-group.js +5 -5
  196. package/dist/app/lib/site-publishing.js +3 -2
  197. package/dist/app/lib/site-tool-consent-dialog.js +9 -7
  198. package/dist/app/lib/site-tool-consent-dialog.js.map +1 -1
  199. package/dist/app/lib/site-tool-consent.js +1 -1
  200. package/dist/app/lib/subscription-plans.js +3 -2
  201. package/dist/app/lib/toast.js +2 -1
  202. package/dist/app/lib/turn-failure-analytics.js +4 -4
  203. package/dist/app/lib/use-duplicate-site.js +6 -5
  204. package/dist/app/lib/use-follow-up-repositories.js +6 -5
  205. package/dist/app/lib/use-workspace-integrations.js +4 -3
  206. package/dist/app/lib/use-workspace-machines.js +4 -4
  207. package/dist/app/lib/use-workspace-model-catalog.js +5 -4
  208. package/dist/app/lib/use-workspace-rigs.js +2 -2
  209. package/dist/app/lib/workspace-navigation-preference.js +4 -4
  210. package/dist/app/lib/workspace-scope-context.js +3 -3
  211. package/dist/app/routes/artifacts.js +67 -66
  212. package/dist/app/routes/artifacts.js.map +1 -1
  213. package/dist/app/routes/retained-artifact.js +42 -40
  214. package/dist/app/routes/retained-artifact.js.map +1 -1
  215. package/dist/app/routes/session-unavailable.js +8 -7
  216. package/dist/app/routes/session.js +119 -117
  217. package/dist/app/routes/sessions-index-hydration.js +5 -5
  218. package/dist/app/routes/sessions-index.js +104 -102
  219. package/dist/app/routes/site-view.js +67 -65
  220. package/dist/app/routes/site-view.js.map +1 -1
  221. package/dist/artifacts-document.js +4 -4
  222. package/dist/artifacts-presentation.js +4 -4
  223. package/dist/artifacts-spreadsheet.js +4 -4
  224. package/dist/artifacts.js +10 -10
  225. package/dist/automations.js +17 -15
  226. package/dist/automations.js.map +1 -1
  227. package/dist/browser-viewer-TC27OCIP.js +23 -0
  228. package/dist/chat-interactive-block-RWPQBHVS.js +18 -0
  229. package/dist/chunk-2BDT3UZQ.js +229 -0
  230. package/dist/chunk-2CLNIEK4.js +373 -0
  231. package/dist/chunk-2FSBSCZJ.js +451 -0
  232. package/dist/chunk-2I7HDP53.js +199 -0
  233. package/dist/chunk-2INLDVK3.js +15 -0
  234. package/dist/chunk-2KALVELR.js +126 -0
  235. package/dist/chunk-2M3J7ZWQ.js +418 -0
  236. package/dist/chunk-2OP6WLGV.js +708 -0
  237. package/dist/chunk-2RG7NIAS.js +2936 -0
  238. package/dist/chunk-2STUPWEL.js +135 -0
  239. package/dist/chunk-2YUOVM3G.js +271 -0
  240. package/dist/chunk-2Z3NQNTM.js +3670 -0
  241. package/dist/chunk-3CPWWGNK.js +920 -0
  242. package/dist/chunk-3ED2U6XE.js +37 -0
  243. package/dist/chunk-3GZA4BUW.js +216 -0
  244. package/dist/chunk-3IK6UYO6.js +1022 -0
  245. package/dist/chunk-3PZ7JZI2.js +431 -0
  246. package/dist/chunk-4DVJ6ONS.js +50 -0
  247. package/dist/chunk-4DVNUCRR.js +2386 -0
  248. package/dist/chunk-4DVNUCRR.js.map +1 -0
  249. package/dist/chunk-4E3ZJRTZ.js +41 -0
  250. package/dist/chunk-4SAWSRAA.js +141 -0
  251. package/dist/chunk-53AGXXZM.js +307 -0
  252. package/dist/chunk-54YW6SZZ.js +818 -0
  253. package/dist/chunk-57AZS3IE.js +2317 -0
  254. package/dist/chunk-5CPEEAFD.js +143 -0
  255. package/dist/chunk-5EWSRZ2Y.js +340 -0
  256. package/dist/chunk-5IE76VCY.js +387 -0
  257. package/dist/chunk-5NWEKLDZ.js +170 -0
  258. package/dist/chunk-5O2FCCHZ.js +198 -0
  259. package/dist/chunk-5QAY6K77.js +399 -0
  260. package/dist/chunk-5YKW2K6I.js +625 -0
  261. package/dist/chunk-5YKW2K6I.js.map +1 -0
  262. package/dist/chunk-6BCXNDEI.js +4116 -0
  263. package/dist/chunk-6BCXNDEI.js.map +1 -0
  264. package/dist/chunk-6DK6Z4UN.js +2599 -0
  265. package/dist/chunk-6DVCC7QS.js +702 -0
  266. package/dist/chunk-6JHU2UBS.js +2058 -0
  267. package/dist/chunk-6PZ7OBYU.js +490 -0
  268. package/dist/chunk-6WD2INST.js +539 -0
  269. package/dist/chunk-6WD2INST.js.map +1 -0
  270. package/dist/chunk-6WGRDRMA.js +163 -0
  271. package/dist/chunk-77WAKEAH.js +186 -0
  272. package/dist/chunk-7T2ZE3VT.js +5558 -0
  273. package/dist/chunk-7T2ZE3VT.js.map +1 -0
  274. package/dist/chunk-7TDO3CUM.js +393 -0
  275. package/dist/chunk-7TIX2UAR.js +247 -0
  276. package/dist/chunk-7V5REBCP.js +148 -0
  277. package/dist/chunk-7VMZGLYI.js +339 -0
  278. package/dist/chunk-7W37NS3I.js +236 -0
  279. package/dist/chunk-7X6SDK2C.js +111 -0
  280. package/dist/chunk-7ZNUHRP5.js +95 -0
  281. package/dist/chunk-A36PZALD.js +84 -0
  282. package/dist/chunk-AUI6VA63.js +107 -0
  283. package/dist/chunk-AW2MQB37.js +24 -0
  284. package/dist/chunk-AWKES45Y.js +198 -0
  285. package/dist/chunk-AXHZYXUV.js +132 -0
  286. package/dist/chunk-BHNSJVBC.js +129 -0
  287. package/dist/chunk-BJEJFISW.js +50 -0
  288. package/dist/chunk-BJFH6JI5.js +422 -0
  289. package/dist/chunk-BMICEQZQ.js +960 -0
  290. package/dist/chunk-BTLBYBLU.js +29 -0
  291. package/dist/chunk-BXBDYNRP.js +89 -0
  292. package/dist/chunk-C372BFOV.js +357 -0
  293. package/dist/chunk-C43KRXGA.js +234 -0
  294. package/dist/chunk-C43KRXGA.js.map +1 -0
  295. package/dist/chunk-CMKGILJK.js +4824 -0
  296. package/dist/chunk-CRAOSVHC.js +50 -0
  297. package/dist/chunk-CRU35QQH.js +281 -0
  298. package/dist/chunk-CUIWCGMA.js +172 -0
  299. package/dist/chunk-D5TWNFFE.js +38 -0
  300. package/dist/chunk-DF5EAHDN.js +4461 -0
  301. package/dist/chunk-DJAXC5OK.js +56 -0
  302. package/dist/chunk-DXBYWSL5.js +3550 -0
  303. package/dist/chunk-DXR5PDFP.js +84 -0
  304. package/dist/chunk-DZWARC4M.js +267 -0
  305. package/dist/chunk-DZXEDSQI.js +106 -0
  306. package/dist/chunk-E7XERZWC.js +48 -0
  307. package/dist/chunk-ECJBYNLJ.js +79 -0
  308. package/dist/chunk-EDI6SJ2N.js +43 -0
  309. package/dist/chunk-EWSOC6WF.js +114 -0
  310. package/dist/chunk-F2OPHAUN.js +103 -0
  311. package/dist/chunk-F4ISQGGM.js +81 -0
  312. package/dist/chunk-FO4LYKJL.js +197 -0
  313. package/dist/chunk-FPXASDG5.js +73 -0
  314. package/dist/chunk-FSOQDUCG.js +117 -0
  315. package/dist/chunk-FSOQDUCG.js.map +1 -0
  316. package/dist/chunk-FVXBNBHO.js +157 -0
  317. package/dist/chunk-FYWT2O76.js +34 -0
  318. package/dist/chunk-FYWT2O76.js.map +1 -0
  319. package/dist/chunk-FZC5N55X.js +981 -0
  320. package/dist/chunk-GAVYGBFI.js +99 -0
  321. package/dist/chunk-GFIMOUDT.js +846 -0
  322. package/dist/chunk-GFIMOUDT.js.map +1 -0
  323. package/dist/chunk-GKVJIDHF.js +33 -0
  324. package/dist/chunk-GVN5SZLX.js +212 -0
  325. package/dist/chunk-H3T7IWNA.js +134 -0
  326. package/dist/chunk-HAX4LCR5.js +261 -0
  327. package/dist/chunk-HC4JFZVU.js +121 -0
  328. package/dist/chunk-HEFPPMBQ.js +581 -0
  329. package/dist/chunk-HGKTHF2U.js +1356 -0
  330. package/dist/chunk-HGKTHF2U.js.map +1 -0
  331. package/dist/chunk-HNLR7Q4Z.js +83 -0
  332. package/dist/chunk-HSOXMJOT.js +12 -0
  333. package/dist/chunk-I4MRDSUF.js +281 -0
  334. package/dist/chunk-I4QEJ62Y.js +202 -0
  335. package/dist/chunk-I5B5L6Q4.js +56 -0
  336. package/dist/chunk-I5QZJODL.js +264 -0
  337. package/dist/chunk-I7ITSXSJ.js +603 -0
  338. package/dist/chunk-I7XIZRFD.js +390 -0
  339. package/dist/chunk-IDANQPRH.js +82 -0
  340. package/dist/chunk-IFB3WJ36.js +212 -0
  341. package/dist/chunk-IHTAKKTK.js +264 -0
  342. package/dist/chunk-IKXNLWAL.js +205 -0
  343. package/dist/chunk-IKXNLWAL.js.map +1 -0
  344. package/dist/chunk-ILDXWY37.js +173 -0
  345. package/dist/chunk-IMDQUHBJ.js +570 -0
  346. package/dist/chunk-IMZCQBOT.js +119 -0
  347. package/dist/chunk-IXPTECSC.js +403 -0
  348. package/dist/chunk-J255A3N5.js +71 -0
  349. package/dist/chunk-J5F5HPPW.js +141 -0
  350. package/dist/chunk-JDTGRRNU.js +5045 -0
  351. package/dist/chunk-JDTGRRNU.js.map +1 -0
  352. package/dist/chunk-JEA3QDX7.js +2469 -0
  353. package/dist/chunk-JEUPAVYY.js +156 -0
  354. package/dist/chunk-JKHKLL5W.js +194 -0
  355. package/dist/chunk-JQL7ZH6C.js +650 -0
  356. package/dist/chunk-JWB44UGJ.js +57 -0
  357. package/dist/chunk-JZ4NLCAP.js +333 -0
  358. package/dist/chunk-K2A5PXQ5.js +412 -0
  359. package/dist/chunk-K56XV3C3.js +623 -0
  360. package/dist/chunk-K6GAXXVA.js +23 -0
  361. package/dist/chunk-KCBMFSMS.js +199 -0
  362. package/dist/chunk-KF2FV3ZJ.js +268 -0
  363. package/dist/chunk-KJD65EJP.js +278 -0
  364. package/dist/chunk-KLEUWIMZ.js +386 -0
  365. package/dist/chunk-KODELWYT.js +309 -0
  366. package/dist/chunk-KRDR5RJD.js +83 -0
  367. package/dist/chunk-KUDGXAF7.js +914 -0
  368. package/dist/chunk-KY2R73CG.js +171 -0
  369. package/dist/chunk-KY2R73CG.js.map +1 -0
  370. package/dist/chunk-KYS77RPN.js +85 -0
  371. package/dist/chunk-L7YTNTIK.js +368 -0
  372. package/dist/chunk-LHPNABDH.js +686 -0
  373. package/dist/chunk-MFROMEKA.js +401 -0
  374. package/dist/chunk-MIHN76LX.js +2656 -0
  375. package/dist/chunk-MIYFS2XN.js +42 -0
  376. package/dist/chunk-MJUCFQMS.js +65 -0
  377. package/dist/chunk-MM4FNWI4.js +3064 -0
  378. package/dist/chunk-MNZG4OHU.js +790 -0
  379. package/dist/chunk-MVW6HNPI.js +250 -0
  380. package/dist/chunk-MVW6HNPI.js.map +1 -0
  381. package/dist/chunk-N6AACDUW.js +200 -0
  382. package/dist/chunk-NC55IFN3.js +781 -0
  383. package/dist/chunk-NC7PVOEK.js +98 -0
  384. package/dist/chunk-NCYMNCJO.js +70 -0
  385. package/dist/chunk-ND2BXV3P.js +259 -0
  386. package/dist/chunk-NDBTFUO6.js +272 -0
  387. package/dist/chunk-NDQJZ7HF.js +206 -0
  388. package/dist/chunk-NGJJJPZZ.js +162 -0
  389. package/dist/chunk-NJTSNNE7.js +251 -0
  390. package/dist/chunk-NPGISCU6.js +4159 -0
  391. package/dist/chunk-NPGISCU6.js.map +1 -0
  392. package/dist/chunk-NRTE7DNV.js +1270 -0
  393. package/dist/chunk-NULUNM7H.js +290 -0
  394. package/dist/chunk-NUNZS36W.js +227 -0
  395. package/dist/chunk-NW53H5RW.js +2424 -0
  396. package/dist/chunk-NXCMHIKI.js +263 -0
  397. package/dist/chunk-O3LKCBP5.js +159 -0
  398. package/dist/chunk-O4EA4F3W.js +103 -0
  399. package/dist/chunk-O4EA4F3W.js.map +1 -0
  400. package/dist/chunk-O4OOG3D6.js +116 -0
  401. package/dist/chunk-O4OOG3D6.js.map +1 -0
  402. package/dist/chunk-O6N4ABCA.js +376 -0
  403. package/dist/chunk-O732GAFC.js +112 -0
  404. package/dist/chunk-OF4TIKYC.js +690 -0
  405. package/dist/chunk-OMPVOMPP.js +70 -0
  406. package/dist/chunk-OPJJSKUK.js +118 -0
  407. package/dist/chunk-OPWCMA4D.js +196 -0
  408. package/dist/chunk-ORJPS5VN.js +1193 -0
  409. package/dist/chunk-OSY5K7L7.js +187 -0
  410. package/dist/chunk-OV6QJRT4.js +45 -0
  411. package/dist/chunk-OVKYVZMW.js +108 -0
  412. package/dist/chunk-OZCBM3UC.js +171 -0
  413. package/dist/chunk-P3A2EINJ.js +61 -0
  414. package/dist/chunk-PTAG4PDC.js +27 -0
  415. package/dist/chunk-PTF5B7TJ.js +298 -0
  416. package/dist/chunk-Q3DPEYX4.js +848 -0
  417. package/dist/chunk-Q6CGOPJD.js +215 -0
  418. package/dist/chunk-Q6CGOPJD.js.map +1 -0
  419. package/dist/chunk-QB2KMIDP.js +100 -0
  420. package/dist/chunk-QCSJ4CWE.js +1067 -0
  421. package/dist/chunk-QIOQ2NPQ.js +414 -0
  422. package/dist/chunk-QK5EFEUT.js +353 -0
  423. package/dist/chunk-QPQBLYQJ.js +41 -0
  424. package/dist/chunk-QPSGCC5D.js +184 -0
  425. package/dist/chunk-QZAAUQRN.js +474 -0
  426. package/dist/chunk-QZM6YDJW.js +489 -0
  427. package/dist/chunk-QZM6YDJW.js.map +1 -0
  428. package/dist/chunk-RGBI63KJ.js +188 -0
  429. package/dist/chunk-RLBKLAEY.js +138 -0
  430. package/dist/chunk-RMFKVOM7.js +304 -0
  431. package/dist/chunk-ROKQU7WG.js +258 -0
  432. package/dist/chunk-RPVREAU7.js +251 -0
  433. package/dist/chunk-RQKLF42C.js +723 -0
  434. package/dist/chunk-SC6RRD2D.js +38 -0
  435. package/dist/chunk-SC6RRD2D.js.map +1 -0
  436. package/dist/chunk-SEO7TICN.js +94 -0
  437. package/dist/chunk-SHHJCL7X.js +432 -0
  438. package/dist/chunk-SIRLACNZ.js +114 -0
  439. package/dist/chunk-SKPHMYAA.js +237 -0
  440. package/dist/chunk-SODC7T6L.js +1583 -0
  441. package/dist/chunk-SQJIKMN3.js +366 -0
  442. package/dist/chunk-SVINDKVW.js +26 -0
  443. package/dist/chunk-SYCDHPZF.js +335 -0
  444. package/dist/chunk-T2QX3FDP.js +133 -0
  445. package/dist/chunk-T3OWFVMS.js +1187 -0
  446. package/dist/chunk-T6XI5FLY.js +61 -0
  447. package/dist/chunk-T7OXJZCX.js +62 -0
  448. package/dist/chunk-TAT5USZN.js +353 -0
  449. package/dist/chunk-TPQTRNER.js +172 -0
  450. package/dist/chunk-TUIN4MB7.js +266 -0
  451. package/dist/chunk-TX3VECZU.js +71 -0
  452. package/dist/chunk-TXLIEOJX.js +9624 -0
  453. package/dist/chunk-U3DN4HEY.js +27 -0
  454. package/dist/chunk-U7XM7CB4.js +191 -0
  455. package/dist/chunk-UJK53QFL.js +140 -0
  456. package/dist/chunk-UMTXA2TH.js +319 -0
  457. package/dist/chunk-UPDSXFK5.js +199 -0
  458. package/dist/chunk-UTIAXH52.js +269 -0
  459. package/dist/chunk-UVN5TMHU.js +1184 -0
  460. package/dist/chunk-V4Z4B2E3.js +52 -0
  461. package/dist/chunk-V4Z4B2E3.js.map +1 -0
  462. package/dist/chunk-VGYXW3VG.js +246 -0
  463. package/dist/chunk-VS7AHPCZ.js +255 -0
  464. package/dist/chunk-VTTAJOQ7.js +121 -0
  465. package/dist/chunk-VWPOLUAO.js +99 -0
  466. package/dist/chunk-X3MWB2QU.js +3851 -0
  467. package/dist/chunk-X6KAJI3V.js +211 -0
  468. package/dist/chunk-XBLRHV5R.js +50 -0
  469. package/dist/chunk-XDFP2LMW.js +605 -0
  470. package/dist/chunk-XEQMZB3C.js +525 -0
  471. package/dist/chunk-XEYLT5VA.js +223 -0
  472. package/dist/chunk-XHIQ5I6N.js +918 -0
  473. package/dist/chunk-XLH7QY2R.js +378 -0
  474. package/dist/chunk-XWFAMUZQ.js +113 -0
  475. package/dist/chunk-Y4BB2KS2.js +294 -0
  476. package/dist/chunk-Y4BB2KS2.js.map +1 -0
  477. package/dist/chunk-Y4OBB2VN.js +84 -0
  478. package/dist/chunk-YCVD6CI3.js +234 -0
  479. package/dist/chunk-YENLNISG.js +270 -0
  480. package/dist/chunk-YIRVLKAX.js +351 -0
  481. package/dist/chunk-YL73CVNK.js +390 -0
  482. package/dist/chunk-YLS6QE5G.js +288 -0
  483. package/dist/chunk-YNF2OC54.js +366 -0
  484. package/dist/chunk-YNF2OC54.js.map +1 -0
  485. package/dist/chunk-YPWU5KPE.js +147 -0
  486. package/dist/chunk-YQXTDZSU.js +2984 -0
  487. package/dist/chunk-YSJEAAOL.js +178 -0
  488. package/dist/chunk-YWIFM7D7.js +499 -0
  489. package/dist/chunk-YWVI6ZMK.js +103 -0
  490. package/dist/chunk-Z4FMAFNH.js +847 -0
  491. package/dist/chunk-Z654FWNU.js +136 -0
  492. package/dist/chunk-Z7Y523PS.js +130 -0
  493. package/dist/chunk-ZD67RM6G.js +60 -0
  494. package/dist/chunk-ZEG4VPBL.js +187 -0
  495. package/dist/chunk-ZHDFQITM.js +283 -0
  496. package/dist/chunk-ZHDFQITM.js.map +1 -0
  497. package/dist/chunk-ZLYCOBHW.js +75 -0
  498. package/dist/chunk-ZNJ5MTXV.js +89 -0
  499. package/dist/chunk-ZSGY3H53.js +155 -0
  500. package/dist/chunk-ZTPXACWB.js +1788 -0
  501. package/dist/chunk-ZUA3JMI6.js +107 -0
  502. package/dist/chunk-ZYAZUPPV.js +559 -0
  503. package/dist/composer.js +8 -8
  504. package/dist/computer-viewer-TDDO25AV.js +21 -0
  505. package/dist/connect.js +12 -12
  506. package/dist/desktop-dictation.js +12 -10
  507. package/dist/desktop-dictation.js.map +1 -1
  508. package/dist/desktop.js +2 -2
  509. package/dist/editor.js +2 -2
  510. package/dist/embedded-new-voice-2G3VLPVQ.js +24 -0
  511. package/dist/embedded-voice-T5IWOWGD.js +24 -0
  512. package/dist/fleet-decision-row-WM64KXP3.js +361 -0
  513. package/dist/in-chat-connect-model.js +5 -5
  514. package/dist/index.js +51 -51
  515. package/dist/interaction.js +5 -5
  516. package/dist/machines.js +3 -3
  517. package/dist/meetings-recorder.js +1 -1
  518. package/dist/meetings.js +40 -32
  519. package/dist/meetings.js.map +1 -1
  520. package/dist/messages/en.d.ts +3 -0
  521. package/dist/messages.js +1 -1
  522. package/dist/model-policy-picker-menu-SMC6J6QN.js +22 -0
  523. package/dist/payment-page-card-G4U63KUV.js +223 -0
  524. package/dist/platform-activity-row-BUZGZAKZ.js +128 -0
  525. package/dist/queue-surface-implementation-4KUZ4PJV.js +908 -0
  526. package/dist/realtime.js +4 -4
  527. package/dist/recorder-host-WF2RRR56.js +69 -0
  528. package/dist/recorder-host-WF2RRR56.js.map +1 -0
  529. package/dist/recordings.js +3 -3
  530. package/dist/sandbox-files-ESDMOFSD.js +27 -0
  531. package/dist/session-app.js +211 -209
  532. package/dist/session-connect-cards-Q53KMMYY.js +25 -0
  533. package/dist/session-list-model.js +2 -2
  534. package/dist/session-realtime-CF3I35WJ.js +30 -0
  535. package/dist/session-realtime.js +2 -2
  536. package/dist/session-ui.js +33 -31
  537. package/dist/session.js +5 -5
  538. package/dist/sites.js +2 -2
  539. package/dist/terminal.js +2 -2
  540. package/dist/this-computer.js +3 -3
  541. package/dist/timeline-annotation-markers-CJK4RYZ4.js +157 -0
  542. package/dist/timeline-annotation-selection-67GF5H26.js +208 -0
  543. package/dist/timeline-annotations-dialog-ONJPQDJQ.js +283 -0
  544. package/dist/ui/access-list.js +11 -9
  545. package/dist/ui/access-list.js.map +1 -1
  546. package/dist/ui/api-error.d.ts +6 -3
  547. package/dist/ui/api-error.js +2 -1
  548. package/dist/ui/cadence-picker.js +6 -4
  549. package/dist/ui/choice-cards.js +5 -3
  550. package/dist/ui/confirm-dialog.js +2 -2
  551. package/dist/ui/copy-field.js +5 -3
  552. package/dist/ui/detail-page.js +2 -2
  553. package/dist/ui/detail-sheet.js +2 -2
  554. package/dist/ui/diff-view.js +4 -3
  555. package/dist/ui/disclosure.js +3 -3
  556. package/dist/ui/email-chips-input.js +5 -3
  557. package/dist/ui/error-message.js +2 -1
  558. package/dist/ui/error-reference.d.ts +15 -0
  559. package/dist/ui/error-text.d.ts +10 -0
  560. package/dist/ui/error-text.js +9 -0
  561. package/dist/ui/error-text.js.map +1 -0
  562. package/dist/ui/field.js +4 -2
  563. package/dist/ui/flush-form-page.js +8 -6
  564. package/dist/ui/form-dialog.js +7 -5
  565. package/dist/ui/list-row.js +3 -3
  566. package/dist/ui/load-failure.js +3 -2
  567. package/dist/ui/load-failure.js.map +1 -1
  568. package/dist/ui/notice.js +3 -1
  569. package/dist/ui/relative-time.js +2 -2
  570. package/dist/ui/revision-history.js +9 -7
  571. package/dist/ui/revision-history.js.map +1 -1
  572. package/dist/ui/role-select.js +10 -8
  573. package/dist/ui/segmented-control.js +4 -2
  574. package/dist/ui/select-menu.js +5 -3
  575. package/dist/ui/setting-row.js +3 -1
  576. package/dist/ui/switch.js +4 -2
  577. package/dist/ui/usage-meter.js +3 -3
  578. package/dist/ui/word-list-row.js +4 -2
  579. package/dist/usage.js +2 -2
  580. package/dist/workbench.js +4 -4
  581. package/package.json +5 -6
  582. package/src/app/app-state.tsx +126 -14
  583. package/src/app/components/artifacts/site-data.tsx +2 -2
  584. package/src/app/components/artifacts/site-settings.tsx +2 -2
  585. package/src/app/components/rail/session-list.tsx +7 -8
  586. package/src/app/components/rail/session-shell.tsx +3 -3
  587. package/src/app/components/repository-picker.tsx +8 -1
  588. package/src/app/components/session/model-context-inspector.tsx +2 -1
  589. package/src/app/components/session/session-admin-access.tsx +2 -2
  590. package/src/app/lib/actions/chat-operations.ts +4 -4
  591. package/src/app/lib/archive-session.test.tsx +265 -2
  592. package/src/app/lib/archive-session.tsx +175 -9
  593. package/src/app/lib/copy-link.ts +2 -2
  594. package/src/app/lib/inbox.tsx +2 -2
  595. package/src/app/lib/session-failure-toasts.ts +3 -2
  596. package/src/app/lib/toast.test.tsx +215 -0
  597. package/src/app/lib/toast.tsx +67 -2
  598. package/src/app/personal-github-reconnect.test.tsx +356 -0
  599. package/src/app/routes/artifacts.tsx +1 -2
  600. package/src/components/tool-action-review.tsx +14 -1
  601. package/src/meetings/delete-meeting-dialog.tsx +2 -1
  602. package/src/meetings/meeting-ask.tsx +2 -1
  603. package/src/meetings/meeting-detail-page.tsx +2 -1
  604. package/src/meetings/meeting-notes.tsx +2 -1
  605. package/src/meetings/meeting-settings.tsx +4 -1
  606. package/src/meetings/meeting-transcript.tsx +4 -1
  607. package/src/meetings/recorder-context.tsx +10 -0
  608. package/src/meetings/recorder-host.test.tsx +60 -2
  609. package/src/meetings/recorder-host.tsx +16 -3
  610. package/src/meetings/recorder-panel.tsx +2 -1
  611. package/src/meetings/recorder-workspace.test.tsx +26 -1
  612. package/src/messages/en.ts +6 -0
  613. package/src/ui/api-error.test.ts +29 -5
  614. package/src/ui/api-error.tsx +10 -4
  615. package/src/ui/error-message.tsx +8 -0
  616. package/src/ui/error-reference.test.ts +54 -0
  617. package/src/ui/error-reference.ts +51 -0
  618. package/src/ui/error-text.test.tsx +66 -0
  619. package/src/ui/error-text.tsx +49 -0
  620. package/src/ui/field.tsx +4 -1
  621. package/src/ui/notice.tsx +7 -2
  622. package/src/ui/setting-row.tsx +4 -1
  623. package/styles/app.css +12 -0
  624. package/styles/compiled.css +9 -0
  625. package/dist/browser-viewer-NOP5EAUO.js +0 -23
  626. package/dist/chat-interactive-block-G7O44JHR.js +0 -18
  627. package/dist/chunk-26RWVLRD.js +0 -135
  628. package/dist/chunk-2AHTY7OT.js +0 -247
  629. package/dist/chunk-2GDNWKSC.js +0 -3670
  630. package/dist/chunk-2JENKGCE.js +0 -339
  631. package/dist/chunk-2KYQC4T5.js +0 -155
  632. package/dist/chunk-2RREGDQH.js +0 -708
  633. package/dist/chunk-2T7DX6KR.js +0 -353
  634. package/dist/chunk-2VB2O4FQ.js +0 -920
  635. package/dist/chunk-2VTTKH23.js +0 -94
  636. package/dist/chunk-2XNG2KNT.js +0 -172
  637. package/dist/chunk-2YC6JQRO.js +0 -399
  638. package/dist/chunk-2ZVRJRXC.js +0 -27
  639. package/dist/chunk-35737UT4.js +0 -162
  640. package/dist/chunk-366XZ4PM.js +0 -41
  641. package/dist/chunk-36MIDGAH.js +0 -199
  642. package/dist/chunk-3FD76LXM.js +0 -212
  643. package/dist/chunk-3OVIXY4O.js +0 -213
  644. package/dist/chunk-3OVIXY4O.js.map +0 -1
  645. package/dist/chunk-3QNRBEYH.js +0 -432
  646. package/dist/chunk-3QX55WLC.js +0 -15
  647. package/dist/chunk-3USJPT2S.js +0 -1022
  648. package/dist/chunk-42CMQ5VR.js +0 -251
  649. package/dist/chunk-4LPOWQJY.js +0 -42
  650. package/dist/chunk-4NBTZRKT.js +0 -79
  651. package/dist/chunk-4OXI6HCV.js +0 -118
  652. package/dist/chunk-4SZZAFYQ.js +0 -2317
  653. package/dist/chunk-4TQL3WP2.js +0 -140
  654. package/dist/chunk-4Y6BK7IU.js +0 -196
  655. package/dist/chunk-4YD7YZC5.js +0 -373
  656. package/dist/chunk-5DTST3TP.js +0 -81
  657. package/dist/chunk-5FH5LQVS.js +0 -130
  658. package/dist/chunk-5KWMYPJV.js +0 -847
  659. package/dist/chunk-5MUJDC6C.js +0 -84
  660. package/dist/chunk-5QM2WPKV.js +0 -41
  661. package/dist/chunk-5WUN7XPD.js +0 -1184
  662. package/dist/chunk-64PO2WXU.js +0 -1067
  663. package/dist/chunk-6AHATAAY.js +0 -431
  664. package/dist/chunk-6ED2YWBT.js +0 -56
  665. package/dist/chunk-6GXVYAGR.js +0 -170
  666. package/dist/chunk-6H4SJBPE.js +0 -85
  667. package/dist/chunk-6MT3HHUB.js +0 -84
  668. package/dist/chunk-6UHCBH4G.js +0 -198
  669. package/dist/chunk-6WLX3NR3.js +0 -198
  670. package/dist/chunk-73NXYYWE.js +0 -112
  671. package/dist/chunk-76ERNKIZ.js +0 -603
  672. package/dist/chunk-776QZ573.js +0 -57
  673. package/dist/chunk-7BYWOFVH.js +0 -171
  674. package/dist/chunk-7O5CGGIQ.js +0 -108
  675. package/dist/chunk-7QOHRZ67.js +0 -251
  676. package/dist/chunk-7WIDB4PL.js +0 -2058
  677. package/dist/chunk-7WKP3DYJ.js +0 -37
  678. package/dist/chunk-7XOVTPDI.js +0 -227
  679. package/dist/chunk-AB5MBIXY.js +0 -281
  680. package/dist/chunk-ADNMXBCX.js +0 -1193
  681. package/dist/chunk-AFBJTUFK.js +0 -202
  682. package/dist/chunk-ALVRWCXE.js +0 -61
  683. package/dist/chunk-AOHU6O3M.js +0 -247
  684. package/dist/chunk-AOHU6O3M.js.map +0 -1
  685. package/dist/chunk-APW4T4SW.js +0 -270
  686. package/dist/chunk-AXBSYWKX.js +0 -2656
  687. package/dist/chunk-B2I5ZW35.js +0 -422
  688. package/dist/chunk-B3LMRTRF.js +0 -223
  689. package/dist/chunk-BE2XENG2.js +0 -292
  690. package/dist/chunk-BE2XENG2.js.map +0 -1
  691. package/dist/chunk-BF4SADKX.js +0 -29
  692. package/dist/chunk-BKP43KK4.js +0 -1788
  693. package/dist/chunk-BM3NEZ6X.js +0 -781
  694. package/dist/chunk-BT3BAGB5.js +0 -216
  695. package/dist/chunk-BTSYDIVJ.js +0 -357
  696. package/dist/chunk-BUBNGKWG.js +0 -70
  697. package/dist/chunk-BVUJV5WR.js +0 -126
  698. package/dist/chunk-BZO5ZMUP.js +0 -27
  699. package/dist/chunk-C3HUF3M2.js +0 -157
  700. package/dist/chunk-C5QCAOES.js +0 -264
  701. package/dist/chunk-CGK6ALQU.js +0 -159
  702. package/dist/chunk-CPYGO76Q.js +0 -335
  703. package/dist/chunk-CQH4FWYA.js +0 -490
  704. package/dist/chunk-CZP5QXNB.js +0 -234
  705. package/dist/chunk-D2TOWEYH.js +0 -266
  706. package/dist/chunk-D6L4GHRH.js +0 -340
  707. package/dist/chunk-DKT3N37I.js +0 -50
  708. package/dist/chunk-DMMJIFKA.js +0 -84
  709. package/dist/chunk-DO74DQC7.js +0 -26
  710. package/dist/chunk-DOFJZ2JU.js +0 -83
  711. package/dist/chunk-DSXVY5WZ.js +0 -119
  712. package/dist/chunk-E337C2VK.js +0 -82
  713. package/dist/chunk-E6NRSRBE.js +0 -114
  714. package/dist/chunk-E6SQKHAU.js +0 -114
  715. package/dist/chunk-E7UIVD7F.js +0 -236
  716. package/dist/chunk-EGBII4CP.js +0 -229
  717. package/dist/chunk-EILSAQVJ.js +0 -200
  718. package/dist/chunk-ELL6HSYR.js +0 -307
  719. package/dist/chunk-EUBGLFFR.js +0 -73
  720. package/dist/chunk-EW6RNWSH.js +0 -212
  721. package/dist/chunk-EYUT5Y6V.js +0 -2599
  722. package/dist/chunk-F7U3QPZ3.js +0 -304
  723. package/dist/chunk-FBTJKSTM.js +0 -1270
  724. package/dist/chunk-FC2FTSK3.js +0 -2424
  725. package/dist/chunk-FOGNA3BU.js +0 -148
  726. package/dist/chunk-FQFKHNC7.js +0 -650
  727. package/dist/chunk-FTCHM755.js +0 -50
  728. package/dist/chunk-FXSHP4JZ.js +0 -3550
  729. package/dist/chunk-G6ZZC543.js +0 -818
  730. package/dist/chunk-G7FU6PUA.js +0 -100
  731. package/dist/chunk-GA4YEAMX.js +0 -3851
  732. package/dist/chunk-GE33BGB7.js +0 -12
  733. package/dist/chunk-GQ67HSJY.js +0 -570
  734. package/dist/chunk-GXXZ3WAK.js +0 -106
  735. package/dist/chunk-H2TCRX3H.js +0 -237
  736. package/dist/chunk-HLL4PBO7.js +0 -60
  737. package/dist/chunk-HLOEPV5C.js +0 -259
  738. package/dist/chunk-HUAGBS4O.js +0 -56
  739. package/dist/chunk-I36GSRUJ.js +0 -211
  740. package/dist/chunk-I6VBHT7S.js +0 -261
  741. package/dist/chunk-ICNNNOXE.js +0 -333
  742. package/dist/chunk-ICX64J4U.js +0 -172
  743. package/dist/chunk-ID36Y46W.js +0 -5046
  744. package/dist/chunk-ID36Y46W.js.map +0 -1
  745. package/dist/chunk-IGVVXLKJ.js +0 -559
  746. package/dist/chunk-IKJLSBUI.js +0 -2984
  747. package/dist/chunk-IKMUFDVS.js +0 -50
  748. package/dist/chunk-IKUNOX7F.js +0 -255
  749. package/dist/chunk-ILKDYBON.js +0 -288
  750. package/dist/chunk-IVYJX3OY.js +0 -187
  751. package/dist/chunk-JCY4CMDH.js +0 -107
  752. package/dist/chunk-JJZPLGIP.js +0 -474
  753. package/dist/chunk-JW33RV4V.js +0 -143
  754. package/dist/chunk-JWPA6ZPZ.js +0 -351
  755. package/dist/chunk-JZ4QXS6D.js +0 -50
  756. package/dist/chunk-K42OUZQ3.js +0 -386
  757. package/dist/chunk-K5TOVX5A.js +0 -206
  758. package/dist/chunk-K63HGHZX.js +0 -99
  759. package/dist/chunk-K6R5T44I.js +0 -75
  760. package/dist/chunk-KHJ5PXFM.js +0 -914
  761. package/dist/chunk-KJZRQ55O.js +0 -2319
  762. package/dist/chunk-KJZRQ55O.js.map +0 -1
  763. package/dist/chunk-KKI55ZMW.js +0 -65
  764. package/dist/chunk-KRPLAAFP.js +0 -199
  765. package/dist/chunk-KVFEZDBO.js +0 -134
  766. package/dist/chunk-L4I665WK.js +0 -45
  767. package/dist/chunk-L4OF77LE.js +0 -110
  768. package/dist/chunk-L4OF77LE.js.map +0 -1
  769. package/dist/chunk-LA5T52RM.js +0 -70
  770. package/dist/chunk-LM2W5YAT.js +0 -401
  771. package/dist/chunk-LQ62ECE6.js +0 -390
  772. package/dist/chunk-LQDUHU3Y.js +0 -71
  773. package/dist/chunk-LRJIYTZW.js +0 -4157
  774. package/dist/chunk-LRJIYTZW.js.map +0 -1
  775. package/dist/chunk-LRN6GYAZ.js +0 -138
  776. package/dist/chunk-M4SDVTKJ.js +0 -790
  777. package/dist/chunk-MA6O7CM6.js +0 -99
  778. package/dist/chunk-MBIBB6GI.js +0 -197
  779. package/dist/chunk-MF3ZFB4H.js +0 -199
  780. package/dist/chunk-MJJGJMYJ.js +0 -98
  781. package/dist/chunk-MLJADQFI.js +0 -4824
  782. package/dist/chunk-MQG7RV3B.js +0 -62
  783. package/dist/chunk-MTTGSQA5.js +0 -186
  784. package/dist/chunk-MW7Y3T55.js +0 -525
  785. package/dist/chunk-MYUFMVCH.js +0 -121
  786. package/dist/chunk-N3OARGH2.js +0 -61
  787. package/dist/chunk-NB2HMRT2.js +0 -353
  788. package/dist/chunk-NFDFYWMV.js +0 -141
  789. package/dist/chunk-NWGNFN3N.js +0 -1187
  790. package/dist/chunk-NWJRPDIO.js +0 -840
  791. package/dist/chunk-NWJRPDIO.js.map +0 -1
  792. package/dist/chunk-NXWBBZJV.js +0 -267
  793. package/dist/chunk-NY2QWROL.js +0 -71
  794. package/dist/chunk-O2IOPP3R.js +0 -848
  795. package/dist/chunk-O2UWH5RG.js +0 -141
  796. package/dist/chunk-O5YWDLYF.js +0 -393
  797. package/dist/chunk-OBMCZO7E.js +0 -121
  798. package/dist/chunk-OD3DCCCB.js +0 -132
  799. package/dist/chunk-OMH7R6I3.js +0 -390
  800. package/dist/chunk-OSA5EQG5.js +0 -113
  801. package/dist/chunk-OSJ3MUTZ.js +0 -2936
  802. package/dist/chunk-OWAYJ2OV.js +0 -368
  803. package/dist/chunk-OYXBFSGK.js +0 -269
  804. package/dist/chunk-PC2EBA5G.js +0 -4116
  805. package/dist/chunk-PC2EBA5G.js.map +0 -1
  806. package/dist/chunk-PC2MVXIP.js +0 -363
  807. package/dist/chunk-PC2MVXIP.js.map +0 -1
  808. package/dist/chunk-PENGLDR5.js +0 -309
  809. package/dist/chunk-PSMAWRPL.js +0 -191
  810. package/dist/chunk-PW4IMTYR.js +0 -702
  811. package/dist/chunk-PW54V7T5.js +0 -387
  812. package/dist/chunk-Q2EXYSMO.js +0 -24
  813. package/dist/chunk-Q2XJK5I4.js +0 -51
  814. package/dist/chunk-Q2XJK5I4.js.map +0 -1
  815. package/dist/chunk-Q4EFRI6X.js +0 -258
  816. package/dist/chunk-Q52CXW6C.js +0 -48
  817. package/dist/chunk-Q6XQ2R37.js +0 -184
  818. package/dist/chunk-QAJ53XBW.js +0 -23
  819. package/dist/chunk-QDTKECT4.js +0 -129
  820. package/dist/chunk-QE3ZFGI3.js +0 -43
  821. package/dist/chunk-QHHSUR2Y.js +0 -298
  822. package/dist/chunk-QHNVNR7B.js +0 -173
  823. package/dist/chunk-QIK2Q6N5.js +0 -376
  824. package/dist/chunk-QWL4L366.js +0 -38
  825. package/dist/chunk-R3J2PTVQ.js +0 -690
  826. package/dist/chunk-RBRX5ZS3.js +0 -319
  827. package/dist/chunk-REX6JIC7.js +0 -33
  828. package/dist/chunk-RGZ7EEC3.js +0 -537
  829. package/dist/chunk-RGZ7EEC3.js.map +0 -1
  830. package/dist/chunk-RIPS7GFR.js +0 -960
  831. package/dist/chunk-RTBZNFNV.js +0 -1354
  832. package/dist/chunk-RTBZNFNV.js.map +0 -1
  833. package/dist/chunk-SKMNW4SW.js +0 -187
  834. package/dist/chunk-SRFARKXC.js +0 -623
  835. package/dist/chunk-SWIHWCTW.js +0 -4461
  836. package/dist/chunk-TA5CFTO4.js +0 -103
  837. package/dist/chunk-TF4ZVJLI.js +0 -156
  838. package/dist/chunk-TG7DADJR.js +0 -9624
  839. package/dist/chunk-TI4R2ZD5.js +0 -623
  840. package/dist/chunk-TI4R2ZD5.js.map +0 -1
  841. package/dist/chunk-TNKWOUWP.js +0 -412
  842. package/dist/chunk-TNUSPXPW.js +0 -5555
  843. package/dist/chunk-TNUSPXPW.js.map +0 -1
  844. package/dist/chunk-TNYFHKVV.js +0 -366
  845. package/dist/chunk-TPMZBOFH.js +0 -178
  846. package/dist/chunk-TW3LKRJF.js +0 -263
  847. package/dist/chunk-TZAO65I4.js +0 -83
  848. package/dist/chunk-U5EFEMYU.js +0 -89
  849. package/dist/chunk-U6M4LS3M.js +0 -378
  850. package/dist/chunk-UI4HI5QK.js +0 -918
  851. package/dist/chunk-UJDOWCQ3.js +0 -272
  852. package/dist/chunk-UJUQ2QOX.js +0 -581
  853. package/dist/chunk-UQ3IM6FY.js +0 -133
  854. package/dist/chunk-UYE47LO6.js +0 -246
  855. package/dist/chunk-VADHIT26.js +0 -89
  856. package/dist/chunk-VFQ3H6CO.js +0 -163
  857. package/dist/chunk-VGUN6VB2.js +0 -188
  858. package/dist/chunk-VGWWEVSD.js +0 -723
  859. package/dist/chunk-VIEFJ2DM.js +0 -2469
  860. package/dist/chunk-VLXM36VS.js +0 -268
  861. package/dist/chunk-W3BFRR2G.js +0 -499
  862. package/dist/chunk-W5MPXR3A.js +0 -981
  863. package/dist/chunk-W5OWKVZG.js +0 -136
  864. package/dist/chunk-W6FRORMX.js +0 -486
  865. package/dist/chunk-W6FRORMX.js.map +0 -1
  866. package/dist/chunk-W7XROSZO.js +0 -232
  867. package/dist/chunk-W7XROSZO.js.map +0 -1
  868. package/dist/chunk-WEZ5PXZP.js +0 -403
  869. package/dist/chunk-WHWUWN2X.js +0 -197
  870. package/dist/chunk-WHWUWN2X.js.map +0 -1
  871. package/dist/chunk-WLEDGIVS.js +0 -114
  872. package/dist/chunk-WLEDGIVS.js.map +0 -1
  873. package/dist/chunk-WNDAKLHG.js +0 -281
  874. package/dist/chunk-WTJ4PLMU.js +0 -103
  875. package/dist/chunk-WV2KPJUW.js +0 -107
  876. package/dist/chunk-X3VY5EGY.js +0 -277
  877. package/dist/chunk-X3VY5EGY.js.map +0 -1
  878. package/dist/chunk-XDBYWVCW.js +0 -418
  879. package/dist/chunk-XF7MA4U5.js +0 -36
  880. package/dist/chunk-XF7MA4U5.js.map +0 -1
  881. package/dist/chunk-XOSQP3YA.js +0 -605
  882. package/dist/chunk-XYBV4ZJQ.js +0 -271
  883. package/dist/chunk-YBKVGLQR.js +0 -147
  884. package/dist/chunk-YDCUBUWH.js +0 -1583
  885. package/dist/chunk-YG6NARQY.js +0 -51
  886. package/dist/chunk-YG6NARQY.js.map +0 -1
  887. package/dist/chunk-YSVD5HI4.js +0 -278
  888. package/dist/chunk-YT3WGNG6.js +0 -290
  889. package/dist/chunk-YYICQDK4.js +0 -414
  890. package/dist/chunk-YYLMZLI6.js +0 -686
  891. package/dist/chunk-ZAMTKG5U.js +0 -95
  892. package/dist/chunk-ZDLYSXKN.js +0 -111
  893. package/dist/chunk-ZG447FSS.js +0 -194
  894. package/dist/chunk-ZIT5KD4Q.js +0 -264
  895. package/dist/chunk-ZUDOVDKR.js +0 -3064
  896. package/dist/chunk-ZW2ECJ3A.js +0 -451
  897. package/dist/computer-viewer-LPZ763KF.js +0 -21
  898. package/dist/embedded-new-voice-YVMKSLKJ.js +0 -24
  899. package/dist/embedded-voice-BJPQFXSU.js +0 -24
  900. package/dist/fleet-decision-row-AA4H5CDT.js +0 -361
  901. package/dist/model-policy-picker-menu-HSMWVO4P.js +0 -22
  902. package/dist/payment-page-card-3LTSFJGN.js +0 -223
  903. package/dist/platform-activity-row-5VYV6TX4.js +0 -128
  904. package/dist/queue-surface-implementation-NXHZUKD2.js +0 -908
  905. package/dist/recorder-host-ZKRWTDBM.js +0 -57
  906. package/dist/recorder-host-ZKRWTDBM.js.map +0 -1
  907. package/dist/sandbox-files-YCMLQUFU.js +0 -27
  908. package/dist/session-connect-cards-KSQLMRM5.js +0 -25
  909. package/dist/session-realtime-ZR6JLG3Y.js +0 -30
  910. package/dist/timeline-annotation-markers-YAHDPWVG.js +0 -157
  911. package/dist/timeline-annotation-selection-KHXNCEJP.js +0 -208
  912. package/dist/timeline-annotations-dialog-Y4XD3N7B.js +0 -283
  913. /package/dist/{browser-viewer-NOP5EAUO.js.map → browser-viewer-TC27OCIP.js.map} +0 -0
  914. /package/dist/{chat-interactive-block-G7O44JHR.js.map → chat-interactive-block-RWPQBHVS.js.map} +0 -0
  915. /package/dist/{chunk-EGBII4CP.js.map → chunk-2BDT3UZQ.js.map} +0 -0
  916. /package/dist/{chunk-4YD7YZC5.js.map → chunk-2CLNIEK4.js.map} +0 -0
  917. /package/dist/{chunk-ZW2ECJ3A.js.map → chunk-2FSBSCZJ.js.map} +0 -0
  918. /package/dist/{chunk-KRPLAAFP.js.map → chunk-2I7HDP53.js.map} +0 -0
  919. /package/dist/{chunk-3QX55WLC.js.map → chunk-2INLDVK3.js.map} +0 -0
  920. /package/dist/{chunk-BVUJV5WR.js.map → chunk-2KALVELR.js.map} +0 -0
  921. /package/dist/{chunk-XDBYWVCW.js.map → chunk-2M3J7ZWQ.js.map} +0 -0
  922. /package/dist/{chunk-2RREGDQH.js.map → chunk-2OP6WLGV.js.map} +0 -0
  923. /package/dist/{chunk-OSJ3MUTZ.js.map → chunk-2RG7NIAS.js.map} +0 -0
  924. /package/dist/{chunk-26RWVLRD.js.map → chunk-2STUPWEL.js.map} +0 -0
  925. /package/dist/{chunk-XYBV4ZJQ.js.map → chunk-2YUOVM3G.js.map} +0 -0
  926. /package/dist/{chunk-2GDNWKSC.js.map → chunk-2Z3NQNTM.js.map} +0 -0
  927. /package/dist/{chunk-2VB2O4FQ.js.map → chunk-3CPWWGNK.js.map} +0 -0
  928. /package/dist/{chunk-7WKP3DYJ.js.map → chunk-3ED2U6XE.js.map} +0 -0
  929. /package/dist/{chunk-BT3BAGB5.js.map → chunk-3GZA4BUW.js.map} +0 -0
  930. /package/dist/{chunk-3USJPT2S.js.map → chunk-3IK6UYO6.js.map} +0 -0
  931. /package/dist/{chunk-6AHATAAY.js.map → chunk-3PZ7JZI2.js.map} +0 -0
  932. /package/dist/{chunk-JZ4QXS6D.js.map → chunk-4DVJ6ONS.js.map} +0 -0
  933. /package/dist/{chunk-5QM2WPKV.js.map → chunk-4E3ZJRTZ.js.map} +0 -0
  934. /package/dist/{chunk-NFDFYWMV.js.map → chunk-4SAWSRAA.js.map} +0 -0
  935. /package/dist/{chunk-ELL6HSYR.js.map → chunk-53AGXXZM.js.map} +0 -0
  936. /package/dist/{chunk-G6ZZC543.js.map → chunk-54YW6SZZ.js.map} +0 -0
  937. /package/dist/{chunk-4SZZAFYQ.js.map → chunk-57AZS3IE.js.map} +0 -0
  938. /package/dist/{chunk-JW33RV4V.js.map → chunk-5CPEEAFD.js.map} +0 -0
  939. /package/dist/{chunk-D6L4GHRH.js.map → chunk-5EWSRZ2Y.js.map} +0 -0
  940. /package/dist/{chunk-PW54V7T5.js.map → chunk-5IE76VCY.js.map} +0 -0
  941. /package/dist/{chunk-6GXVYAGR.js.map → chunk-5NWEKLDZ.js.map} +0 -0
  942. /package/dist/{chunk-6UHCBH4G.js.map → chunk-5O2FCCHZ.js.map} +0 -0
  943. /package/dist/{chunk-2YC6JQRO.js.map → chunk-5QAY6K77.js.map} +0 -0
  944. /package/dist/{chunk-EYUT5Y6V.js.map → chunk-6DK6Z4UN.js.map} +0 -0
  945. /package/dist/{chunk-PW4IMTYR.js.map → chunk-6DVCC7QS.js.map} +0 -0
  946. /package/dist/{chunk-7WIDB4PL.js.map → chunk-6JHU2UBS.js.map} +0 -0
  947. /package/dist/{chunk-CQH4FWYA.js.map → chunk-6PZ7OBYU.js.map} +0 -0
  948. /package/dist/{chunk-VFQ3H6CO.js.map → chunk-6WGRDRMA.js.map} +0 -0
  949. /package/dist/{chunk-MTTGSQA5.js.map → chunk-77WAKEAH.js.map} +0 -0
  950. /package/dist/{chunk-O5YWDLYF.js.map → chunk-7TDO3CUM.js.map} +0 -0
  951. /package/dist/{chunk-2AHTY7OT.js.map → chunk-7TIX2UAR.js.map} +0 -0
  952. /package/dist/{chunk-FOGNA3BU.js.map → chunk-7V5REBCP.js.map} +0 -0
  953. /package/dist/{chunk-2JENKGCE.js.map → chunk-7VMZGLYI.js.map} +0 -0
  954. /package/dist/{chunk-E7UIVD7F.js.map → chunk-7W37NS3I.js.map} +0 -0
  955. /package/dist/{chunk-ZDLYSXKN.js.map → chunk-7X6SDK2C.js.map} +0 -0
  956. /package/dist/{chunk-ZAMTKG5U.js.map → chunk-7ZNUHRP5.js.map} +0 -0
  957. /package/dist/{chunk-DMMJIFKA.js.map → chunk-A36PZALD.js.map} +0 -0
  958. /package/dist/{chunk-WV2KPJUW.js.map → chunk-AUI6VA63.js.map} +0 -0
  959. /package/dist/{chunk-Q2EXYSMO.js.map → chunk-AW2MQB37.js.map} +0 -0
  960. /package/dist/{chunk-6WLX3NR3.js.map → chunk-AWKES45Y.js.map} +0 -0
  961. /package/dist/{chunk-OD3DCCCB.js.map → chunk-AXHZYXUV.js.map} +0 -0
  962. /package/dist/{chunk-QDTKECT4.js.map → chunk-BHNSJVBC.js.map} +0 -0
  963. /package/dist/{chunk-FTCHM755.js.map → chunk-BJEJFISW.js.map} +0 -0
  964. /package/dist/{chunk-B2I5ZW35.js.map → chunk-BJFH6JI5.js.map} +0 -0
  965. /package/dist/{chunk-RIPS7GFR.js.map → chunk-BMICEQZQ.js.map} +0 -0
  966. /package/dist/{chunk-BF4SADKX.js.map → chunk-BTLBYBLU.js.map} +0 -0
  967. /package/dist/{chunk-U5EFEMYU.js.map → chunk-BXBDYNRP.js.map} +0 -0
  968. /package/dist/{chunk-BTSYDIVJ.js.map → chunk-C372BFOV.js.map} +0 -0
  969. /package/dist/{chunk-MLJADQFI.js.map → chunk-CMKGILJK.js.map} +0 -0
  970. /package/dist/{chunk-DKT3N37I.js.map → chunk-CRAOSVHC.js.map} +0 -0
  971. /package/dist/{chunk-WNDAKLHG.js.map → chunk-CRU35QQH.js.map} +0 -0
  972. /package/dist/{chunk-2XNG2KNT.js.map → chunk-CUIWCGMA.js.map} +0 -0
  973. /package/dist/{chunk-QWL4L366.js.map → chunk-D5TWNFFE.js.map} +0 -0
  974. /package/dist/{chunk-SWIHWCTW.js.map → chunk-DF5EAHDN.js.map} +0 -0
  975. /package/dist/{chunk-HUAGBS4O.js.map → chunk-DJAXC5OK.js.map} +0 -0
  976. /package/dist/{chunk-FXSHP4JZ.js.map → chunk-DXBYWSL5.js.map} +0 -0
  977. /package/dist/{chunk-5MUJDC6C.js.map → chunk-DXR5PDFP.js.map} +0 -0
  978. /package/dist/{chunk-NXWBBZJV.js.map → chunk-DZWARC4M.js.map} +0 -0
  979. /package/dist/{chunk-GXXZ3WAK.js.map → chunk-DZXEDSQI.js.map} +0 -0
  980. /package/dist/{chunk-Q52CXW6C.js.map → chunk-E7XERZWC.js.map} +0 -0
  981. /package/dist/{chunk-4NBTZRKT.js.map → chunk-ECJBYNLJ.js.map} +0 -0
  982. /package/dist/{chunk-QE3ZFGI3.js.map → chunk-EDI6SJ2N.js.map} +0 -0
  983. /package/dist/{chunk-E6NRSRBE.js.map → chunk-EWSOC6WF.js.map} +0 -0
  984. /package/dist/{chunk-TA5CFTO4.js.map → chunk-F2OPHAUN.js.map} +0 -0
  985. /package/dist/{chunk-5DTST3TP.js.map → chunk-F4ISQGGM.js.map} +0 -0
  986. /package/dist/{chunk-MBIBB6GI.js.map → chunk-FO4LYKJL.js.map} +0 -0
  987. /package/dist/{chunk-EUBGLFFR.js.map → chunk-FPXASDG5.js.map} +0 -0
  988. /package/dist/{chunk-C3HUF3M2.js.map → chunk-FVXBNBHO.js.map} +0 -0
  989. /package/dist/{chunk-W5MPXR3A.js.map → chunk-FZC5N55X.js.map} +0 -0
  990. /package/dist/{chunk-MA6O7CM6.js.map → chunk-GAVYGBFI.js.map} +0 -0
  991. /package/dist/{chunk-REX6JIC7.js.map → chunk-GKVJIDHF.js.map} +0 -0
  992. /package/dist/{chunk-EW6RNWSH.js.map → chunk-GVN5SZLX.js.map} +0 -0
  993. /package/dist/{chunk-KVFEZDBO.js.map → chunk-H3T7IWNA.js.map} +0 -0
  994. /package/dist/{chunk-I6VBHT7S.js.map → chunk-HAX4LCR5.js.map} +0 -0
  995. /package/dist/{chunk-OBMCZO7E.js.map → chunk-HC4JFZVU.js.map} +0 -0
  996. /package/dist/{chunk-UJUQ2QOX.js.map → chunk-HEFPPMBQ.js.map} +0 -0
  997. /package/dist/{chunk-DOFJZ2JU.js.map → chunk-HNLR7Q4Z.js.map} +0 -0
  998. /package/dist/{chunk-GE33BGB7.js.map → chunk-HSOXMJOT.js.map} +0 -0
  999. /package/dist/{chunk-AB5MBIXY.js.map → chunk-I4MRDSUF.js.map} +0 -0
  1000. /package/dist/{chunk-AFBJTUFK.js.map → chunk-I4QEJ62Y.js.map} +0 -0
  1001. /package/dist/{chunk-6ED2YWBT.js.map → chunk-I5B5L6Q4.js.map} +0 -0
  1002. /package/dist/{chunk-C5QCAOES.js.map → chunk-I5QZJODL.js.map} +0 -0
  1003. /package/dist/{chunk-76ERNKIZ.js.map → chunk-I7ITSXSJ.js.map} +0 -0
  1004. /package/dist/{chunk-OMH7R6I3.js.map → chunk-I7XIZRFD.js.map} +0 -0
  1005. /package/dist/{chunk-E337C2VK.js.map → chunk-IDANQPRH.js.map} +0 -0
  1006. /package/dist/{chunk-3FD76LXM.js.map → chunk-IFB3WJ36.js.map} +0 -0
  1007. /package/dist/{chunk-ZIT5KD4Q.js.map → chunk-IHTAKKTK.js.map} +0 -0
  1008. /package/dist/{chunk-QHNVNR7B.js.map → chunk-ILDXWY37.js.map} +0 -0
  1009. /package/dist/{chunk-GQ67HSJY.js.map → chunk-IMDQUHBJ.js.map} +0 -0
  1010. /package/dist/{chunk-DSXVY5WZ.js.map → chunk-IMZCQBOT.js.map} +0 -0
  1011. /package/dist/{chunk-WEZ5PXZP.js.map → chunk-IXPTECSC.js.map} +0 -0
  1012. /package/dist/{chunk-NY2QWROL.js.map → chunk-J255A3N5.js.map} +0 -0
  1013. /package/dist/{chunk-O2UWH5RG.js.map → chunk-J5F5HPPW.js.map} +0 -0
  1014. /package/dist/{chunk-VIEFJ2DM.js.map → chunk-JEA3QDX7.js.map} +0 -0
  1015. /package/dist/{chunk-TF4ZVJLI.js.map → chunk-JEUPAVYY.js.map} +0 -0
  1016. /package/dist/{chunk-ZG447FSS.js.map → chunk-JKHKLL5W.js.map} +0 -0
  1017. /package/dist/{chunk-FQFKHNC7.js.map → chunk-JQL7ZH6C.js.map} +0 -0
  1018. /package/dist/{chunk-776QZ573.js.map → chunk-JWB44UGJ.js.map} +0 -0
  1019. /package/dist/{chunk-ICNNNOXE.js.map → chunk-JZ4NLCAP.js.map} +0 -0
  1020. /package/dist/{chunk-TNKWOUWP.js.map → chunk-K2A5PXQ5.js.map} +0 -0
  1021. /package/dist/{chunk-SRFARKXC.js.map → chunk-K56XV3C3.js.map} +0 -0
  1022. /package/dist/{chunk-QAJ53XBW.js.map → chunk-K6GAXXVA.js.map} +0 -0
  1023. /package/dist/{chunk-MF3ZFB4H.js.map → chunk-KCBMFSMS.js.map} +0 -0
  1024. /package/dist/{chunk-VLXM36VS.js.map → chunk-KF2FV3ZJ.js.map} +0 -0
  1025. /package/dist/{chunk-YSVD5HI4.js.map → chunk-KJD65EJP.js.map} +0 -0
  1026. /package/dist/{chunk-K42OUZQ3.js.map → chunk-KLEUWIMZ.js.map} +0 -0
  1027. /package/dist/{chunk-PENGLDR5.js.map → chunk-KODELWYT.js.map} +0 -0
  1028. /package/dist/{chunk-TZAO65I4.js.map → chunk-KRDR5RJD.js.map} +0 -0
  1029. /package/dist/{chunk-KHJ5PXFM.js.map → chunk-KUDGXAF7.js.map} +0 -0
  1030. /package/dist/{chunk-6H4SJBPE.js.map → chunk-KYS77RPN.js.map} +0 -0
  1031. /package/dist/{chunk-OWAYJ2OV.js.map → chunk-L7YTNTIK.js.map} +0 -0
  1032. /package/dist/{chunk-YYLMZLI6.js.map → chunk-LHPNABDH.js.map} +0 -0
  1033. /package/dist/{chunk-LM2W5YAT.js.map → chunk-MFROMEKA.js.map} +0 -0
  1034. /package/dist/{chunk-AXBSYWKX.js.map → chunk-MIHN76LX.js.map} +0 -0
  1035. /package/dist/{chunk-4LPOWQJY.js.map → chunk-MIYFS2XN.js.map} +0 -0
  1036. /package/dist/{chunk-KKI55ZMW.js.map → chunk-MJUCFQMS.js.map} +0 -0
  1037. /package/dist/{chunk-ZUDOVDKR.js.map → chunk-MM4FNWI4.js.map} +0 -0
  1038. /package/dist/{chunk-M4SDVTKJ.js.map → chunk-MNZG4OHU.js.map} +0 -0
  1039. /package/dist/{chunk-EILSAQVJ.js.map → chunk-N6AACDUW.js.map} +0 -0
  1040. /package/dist/{chunk-BM3NEZ6X.js.map → chunk-NC55IFN3.js.map} +0 -0
  1041. /package/dist/{chunk-MJJGJMYJ.js.map → chunk-NC7PVOEK.js.map} +0 -0
  1042. /package/dist/{chunk-LA5T52RM.js.map → chunk-NCYMNCJO.js.map} +0 -0
  1043. /package/dist/{chunk-HLOEPV5C.js.map → chunk-ND2BXV3P.js.map} +0 -0
  1044. /package/dist/{chunk-UJDOWCQ3.js.map → chunk-NDBTFUO6.js.map} +0 -0
  1045. /package/dist/{chunk-K5TOVX5A.js.map → chunk-NDQJZ7HF.js.map} +0 -0
  1046. /package/dist/{chunk-35737UT4.js.map → chunk-NGJJJPZZ.js.map} +0 -0
  1047. /package/dist/{chunk-42CMQ5VR.js.map → chunk-NJTSNNE7.js.map} +0 -0
  1048. /package/dist/{chunk-FBTJKSTM.js.map → chunk-NRTE7DNV.js.map} +0 -0
  1049. /package/dist/{chunk-YT3WGNG6.js.map → chunk-NULUNM7H.js.map} +0 -0
  1050. /package/dist/{chunk-7XOVTPDI.js.map → chunk-NUNZS36W.js.map} +0 -0
  1051. /package/dist/{chunk-FC2FTSK3.js.map → chunk-NW53H5RW.js.map} +0 -0
  1052. /package/dist/{chunk-TW3LKRJF.js.map → chunk-NXCMHIKI.js.map} +0 -0
  1053. /package/dist/{chunk-CGK6ALQU.js.map → chunk-O3LKCBP5.js.map} +0 -0
  1054. /package/dist/{chunk-QIK2Q6N5.js.map → chunk-O6N4ABCA.js.map} +0 -0
  1055. /package/dist/{chunk-73NXYYWE.js.map → chunk-O732GAFC.js.map} +0 -0
  1056. /package/dist/{chunk-R3J2PTVQ.js.map → chunk-OF4TIKYC.js.map} +0 -0
  1057. /package/dist/{chunk-BUBNGKWG.js.map → chunk-OMPVOMPP.js.map} +0 -0
  1058. /package/dist/{chunk-4OXI6HCV.js.map → chunk-OPJJSKUK.js.map} +0 -0
  1059. /package/dist/{chunk-4Y6BK7IU.js.map → chunk-OPWCMA4D.js.map} +0 -0
  1060. /package/dist/{chunk-ADNMXBCX.js.map → chunk-ORJPS5VN.js.map} +0 -0
  1061. /package/dist/{chunk-SKMNW4SW.js.map → chunk-OSY5K7L7.js.map} +0 -0
  1062. /package/dist/{chunk-L4I665WK.js.map → chunk-OV6QJRT4.js.map} +0 -0
  1063. /package/dist/{chunk-7O5CGGIQ.js.map → chunk-OVKYVZMW.js.map} +0 -0
  1064. /package/dist/{chunk-7BYWOFVH.js.map → chunk-OZCBM3UC.js.map} +0 -0
  1065. /package/dist/{chunk-ALVRWCXE.js.map → chunk-P3A2EINJ.js.map} +0 -0
  1066. /package/dist/{chunk-BZO5ZMUP.js.map → chunk-PTAG4PDC.js.map} +0 -0
  1067. /package/dist/{chunk-QHHSUR2Y.js.map → chunk-PTF5B7TJ.js.map} +0 -0
  1068. /package/dist/{chunk-O2IOPP3R.js.map → chunk-Q3DPEYX4.js.map} +0 -0
  1069. /package/dist/{chunk-G7FU6PUA.js.map → chunk-QB2KMIDP.js.map} +0 -0
  1070. /package/dist/{chunk-64PO2WXU.js.map → chunk-QCSJ4CWE.js.map} +0 -0
  1071. /package/dist/{chunk-YYICQDK4.js.map → chunk-QIOQ2NPQ.js.map} +0 -0
  1072. /package/dist/{chunk-NB2HMRT2.js.map → chunk-QK5EFEUT.js.map} +0 -0
  1073. /package/dist/{chunk-366XZ4PM.js.map → chunk-QPQBLYQJ.js.map} +0 -0
  1074. /package/dist/{chunk-Q6XQ2R37.js.map → chunk-QPSGCC5D.js.map} +0 -0
  1075. /package/dist/{chunk-JJZPLGIP.js.map → chunk-QZAAUQRN.js.map} +0 -0
  1076. /package/dist/{chunk-VGUN6VB2.js.map → chunk-RGBI63KJ.js.map} +0 -0
  1077. /package/dist/{chunk-LRN6GYAZ.js.map → chunk-RLBKLAEY.js.map} +0 -0
  1078. /package/dist/{chunk-F7U3QPZ3.js.map → chunk-RMFKVOM7.js.map} +0 -0
  1079. /package/dist/{chunk-Q4EFRI6X.js.map → chunk-ROKQU7WG.js.map} +0 -0
  1080. /package/dist/{chunk-7QOHRZ67.js.map → chunk-RPVREAU7.js.map} +0 -0
  1081. /package/dist/{chunk-VGWWEVSD.js.map → chunk-RQKLF42C.js.map} +0 -0
  1082. /package/dist/{chunk-2VTTKH23.js.map → chunk-SEO7TICN.js.map} +0 -0
  1083. /package/dist/{chunk-3QNRBEYH.js.map → chunk-SHHJCL7X.js.map} +0 -0
  1084. /package/dist/{chunk-E6SQKHAU.js.map → chunk-SIRLACNZ.js.map} +0 -0
  1085. /package/dist/{chunk-H2TCRX3H.js.map → chunk-SKPHMYAA.js.map} +0 -0
  1086. /package/dist/{chunk-YDCUBUWH.js.map → chunk-SODC7T6L.js.map} +0 -0
  1087. /package/dist/{chunk-TNYFHKVV.js.map → chunk-SQJIKMN3.js.map} +0 -0
  1088. /package/dist/{chunk-DO74DQC7.js.map → chunk-SVINDKVW.js.map} +0 -0
  1089. /package/dist/{chunk-CPYGO76Q.js.map → chunk-SYCDHPZF.js.map} +0 -0
  1090. /package/dist/{chunk-UQ3IM6FY.js.map → chunk-T2QX3FDP.js.map} +0 -0
  1091. /package/dist/{chunk-NWGNFN3N.js.map → chunk-T3OWFVMS.js.map} +0 -0
  1092. /package/dist/{chunk-N3OARGH2.js.map → chunk-T6XI5FLY.js.map} +0 -0
  1093. /package/dist/{chunk-MQG7RV3B.js.map → chunk-T7OXJZCX.js.map} +0 -0
  1094. /package/dist/{chunk-2T7DX6KR.js.map → chunk-TAT5USZN.js.map} +0 -0
  1095. /package/dist/{chunk-ICX64J4U.js.map → chunk-TPQTRNER.js.map} +0 -0
  1096. /package/dist/{chunk-D2TOWEYH.js.map → chunk-TUIN4MB7.js.map} +0 -0
  1097. /package/dist/{chunk-LQDUHU3Y.js.map → chunk-TX3VECZU.js.map} +0 -0
  1098. /package/dist/{chunk-TG7DADJR.js.map → chunk-TXLIEOJX.js.map} +0 -0
  1099. /package/dist/{chunk-2ZVRJRXC.js.map → chunk-U3DN4HEY.js.map} +0 -0
  1100. /package/dist/{chunk-PSMAWRPL.js.map → chunk-U7XM7CB4.js.map} +0 -0
  1101. /package/dist/{chunk-4TQL3WP2.js.map → chunk-UJK53QFL.js.map} +0 -0
  1102. /package/dist/{chunk-RBRX5ZS3.js.map → chunk-UMTXA2TH.js.map} +0 -0
  1103. /package/dist/{chunk-36MIDGAH.js.map → chunk-UPDSXFK5.js.map} +0 -0
  1104. /package/dist/{chunk-OYXBFSGK.js.map → chunk-UTIAXH52.js.map} +0 -0
  1105. /package/dist/{chunk-5WUN7XPD.js.map → chunk-UVN5TMHU.js.map} +0 -0
  1106. /package/dist/{chunk-UYE47LO6.js.map → chunk-VGYXW3VG.js.map} +0 -0
  1107. /package/dist/{chunk-IKUNOX7F.js.map → chunk-VS7AHPCZ.js.map} +0 -0
  1108. /package/dist/{chunk-MYUFMVCH.js.map → chunk-VTTAJOQ7.js.map} +0 -0
  1109. /package/dist/{chunk-K63HGHZX.js.map → chunk-VWPOLUAO.js.map} +0 -0
  1110. /package/dist/{chunk-GA4YEAMX.js.map → chunk-X3MWB2QU.js.map} +0 -0
  1111. /package/dist/{chunk-I36GSRUJ.js.map → chunk-X6KAJI3V.js.map} +0 -0
  1112. /package/dist/{chunk-IKMUFDVS.js.map → chunk-XBLRHV5R.js.map} +0 -0
  1113. /package/dist/{chunk-XOSQP3YA.js.map → chunk-XDFP2LMW.js.map} +0 -0
  1114. /package/dist/{chunk-MW7Y3T55.js.map → chunk-XEQMZB3C.js.map} +0 -0
  1115. /package/dist/{chunk-B3LMRTRF.js.map → chunk-XEYLT5VA.js.map} +0 -0
  1116. /package/dist/{chunk-UI4HI5QK.js.map → chunk-XHIQ5I6N.js.map} +0 -0
  1117. /package/dist/{chunk-U6M4LS3M.js.map → chunk-XLH7QY2R.js.map} +0 -0
  1118. /package/dist/{chunk-OSA5EQG5.js.map → chunk-XWFAMUZQ.js.map} +0 -0
  1119. /package/dist/{chunk-6MT3HHUB.js.map → chunk-Y4OBB2VN.js.map} +0 -0
  1120. /package/dist/{chunk-CZP5QXNB.js.map → chunk-YCVD6CI3.js.map} +0 -0
  1121. /package/dist/{chunk-APW4T4SW.js.map → chunk-YENLNISG.js.map} +0 -0
  1122. /package/dist/{chunk-JWPA6ZPZ.js.map → chunk-YIRVLKAX.js.map} +0 -0
  1123. /package/dist/{chunk-LQ62ECE6.js.map → chunk-YL73CVNK.js.map} +0 -0
  1124. /package/dist/{chunk-ILKDYBON.js.map → chunk-YLS6QE5G.js.map} +0 -0
  1125. /package/dist/{chunk-YBKVGLQR.js.map → chunk-YPWU5KPE.js.map} +0 -0
  1126. /package/dist/{chunk-IKJLSBUI.js.map → chunk-YQXTDZSU.js.map} +0 -0
  1127. /package/dist/{chunk-TPMZBOFH.js.map → chunk-YSJEAAOL.js.map} +0 -0
  1128. /package/dist/{chunk-W3BFRR2G.js.map → chunk-YWIFM7D7.js.map} +0 -0
  1129. /package/dist/{chunk-WTJ4PLMU.js.map → chunk-YWVI6ZMK.js.map} +0 -0
  1130. /package/dist/{chunk-5KWMYPJV.js.map → chunk-Z4FMAFNH.js.map} +0 -0
  1131. /package/dist/{chunk-W5OWKVZG.js.map → chunk-Z654FWNU.js.map} +0 -0
  1132. /package/dist/{chunk-5FH5LQVS.js.map → chunk-Z7Y523PS.js.map} +0 -0
  1133. /package/dist/{chunk-HLL4PBO7.js.map → chunk-ZD67RM6G.js.map} +0 -0
  1134. /package/dist/{chunk-IVYJX3OY.js.map → chunk-ZEG4VPBL.js.map} +0 -0
  1135. /package/dist/{chunk-K6R5T44I.js.map → chunk-ZLYCOBHW.js.map} +0 -0
  1136. /package/dist/{chunk-VADHIT26.js.map → chunk-ZNJ5MTXV.js.map} +0 -0
  1137. /package/dist/{chunk-2KYQC4T5.js.map → chunk-ZSGY3H53.js.map} +0 -0
  1138. /package/dist/{chunk-BKP43KK4.js.map → chunk-ZTPXACWB.js.map} +0 -0
  1139. /package/dist/{chunk-JCY4CMDH.js.map → chunk-ZUA3JMI6.js.map} +0 -0
  1140. /package/dist/{chunk-IGVVXLKJ.js.map → chunk-ZYAZUPPV.js.map} +0 -0
  1141. /package/dist/{computer-viewer-LPZ763KF.js.map → computer-viewer-TDDO25AV.js.map} +0 -0
  1142. /package/dist/{embedded-new-voice-YVMKSLKJ.js.map → embedded-new-voice-2G3VLPVQ.js.map} +0 -0
  1143. /package/dist/{embedded-voice-BJPQFXSU.js.map → embedded-voice-T5IWOWGD.js.map} +0 -0
  1144. /package/dist/{fleet-decision-row-AA4H5CDT.js.map → fleet-decision-row-WM64KXP3.js.map} +0 -0
  1145. /package/dist/{model-policy-picker-menu-HSMWVO4P.js.map → model-policy-picker-menu-SMC6J6QN.js.map} +0 -0
  1146. /package/dist/{payment-page-card-3LTSFJGN.js.map → payment-page-card-G4U63KUV.js.map} +0 -0
  1147. /package/dist/{platform-activity-row-5VYV6TX4.js.map → platform-activity-row-BUZGZAKZ.js.map} +0 -0
  1148. /package/dist/{queue-surface-implementation-NXHZUKD2.js.map → queue-surface-implementation-4KUZ4PJV.js.map} +0 -0
  1149. /package/dist/{sandbox-files-YCMLQUFU.js.map → sandbox-files-ESDMOFSD.js.map} +0 -0
  1150. /package/dist/{session-connect-cards-KSQLMRM5.js.map → session-connect-cards-Q53KMMYY.js.map} +0 -0
  1151. /package/dist/{session-realtime-ZR6JLG3Y.js.map → session-realtime-CF3I35WJ.js.map} +0 -0
  1152. /package/dist/{timeline-annotation-markers-YAHDPWVG.js.map → timeline-annotation-markers-CJK4RYZ4.js.map} +0 -0
  1153. /package/dist/{timeline-annotation-selection-KHXNCEJP.js.map → timeline-annotation-selection-67GF5H26.js.map} +0 -0
  1154. /package/dist/{timeline-annotations-dialog-Y4XD3N7B.js.map → timeline-annotations-dialog-ONJPQDJQ.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/app/lib/actions/actions-provider.tsx","../src/app/lib/actions/site-directory.ts","../src/app/lib/actions/meeting-directory.ts","../src/app/lib/actions/chat-switcher.ts","../src/app/lib/actions/chat-operations.ts","../src/app/lib/actions/registry.ts"],"sourcesContent":["/**\n * Runs the action registry for one workspace: builds what actions need, owns\n * the ⌘K menu and the shortcut sheet, listens for chords, keeps the recent\n * chats list, and hands the desktop shell its menu bar.\n */\nimport {\n createContext,\n lazy,\n Suspense,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport type { SessionListRow } from \"../../../session-list-model\";\nimport { OpenGeniRecordingsClient } from \"@opengeni/sdk/recordings\";\nimport { useMeetingRecorderControls } from \"../../../meetings/recorder-context\";\nimport { useMeetingOnScreen } from \"../../../meetings/meeting-on-screen\";\nimport { useAppContext } from \"../../app-context\";\nimport { useRail } from \"../../components/rail/rail-context\";\nimport { requestConversationFind } from \"../conversation-find-event\";\nimport { desktopBridge, desktopCapability } from \"../desktop\";\nimport { useNavigate, usePage, useRouterState } from \"../navigation\";\nimport { requestSessionSearch } from \"../session-search-route\";\nimport { requestSessionComposerFocus } from \"../session-focus\";\nimport { useSessionUiFeature } from \"../session-ui-features\";\nimport { useUiEventTarget } from \"../ui-events\";\nimport { t } from \"../console-text\";\nimport { isPersonalWorkspace, navigableWorkspaces } from \"../managed-self-context\";\nimport { workspacesByOrganization } from \"../org\";\nimport { hasWorkspacePermission } from \"../permissions\";\nimport { readChatDirectory, recordChatVisit, rememberChats } from \"./chat-directory\";\nimport { sitePath } from \"./site-directory\";\nimport { meetingPath } from \"./meeting-directory\";\nimport {\n extendChatSwitcher,\n isSwitcherKey,\n openChatSwitcher,\n stepChatSwitcher,\n SWITCHER_SHOW_DELAY_MS,\n type ChatSwitcherState,\n} from \"./chat-switcher\";\nimport {\n applicableChords,\n chordAccelerator,\n chordAriaKeys,\n chordLabel,\n currentPlatform,\n isTextEntry,\n matchesChord,\n type ActionSurface,\n type Chord,\n type ChordPlatform,\n} from \"./chords\";\nimport { copyLink } from \"../copy-link\";\nimport { useChatOperations } from \"./chat-operations\";\nimport {\n FORK_CURRENT_CHAT_EVENT,\n OPEN_COMMAND_MENU_EVENT,\n RENAME_CURRENT_CHAT_EVENT,\n} from \"./events\";\nimport {\n appActions,\n actionTitle,\n findAction,\n type ActionEnv,\n type AppAction,\n type WorkspaceChoice,\n} from \"./registry\";\n\nconst CommandMenu = lazy(() => import(\"../../components/command-menu/command-menu\"));\nconst ShortcutSheet = lazy(() => import(\"../../components/command-menu/shortcut-sheet\"));\nconst loadChatSwitcher = () => import(\"../../components/command-menu/chat-switcher\");\nconst ChatSwitcher = lazy(loadChatSwitcher);\n\ntype ActionsContextValue = {\n env: ActionEnv;\n /** Run an action for a chat (row menus) or the current chat. */\n run(action: AppAction, chat?: SessionListRow | null, chord?: Chord): void;\n /** The chords to show for an action on this surface and platform. */\n chordsFor(action: AppAction): Chord[];\n};\n\nconst ActionsContext = createContext<ActionsContextValue | null>(null);\n\nexport function useAppActions(): ActionsContextValue | null {\n return useContext(ActionsContext);\n}\n\n/**\n * An action's key for tooltips, labels and `aria-keyshortcuts`, in the\n * person's notation; nothing when this surface has no page-wide keys.\n */\nexport function useActionShortcut(\n actionId: string,\n): { label: string; ariaKeys: string; chord: Chord } | null {\n // Keys depend only on the surface and platform, so rows need not re-render\n // when the actions' environment changes.\n const enabled = useSessionUiFeature(\"keyboardShortcuts\");\n const action = findAction(actionId);\n if (!enabled || !action) return null;\n const platform = currentPlatform();\n const chords = applicableChords(action.chords, surface, platform);\n const chord = chords[0];\n if (!chord) return null;\n return {\n label: chordLabel(chord, platform),\n ariaKeys: chords.map((candidate) => chordAriaKeys(candidate, platform)).join(\" \"),\n chord,\n };\n}\n\nconst surface: ActionSurface = desktopBridge ? \"desktop\" : \"web\";\n\nfunction isRichTextEditor(target: EventTarget | null): boolean {\n return target instanceof HTMLElement && target.isContentEditable;\n}\n\nfunction insideOtherOverlay(target: EventTarget | null): boolean {\n if (!(target instanceof Element)) return false;\n const overlay = target.closest(\n '[role=\"dialog\"],[role=\"alertdialog\"],[role=\"menu\"],[role=\"listbox\"]',\n );\n return Boolean(overlay && !overlay.closest(\"[data-og-command-menu],[data-og-shortcut-sheet]\"));\n}\n\n/** The chord the desktop menu bar shows and owns for an action. */\nfunction menuOwnedChord(action: AppAction, platform: ChordPlatform): Chord | undefined {\n // ⌥ chords stay with the page: a menu would take ⌥↑ from the composer's caret.\n // Formatting keys stay with the page too, so ⌘B can still bold rich text.\n return applicableChords(action.chords, \"desktop\", platform).find(\n (chord) => (!chord.alt || chord.mod) && !chord.formatting,\n );\n}\n\nfunction menuChord(action: AppAction, platform: ChordPlatform): string | null {\n const chord = menuOwnedChord(action, platform);\n return chord ? chordAccelerator(chord) : null;\n}\n\nfunction insideCommandMenu(target: EventTarget | null): boolean {\n return target instanceof Element && Boolean(target.closest(\"[data-og-command-menu]\"));\n}\n\nfunction textEntryIsEmpty(target: EventTarget | null): boolean {\n if (target instanceof HTMLTextAreaElement || target instanceof HTMLInputElement) {\n return target.value.length === 0;\n }\n if (target instanceof HTMLElement && target.isContentEditable) {\n return (target.textContent ?? \"\").length === 0;\n }\n return true;\n}\n\nexport function ActionsProvider(props: { children: ReactNode }) {\n const app = useAppContext();\n const rail = useRail();\n const navigate = useNavigate();\n const page = usePage();\n const ops = useChatOperations();\n const uiEvents = useUiEventTarget(\"document\");\n const windowEvents = useUiEventTarget(\"window\");\n const chatList = useSessionUiFeature(\"chatList\");\n const workspacePanel = useSessionUiFeature(\"dock\");\n const { inspectorOpen, setInspectorOpen } = app;\n const keyboardShortcuts = useSessionUiFeature(\"keyboardShortcuts\");\n const recorder = useMeetingRecorderControls();\n const platform = useMemo(() => currentPlatform(), []);\n const workspaceId = rail.workspaceId;\n const subjectId = app.accessContext.subjectId;\n const pathname = useRouterState({ select: (state) => state.location.pathname });\n const routeChatId = /\\/sessions\\/([^/]+)/.exec(pathname)?.[1] ?? null;\n const routeSiteId = /\\/sites\\/([^/]+)/.exec(pathname)?.[1] ?? null;\n const routeMeetingId = /\\/meetings\\/([^/]+)/.exec(pathname)?.[1] ?? null;\n const meetingOnScreen = useMeetingOnScreen(uiEvents);\n const currentChat =\n app.session && app.session.id === routeChatId && app.session.workspaceId === workspaceId\n ? app.session\n : null;\n\n // Every workspace open to the person, in the workspace picker's order (so\n // not a Personal one the organization turned off, unless the person is in it).\n const workspaces = useMemo<WorkspaceChoice[]>(\n () =>\n workspacesByOrganization(\n t,\n app.accessContext,\n navigableWorkspaces(app.workspaces, app.managedSelfContext, workspaceId),\n ).flatMap((group) =>\n group.workspaces.map((workspace) => ({\n id: workspace.id,\n name: workspace.name,\n organization: group.org.label,\n personal: isPersonalWorkspace(workspace, app.managedSelfContext),\n })),\n ),\n [app.accessContext, app.workspaces, app.managedSelfContext, workspaceId],\n );\n // The same rule as the fork button under a message.\n const canForkCurrentChat =\n currentChat !== null &&\n app.clientConfig.auth.mode === \"managedSession\" &&\n app.authSession !== null &&\n Boolean(app.session?.tenancy) &&\n hasWorkspacePermission(app.accessContext, workspaceId, \"sessions:create\");\n\n // Meetings record where a host mounts the recorder, in a browser that can;\n // the same rule as the Meetings page's Start recording button.\n const meetings = useMemo<ActionEnv[\"meetings\"]>(() => {\n if (!recorder || recorder.supported === false) return null;\n const showMeetings = () => {\n rail.setDrawerOpen(false);\n void navigate({ to: \"/workspaces/$workspaceId/meetings\", params: { workspaceId } });\n };\n return {\n state: recorder.state,\n start: () => {\n recorder.requestStart();\n showMeetings();\n },\n show: showMeetings,\n stop: async () => {\n const stopped = await recorder.stop();\n // Hosts that give the recorder no way to open a meeting get the console's route.\n if (stopped && !stopped.opened) {\n void navigate({\n to: \"/workspaces/$workspaceId/meetings/$recordingId\",\n params: { workspaceId: stopped.workspaceId, recordingId: stopped.recordingId },\n });\n }\n },\n };\n }, [recorder, rail, navigate, workspaceId]);\n\n // The Meetings pages exist wherever the host mounts the recorder, including\n // in a browser that can't record (the page says so and lists meetings).\n const recordingsClient = useMemo(\n () =>\n typeof app.client?.requestJson === \"function\"\n ? new OpenGeniRecordingsClient(app.client)\n : null,\n [app.client],\n );\n const meetingPages = useMemo<ActionEnv[\"meetingPages\"]>(() => {\n if (!recorder || !recordingsClient) return null;\n const link = (recordingId: string) =>\n `${page.origin()}${meetingPath(workspaceId, recordingId)}`;\n const onScreen =\n routeMeetingId && meetingOnScreen?.recordingId === routeMeetingId ? meetingOnScreen : null;\n return {\n openList: () => {\n rail.setDrawerOpen(false);\n void navigate({ to: \"/workspaces/$workspaceId/meetings\", params: { workspaceId } });\n },\n open: (recordingId) => {\n rail.setDrawerOpen(false);\n void navigate({\n to: \"/workspaces/$workspaceId/meetings/$recordingId\",\n params: { workspaceId, recordingId },\n });\n },\n link,\n copyLink: (recordingId) => copyLink(link(recordingId)),\n list: async (options) => {\n const { signal, ...rest } = options;\n const answer = await recordingsClient.listRecordings(workspaceId, {\n ...rest,\n ...(signal ? { signal } : {}),\n });\n return answer.recordings;\n },\n current: routeMeetingId ? { recordingId: routeMeetingId, ask: onScreen?.ask ?? null } : null,\n };\n }, [\n recorder,\n recordingsClient,\n page,\n workspaceId,\n routeMeetingId,\n meetingOnScreen,\n rail,\n navigate,\n ]);\n\n const [menu, setMenu] = useState<{\n open: boolean;\n mounted: boolean;\n /** Opened to pick a workspace rather than search everything. */\n workspaces: boolean;\n }>({ open: false, mounted: false, workspaces: false });\n const [sheet, setSheet] = useState({ open: false, mounted: false });\n\n const railRef = useRef(rail);\n railRef.current = rail;\n // What had focus when the menu or sheet opened. They open from a key or a\n // button anywhere (and load lazily the first time), so they return focus\n // there themselves instead of relying on what the dialog saw when it mounted.\n const returnFocus = useRef<HTMLElement | null>(null);\n const menuOpen = useRef(false);\n const sheetOpen = useRef(false);\n menuOpen.current = menu.open;\n sheetOpen.current = sheet.open;\n const rememberFocus = useCallback(() => {\n if (menuOpen.current || sheetOpen.current || typeof document === \"undefined\") return;\n // Opened from inside the phone drawer, which closes: come back to the\n // drawer's persistent opener, as search does.\n const drawerTrigger = railRef.current.drawerOpen\n ? railRef.current.drawerTriggerRef.current\n : null;\n if (drawerTrigger) {\n returnFocus.current = drawerTrigger;\n return;\n }\n const active = document.activeElement;\n returnFocus.current = active instanceof HTMLElement && active !== document.body ? active : null;\n }, []);\n const openCommandMenu = useCallback(\n (pickWorkspace = false) => {\n rememberFocus();\n setSheet((current) => (current.open ? { ...current, open: false } : current));\n // The phone drawer is a modal of its own; the menu replaces it and returns\n // focus itself, so the retiring drawer must not take focus back.\n railRef.current.handOffDrawer();\n setMenu((current) => ({\n open: pickWorkspace ? true : !current.open,\n mounted: true,\n workspaces: pickWorkspace,\n }));\n },\n [rememberFocus],\n );\n const openShortcutSheet = useCallback(() => {\n rememberFocus();\n setMenu((current) => (current.open ? { ...current, open: false } : current));\n setSheet((current) => ({ open: !current.open, mounted: true }));\n }, [rememberFocus]);\n\n // Recent chats follow what is actually opened, in any way.\n useEffect(() => {\n if (currentChat) recordChatVisit(subjectId, currentChat);\n // Title and pin changes refresh the record without reordering.\n }, [currentChat?.id, subjectId]); // eslint-disable-line react-hooks/exhaustive-deps\n // The open chat's newest read keeps its record current, so archiving it\n // (or renaming or pinning it) takes effect in Recent chats at once. The\n // sidebar no longer lists an archived chat, so it cannot report it.\n useEffect(() => {\n if (currentChat) rememberChats(subjectId, [currentChat]);\n }, [currentChat, subjectId]);\n\n // Control+Tab and ⌘K leave out chats in workspaces no longer open to the person.\n const reachable = useMemo(() => {\n const ids = new Set(workspaces.map((workspace) => workspace.id));\n return (id: string) => ids.has(id) || id === workspaceId;\n }, [workspaces, workspaceId]);\n\n // A chat opened from the keyboard (⌘K, Control+Tab, next/previous chat) is\n // opened to type in: hand its composer the focus once it is ready.\n const openChatForTyping = useCallback(\n (chatId: string, inWorkspaceId?: string) => {\n if (!rail.isMobile) {\n requestSessionComposerFocus(windowEvents, inWorkspaceId ?? workspaceId, chatId, \"keyboard\");\n }\n rail.openSession(chatId, inWorkspaceId);\n },\n [rail, windowEvents, workspaceId],\n );\n\n const env = useMemo<ActionEnv>(\n () => ({\n workspaceId,\n subjectId,\n surface,\n platform,\n currentChat,\n currentSiteId: routeSiteId,\n ops,\n chatList,\n workspacePanel,\n workspaces,\n canForkCurrentChat,\n meetings,\n meetingPages,\n newChat: () => rail.startNewSession(),\n openChat: (chatId, inWorkspaceId) => openChatForTyping(chatId, inWorkspaceId),\n openSite: (siteId) => {\n rail.setDrawerOpen(false);\n void navigate({\n to: \"/workspaces/$workspaceId/sites/$siteId\",\n params: { workspaceId, siteId },\n });\n },\n siteLink: (siteId) => `${page.origin()}${sitePath(workspaceId, siteId)}`,\n openWorkspace: (id) => rail.openWorkspace(id),\n openWorkspacePicker: () => openCommandMenu(true),\n openInbox: () => {\n rail.setDrawerOpen(false);\n void navigate({ to: \"/workspaces/$workspaceId/inbox\", params: { workspaceId } });\n },\n toggleSidebar: () =>\n rail.isMobile ? rail.setDrawerOpen(!rail.drawerOpen) : rail.toggleCollapsed(),\n toggleWorkspacePanel: () => {\n if (!inspectorOpen && rail.isMobile) rail.setDrawerOpen(false);\n setInspectorOpen((open) => !open);\n },\n findInChat: () => requestConversationFind(uiEvents),\n searchMessages: (query) => requestSessionSearch(windowEvents, workspaceId, undefined, query),\n renameCurrentChat: () => uiEvents.dispatchEvent(new Event(RENAME_CURRENT_CHAT_EVENT)),\n forkCurrentChat: () => uiEvents.dispatchEvent(new Event(FORK_CURRENT_CHAT_EVENT)),\n openCommandMenu: () => openCommandMenu(),\n openShortcutSheet,\n switchToRecentChat: () => {\n const directory = readChatDirectory(subjectId, workspaceId);\n const target = openChatSwitcher(directory, routeChatId, false, reachable);\n const id = target?.ids[target.index];\n if (id) openChatForTyping(id, directory.rows.get(id)?.workspaceId);\n },\n sidebarOrder: () => readChatDirectory(subjectId, workspaceId).sidebarOrder,\n pinnedOrder: () => readChatDirectory(subjectId, workspaceId).pinnedOrder,\n }),\n [\n workspaceId,\n subjectId,\n platform,\n currentChat,\n routeSiteId,\n routeChatId,\n ops,\n chatList,\n workspacePanel,\n workspaces,\n canForkCurrentChat,\n reachable,\n meetings,\n meetingPages,\n inspectorOpen,\n setInspectorOpen,\n rail,\n openChatForTyping,\n navigate,\n page,\n uiEvents,\n windowEvents,\n openCommandMenu,\n openShortcutSheet,\n ],\n );\n const envRef = useRef(env);\n envRef.current = env;\n\n const chordsFor = useCallback(\n (action: AppAction) => applicableChords(action.chords, surface, platform),\n [platform],\n );\n\n const run = useCallback((action: AppAction, chat?: SessionListRow | null, chord?: Chord) => {\n const current = envRef.current;\n // Any other action replaces the open menu or sheet.\n if (action.id !== \"commandMenu.open\") {\n setMenu((state) => (state.open ? { ...state, open: false } : state));\n }\n if (action.id !== \"help.shortcuts\") {\n setSheet((state) => (state.open ? { ...state, open: false } : state));\n }\n const target = chat === undefined ? current.currentChat : chat;\n if (!action.available(current, action.forChat ? target : null)) return;\n void Promise.resolve(action.run(current, action.forChat ? target : null, chord)).catch(() => {\n // Each operation reports its own failure.\n });\n }, []);\n\n // The desktop menu bar shows the registry's actions and owns their keys.\n const menuBridge = desktopCapability(\"menuActions\")?.menuActions ?? null;\n const menuSignature = useMemo(() => {\n if (!menuBridge) return \"\";\n return JSON.stringify(\n appActions()\n .filter((action) => action.desktopMenu)\n .map((action) => {\n const chat = action.forChat ? env.currentChat : null;\n return {\n id: action.id,\n label: actionTitle(action, env, chat),\n section: action.desktopMenu!,\n accelerator: menuChord(action, platform),\n enabled: action.available(env, chat),\n };\n }),\n );\n }, [menuBridge, env, platform]);\n useEffect(() => {\n if (!menuBridge || !menuSignature) return;\n menuBridge.set(JSON.parse(menuSignature));\n }, [menuBridge, menuSignature]);\n useEffect(() => {\n if (!menuBridge) return;\n return menuBridge.onAction((id) => {\n const action = findAction(id);\n if (action) run(action);\n });\n }, [menuBridge, run]);\n\n // Older desktop builds and other parts of the page open the menu by event.\n useEffect(() => {\n const open = () => openCommandMenu();\n windowEvents.addEventListener(OPEN_COMMAND_MENU_EVENT, open);\n return () => windowEvents.removeEventListener(OPEN_COMMAND_MENU_EVENT, open);\n }, [windowEvents, openCommandMenu]);\n\n useEffect(() => {\n if (!keyboardShortcuts) return;\n const menuOwnsKeys = Boolean(menuBridge);\n function onKeyDown(event: KeyboardEvent) {\n if (event.defaultPrevented) return;\n const current = envRef.current;\n for (const action of appActions()) {\n // ⌘F belongs to the conversation's own find bar.\n if (action.id === \"chat.find\") continue;\n // The chat switcher handles Control+Tab itself: it needs Control's release.\n if (action.id === \"go.recentChat\") continue;\n const chord = applicableChords(action.chords, surface, platform).find((candidate) =>\n matchesChord(event, candidate, platform),\n );\n if (!chord) continue;\n // The menu bar delivers the key it shows; the page keeps the others.\n if (menuOwnsKeys && action.desktopMenu && chord === menuOwnedChord(action, platform))\n return;\n const toggleMenu = action.id === \"commandMenu.open\";\n // Inside the ⌘K menu, chat chords act on the highlighted chat; the menu handles them.\n if (action.forChat && insideCommandMenu(event.target)) return;\n if (!toggleMenu && insideOtherOverlay(event.target)) return;\n // Rich-text editors keep their formatting keys.\n if (chord.formatting && isRichTextEditor(event.target)) return;\n // Chords without ⌘/Ctrl leave text editing alone unless the field is empty.\n if (!chord.mod && isTextEntry(event.target) && !textEntryIsEmpty(event.target)) return;\n if (!action.available(current, action.forChat ? current.currentChat : null)) return;\n event.preventDefault();\n event.stopPropagation();\n run(action, undefined, chord);\n return;\n }\n }\n document.addEventListener(\"keydown\", onKeyDown, true);\n return () => document.removeEventListener(\"keydown\", onKeyDown, true);\n }, [keyboardShortcuts, menuBridge, platform, run]);\n\n // Control+Tab: the recent-chats switcher (desktop app only; browsers keep the key).\n const [switcher, setSwitcherState] = useState<ChatSwitcherState | null>(null);\n const switcherRef = useRef<ChatSwitcherState | null>(null);\n const setSwitcher = useCallback((next: ChatSwitcherState | null) => {\n switcherRef.current = next;\n setSwitcherState(next);\n }, []);\n const routeChatIdRef = useRef(routeChatId);\n routeChatIdRef.current = routeChatId;\n const reachableRef = useRef(reachable);\n reachableRef.current = reachable;\n const switcherEnabled = keyboardShortcuts && chatList && surface === \"desktop\";\n const pickSwitcherChat = useCallback(\n (index?: number) => {\n const state = switcherRef.current;\n if (!state) return;\n const id = state.ids[index ?? state.index];\n setSwitcher(null);\n if (!id || id === routeChatIdRef.current) return;\n const current = envRef.current;\n current.openChat(\n id,\n readChatDirectory(current.subjectId, current.workspaceId).rows.get(id)?.workspaceId,\n );\n },\n [setSwitcher],\n );\n useEffect(() => {\n if (!switcherEnabled) {\n setSwitcher(null);\n return;\n }\n let showTimer: ReturnType<typeof setTimeout> | undefined;\n const cancel = () => {\n clearTimeout(showTimer);\n if (switcherRef.current) setSwitcher(null);\n };\n function onKeyDown(event: KeyboardEvent) {\n const state = switcherRef.current;\n if (isSwitcherKey(event)) {\n event.preventDefault();\n event.stopPropagation();\n if (state) {\n clearTimeout(showTimer);\n setSwitcher(stepChatSwitcher(state, event.shiftKey ? -1 : 1));\n return;\n }\n // Not over the ⌘K menu, the shortcut sheet or another dialog.\n if (event.repeat || menuOpen.current || sheetOpen.current) return;\n if (insideOtherOverlay(event.target)) return;\n const opened = openChatSwitcher(\n readChatDirectory(subjectId, workspaceId),\n routeChatIdRef.current,\n event.shiftKey,\n reachableRef.current,\n );\n if (!opened) return;\n void loadChatSwitcher();\n setSwitcher(opened);\n // A quick press switches without drawing the list at all.\n showTimer = setTimeout(() => {\n const current = switcherRef.current;\n if (current && !current.visible) setSwitcher({ ...current, visible: true });\n }, SWITCHER_SHOW_DELAY_MS);\n return;\n }\n if (!state) return;\n // Control was let go somewhere the page did not hear it.\n if (!event.ctrlKey && event.key !== \"Control\") {\n cancel();\n return;\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n cancel();\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n event.stopPropagation();\n clearTimeout(showTimer);\n pickSwitcherChat();\n } else if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n event.stopPropagation();\n clearTimeout(showTimer);\n setSwitcher(stepChatSwitcher(state, event.key === \"ArrowDown\" ? 1 : -1));\n }\n }\n function onKeyUp(event: KeyboardEvent) {\n if (event.key !== \"Control\" || !switcherRef.current) return;\n clearTimeout(showTimer);\n pickSwitcherChat();\n }\n document.addEventListener(\"keydown\", onKeyDown, true);\n document.addEventListener(\"keyup\", onKeyUp, true);\n window.addEventListener(\"blur\", cancel);\n return () => {\n clearTimeout(showTimer);\n document.removeEventListener(\"keydown\", onKeyDown, true);\n document.removeEventListener(\"keyup\", onKeyUp, true);\n window.removeEventListener(\"blur\", cancel);\n };\n }, [switcherEnabled, subjectId, workspaceId, pickSwitcherChat, setSwitcher]);\n\n const value = useMemo<ActionsContextValue>(\n () => ({ env, run, chordsFor }),\n [env, run, chordsFor],\n );\n\n return (\n <ActionsContext.Provider value={value}>\n {props.children}\n {menu.mounted ? (\n <Suspense fallback={null}>\n <CommandMenu\n open={menu.open}\n pickWorkspace={menu.workspaces}\n onOpenChange={(open) => setMenu((current) => ({ ...current, open }))}\n returnFocus={returnFocus}\n />\n </Suspense>\n ) : null}\n {sheet.mounted ? (\n <Suspense fallback={null}>\n <ShortcutSheet\n open={sheet.open}\n onOpenChange={(open) => setSheet((current) => ({ ...current, open }))}\n returnFocus={returnFocus}\n />\n </Suspense>\n ) : null}\n {/* Mounted from the first press, so it reads chat statuses before it shows. */}\n {switcher ? (\n <Suspense fallback={null}>\n <ChatSwitcher\n state={switcher}\n subjectId={subjectId}\n workspaceId={workspaceId}\n workspaces={workspaces}\n currentChatId={routeChatId}\n platform={platform}\n onHover={(index) => {\n const current = switcherRef.current;\n if (current) setSwitcher({ ...current, index });\n }}\n onDirectoryChange={() => {\n const current = switcherRef.current;\n if (!current) return;\n const next = extendChatSwitcher(\n current,\n readChatDirectory(subjectId, workspaceId),\n reachableRef.current,\n );\n if (next !== current) setSwitcher(next);\n }}\n onPick={pickSwitcherChat}\n onDismiss={() => setSwitcher(null)}\n />\n </Suspense>\n ) : null}\n </ActionsContext.Provider>\n );\n}\n","/**\n * What the app already knows about Sites, so the ⌘K menu can list them\n * instantly: the Site rows the sidebar has loaded for each workspace, most\n * recent activity first (the person's own opens count). It is a cache for\n * speed, never a source of authority: opening a Site still goes through the\n * normal authorized reads, and the menu's server search answers with only the\n * Sites the person may see.\n */\nimport { useSyncExternalStore } from \"react\";\n\nexport type SiteRecord = {\n id: string;\n workspaceId: string;\n title: string;\n /** Latest activity (ms): conversations, a new version, or the person opening it. */\n updatedAt: number;\n};\n\n/** The fields of a sidebar Site row or a catalog item the menu reads. */\nexport type SiteSource = { siteId?: string; id?: string; title: string; updatedAt: string };\n\ntype DirectoryState = { sites: Map<string, readonly SiteRecord[]>; version: number };\n\nconst directories = new Map<string, DirectoryState>();\nconst listeners = new Map<string, Set<() => void>>();\n\nfunction directory(subjectId: string): DirectoryState {\n let state = directories.get(subjectId);\n if (!state) {\n state = { sites: new Map(), version: 0 };\n directories.set(subjectId, state);\n }\n return state;\n}\n\n/** Turns sidebar rows or catalog items into records, dropping anything malformed. */\nexport function siteRecords(workspaceId: string, sources: readonly SiteSource[]): SiteRecord[] {\n const seen = new Set<string>();\n const records: SiteRecord[] = [];\n for (const source of sources) {\n const id = source.siteId ?? source.id;\n if (typeof id !== \"string\" || !id || seen.has(id)) continue;\n seen.add(id);\n records.push({\n id,\n workspaceId,\n title: (typeof source.title === \"string\" && source.title.trim()) || \"Untitled Site\",\n updatedAt: Date.parse(source.updatedAt) || 0,\n });\n }\n return records;\n}\n\n/** The sidebar reports the Site rows it shows for a workspace; the newest list replaces the last. */\nexport function rememberSidebarSites(\n subjectId: string,\n workspaceId: string,\n sources: readonly SiteSource[],\n): void {\n const state = directory(subjectId);\n const next = siteRecords(workspaceId, sources).sort((a, b) => b.updatedAt - a.updatedAt);\n const current = state.sites.get(workspaceId);\n if (\n current &&\n current.length === next.length &&\n current.every(\n (site, index) =>\n site.id === next[index]!.id &&\n site.title === next[index]!.title &&\n site.updatedAt === next[index]!.updatedAt,\n )\n )\n return;\n state.sites.set(workspaceId, next);\n state.version += 1;\n for (const listener of listeners.get(subjectId) ?? []) listener();\n}\n\n/** The workspace's Sites the sidebar knows, most recent activity first. */\nexport function readSidebarSites(subjectId: string, workspaceId: string): readonly SiteRecord[] {\n return directory(subjectId).sites.get(workspaceId) ?? [];\n}\n\n/** Re-renders when the directory changes; read it through `readSidebarSites`. */\nexport function useSiteDirectoryVersion(subjectId: string): number {\n return useSyncExternalStore(\n (listener) => {\n let set = listeners.get(subjectId);\n if (!set) {\n set = new Set();\n listeners.set(subjectId, set);\n }\n set.add(listener);\n return () => {\n set.delete(listener);\n };\n },\n () => directory(subjectId).version,\n () => 0,\n );\n}\n\n/** A Site's page in the app, as a plain path (new tab). */\nexport function sitePath(workspaceId: string, siteId: string): string {\n return `/workspaces/${encodeURIComponent(workspaceId)}/sites/${encodeURIComponent(siteId)}`;\n}\n","/**\n * The meetings the ⌘K menu already knows: the newest few of each workspace,\n * kept from the last time the menu asked, so the next open lists them at once\n * while it asks again. A cache for speed, never a source of authority: opening\n * a meeting goes through the normal authorized reads.\n */\nimport { useSyncExternalStore } from \"react\";\nimport type { Recording } from \"@opengeni/contracts\";\nimport { meetingTitle } from \"../../../recordings-model\";\n\nexport type MeetingRecord = {\n id: string;\n workspaceId: string;\n title: string;\n /** When it started (ms). */\n startedAt: number;\n};\n\ntype DirectoryState = { meetings: Map<string, readonly MeetingRecord[]>; version: number };\n\nconst directories = new Map<string, DirectoryState>();\nconst listeners = new Map<string, Set<() => void>>();\n\nfunction directory(subjectId: string): DirectoryState {\n let state = directories.get(subjectId);\n if (!state) {\n state = { meetings: new Map(), version: 0 };\n directories.set(subjectId, state);\n }\n return state;\n}\n\n/** Turns listed recordings into records, with the titles the Meetings page shows. */\nexport function meetingRecords(recordings: readonly Recording[]): MeetingRecord[] {\n const seen = new Set<string>();\n const records: MeetingRecord[] = [];\n for (const recording of recordings) {\n if (!recording?.id || seen.has(recording.id)) continue;\n seen.add(recording.id);\n records.push({\n id: recording.id,\n workspaceId: recording.workspaceId,\n title: meetingTitle(recording),\n startedAt: Date.parse(recording.startedAt) || 0,\n });\n }\n return records;\n}\n\n/** The workspace's newest meetings, as the server just listed them; replaces the last list. */\nexport function rememberRecentMeetings(\n subjectId: string,\n workspaceId: string,\n records: readonly MeetingRecord[],\n): void {\n const state = directory(subjectId);\n const next = [...records].sort((a, b) => b.startedAt - a.startedAt);\n const current = state.meetings.get(workspaceId);\n if (\n current &&\n current.length === next.length &&\n current.every(\n (meeting, index) =>\n meeting.id === next[index]!.id &&\n meeting.title === next[index]!.title &&\n meeting.startedAt === next[index]!.startedAt,\n )\n )\n return;\n state.meetings.set(workspaceId, next);\n state.version += 1;\n for (const listener of listeners.get(subjectId) ?? []) listener();\n}\n\n/** The workspace's newest meetings the menu knows, newest first. */\nexport function readRecentMeetings(\n subjectId: string,\n workspaceId: string,\n): readonly MeetingRecord[] {\n return directory(subjectId).meetings.get(workspaceId) ?? [];\n}\n\n/** Re-renders when the directory changes; read it through `readRecentMeetings`. */\nexport function useMeetingDirectoryVersion(subjectId: string): number {\n return useSyncExternalStore(\n (listener) => {\n let set = listeners.get(subjectId);\n if (!set) {\n set = new Set();\n listeners.set(subjectId, set);\n }\n set.add(listener);\n return () => {\n set.delete(listener);\n };\n },\n () => directory(subjectId).version,\n () => 0,\n );\n}\n\n/** A meeting's page in the app, as a plain path (new tab). */\nexport function meetingPath(workspaceId: string, recordingId: string): string {\n return `/workspaces/${encodeURIComponent(workspaceId)}/meetings/${encodeURIComponent(recordingId)}`;\n}\n","/**\n * Control+Tab in the desktop app: switch between recently viewed chats, most\n * recent first, as ⌘Tab switches apps. The list spans the person's workspaces,\n * so it also jumps between chats in different workspaces. A quick press goes back to the previous\n * chat (press again to return); holding Control shows the list, each Tab moves\n * down it (Shift+Tab up), and releasing Control opens the highlighted chat.\n *\n * Past the chats someone opened, the list carries on through the other chats\n * the app knows, most recently active first, so holding Tab keeps going back\n * in time. The list is read when the switcher opens and only ever grows at\n * the end (as more chats load), so it holds still while the person cycles.\n *\n * Every chat the person opened is there, sub-agent chats included: someone\n * who works in a sub-agent's chat expects Control+Tab to take them back to\n * it. The carry-on part lists only their own chats (and sub-agent chats they\n * pinned), since a workspace can hold far more sub-agent chats than chats.\n */\nimport { listsAsTopLevel, type ChatDirectorySnapshot, type ChatRecord } from \"./chat-directory\";\n\n/** At most this many chats; older ones are a search away in ⌘K. */\nexport const SWITCHER_LIMIT = 100;\n/** A press shorter than this switches without ever drawing the list. */\nexport const SWITCHER_SHOW_DELAY_MS = 140;\n\nexport type ChatSwitcherState = Readonly<{\n /** Chats in the order shown: recently viewed first, then recently active. */\n ids: readonly string[];\n /** How many of `ids`, from the front, are chats the person opened recently. */\n viewed: number;\n /** The highlighted chat. */\n index: number;\n /** Whether the list is drawn (after the delay, or once Tab is pressed again). */\n visible: boolean;\n}>;\n\ntype SwitcherDirectory = Pick<ChatDirectorySnapshot, \"recent\" | \"rows\">;\n\nfunction switchable(\n record: ChatRecord | undefined,\n reachable: (workspaceId: string) => boolean,\n): record is ChatRecord {\n return Boolean(record && !record.archived && reachable(record.workspaceId));\n}\n\n/** Known chats not in `taken`, most recently active first; sub-agent chats only when pinned. */\nfunction moreChats(\n directory: SwitcherDirectory,\n taken: ReadonlySet<string>,\n reachable: (workspaceId: string) => boolean,\n room: number,\n): string[] {\n if (room <= 0) return [];\n const more: ChatRecord[] = [];\n for (const record of directory.rows.values()) {\n if (!taken.has(record.id) && switchable(record, reachable) && listsAsTopLevel(record)) {\n more.push(record);\n }\n }\n more.sort((a, b) => b.updatedAt - a.updatedAt || (a.id < b.id ? -1 : 1));\n return more.slice(0, room).map((record) => record.id);\n}\n\n/**\n * The chats to switch between: the open chat (when there is one), the other\n * recently viewed chats, then the rest the app knows by latest activity.\n * Null when there is nowhere to switch to.\n */\nexport function openChatSwitcher(\n directory: SwitcherDirectory,\n currentChatId: string | null,\n backwards: boolean,\n /** Whether a workspace is still open to the person; chats elsewhere are left out. */\n reachable: (workspaceId: string) => boolean = () => true,\n): ChatSwitcherState | null {\n const recent = directory.recent.filter(\n (id) => id !== currentChatId && switchable(directory.rows.get(id), reachable),\n );\n const viewed = (currentChatId ? [currentChatId, ...recent] : recent).slice(0, SWITCHER_LIMIT);\n const ids = [\n ...viewed,\n ...moreChats(directory, new Set(viewed), reachable, SWITCHER_LIMIT - viewed.length),\n ];\n // Away from a chat (the inbox, a new chat) the most recent chat is the target.\n const first = currentChatId ? 1 : 0;\n if (ids.length <= first) return null;\n return {\n ids,\n viewed: viewed.length,\n index: backwards ? ids.length - 1 : first,\n visible: false,\n };\n}\n\n/**\n * Chats that loaded while the list is open join at its end, so nothing the\n * person is looking at moves. The same state when there is nothing new.\n */\nexport function extendChatSwitcher(\n state: ChatSwitcherState,\n directory: SwitcherDirectory,\n reachable: (workspaceId: string) => boolean = () => true,\n): ChatSwitcherState {\n const more = moreChats(\n directory,\n new Set(state.ids),\n reachable,\n SWITCHER_LIMIT - state.ids.length,\n );\n return more.length === 0 ? state : { ...state, ids: [...state.ids, ...more] };\n}\n\n/** Tab moves down the list and Shift+Tab up, wrapping at the ends. */\nexport function stepChatSwitcher(state: ChatSwitcherState, step: 1 | -1): ChatSwitcherState {\n const count = state.ids.length;\n return { ...state, index: (state.index + step + count) % count, visible: true };\n}\n\n/** Control+Tab exactly: no ⌘, no ⌥ (Shift reverses). */\nexport function isSwitcherKey(\n event: Pick<KeyboardEvent, \"code\" | \"ctrlKey\" | \"metaKey\" | \"altKey\">,\n) {\n return event.code === \"Tab\" && event.ctrlKey && !event.metaKey && !event.altKey;\n}\n","import { archiveActionLabel, requestSessionArchive } from \"../archive-session\";\n/**\n * The chat operations every surface shares: the command menu, chords, the\n * chat header and the sidebar's row menus all copy links, pin, archive and\n * mark chats through these, so they behave identically everywhere.\n */\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { sessionDisplayTitle, type SessionListRow } from \"../../../session-list-model\";\nimport { useAppContext } from \"../../app-context\";\nimport { usePage } from \"../navigation\";\nimport { applySessionArchiveProjection } from \"../session-pagination\";\nimport { notifySessionListChanged } from \"../session-list-invalidation\";\nimport { toast } from \"../toast\";\nimport { copyLink as copyLinkWithToast } from \"../copy-link\";\nimport { errorMessage } from \"@opengeni/contracts/values\";\n\nexport type ChatOperations = {\n /** \"Archive\" where this person can archive the chat, otherwise null. */\n archiveLabel?: (chat: SessionListRow) => string | null;\n /** The chat's shareable address. */\n linkTo(chat: Pick<SessionListRow, \"id\" | \"workspaceId\">): string;\n copyLink(chat: Pick<SessionListRow, \"id\" | \"workspaceId\">): Promise<void>;\n setPinned(chat: SessionListRow, pinned: boolean): Promise<void>;\n setArchived(chat: SessionListRow, archived: boolean): Promise<void>;\n setUnread(chat: SessionListRow, unread: boolean): Promise<void>;\n};\n\nexport function chatPath(chat: Pick<SessionListRow, \"id\" | \"workspaceId\">): string {\n return `/workspaces/${encodeURIComponent(chat.workspaceId)}/sessions/${encodeURIComponent(chat.id)}`;\n}\n\nexport function useChatOperations(): ChatOperations {\n const context = useAppContext();\n const page = usePage();\n const archiving = useRef(new Set<string>());\n const linkTo = useCallback(\n (chat: Pick<SessionListRow, \"id\" | \"workspaceId\">) => `${page.origin()}${chatPath(chat)}`,\n [page],\n );\n const copyLink = useCallback(\n (chat: Pick<SessionListRow, \"id\" | \"workspaceId\">) => copyLinkWithToast(linkTo(chat)),\n [linkTo],\n );\n const setPinned = useCallback(\n async (chat: SessionListRow, pinned: boolean) => {\n const updated = await context.updateSessionPin(\n chat.workspaceId,\n chat.id,\n pinned,\n chat.pinVersion ?? 0,\n );\n if (updated) toast.success(pinned ? \"Chat pinned\" : \"Chat unpinned\");\n else toast.error(pinned ? \"Couldn't pin the chat.\" : \"Couldn't unpin the chat.\");\n },\n [context],\n );\n const setArchivedRef = useRef<ChatOperations[\"setArchived\"] | null>(null);\n const setArchived = useCallback(\n async (chat: SessionListRow, archived: boolean) => {\n if (archiving.current.has(chat.id)) return;\n const accepted = context.captureWorkspaceInvocation(chat.workspaceId);\n if (!accepted) return;\n archiving.current.add(chat.id);\n try {\n const updated = await requestSessionArchive(\n context,\n chat,\n archived,\n sessionDisplayTitle(chat),\n () => void setArchivedRef.current?.({ ...chat, archived: true }, false),\n );\n if (!updated) return;\n if (!context.ownsWorkspaceInvocation(chat.workspaceId, accepted)) return;\n context.setSession((current) =>\n current?.id === updated.id && current.workspaceId === updated.workspaceId\n ? applySessionArchiveProjection(current, updated)\n : current,\n );\n notifySessionListChanged({\n workspaceId: chat.workspaceId,\n sessionId: chat.id,\n archived: updated.archived,\n });\n } catch (error) {\n if (!context.ownsWorkspaceInvocation(chat.workspaceId, accepted)) return;\n toast.error(archived ? \"Couldn't archive the chat.\" : \"Couldn't undo the archive.\", {\n description: errorMessage(error),\n });\n } finally {\n archiving.current.delete(chat.id);\n }\n },\n [context],\n );\n setArchivedRef.current = setArchived;\n const setUnread = useCallback(\n async (chat: SessionListRow, unread: boolean) => {\n try {\n const updated = await context.client.updateSessionAttention(chat.workspaceId, chat.id, {\n unread,\n expectedVersion: chat.attentionVersion ?? 0,\n });\n context.setSession((current) =>\n current?.id === updated.id\n ? {\n ...current,\n ...(updated.unread !== undefined ? { unread: updated.unread } : {}),\n ...(updated.attentionVersion !== undefined\n ? { attentionVersion: updated.attentionVersion }\n : {}),\n }\n : current,\n );\n notifySessionListChanged({ workspaceId: chat.workspaceId, sessionId: chat.id });\n toast.success(unread ? \"Marked as unread\" : \"Marked as read\");\n } catch (error) {\n toast.error(\"Couldn't update the chat.\", {\n description: errorMessage(error),\n });\n }\n },\n [context],\n );\n return useMemo(\n () => ({\n linkTo,\n copyLink,\n setPinned,\n setArchived,\n setUnread,\n archiveLabel: (chat: SessionListRow) => archiveActionLabel(context, chat),\n }),\n [linkTo, copyLink, setPinned, setArchived, setUnread, context],\n );\n}\n","/**\n * The action registry: everything a person can do from the keyboard, the ⌘K\n * menu, menus and the desktop menu bar. Each action is defined once here, with\n * its name, keys and availability, so every surface shows and runs it the same\n * way. See docs/command-menu-and-shortcuts.md.\n */\nimport {\n ArchiveIcon,\n ArrowDownIcon,\n ArrowUpIcon,\n AudioLinesIcon,\n ChevronsUpDownIcon,\n CommandIcon,\n GitForkIcon,\n HistoryIcon,\n InboxIcon,\n KeyboardIcon,\n LinkIcon,\n MailIcon,\n MailOpenIcon,\n MessageCircleQuestionIcon,\n MicIcon,\n PanelLeftIcon,\n PanelRightIcon,\n PencilIcon,\n PinIcon,\n PinOffIcon,\n PlusIcon,\n SearchIcon,\n SquareIcon,\n TextSearchIcon,\n type LucideIcon,\n} from \"lucide-react\";\nimport type { SessionListRow } from \"../../../session-list-model\";\nimport type { Recording } from \"@opengeni/contracts\";\nimport type { RecorderState } from \"@opengeni/sdk/recordings\";\nimport { canStartRecording } from \"../../../meetings/recorder-state\";\nimport type { ActionSurface, Chord, ChordPlatform } from \"./chords\";\nimport type { ChatOperations } from \"./chat-operations\";\n\nexport type ActionGroup = \"chat\" | \"meetings\" | \"navigate\" | \"view\" | \"help\";\n\n/** Where the desktop menu bar shows an action. */\nexport type DesktopMenuPlacement = \"file\" | \"view\" | \"go\" | \"chat\" | \"help\";\n\n/** A workspace someone can switch to, in the workspace picker's order. */\nexport type WorkspaceChoice = {\n id: string;\n name: string;\n /** The workspace's organization, by name. */\n organization: string;\n /** A Personal workspace, private to its owner. */\n personal: boolean;\n};\n\n/** The meeting recorder, as the actions use it. */\nexport type MeetingActions = {\n /** The recorder's state; null until its capture code loads. */\n state: RecorderState | null;\n /** Start recording as the Meetings page's button does, and show Meetings. */\n start(): void;\n /** Show Meetings, where the recording going is. */\n show(): void;\n /** Stop the recording going and open it. */\n stop(): void | Promise<void>;\n};\n\n/** What the ⌘K menu asks of the server for meetings; see `MeetingPages.list`. */\nexport type MeetingListOptions = {\n /** Words in titles and current transcripts. */\n query?: string;\n /** Someone who spoke, by part of their name. */\n person?: string;\n startedFrom?: string;\n startedTo?: string;\n limit: number;\n signal?: AbortSignal;\n};\n\n/** The Meetings pages, where this surface has them (whether or not this browser records). */\nexport type MeetingPages = {\n /** Show Meetings. */\n openList(): void;\n /** Open one of this workspace's meetings, as its row on Meetings does. */\n open(recordingId: string): void;\n /** A meeting's address, for a new browser tab or to share. */\n link(recordingId: string): string;\n copyLink(recordingId: string): void | Promise<void>;\n /** This workspace's meetings the person can see, newest first. */\n list(options: MeetingListOptions): Promise<readonly Recording[]>;\n /** The meeting on screen, if any. */\n current: {\n recordingId: string;\n /** Ask about it, as its Ask field does; with no question, put the cursor there. Null when it takes none. */\n ask: ((question: string | null) => void) | null;\n } | null;\n};\n\nexport type ActionEnv = {\n workspaceId: string;\n subjectId: string;\n surface: ActionSurface;\n platform: ChordPlatform;\n /** The chat on screen, if any. */\n currentChat: SessionListRow | null;\n /** The Site on screen, if any. */\n currentSiteId: string | null;\n ops: ChatOperations;\n /** Whether the sidebar's chat list is part of this surface. */\n chatList: boolean;\n /** Whether chats have the right-hand workspace panel on this surface. */\n workspacePanel: boolean;\n /** Every workspace open to the person, in the workspace picker's order. */\n workspaces: readonly WorkspaceChoice[];\n /** Whether the person may fork the chat on screen. */\n canForkCurrentChat: boolean;\n /** Meetings, when this surface records them and this browser can. */\n meetings: MeetingActions | null;\n /** The Meetings pages, when this surface has them. */\n meetingPages: MeetingPages | null;\n newChat(): void;\n /** Opens a chat; one in another workspace switches to that workspace. */\n openChat(chatId: string, workspaceId?: string): void;\n /** Opens one of this workspace's Sites in the app, as its sidebar row does. */\n openSite(siteId: string): void;\n /** A Site's address, for opening it in a new browser tab. */\n siteLink(siteId: string): string;\n openWorkspace(workspaceId: string): void;\n /** The ⌘K menu, listing workspaces to switch to. */\n openWorkspacePicker(): void;\n openInbox(): void;\n toggleSidebar(): void;\n toggleWorkspacePanel(): void;\n findInChat(): void;\n searchMessages(query?: string): void;\n renameCurrentChat(): void;\n /** Asks the chat on screen to fork from its latest message. */\n forkCurrentChat(): void;\n openCommandMenu(): void;\n openShortcutSheet(): void;\n /** Back to the most recently viewed other chat (a quick Control+Tab). */\n switchToRecentChat(): void;\n /** Chats in sidebar order, and the pinned ones in their order. */\n sidebarOrder(): readonly string[];\n pinnedOrder(): readonly string[];\n};\n\nexport type AppAction = {\n id: string;\n /** Plain words; chat actions may read the chat (Pin or Unpin). */\n title: string | ((env: ActionEnv, chat: SessionListRow | null) => string);\n group: ActionGroup;\n icon: LucideIcon;\n /** A different icon for some chats (Unpin for a pinned chat). */\n iconFor?: (chat: SessionListRow | null) => LucideIcon;\n /** Extra words the ⌘K menu matches, e.g. \"share\" for Copy link. */\n keywords?: readonly string[];\n chords?: readonly Chord[];\n /** The cheat sheet's own key text when one action has many chords (⌘1 to ⌘9). */\n chordSummary?: (platform: ChordPlatform) => string;\n /** Acts on a chat: the current one, or the one a menu or ⌘K row points at. */\n forChat?: boolean;\n /** Acts on the meeting on screen; ⌘K lists it under \"This meeting\". */\n forMeeting?: boolean;\n /** Listed in the ⌘K menu (some exist only as keys). Default true. */\n inCommandMenu?: boolean;\n /**\n * Opens a dialog of its own. From ⌘K it runs once the menu has handed focus\n * back, so the new dialog returns focus to the same place when it closes.\n */\n opensDialog?: boolean;\n /** Offered in ⌘K before anything is typed. */\n suggested?: boolean;\n /** The desktop menu bar section, when it appears there. */\n desktopMenu?: DesktopMenuPlacement;\n available(env: ActionEnv, chat: SessionListRow | null): boolean;\n run(env: ActionEnv, chat: SessionListRow | null, chord?: Chord): void | Promise<void>;\n};\n\nexport function actionTitle(\n action: AppAction,\n env: ActionEnv,\n chat: SessionListRow | null,\n): string {\n return typeof action.title === \"string\" ? action.title : action.title(env, chat);\n}\n\nexport function actionIcon(action: AppAction, chat: SessionListRow | null): LucideIcon {\n return action.iconFor?.(chat) ?? action.icon;\n}\n\nconst ALWAYS = () => true;\n\nfunction stepChat(env: ActionEnv, direction: 1 | -1): void {\n const order = env.sidebarOrder();\n if (order.length === 0) return;\n const index = env.currentChat ? order.indexOf(env.currentChat.id) : -1;\n const next = index < 0 ? (direction === 1 ? 0 : order.length - 1) : index + direction;\n if (next < 0 || next >= order.length) return;\n env.openChat(order[next]!);\n}\n\n/** The previous or next workspace in the picker's order, wrapping around. */\nexport function stepWorkspace(\n workspaces: readonly Pick<WorkspaceChoice, \"id\">[],\n currentId: string,\n direction: 1 | -1,\n): string | null {\n if (workspaces.length < 2) return null;\n const index = workspaces.findIndex((workspace) => workspace.id === currentId);\n const next =\n index < 0\n ? direction === 1\n ? 0\n : workspaces.length - 1\n : (index + direction + workspaces.length) % workspaces.length;\n return workspaces[next]!.id;\n}\n\nfunction switchWorkspace(env: ActionEnv, direction: 1 | -1): void {\n const id = stepWorkspace(env.workspaces, env.workspaceId, direction);\n if (id && id !== env.workspaceId) env.openWorkspace(id);\n}\n\nconst hasOtherWorkspaces = (env: ActionEnv) => env.workspaces.length > 1;\n\n/** A recording is being captured, so Start recording shows it instead. */\nfunction meetingBusy(env: ActionEnv): boolean {\n return !canStartRecording(env.meetings?.state);\n}\n\nconst PINNED_CHORDS: Chord[] = Array.from({ length: 9 }, (_, index) => ({\n code: `Digit${index + 1}`,\n mod: true,\n only: \"desktop\" as const,\n}));\n\nlet appActionList: readonly AppAction[] | undefined;\n\n/**\n * Every action, built on first use. The icons come from chunks the router\n * shares with other routes; reading them while this module loads can see them\n * before they exist, depending on which route a visitor opens first.\n */\nexport function appActions(): readonly AppAction[] {\n return (appActionList ??= [\n {\n id: \"commandMenu.open\",\n title: \"Command menu\",\n group: \"help\",\n icon: CommandIcon,\n chords: [{ code: \"KeyK\", mod: true }],\n inCommandMenu: false,\n desktopMenu: \"go\",\n available: ALWAYS,\n run: (env) => env.openCommandMenu(),\n },\n {\n id: \"chat.new\",\n title: \"New chat\",\n group: \"chat\",\n icon: PlusIcon,\n keywords: [\"start\", \"create\", \"session\"],\n // The desktop menu shows its first key, the familiar ⌘N; browsers keep ⌘N for windows.\n chords: [\n { code: \"KeyN\", mod: true, only: \"desktop\" },\n { code: \"KeyO\", mod: true, shift: true },\n ],\n suggested: true,\n desktopMenu: \"file\",\n available: ALWAYS,\n run: (env) => env.newChat(),\n },\n {\n // The Meetings page's Start recording button, from anywhere. While one\n // records, it shows that recording instead of starting a second one, as a\n // desktop call notification's Record does. ⌃⌘N sits beside New chat's ⌘N\n // and, like Archive, is Ctrl+Alt elsewhere; see the shortcuts doc.\n id: \"meetings.start\",\n title: (env) => (meetingBusy(env) ? \"Go to recording\" : \"Start recording\"),\n group: \"meetings\",\n icon: MicIcon,\n keywords: [\"meeting\", \"new meeting\", \"record\", \"notetaker\", \"transcript\", \"audio\", \"call\"],\n chords: [\n { code: \"KeyN\", mod: true, control: true, platform: \"mac\" },\n { code: \"KeyN\", mod: true, alt: true, platform: \"other\" },\n ],\n desktopMenu: \"file\",\n available: (env) => env.meetings !== null,\n run: (env) => (meetingBusy(env) ? env.meetings?.show() : env.meetings?.start()),\n },\n {\n // No key, so a stray press never ends a meeting.\n id: \"meetings.stop\",\n title: \"Stop recording\",\n group: \"meetings\",\n icon: SquareIcon,\n keywords: [\"meeting\", \"end\", \"finish\", \"record\"],\n desktopMenu: \"file\",\n available: (env) => env.meetings?.state === \"recording\" || env.meetings?.state === \"paused\",\n run: (env) => env.meetings?.stop(),\n },\n {\n // The meeting on screen's Ask field, from ⌘K. Typing a question first\n // asks it straight away; see the menu's \"Ask about this meeting: …\" row.\n id: \"meeting.ask\",\n title: \"Ask about this meeting\",\n group: \"meetings\",\n icon: MessageCircleQuestionIcon,\n keywords: [\"question\", \"chat\", \"agent\", \"summary\", \"notes\"],\n forMeeting: true,\n opensDialog: true,\n available: (env) => Boolean(env.meetingPages?.current?.ask),\n run: (env) => env.meetingPages?.current?.ask?.(null),\n },\n {\n id: \"meeting.copyLink\",\n title: \"Copy meeting link\",\n group: \"meetings\",\n icon: LinkIcon,\n keywords: [\"share\", \"url\", \"address\"],\n forMeeting: true,\n available: (env) => Boolean(env.meetingPages?.current),\n run: (env) => {\n const current = env.meetingPages?.current;\n if (current) return env.meetingPages?.copyLink(current.recordingId);\n },\n },\n {\n id: \"chat.copyLink\",\n title: \"Copy link\",\n group: \"chat\",\n icon: LinkIcon,\n keywords: [\"share\", \"url\", \"address\"],\n chords: [{ code: \"Comma\", mod: true, shift: true }],\n forChat: true,\n suggested: true,\n desktopMenu: \"chat\",\n available: (_env, chat) => chat !== null,\n run: (env, chat) => (chat ? env.ops.copyLink(chat) : undefined),\n },\n {\n id: \"chat.pin\",\n title: (_env, chat) => (chat?.pinned ? \"Unpin\" : \"Pin\"),\n group: \"chat\",\n icon: PinIcon,\n iconFor: (chat) => (chat?.pinned ? PinOffIcon : PinIcon),\n keywords: [\"unpin\", \"favorite\", \"star\"],\n chords: [{ code: \"KeyP\", mod: true, alt: true }],\n forChat: true,\n suggested: true,\n desktopMenu: \"chat\",\n available: (_env, chat) => chat !== null && !chat.archived,\n run: (env, chat) => (chat ? env.ops.setPinned(chat, !chat.pinned) : undefined),\n },\n {\n id: \"chat.rename\",\n title: \"Rename\",\n group: \"chat\",\n icon: PencilIcon,\n keywords: [\"title\", \"name\"],\n forChat: true,\n desktopMenu: \"chat\",\n // Renaming happens in the chat's own title, so only for the chat on screen.\n available: (env, chat) => chat !== null && env.currentChat?.id === chat.id,\n run: (env) => env.renameCurrentChat(),\n },\n {\n id: \"chat.fork\",\n title: \"Fork chat\",\n group: \"chat\",\n icon: GitForkIcon,\n keywords: [\"copy\", \"duplicate\", \"branch\", \"clone\"],\n forChat: true,\n opensDialog: true,\n desktopMenu: \"chat\",\n // From the latest message, as the fork button under a message does; only\n // for the chat on screen, whose messages are loaded.\n available: (env, chat) =>\n chat !== null && env.currentChat?.id === chat.id && env.canForkCurrentChat,\n run: (env) => env.forkCurrentChat(),\n },\n {\n id: \"chat.unread\",\n title: (_env, chat) => (chat?.unread ? \"Mark as read\" : \"Mark as unread\"),\n group: \"chat\",\n icon: MailIcon,\n iconFor: (chat) => (chat?.unread ? MailOpenIcon : MailIcon),\n keywords: [\"read\", \"unread\"],\n forChat: true,\n desktopMenu: \"chat\",\n available: (_env, chat) => chat !== null && !chat.archived,\n run: (env, chat) => (chat ? env.ops.setUnread(chat, !chat.unread) : undefined),\n },\n {\n id: \"chat.archive\",\n title: \"Archive\",\n group: \"chat\",\n icon: ArchiveIcon,\n keywords: [\"archive\", \"done\", \"storage\"],\n // Apple Mail's Archive key; Ctrl+Alt elsewhere, as Pin, since browsers there\n // keep Ctrl+Shift+A for tab search.\n chords: [\n { code: \"KeyA\", mod: true, control: true, platform: \"mac\" },\n { code: \"KeyA\", mod: true, alt: true, platform: \"other\" },\n ],\n forChat: true,\n desktopMenu: \"chat\",\n // Archived chats stay archived; only people who can control a chat archive it.\n available: (env, chat) =>\n chat !== null &&\n chat.parentSessionId === null &&\n !chat.archived &&\n (env.ops.archiveLabel ? env.ops.archiveLabel(chat) !== null : true),\n run: (env, chat) => (chat ? env.ops.setArchived(chat, true) : undefined),\n },\n {\n id: \"chat.find\",\n title: \"Find in chat\",\n group: \"chat\",\n icon: TextSearchIcon,\n keywords: [\"search\", \"find\"],\n chords: [{ code: \"KeyF\", mod: true }],\n desktopMenu: \"chat\",\n // The conversation owns ⌘F itself; the registry lists it so it is discoverable.\n available: (env) => env.currentChat !== null,\n run: (env) => env.findInChat(),\n },\n {\n id: \"go.inbox\",\n title: \"Inbox\",\n group: \"navigate\",\n icon: InboxIcon,\n keywords: [\"notifications\", \"replies\", \"needs you\"],\n chords: [\n { code: \"KeyI\", mod: true, shift: true, platform: \"mac\" },\n // Browsers on Windows and Linux open developer tools with Ctrl+Shift+I.\n { code: \"KeyI\", mod: true, shift: true, platform: \"other\", only: \"desktop\" },\n ],\n suggested: true,\n desktopMenu: \"go\",\n available: ALWAYS,\n run: (env) => env.openInbox(),\n },\n {\n id: \"go.meetings\",\n title: \"Meetings\",\n group: \"navigate\",\n icon: AudioLinesIcon,\n keywords: [\"recordings\", \"transcripts\", \"calls\", \"notes\"],\n suggested: true,\n desktopMenu: \"go\",\n available: (env) => env.meetingPages !== null,\n run: (env) => env.meetingPages?.openList(),\n },\n {\n id: \"go.previousChat\",\n title: \"Previous chat\",\n group: \"navigate\",\n icon: ArrowUpIcon,\n chords: [{ code: \"ArrowUp\", alt: true }],\n inCommandMenu: false,\n available: (env) => env.chatList,\n run: (env) => stepChat(env, -1),\n },\n {\n id: \"go.nextChat\",\n title: \"Next chat\",\n group: \"navigate\",\n icon: ArrowDownIcon,\n chords: [{ code: \"ArrowDown\", alt: true }],\n inCommandMenu: false,\n available: (env) => env.chatList,\n run: (env) => stepChat(env, 1),\n },\n {\n // Hold Control to see recent chats and keep pressing Tab; release to open.\n // The actions provider runs the switcher itself because it needs Control's\n // release, so the desktop menu bar never owns this key.\n id: \"go.recentChat\",\n title: \"Switch to recent chat\",\n group: \"navigate\",\n icon: HistoryIcon,\n chords: [\n { code: \"Tab\", control: true, platform: \"mac\", only: \"desktop\" },\n // Browsers keep Control+Tab for their own tabs.\n { code: \"Tab\", mod: true, platform: \"other\", only: \"desktop\" },\n ],\n inCommandMenu: false,\n available: ALWAYS,\n run: (env) => env.switchToRecentChat(),\n },\n {\n id: \"go.pinnedChat\",\n title: \"Pinned chat 1 to 9\",\n group: \"navigate\",\n icon: PinIcon,\n chords: PINNED_CHORDS,\n chordSummary: (platform) => (platform === \"mac\" ? \"⌘1 – ⌘9\" : \"Ctrl+1 – Ctrl+9\"),\n inCommandMenu: false,\n available: (env) => env.chatList,\n run: (env, _chat, chord) => {\n const index = chord ? Number(chord.code.slice(5)) - 1 : 0;\n const id = env.pinnedOrder()[index];\n if (id) env.openChat(id);\n },\n },\n {\n id: \"go.searchMessages\",\n title: \"Search messages\",\n group: \"navigate\",\n icon: SearchIcon,\n keywords: [\"find\", \"history\", \"full text\"],\n opensDialog: true,\n desktopMenu: \"go\",\n available: ALWAYS,\n run: (env) => env.searchMessages(),\n },\n {\n id: \"go.switchWorkspace\",\n title: \"Switch workspace…\",\n group: \"navigate\",\n icon: ChevronsUpDownIcon,\n keywords: [\"workspace\", \"organization\", \"team\", \"change\", \"go to\"],\n desktopMenu: \"go\",\n available: hasOtherWorkspaces,\n run: (env) => env.openWorkspacePicker(),\n },\n {\n // The workspace picker's order, wrapping around. ⌥⌘ and arrows sit in the\n // same place on every keyboard layout, and browsers leave them alone.\n id: \"go.previousWorkspace\",\n title: \"Previous workspace\",\n group: \"navigate\",\n icon: ArrowUpIcon,\n chords: [\n { code: \"ArrowUp\", mod: true, alt: true },\n // Some Linux desktops take Ctrl+Alt+arrows to switch their own workspaces.\n { code: \"PageUp\", mod: true, shift: true, platform: \"other\", only: \"desktop\" },\n ],\n inCommandMenu: false,\n desktopMenu: \"go\",\n available: hasOtherWorkspaces,\n run: (env) => switchWorkspace(env, -1),\n },\n {\n id: \"go.nextWorkspace\",\n title: \"Next workspace\",\n group: \"navigate\",\n icon: ArrowDownIcon,\n chords: [\n { code: \"ArrowDown\", mod: true, alt: true },\n { code: \"PageDown\", mod: true, shift: true, platform: \"other\", only: \"desktop\" },\n ],\n inCommandMenu: false,\n desktopMenu: \"go\",\n available: hasOtherWorkspaces,\n run: (env) => switchWorkspace(env, 1),\n },\n {\n id: \"view.sidebar\",\n title: \"Toggle sidebar\",\n group: \"view\",\n icon: PanelLeftIcon,\n keywords: [\"hide\", \"show\", \"collapse\", \"rail\"],\n // ⌘B as in most editors and chat apps. It is bold in rich text, so the menu\n // bar shows the platform's standard sidebar key instead, which also works.\n chords: [\n { code: \"KeyB\", mod: true, formatting: true },\n { code: \"KeyS\", mod: true, control: true, platform: \"mac\" },\n { code: \"KeyS\", mod: true, shift: true, platform: \"other\" },\n ],\n desktopMenu: \"view\",\n available: (env) => env.chatList,\n run: (env) => env.toggleSidebar(),\n },\n {\n id: \"view.workspacePanel\",\n title: \"Toggle workspace panel\",\n group: \"view\",\n icon: PanelRightIcon,\n keywords: [\"right\", \"inspector\", \"files\", \"browser\", \"terminal\", \"hide\", \"show\"],\n // The second sidebar's key in VS Code and Cursor.\n chords: [{ code: \"KeyB\", mod: true, alt: true }],\n desktopMenu: \"view\",\n available: (env) => env.workspacePanel && env.currentChat !== null,\n run: (env) => env.toggleWorkspacePanel(),\n },\n {\n id: \"help.shortcuts\",\n title: \"Keyboard shortcuts\",\n group: \"help\",\n icon: KeyboardIcon,\n keywords: [\"keys\", \"hotkeys\", \"cheat sheet\", \"help\"],\n chords: [{ code: \"Slash\", mod: true }],\n desktopMenu: \"help\",\n available: ALWAYS,\n run: (env) => env.openShortcutSheet(),\n },\n ]);\n}\n\nexport function findAction(id: string): AppAction | undefined {\n return appActions().find((action) => action.id === id);\n}\n"],"mappings":"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","names":["useCallback","useMemo","useRef","useSyncExternalStore","directories","listeners","directory","useSyncExternalStore","directory","copyLink","useMemo","useRef","useCallback","directory"]}
@@ -1,187 +0,0 @@
1
- "use client";
2
- import {
3
- ComposerMenuHeader,
4
- ComposerMenuSwitchIndicator
5
- } from "./chunk-CNFFCVGH.js";
6
- import {
7
- ConnectorAction
8
- } from "./chunk-73L7XV4G.js";
9
- import {
10
- AGENT_CAPABILITY_GROUPS,
11
- capabilityDescription,
12
- capabilityLabel,
13
- capabilitySummary,
14
- effectiveCapabilityOn,
15
- withCapability
16
- } from "./chunk-6WLX3NR3.js";
17
- import {
18
- cn
19
- } from "./chunk-A3MTTRCX.js";
20
-
21
- // src/app/components/composer-capabilities-menu-body.tsx
22
- import { CheckIcon, ChevronRightIcon, LockIcon } from "lucide-react";
23
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
24
- function ComposerCapabilitiesMenuBody(props) {
25
- const { capabilities } = props;
26
- const { customized, draft, availability } = capabilities;
27
- const set = (id, value) => capabilities.onChange(withCapability(draft, id, value));
28
- return /* @__PURE__ */ jsxs(Fragment, { children: [
29
- /* @__PURE__ */ jsx(ComposerMenuHeader, { title: "Capabilities", leading: props.leading }),
30
- /* @__PURE__ */ jsxs(
31
- "div",
32
- {
33
- role: "group",
34
- tabIndex: 0,
35
- className: "min-h-0 shrink overflow-y-auto overscroll-contain p-2 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-brand/55",
36
- children: [
37
- /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-1", children: [
38
- /* @__PURE__ */ jsxs(
39
- ConnectorAction,
40
- {
41
- presentation: props.presentation,
42
- keepOpen: true,
43
- checked: customized,
44
- label: "Customize for this chat",
45
- disabled: capabilities.disabled,
46
- className: "flex min-h-14 flex-1 items-center gap-3 rounded-md px-2 py-2",
47
- onAction: () => capabilities.onCustomizedChange(!customized),
48
- children: [
49
- /* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
50
- /* @__PURE__ */ jsx("span", { className: "block text-sm font-medium text-fg", children: "Customize for this chat" }),
51
- /* @__PURE__ */ jsx("span", { className: "mt-0.5 block text-xs leading-4.5 font-normal text-fg-muted", children: customized ? "This chat uses the choices below." : `Off uses the workspace's defaults: ${capabilitySummary(draft.values, availability).toLowerCase()}.` })
52
- ] }),
53
- /* @__PURE__ */ jsx(ComposerMenuSwitchIndicator, { checked: customized })
54
- ]
55
- }
56
- ),
57
- /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "size-11 shrink-0" })
58
- ] }),
59
- AGENT_CAPABILITY_GROUPS.map((group) => /* @__PURE__ */ jsxs("div", { role: "group", "aria-label": group.label, className: "mt-2", children: [
60
- /* @__PURE__ */ jsx(
61
- "p",
62
- {
63
- "aria-hidden": true,
64
- className: "px-2 pt-1 pb-1 text-xs leading-4.5 font-medium text-fg-subtle",
65
- children: group.label
66
- }
67
- ),
68
- group.capabilities.map((id) => {
69
- const available = availability.isAvailable(id);
70
- const on = effectiveCapabilityOn(draft.values, id, availability);
71
- const editable = customized && available && !capabilities.disabled;
72
- const note = !available ? /* @__PURE__ */ jsxs("span", { className: "mt-0.5 flex items-start gap-1.5 text-xs leading-4.5 font-normal text-fg-muted", children: [
73
- /* @__PURE__ */ jsx(LockIcon, { "aria-hidden": true, className: "mt-0.5 size-3.5 shrink-0 text-fg-subtle" }),
74
- availability.unavailableReason(id)
75
- ] }) : id === "workspaceConnectors" && on ? /* @__PURE__ */ jsx("span", { className: "mt-0.5 block text-xs leading-4.5 font-normal text-fg-muted", children: props.connectorsTotal === 0 ? "No apps connected yet." : `${props.connectorsSelected} of ${props.connectorsTotal} connected apps on` }) : null;
76
- const text = /* @__PURE__ */ jsxs(
77
- "span",
78
- {
79
- className: "min-w-0 flex-1",
80
- title: available ? capabilityDescription(id) : void 0,
81
- children: [
82
- /* @__PURE__ */ jsx(
83
- "span",
84
- {
85
- className: cn(
86
- "block text-sm font-medium",
87
- on || editable ? "text-fg" : "text-fg-muted"
88
- ),
89
- children: capabilityLabel(id)
90
- }
91
- ),
92
- note
93
- ]
94
- }
95
- );
96
- const row = /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-1", "data-capability": id, children: [
97
- editable ? /* @__PURE__ */ jsxs(
98
- ConnectorAction,
99
- {
100
- presentation: props.presentation,
101
- keepOpen: true,
102
- checked: on,
103
- label: capabilityLabel(id),
104
- className: "flex min-h-11 flex-1 items-center gap-3 rounded-md px-2 py-1.5",
105
- onAction: () => set(id, id === "skills" ? on ? false : "read" : !on),
106
- children: [
107
- text,
108
- /* @__PURE__ */ jsx(ComposerMenuSwitchIndicator, { checked: on })
109
- ]
110
- }
111
- ) : (
112
- // Read-only until "Customize for this chat" is on: still
113
- // reachable with the arrow keys and read as the current value.
114
- /* @__PURE__ */ jsxs(
115
- ConnectorAction,
116
- {
117
- presentation: props.presentation,
118
- readOnly: true,
119
- label: `${capabilityLabel(id)}, ${!available ? availability.unavailableReason(id) : on ? "on" : "off"}`,
120
- className: "flex min-h-11 flex-1 items-center gap-3 rounded-md px-2 py-1.5",
121
- onAction: () => {
122
- },
123
- children: [
124
- text,
125
- /* @__PURE__ */ jsx("span", { className: "flex h-7 min-w-7 shrink-0 items-center justify-end text-xs text-fg-subtle", children: on ? /* @__PURE__ */ jsx(CheckIcon, { "aria-hidden": true, className: "size-4 text-fg-muted" }) : "Off" })
126
- ]
127
- }
128
- )
129
- ),
130
- id === "workspaceConnectors" && on ? /* @__PURE__ */ jsx(
131
- ConnectorAction,
132
- {
133
- presentation: props.presentation,
134
- keepOpen: true,
135
- label: "Choose connected apps",
136
- className: "flex size-11 shrink-0 items-center justify-center rounded-md",
137
- onAction: props.onOpenConnectors,
138
- children: /* @__PURE__ */ jsx(ChevronRightIcon, { "aria-hidden": true, className: "size-4 text-fg-subtle" })
139
- }
140
- ) : (
141
- // Keeps every toggle in one column with the connectors row.
142
- /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "size-11 shrink-0" })
143
- )
144
- ] }, id);
145
- if (id !== "skills" || !on) return row;
146
- const manage = draft.values.skills === "manage";
147
- return /* @__PURE__ */ jsxs("div", { children: [
148
- row,
149
- editable ? /* @__PURE__ */ jsxs(
150
- ConnectorAction,
151
- {
152
- presentation: props.presentation,
153
- keepOpen: true,
154
- checked: manage,
155
- label: "Also save and install Skills",
156
- className: "mr-11 flex min-h-11 items-center gap-3 rounded-md py-1.5 pr-2 pl-6",
157
- onAction: () => set("skills", manage ? "read" : "manage"),
158
- children: [
159
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 text-sm text-fg", children: "Also save and install Skills" }),
160
- /* @__PURE__ */ jsx(ComposerMenuSwitchIndicator, { checked: manage })
161
- ]
162
- }
163
- ) : /* @__PURE__ */ jsx(
164
- ConnectorAction,
165
- {
166
- presentation: props.presentation,
167
- readOnly: true,
168
- label: manage ? "Can also save and install Skills" : "Reads Skills only",
169
- className: "mr-11 flex min-h-11 items-center py-1.5 pr-2 pl-6 text-xs leading-4.5 text-fg-muted",
170
- onAction: () => {
171
- },
172
- children: manage ? "Can also save and install Skills" : "Reads Skills only"
173
- }
174
- )
175
- ] }, id);
176
- })
177
- ] }, group.id))
178
- ]
179
- }
180
- )
181
- ] });
182
- }
183
-
184
- export {
185
- ComposerCapabilitiesMenuBody
186
- };
187
- //# sourceMappingURL=chunk-SKMNW4SW.js.map