@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,2424 +0,0 @@
1
- "use client";
2
- import {
3
- CreditRefusalNotice
4
- } from "./chunk-QHNVNR7B.js";
5
- import {
6
- RunsOnMenuBody,
7
- RunsOnNotice,
8
- UsageLimitMenuBody,
9
- VisibilityMenuBody,
10
- hasRunsOnChoices,
11
- hasVisibilityChoice,
12
- runsOnAttention,
13
- runsOnSummary,
14
- visibilitySummary
15
- } from "./chunk-W3BFRR2G.js";
16
- import {
17
- SessionSetupStrip,
18
- runsOnSetupIcon,
19
- visibilitySetupIcon
20
- } from "./chunk-VFQ3H6CO.js";
21
- import {
22
- BotLaunchStrip
23
- } from "./chunk-4NBTZRKT.js";
24
- import {
25
- BotTemplateShortcuts
26
- } from "./chunk-6MT3HHUB.js";
27
- import {
28
- ChannelCreateDialog
29
- } from "./chunk-BVUJV5WR.js";
30
- import {
31
- composerFallbackModel
32
- } from "./chunk-4TQL3WP2.js";
33
- import {
34
- useBotTemplates
35
- } from "./chunk-WV2KPJUW.js";
36
- import {
37
- initialWorkspaceMachineCompute
38
- } from "./chunk-R7FSOZHX.js";
39
- import {
40
- newChatWording,
41
- signupStarterSet
42
- } from "./chunk-KZ6BXKSD.js";
43
- import {
44
- useConnectionAccounts
45
- } from "./chunk-7BYWOFVH.js";
46
- import {
47
- SessionSecretsMenuBody,
48
- draftSecretsRows,
49
- sessionSecretsSummary
50
- } from "./chunk-YSVD5HI4.js";
51
- import {
52
- useWorkspaceMachines
53
- } from "./chunk-TZAO65I4.js";
54
- import {
55
- useRepositoryCatalogRefresh
56
- } from "./chunk-M4SDVTKJ.js";
57
- import {
58
- NO_SESSION_USAGE_LIMIT,
59
- parseSessionUsageLimitDraft,
60
- sessionUsageLimitCapability,
61
- sessionUsageLimitDraftSummary
62
- } from "./chunk-RBRX5ZS3.js";
63
- import {
64
- resolveSelectableMachineSandboxId
65
- } from "./chunk-JKRRPDGN.js";
66
- import {
67
- useWorkspaceRigs
68
- } from "./chunk-3TO3HAJR.js";
69
- import {
70
- EMPTY_COMPOSER_LAUNCH,
71
- composerLaunchSearchKey,
72
- continueArchivedChatMessage,
73
- modelProvidedAfterLaunch
74
- } from "./chunk-L34IVLQC.js";
75
- import {
76
- isPersonalAttachmentConflict,
77
- newSessionFixedResourceCatalogFailed,
78
- newSessionPersonalResourceAttachment,
79
- personalResourceSelectionIdentityKey,
80
- reconcileNewSessionFixedResources,
81
- recoverNewSessionPersonalResourceAttachment,
82
- resolvePersonalResourceOwnerScope
83
- } from "./chunk-ESSGVLV2.js";
84
- import {
85
- coveredModelChoice,
86
- creditRefusalGap,
87
- freeCreditGap
88
- } from "./chunk-XVU32APP.js";
89
- import {
90
- useSessionListHintRefresh
91
- } from "./chunk-IJYL5BZM.js";
92
- import {
93
- hydratedNewSessionProjectProvenancePresent,
94
- initialNewSessionProjectLaunchIntent,
95
- newSessionProjectSelection,
96
- nextFocusedNewSessionProjectLaunchIntent,
97
- nextNewSessionProjectLaunchIntent,
98
- resolveAmbientNewSessionProjectChannelId,
99
- resolveHydratedNewSessionProjectSelection
100
- } from "./chunk-HUAGBS4O.js";
101
- import {
102
- useWorkspaceModelCatalog
103
- } from "./chunk-LQDUHU3Y.js";
104
- import {
105
- newSessionCreateSnapshot,
106
- runNewSessionRouteSubmission
107
- } from "./chunk-QUN56622.js";
108
- import {
109
- ComposerCapabilitiesChip
110
- } from "./chunk-NOZQIEHJ.js";
111
- import {
112
- useGitHubAppConnectLauncher
113
- } from "./chunk-6ED2YWBT.js";
114
- import {
115
- ConsoleComposer,
116
- useDraftAttachments
117
- } from "./chunk-TA5CFTO4.js";
118
- import {
119
- useForgetLastSession
120
- } from "./chunk-2DVTNHTC.js";
121
- import {
122
- useAppApi
123
- } from "./chunk-XIQPI2NM.js";
124
- import {
125
- readChatDirectory,
126
- useChatDirectoryVersion
127
- } from "./chunk-Q4EFRI6X.js";
128
- import {
129
- FOCUS_CREATE_COMPOSER_EVENT
130
- } from "./chunk-HQA6FUM5.js";
131
- import {
132
- useSessionUiFeature
133
- } from "./chunk-FWXMQTVG.js";
134
- import {
135
- NewSessionStarters
136
- } from "./chunk-VLXM36VS.js";
137
- import {
138
- RepositoryContextMenuBody
139
- } from "./chunk-NWJRPDIO.js";
140
- import {
141
- attachManualRepository
142
- } from "./chunk-XTLJENQX.js";
143
- import {
144
- useBrowserAccountBridgeBlocker
145
- } from "./chunk-7LP3W5H5.js";
146
- import {
147
- ModelPicker
148
- } from "./chunk-TPMZBOFH.js";
149
- import {
150
- BillingClassMark
151
- } from "./chunk-REX6JIC7.js";
152
- import {
153
- WorkspaceComposerPlus
154
- } from "./chunk-NXWBBZJV.js";
155
- import {
156
- addsConnectorOutsideDefaults,
157
- changedConnectorExclusions,
158
- defaultConnectorSelection,
159
- newSessionConnectorCustomizeState
160
- } from "./chunk-MA6O7CM6.js";
161
- import {
162
- NewSessionDraftSyncNotice
163
- } from "./chunk-J57VNRO7.js";
164
- import {
165
- captureAnalyticsEvent
166
- } from "./chunk-55S3W7RZ.js";
167
- import {
168
- creditRefusalRecord
169
- } from "./chunk-INXGSG3J.js";
170
- import {
171
- emptySessionDraft,
172
- fitToolPolicyToAgentCapabilities,
173
- isSessionDraftComputeReady,
174
- newSessionCreateVisibility,
175
- newSessionDraftOptionsFromSessionDraft,
176
- rememberedMachineFolder,
177
- sessionDraftFromNewSessionDraftOptions,
178
- submissionFromSessionDraft
179
- } from "./chunk-WEZ5PXZP.js";
180
- import {
181
- capabilityAvailability,
182
- capabilityOn,
183
- capabilitySummary,
184
- draftFromRequest,
185
- requestFromDraft,
186
- workspaceAgentDefaultsDraft
187
- } from "./chunk-6WLX3NR3.js";
188
- import {
189
- t
190
- } from "./chunk-GE33BGB7.js";
191
- import {
192
- clientFirstPartyMcpToolPolicy,
193
- firstPartySessionToolOptionsFor,
194
- newSessionDraftToolPolicy,
195
- rehydrateRepositoryResources,
196
- repositorySelectionFromResources,
197
- selectableSessionMcpServerIds,
198
- unavailableSessionMcpServerIds
199
- } from "./chunk-ZPW5NFYD.js";
200
- import {
201
- hasAccountPermission,
202
- hasWorkspacePermission
203
- } from "./chunk-H2ALCTWC.js";
204
- import {
205
- isPersonalWorkspace
206
- } from "./chunk-LBSXJVHD.js";
207
- import {
208
- ANALYTICS_COLLECTION_ENABLED_EVENT
209
- } from "./chunk-DBQQT4M7.js";
210
- import {
211
- Link,
212
- useNavigate,
213
- usePage
214
- } from "./chunk-U5EFEMYU.js";
215
- import {
216
- useAppHost
217
- } from "./chunk-ENFLCAR3.js";
218
- import {
219
- toast
220
- } from "./chunk-YG6NARQY.js";
221
- import {
222
- useAppContext,
223
- useLatestCallback
224
- } from "./chunk-JDFDPMKX.js";
225
- import {
226
- useUiEventTarget
227
- } from "./chunk-WGPLDFEC.js";
228
- import {
229
- StatusDot
230
- } from "./chunk-X6WZOHBI.js";
231
- import {
232
- userErrorText
233
- } from "./chunk-L4OF77LE.js";
234
- import {
235
- useWindowBarTitle
236
- } from "./chunk-HD5X76TP.js";
237
- import {
238
- recentSessionModelPresentation,
239
- recentSessionStatus,
240
- recentSessionsWithOpened,
241
- relativeTimeLabel,
242
- sessionDisplayTitle,
243
- sessionRepoLabel
244
- } from "./chunk-6AHATAAY.js";
245
- import {
246
- Notice
247
- } from "./chunk-WLEDGIVS.js";
248
- import {
249
- NewSessionRealtimeControl
250
- } from "./chunk-FBTJKSTM.js";
251
- import {
252
- useVaults
253
- } from "./chunk-ZR6WALSK.js";
254
- import {
255
- useChannels
256
- } from "./chunk-TWYAHA4C.js";
257
- import {
258
- useWorkspaceSessions
259
- } from "./chunk-J335IP56.js";
260
- import {
261
- isMachineComputeSelectable
262
- } from "./chunk-JWKGPA6Q.js";
263
- import {
264
- MACHINES_COMPOSER_POLL_MS
265
- } from "./chunk-XDBYWVCW.js";
266
- import {
267
- FILE_ONLY_MESSAGE_TEXT
268
- } from "./chunk-AXBSYWKX.js";
269
- import {
270
- LightboxProvider
271
- } from "./chunk-UI4HI5QK.js";
272
- import {
273
- Button
274
- } from "./chunk-7QQN3KNP.js";
275
- import {
276
- ModelMark
277
- } from "./chunk-WJPMYXKZ.js";
278
- import {
279
- useNewSessionDraft
280
- } from "./chunk-53HPQVAL.js";
281
- import {
282
- OPENGENI_UPDATING_NOTICE,
283
- isTransientServiceFailure
284
- } from "./chunk-5AIMVW6Y.js";
285
- import {
286
- prestartSessionRealtime,
287
- useRealtimeModelSelection
288
- } from "./chunk-76ERNKIZ.js";
289
- import {
290
- useOpenGeni
291
- } from "./chunk-TVQCDDSZ.js";
292
- import {
293
- effortOptionsForModel,
294
- findPickerRow,
295
- modelUsesCredits,
296
- runnableLatencyModesForModel
297
- } from "./chunk-ZHC47M2B.js";
298
-
299
- // src/app/routes/sessions-index.tsx
300
- import { resolveWorkspaceSessionToolDefaults, stableJson } from "@opengeni/contracts";
301
- import {
302
- OpenGeniApiError
303
- } from "@opengeni/sdk";
304
- import { CreditCardIcon, LockIcon } from "lucide-react";
305
- import {
306
- createElement,
307
- lazy,
308
- Suspense,
309
- useCallback,
310
- useEffect,
311
- useLayoutEffect,
312
- useMemo,
313
- useRef,
314
- useState
315
- } from "react";
316
- import { resolveWorkspaceAgentDefaults } from "@opengeni/contracts";
317
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
318
- var useCommitSynchronousEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
319
- var EmptyCreditsNotice = lazy(
320
- () => import("./app/components/credit-required-prompt.js").then((module) => ({
321
- default: module.EmptyCreditsNotice
322
- }))
323
- );
324
- var CreditTopupPrompt = lazy(
325
- () => import("./app/components/credit-required-prompt.js").then((module) => ({
326
- default: module.CreditRequiredPrompt
327
- }))
328
- );
329
- function SessionsIndexRoute({
330
- workspaceId,
331
- launch = EMPTY_COMPOSER_LAUNCH
332
- }) {
333
- const { accessKeyVersion, accessContext } = useAppContext();
334
- useForgetLastSession(accessContext.subjectId, workspaceId);
335
- return /* @__PURE__ */ jsx(
336
- SessionsIndexRouteContent,
337
- {
338
- workspaceId,
339
- launch
340
- },
341
- `${workspaceId}:${accessKeyVersion}`
342
- );
343
- }
344
- function SessionsIndexRouteContent({
345
- workspaceId,
346
- launch
347
- }) {
348
- const uiEvents = useUiEventTarget("window");
349
- const context = useAppContext();
350
- const api = useAppApi();
351
- const page = usePage();
352
- useWindowBarTitle("New session");
353
- const starters = useSessionUiFeature("starters");
354
- const hostStarters = useAppHost().starters;
355
- const addCredits = useSessionUiFeature("addCredits");
356
- const chatList = useSessionUiFeature("chatList");
357
- const connectionAccounts = useConnectionAccounts(
358
- context.client,
359
- {
360
- id: "new-session",
361
- workspaceId,
362
- selectedIds: [...context.selectedCapabilityToolIds]
363
- },
364
- context.workspaceCapabilityCatalog,
365
- context.accessContext === null ? null : hasWorkspacePermission(context.accessContext, workspaceId, "connections:read")
366
- );
367
- const repositoryCatalogRefresh = useRepositoryCatalogRefresh(workspaceId, context);
368
- const githubAppConnect = useGitHubAppConnectLauncher(workspaceId);
369
- const firstPartyMcpToolPolicy = useMemo(
370
- () => clientFirstPartyMcpToolPolicy(context.clientConfig),
371
- [context.clientConfig]
372
- );
373
- const workspace = context.workspaces.find((candidate) => candidate.id === workspaceId) ?? null;
374
- const configuredToolDefaults = useMemo(
375
- () => resolveWorkspaceSessionToolDefaults(workspace?.settings),
376
- [workspace?.settings]
377
- );
378
- const defaultFirstPartyMcpTools = useMemo(
379
- () => configuredToolDefaults?.firstPartyMcpTools?.filter(
380
- (tool) => firstPartyMcpToolPolicy.allowed.includes(tool)
381
- ) ?? firstPartyMcpToolPolicy.default,
382
- [configuredToolDefaults, firstPartyMcpToolPolicy]
383
- );
384
- const defaultSandboxBackend = context.clientConfig.defaultSandboxBackend;
385
- const firstPartyToolOptions = useMemo(
386
- () => firstPartySessionToolOptionsFor(firstPartyMcpToolPolicy.allowed),
387
- [firstPartyMcpToolPolicy]
388
- );
389
- const navigate = useNavigate();
390
- const modelCatalog = useWorkspaceModelCatalog(workspaceId);
391
- const channelsQuery = useChannels({ pollIntervalMs: 6e4 });
392
- const launchChannelId = launch.channelId === "default" ? null : launch.channelId;
393
- const [selectedChannelId, setSelectedChannelId] = useState(
394
- launchChannelId ?? null
395
- );
396
- const selectedChannelIdRef = useRef(selectedChannelId);
397
- const setSelectedProjectChannelId = useCallback((channelId) => {
398
- selectedChannelIdRef.current = channelId;
399
- setSelectedChannelId(channelId);
400
- }, []);
401
- const [selectionHistory, setSelectionHistory] = useState({
402
- projects: []
403
- });
404
- const [projectProvenancePresent, setProjectProvenancePresent] = useState(
405
- launchChannelId !== void 0
406
- );
407
- const remoteDraftHydratedRef = useRef(false);
408
- const previousLaunchChannelIdRef = useRef(launchChannelId);
409
- const launchProjectIntentRef = useRef(initialNewSessionProjectLaunchIntent(launchChannelId));
410
- const recentChannelId = selectionHistory.projects[0]?.channelId ?? null;
411
- const [projectDialogOpen, setProjectDialogOpen] = useState(false);
412
- const [projectNameDraft, setProjectNameDraft] = useState("");
413
- const [projectAudienceDraft, setProjectAudienceDraft] = useState("workspace");
414
- const { resetSessionView } = context;
415
- const [message, setMessage] = useState("");
416
- const launchBotTemplateId = launch.botTemplateId;
417
- const workspaceBotTemplates = useBotTemplates(workspaceId);
418
- const [botLaunch, setBotLaunch] = useState(null);
419
- useEffect(() => {
420
- if (!launchBotTemplateId) {
421
- setBotLaunch(null);
422
- return;
423
- }
424
- let live = true;
425
- setBotLaunch({ id: launchBotTemplateId, state: { kind: "loading" } });
426
- context.client.getBotTemplate(workspaceId, launchBotTemplateId).then(
427
- (template) => {
428
- if (live)
429
- setBotLaunch({
430
- id: launchBotTemplateId,
431
- state: { kind: "ready", template }
432
- });
433
- },
434
- (error) => {
435
- if (live)
436
- setBotLaunch({
437
- id: launchBotTemplateId,
438
- state: { kind: "error", message: userErrorText(error) }
439
- });
440
- }
441
- );
442
- return () => {
443
- live = false;
444
- };
445
- }, [context.client, launchBotTemplateId, workspaceId]);
446
- const botTemplate = botLaunch?.state.kind === "ready" ? botLaunch.state.template : null;
447
- const newSessionBot = botTemplate ? {
448
- name: botTemplate.name,
449
- description: botTemplate.description,
450
- avatar: botTemplate.avatar
451
- } : void 0;
452
- const [creditTopupOpen, setCreditTopupOpen] = useState(false);
453
- const [draft, setDraft] = useState(
454
- () => emptySessionDraft(defaultFirstPartyMcpTools, defaultSandboxBackend)
455
- );
456
- const personalWorkspace = isPersonalWorkspace(workspace, context.managedSelfContext);
457
- const [capabilitiesOpenRequest, setCapabilitiesOpenRequest] = useState(void 0);
458
- const agentAvailability = useMemo(
459
- () => capabilityAvailability(context.clientConfig.agentConfig),
460
- [context.clientConfig.agentConfig]
461
- );
462
- const workspaceAgentDraft = useMemo(
463
- () => workspaceAgentDefaultsDraft({
464
- capabilities: resolveWorkspaceAgentDefaults(workspace?.settings)?.capabilities,
465
- legacyHumanInputOff: workspace?.settings.agentHumanInputEnabled === false
466
- }),
467
- [workspace?.settings]
468
- );
469
- const composerAgentCapabilities = {
470
- customized: draft.agentCapabilities !== void 0,
471
- draft: draft.agentCapabilities !== void 0 ? draftFromRequest(draft.agentCapabilities) : workspaceAgentDraft,
472
- availability: agentAvailability,
473
- onCustomizedChange: (customized) => setDraft((current) => {
474
- if (!customized) {
475
- const { agentCapabilities: _dropped, ...rest } = current;
476
- return rest;
477
- }
478
- return {
479
- ...current,
480
- agentCapabilities: requestFromDraft(workspaceAgentDraft, agentAvailability)
481
- };
482
- }),
483
- onChange: (next) => setDraft((current) => ({
484
- ...current,
485
- agentCapabilities: requestFromDraft(next, agentAvailability)
486
- }))
487
- };
488
- const draftSecretsOn = agentAvailability.isAvailable("secrets") && capabilityOn(composerAgentCapabilities.draft.values, "secrets");
489
- const canListSecrets = hasWorkspacePermission(context.accessContext, workspaceId, "secrets:list");
490
- const draftVaults = useVaults({
491
- client: context.client,
492
- workspaceId,
493
- enabled: canListSecrets && draftSecretsOn
494
- });
495
- const draftVaultPolicy = draft.vaultPolicy ?? { mode: "all" };
496
- const draftVaultRows = draftVaults.vaults ? draftSecretsRows(draftVaults.vaults, draftVaultPolicy) : null;
497
- const attachments = useDraftAttachments(
498
- workspaceId,
499
- draft.visibility === "private" ? "personal" : "workspace"
500
- );
501
- const fixedResourceCatalogEnabled = draft.compute.kind === "sandbox";
502
- const canUseRigs = hasWorkspacePermission(context.accessContext, workspaceId, "rigs:use");
503
- const rigs = useWorkspaceRigs({
504
- enabled: fixedResourceCatalogEnabled && canUseRigs
505
- });
506
- const [tenancyCapabilities, setTenancyCapabilities] = useState(null);
507
- const tenancyCapabilityGeneration = useRef(0);
508
- const visibilityChosenRef = useRef(false);
509
- useEffect(() => {
510
- const generation = ++tenancyCapabilityGeneration.current;
511
- visibilityChosenRef.current = false;
512
- setTenancyCapabilities(null);
513
- void context.client.getSessionTenancyCreateCapabilities(workspaceId).then((capabilities) => {
514
- if (tenancyCapabilityGeneration.current !== generation) return;
515
- setTenancyCapabilities(capabilities);
516
- if (!capabilities.canCreatePrivate) {
517
- setDraft(
518
- (current) => current.visibility === "private" ? { ...current, visibility: "workspace" } : current
519
- );
520
- } else if (capabilities.defaultVisibility === "private" && !visibilityChosenRef.current) {
521
- setDraft(
522
- (current) => current.visibility === "private" ? current : { ...current, visibility: "private" }
523
- );
524
- }
525
- }).catch(() => {
526
- if (tenancyCapabilityGeneration.current !== generation) return;
527
- setTenancyCapabilities({
528
- activated: false,
529
- canCreatePrivate: false,
530
- reason: "unavailable"
531
- });
532
- setDraft(
533
- (current) => current.visibility === "private" ? { ...current, visibility: "workspace" } : current
534
- );
535
- });
536
- }, [context.client, personalWorkspace, workspaceId]);
537
- const createVisibility = newSessionCreateVisibility(
538
- personalWorkspace,
539
- draft.visibility,
540
- tenancyCapabilities?.canCreatePrivate === true
541
- );
542
- const canCreatePrivateChat = tenancyCapabilities?.canCreatePrivate === true;
543
- const projectAudienceOffered = hasVisibilityChoice({
544
- personalWorkspace,
545
- canCreatePrivate: canCreatePrivateChat
546
- });
547
- const personalOwnerScope = resolvePersonalResourceOwnerScope({
548
- authMode: context.clientConfig.auth.mode,
549
- authSession: context.authSession,
550
- accessSubjectId: context.accessContext.subjectId,
551
- managedSelfContext: context.managedSelfContext,
552
- workspace
553
- });
554
- const personalResourcesAvailable = personalOwnerScope !== null && (personalWorkspace || tenancyCapabilities?.activated === true);
555
- const personalResourceEligibilitySettled = personalWorkspace || personalOwnerScope === null || tenancyCapabilities !== null;
556
- const noManagedSandbox = defaultSandboxBackend === "none";
557
- const selectableRigs = noManagedSandbox ? [] : rigs.rigs.filter((rig) => rig.scope !== "user" || personalResourcesAvailable);
558
- const selectedRig = selectableRigs.find((candidate) => candidate.id === draft.rigId);
559
- const selectableRigIdsKey = selectableRigs.map((rig) => rig.id).join("\0");
560
- const fixedResourceSelection = reconcileNewSessionFixedResources({
561
- selectedRigId: draft.rigId,
562
- selectableRigIds: fixedResourceCatalogEnabled ? selectableRigs.map((rig) => rig.id) : draft.rigId ? [draft.rigId] : [],
563
- rigsSettled: !fixedResourceCatalogEnabled || personalResourceEligibilitySettled && !rigs.loading && rigs.error === null
564
- });
565
- const fixedResourceCatalogError = draft.compute.kind === "sandbox" && newSessionFixedResourceCatalogFailed({
566
- selectedRigId: draft.rigId,
567
- selectionResolved: fixedResourceSelection.selectionResolved,
568
- rigCatalogFailed: rigs.error !== null
569
- });
570
- useEffect(() => {
571
- setDraft((current) => {
572
- if (current.compute.kind !== "sandbox") return current;
573
- const reconciled = reconcileNewSessionFixedResources({
574
- selectedRigId: current.rigId,
575
- selectableRigIds: selectableRigIdsKey ? selectableRigIdsKey.split("\0") : [],
576
- rigsSettled: personalResourceEligibilitySettled && !rigs.loading && rigs.error === null
577
- });
578
- return reconciled.rigId === current.rigId ? current : { ...current, rigId: reconciled.rigId };
579
- });
580
- }, [
581
- draft.rigId,
582
- personalResourceEligibilitySettled,
583
- rigs.error,
584
- rigs.loading,
585
- selectableRigIdsKey
586
- ]);
587
- const [fleetPollMs, setFleetPollMs] = useState(void 0);
588
- const fleet = useWorkspaceMachines({ pollIntervalMs: fleetPollMs });
589
- const machines = fleet.machines.filter((machine) => machine.kind === "selfhosted");
590
- const runsOnChoices = {
591
- draft,
592
- machines,
593
- rigs: selectableRigs,
594
- workspaceDefaultRigId: workspace?.defaultRigId ?? null,
595
- selfhostedPrimary: defaultSandboxBackend === "selfhosted",
596
- noManagedSandbox,
597
- // A 404 means Connected Machines are off here, not a failure.
598
- fleetLoadFailed: fleet.error != null && !(fleet.error instanceof OpenGeniApiError && fleet.error.status === 404),
599
- selectedChannelId,
600
- selectionHistory
601
- };
602
- const fleetEmpty = machines.length === 0;
603
- const fleetLoadFailed = fleet.error != null && !(fleet.error instanceof OpenGeniApiError && fleet.error.status === 404);
604
- useEffect(() => {
605
- if (fleet.loading) return;
606
- setFleetPollMs(!fleetEmpty || fleetLoadFailed ? MACHINES_COMPOSER_POLL_MS : void 0);
607
- }, [fleet.loading, fleetEmpty, fleetLoadFailed]);
608
- const selectedMachineSandboxId = draft.compute.kind === "machine" ? draft.compute.sandboxId : null;
609
- const selectedMachine = selectedMachineSandboxId ? machines.find((machine) => machine.sandboxId === selectedMachineSandboxId) ?? null : null;
610
- const personalMachineSelected = selectedMachine?.scope === "user";
611
- const selectedPersonalResourceNames = draft.compute.kind === "sandbox" ? selectedRig?.scope === "user" ? [selectedRig.name] : [] : personalMachineSelected && selectedMachine ? [selectedMachine.name] : [];
612
- const personalResourceSelectionKey = personalResourceSelectionIdentityKey({
613
- rigId: selectedRig?.scope === "user" ? selectedRig.id : null,
614
- connectedMachineId: personalMachineSelected && selectedMachine ? selectedMachine.enrollmentId : null
615
- });
616
- const selectedPersonalResourceCount = personalResourceSelectionKey ? personalResourceSelectionKey.split("\0").length : 0;
617
- const [personalResourceCatalogRefreshPending, setPersonalResourceCatalogRefreshPending] = useState(false);
618
- const personalResourceCatalogRefreshGeneration = useRef(0);
619
- const personalResourceAttachment = newSessionPersonalResourceAttachment({
620
- personalResourceCount: selectedPersonalResourceCount,
621
- visibility: createVisibility
622
- });
623
- const refreshPersonalResourceCatalogs = useLatestCallback(async () => {
624
- const generation = ++personalResourceCatalogRefreshGeneration.current;
625
- setPersonalResourceCatalogRefreshPending(true);
626
- try {
627
- if (canUseRigs) await rigs.refresh();
628
- } finally {
629
- if (personalResourceCatalogRefreshGeneration.current === generation) {
630
- setPersonalResourceCatalogRefreshPending(false);
631
- }
632
- }
633
- });
634
- const recoverPersonalResourceAttachment = useLatestCallback(
635
- (error, attemptedInput) => {
636
- if (!isPersonalAttachmentConflict(error, attemptedInput)) return;
637
- void recoverNewSessionPersonalResourceAttachment({
638
- error,
639
- attemptedInput,
640
- refreshCatalogs: refreshPersonalResourceCatalogs
641
- });
642
- }
643
- );
644
- const [toolSelectionExplicit, setToolSelectionExplicit] = useState(false);
645
- const [modelProvided, setModelProvided] = useState(void 0);
646
- const [connectorCustomizing, setConnectorCustomizing] = useState(false);
647
- const [connectorExclusions, setConnectorExclusions] = useState([]);
648
- const followWorkspaceConnectors = () => {
649
- connectionAccounts.resetEmptyChoices();
650
- setConnectorCustomizing(false);
651
- setToolSelectionExplicit(false);
652
- setConnectorExclusions([]);
653
- context.setSelectedCapabilityToolIds(
654
- defaultConnectorSelection(context.workspaceDefaultToolIds, [])
655
- );
656
- };
657
- const changeConnectorSelection = (selection) => {
658
- if (!connectorCustomizing) setConnectorCustomizing(true);
659
- if (!toolSelectionExplicit && addsConnectorOutsideDefaults(
660
- context.selectedCapabilityToolIds,
661
- selection.mcpServerIds,
662
- context.workspaceDefaultToolIds
663
- )) {
664
- setToolSelectionExplicit(true);
665
- } else if (!toolSelectionExplicit) {
666
- setConnectorExclusions(
667
- (current) => changedConnectorExclusions(
668
- current,
669
- context.selectedCapabilityToolIds,
670
- selection.mcpServerIds
671
- )
672
- );
673
- }
674
- context.setSelectedCapabilityToolIds(selection.mcpServerIds);
675
- };
676
- const [submitting, setSubmitting] = useState(false);
677
- const usageLimitCapability = sessionUsageLimitCapability(context.clientConfig);
678
- const [usageLimitDraft, setUsageLimitDraft] = useState(NO_SESSION_USAGE_LIMIT);
679
- const [usageLimitSendBlocked, setUsageLimitSendBlocked] = useState(false);
680
- const [createCreditRefusal, setCreateCreditRefusal] = useState(null);
681
- const [createdSessionAuthority, setCreatedSessionAuthority] = useState(null);
682
- const composerRegionRef = useRef(null);
683
- const [createComposerFocusGen, setCreateComposerFocusGen] = useState(0);
684
- const selectProject = useLatestCallback((channelId, explicit = true) => {
685
- const previousChannelId = selectedChannelIdRef.current;
686
- if (explicit) setProjectProvenancePresent(true);
687
- setSelectedProjectChannelId(channelId);
688
- setDraft((current) => {
689
- const selection = newSessionProjectSelection(
690
- selectionHistory,
691
- channelId,
692
- { channelId: previousChannelId, compute: current.compute },
693
- defaultSandboxBackend
694
- );
695
- return selection.compute === current.compute ? current : { ...current, compute: selection.compute };
696
- });
697
- });
698
- const setExplicitComputeDraft = useLatestCallback((nextDraft) => {
699
- setProjectProvenancePresent(true);
700
- setDraft(
701
- nextDraft.compute.kind === "sandbox" && !nextDraft.compute.backend && defaultSandboxBackend !== "selfhosted" ? {
702
- ...nextDraft,
703
- compute: {
704
- ...nextDraft.compute,
705
- backend: defaultSandboxBackend ?? ""
706
- }
707
- } : nextDraft
708
- );
709
- });
710
- useEffect(() => {
711
- resetSessionView();
712
- }, [resetSessionView, workspaceId]);
713
- useCommitSynchronousEffect(() => {
714
- const previousLaunchChannelId = previousLaunchChannelIdRef.current;
715
- previousLaunchChannelIdRef.current = launchChannelId;
716
- launchProjectIntentRef.current = nextNewSessionProjectLaunchIntent(
717
- launchProjectIntentRef.current,
718
- previousLaunchChannelId,
719
- launchChannelId
720
- );
721
- const channelId = resolveAmbientNewSessionProjectChannelId({
722
- launchChannelId,
723
- previousLaunchChannelId,
724
- recentChannelId,
725
- remoteDraftHydrated: remoteDraftHydratedRef.current
726
- });
727
- if (channelId === void 0) return;
728
- if (launchChannelId === void 0 && previousLaunchChannelId !== void 0) {
729
- setProjectProvenancePresent(false);
730
- }
731
- selectProject(channelId, launchChannelId !== void 0);
732
- }, [launchChannelId, recentChannelId, selectProject]);
733
- useEffect(() => {
734
- if (selectedChannelId !== null && !channelsQuery.loading && !channelsQuery.channels.some((channel) => channel.id === selectedChannelId)) {
735
- selectProject(null, false);
736
- }
737
- }, [channelsQuery.channels, channelsQuery.loading, selectedChannelId, selectProject]);
738
- const createProject = useCallback(async () => {
739
- const name = projectNameDraft.trim();
740
- if (!name) return;
741
- const project = await channelsQuery.create({
742
- name,
743
- ...projectAudienceOffered ? { visibility: projectAudienceDraft } : {}
744
- });
745
- if (!project) {
746
- toast.error("Couldn't create the project. The name may already be in use.");
747
- return;
748
- }
749
- selectProject(project.id);
750
- setProjectDialogOpen(false);
751
- setProjectNameDraft("");
752
- setProjectAudienceDraft("workspace");
753
- }, [
754
- channelsQuery,
755
- projectAudienceDraft,
756
- projectAudienceOffered,
757
- projectNameDraft,
758
- selectProject
759
- ]);
760
- const selectedProjectOnlyMe = channelsQuery.channels.find((channel) => channel.id === selectedChannelId)?.visibility === "private";
761
- useEffect(() => {
762
- if (!selectedProjectOnlyMe || !tenancyCapabilities) return;
763
- if (!canCreatePrivateChat) {
764
- selectProject(null, false);
765
- return;
766
- }
767
- setDraft(
768
- (current) => current.visibility === "private" ? current : { ...current, visibility: "private" }
769
- );
770
- }, [canCreatePrivateChat, selectProject, selectedProjectOnlyMe, tenancyCapabilities]);
771
- useEffect(() => {
772
- const onRequest = (event) => {
773
- const requestedChannelId = event.detail?.channelId;
774
- launchProjectIntentRef.current = nextFocusedNewSessionProjectLaunchIntent(
775
- launchProjectIntentRef.current,
776
- requestedChannelId
777
- );
778
- if (requestedChannelId !== void 0) {
779
- selectProject(requestedChannelId);
780
- } else if (remoteDraftHydratedRef.current) {
781
- setProjectProvenancePresent(false);
782
- selectProject(recentChannelId, false);
783
- }
784
- setCreateComposerFocusGen((current) => current + 1);
785
- };
786
- uiEvents.addEventListener(FOCUS_CREATE_COMPOSER_EVENT, onRequest);
787
- return () => uiEvents.removeEventListener(FOCUS_CREATE_COMPOSER_EVENT, onRequest);
788
- }, [recentChannelId, selectProject, uiEvents]);
789
- const computeReady = isSessionDraftComputeReady(draft) && (draft.compute.kind !== "machine" || !fleet.loading && selectedMachine !== null && isMachineComputeSelectable(selectedMachine.state));
790
- const persistedToolPolicy = useMemo(
791
- () => fitToolPolicyToAgentCapabilities(
792
- newSessionDraftToolPolicy({
793
- selectedMcpServerIds: context.selectedCapabilityToolIds,
794
- workspaceDefaultMcpServerIds: context.workspaceDefaultToolIds,
795
- catalogReady: context.workspaceMcpCatalogReady,
796
- customizing: connectorCustomizing,
797
- explicit: toolSelectionExplicit,
798
- ...!toolSelectionExplicit ? { excludedMcpServerIds: connectorExclusions } : {}
799
- }),
800
- draft.agentCapabilities
801
- ),
802
- [
803
- context.selectedCapabilityToolIds,
804
- context.workspaceMcpCatalogReady,
805
- context.workspaceDefaultToolIds,
806
- toolSelectionExplicit,
807
- connectorCustomizing,
808
- connectorExclusions,
809
- draft.agentCapabilities
810
- ]
811
- );
812
- const persistedValue = useMemo(
813
- () => ({
814
- text: message,
815
- resources: [
816
- ...draft.compute.kind === "machine" ? [] : context.currentResources,
817
- ...attachments.readyResources
818
- ],
819
- tools: persistedToolPolicy.tools,
820
- toolsProvided: persistedToolPolicy.toolsProvided,
821
- model: context.model,
822
- reasoningEffort: context.reasoningEffort,
823
- latencyMode: context.latencyMode,
824
- ...modelProvided !== void 0 ? { modelProvided } : {},
825
- ...projectProvenancePresent ? { selectedProjectChannelId: selectedChannelId } : {},
826
- options: {
827
- ...newSessionDraftOptionsFromSessionDraft(
828
- draft,
829
- defaultFirstPartyMcpTools,
830
- createVisibility
831
- ),
832
- ...persistedToolPolicy.excludedMcpServerIds !== void 0 ? { excludedMcpServerIds: persistedToolPolicy.excludedMcpServerIds } : {}
833
- }
834
- }),
835
- [
836
- attachments.readyResources,
837
- context.model,
838
- context.latencyMode,
839
- context.reasoningEffort,
840
- context.currentResources,
841
- draft,
842
- defaultFirstPartyMcpTools,
843
- message,
844
- modelProvided,
845
- createVisibility,
846
- persistedToolPolicy,
847
- projectProvenancePresent,
848
- selectedChannelId
849
- ]
850
- );
851
- useEffect(() => {
852
- if (context.selectedPersonalGitHubRepoIds.size > 0 && !context.personalGitHubAuthority && context.personalGitHubCatalogReady) {
853
- void context.ensurePersonalGitHubAuthority(workspaceId);
854
- }
855
- }, [
856
- context,
857
- context.ensurePersonalGitHubAuthority,
858
- context.personalGitHubAuthority,
859
- context.personalGitHubCatalogReady,
860
- context.selectedPersonalGitHubRepoIds.size,
861
- workspaceId
862
- ]);
863
- const hydrateResources = useLatestCallback(
864
- (resources) => rehydrateRepositoryResources(resources, context.githubRepos, {
865
- catalogReady: context.githubCatalogReady,
866
- personalRepositories: context.personalGitHubRepositories,
867
- personalCatalogReady: context.personalGitHubCatalogReady
868
- })
869
- );
870
- const setModel = context.setModel;
871
- const setReasoningEffort = context.setReasoningEffort;
872
- const setLatencyMode = context.setLatencyMode;
873
- const setSelectedCapabilityToolIds = context.setSelectedCapabilityToolIds;
874
- const setManualRepos = context.setManualRepos;
875
- const setSelectedRepoIds = context.setSelectedRepoIds;
876
- const setSelectedRepoRefs = context.setSelectedRepoRefs;
877
- const setSelectedPersonalGitHubRepoIds = context.setSelectedPersonalGitHubRepoIds;
878
- const setSelectedPersonalGitHubRepoRefs = context.setSelectedPersonalGitHubRepoRefs;
879
- const githubRepos = context.githubRepos;
880
- const workspaceDefaultToolIdsForHydration = context.workspaceDefaultToolIds;
881
- const applyRemoteDraft = useCallback(
882
- (remote, history, memberTarget) => {
883
- setMessage(remote.text);
884
- const restored = sessionDraftFromNewSessionDraftOptions(
885
- remote.options,
886
- defaultFirstPartyMcpTools,
887
- defaultSandboxBackend
888
- );
889
- const projectSelection = resolveHydratedNewSessionProjectSelection({
890
- launchIntent: launchProjectIntentRef.current,
891
- remote,
892
- history,
893
- restoredCompute: restored.compute,
894
- defaultSandboxBackend
895
- });
896
- remoteDraftHydratedRef.current = true;
897
- setSelectionHistory(history);
898
- setProjectProvenancePresent(
899
- hydratedNewSessionProjectProvenancePresent(launchProjectIntentRef.current, remote)
900
- );
901
- setSelectedProjectChannelId(projectSelection.channelId);
902
- const compute = initialWorkspaceMachineCompute({
903
- settings: workspace?.settings,
904
- memberTarget,
905
- options: remote.options,
906
- fallback: projectSelection.compute,
907
- backend: defaultSandboxBackend
908
- });
909
- setDraft({ ...restored, compute });
910
- setModel(remote.model);
911
- setReasoningEffort(remote.reasoningEffort);
912
- setLatencyMode(remote.latencyMode);
913
- setModelProvided(remote.modelProvided);
914
- const customize = newSessionConnectorCustomizeState({
915
- toolsProvided: remote.toolsProvided,
916
- tools: remote.tools,
917
- excludedMcpServerIds: remote.options.excludedMcpServerIds
918
- });
919
- setConnectorCustomizing(customize.customizing);
920
- setToolSelectionExplicit(customize.explicit);
921
- setConnectorExclusions(remote.options.excludedMcpServerIds ?? []);
922
- const selected = new Set(
923
- customize.explicit ? remote.tools.map((tool) => tool.id) : defaultConnectorSelection(
924
- workspaceDefaultToolIdsForHydration,
925
- customize.customizing ? remote.options.excludedMcpServerIds ?? [] : []
926
- )
927
- );
928
- setSelectedCapabilityToolIds(selectableSessionMcpServerIds(selected));
929
- const repositorySelection = repositorySelectionFromResources(remote.resources, githubRepos);
930
- setManualRepos(repositorySelection.manualRepos);
931
- setSelectedRepoIds(repositorySelection.selectedRepoIds);
932
- setSelectedRepoRefs(repositorySelection.selectedRepoRefs);
933
- setSelectedPersonalGitHubRepoIds(repositorySelection.selectedPersonalRepoIds);
934
- setSelectedPersonalGitHubRepoRefs(repositorySelection.selectedPersonalRepoRefs);
935
- },
936
- [
937
- setManualRepos,
938
- setModel,
939
- setLatencyMode,
940
- setReasoningEffort,
941
- setSelectedCapabilityToolIds,
942
- setSelectedRepoIds,
943
- setSelectedRepoRefs,
944
- setSelectedPersonalGitHubRepoIds,
945
- setSelectedPersonalGitHubRepoRefs,
946
- githubRepos,
947
- defaultFirstPartyMcpTools,
948
- defaultSandboxBackend,
949
- setSelectedProjectChannelId,
950
- workspaceDefaultToolIdsForHydration,
951
- workspace?.settings
952
- ]
953
- );
954
- const newSessionDraft = useNewSessionDraft({
955
- workspaceId,
956
- client: context.client,
957
- value: persistedValue,
958
- onApplyRemote: applyRemoteDraft,
959
- restoreReadyFiles: attachments.restoreReadyFiles,
960
- hydrateResources,
961
- suspendAutosave: submitting,
962
- // Establish the passive baseline only after effective visibility settles.
963
- // Otherwise a late Personal-workspace capability response turns hydration
964
- // into an autosave, racing navigation and sibling drafts without a user edit.
965
- // Failed capability reads settle to the existing unavailable fallback too.
966
- // GitHub remains optional and must not keep the composer unsendable.
967
- resourceHydrationReady: context.workspaceMcpCatalogReady && tenancyCapabilities !== null
968
- });
969
- useEffect(() => {
970
- if (newSessionDraft.loading || !context.workspaceMcpCatalogReady || toolSelectionExplicit)
971
- return;
972
- const next = defaultConnectorSelection(
973
- context.workspaceDefaultToolIds,
974
- connectorCustomizing ? connectorExclusions : []
975
- );
976
- setSelectedCapabilityToolIds(
977
- (current) => current.size === next.size && [...next].every((id) => current.has(id)) ? current : next
978
- );
979
- }, [
980
- newSessionDraft.loading,
981
- context.workspaceMcpCatalogReady,
982
- context.workspaceDefaultToolIds,
983
- setSelectedCapabilityToolIds,
984
- connectorCustomizing,
985
- connectorExclusions,
986
- toolSelectionExplicit
987
- ]);
988
- const busy = context.busy || submitting;
989
- const privateCreateUnavailable = personalWorkspace && tenancyCapabilities === null || !personalWorkspace && draft.visibility === "private" && tenancyCapabilities?.canCreatePrivate !== true;
990
- const selectedPolicyRow = findPickerRow(modelCatalog.rows, context.model);
991
- const starterSet = signupStarterSet(
992
- context.authSession?.user.email,
993
- workspace?.accountId,
994
- context.managedSelfContext?.memberships.find(
995
- (membership) => membership.organizationId === workspace?.accountId
996
- )?.signupUseCase
997
- );
998
- const wording = newChatWording(starterSet);
999
- const refusedCreate = createCreditRefusal?.workspaceId === workspaceId ? createCreditRefusal : null;
1000
- const creditCoverageOptions = {
1001
- selectedModel: context.model,
1002
- preferredModel: modelCatalog.defaultSelection?.model
1003
- };
1004
- const creditGap = refusedCreate ? creditRefusalGap(modelCatalog.rows, refusedCreate.model, creditCoverageOptions) : freeCreditGap(modelCatalog.rows, context.model, creditCoverageOptions);
1005
- const noteCreditRefusal = (error, request) => {
1006
- const refusal = creditRefusalRecord(error, { workspaceId }, request.model ?? context.model);
1007
- if (!refusal) return false;
1008
- setCreateCreditRefusal(refusal);
1009
- void modelCatalog.refresh();
1010
- return true;
1011
- };
1012
- const chooseCoveredModel = (id) => {
1013
- const row = findPickerRow(modelCatalog.rows, id);
1014
- const choice = row ? coveredModelChoice(row, context.reasoningEffort, context.latencyMode) : null;
1015
- if (!choice) return;
1016
- setModelProvided(true);
1017
- context.setModel(choice.model);
1018
- context.setReasoningEffort(choice.effort);
1019
- if (choice.latencyMode !== null) context.setLatencyMode(choice.latencyMode);
1020
- };
1021
- const newSessionPolicyValid = Boolean(
1022
- selectedPolicyRow?.selectable && effortOptionsForModel(selectedPolicyRow.catalog).includes(context.reasoningEffort) && (context.latencyMode === "standard" || runnableLatencyModesForModel(selectedPolicyRow.catalog).includes(context.latencyMode))
1023
- );
1024
- const noRunnableModel = !modelCatalog.loading && modelCatalog.rows.length > 0 && !modelCatalog.rows.some((row) => row.selectable);
1025
- const newSessionPolicyError = !modelCatalog.loading && !newSessionPolicyValid && !noRunnableModel && selectedPolicyRow?.selectable ? "Choose a supported model, reasoning level, and speed." : null;
1026
- const pendingFallbackModel = useMemo(() => {
1027
- if (modelCatalog.loading || newSessionDraft.loading) return null;
1028
- if (findPickerRow(modelCatalog.rows, context.model)?.selectable) return null;
1029
- const next = composerFallbackModel({
1030
- models: modelCatalog.models,
1031
- rows: modelCatalog.rows,
1032
- defaultSelection: modelCatalog.defaultSelection
1033
- });
1034
- return next && next.id !== context.model ? next : null;
1035
- }, [
1036
- context.model,
1037
- modelCatalog.defaultSelection,
1038
- modelCatalog.loading,
1039
- modelCatalog.models,
1040
- modelCatalog.rows,
1041
- newSessionDraft.loading
1042
- ]);
1043
- useEffect(() => {
1044
- const next = pendingFallbackModel;
1045
- if (!next) return;
1046
- setModel(next.id);
1047
- setReasoningEffort(next.effort);
1048
- setModelProvided((current) => current === void 0 ? current : false);
1049
- }, [pendingFallbackModel, setModel, setReasoningEffort]);
1050
- const codexConnected = modelCatalog.models.some(
1051
- (candidate) => candidate.provider === "codex-subscription" && candidate.credentialReadiness.status === "ready"
1052
- );
1053
- const startBlocker = modelCatalog.loading || newSessionDraft.loading ? null : modelCatalog.error ? "model_catalog_unavailable" : !newSessionPolicyValid ? !modelCatalog.rows.some((row) => row.selectable) ? "no_model_connected" : selectedPolicyRow && selectedPolicyRow.billingClass !== "opengeni_credits" && selectedPolicyRow.catalog.credentialReadiness.status !== "ready" ? "selected_model_not_connected" : "model_policy_unavailable" : privateCreateUnavailable ? "private_session_unavailable" : attachments.hasUnresolved ? "attachments_pending" : !computeReady ? "compute_unavailable" : null;
1054
- useEffect(() => {
1055
- const record = () => {
1056
- if (startBlocker)
1057
- captureAnalyticsEvent("session_start_blocker_viewed", {
1058
- workspace_id: workspaceId,
1059
- reason: startBlocker
1060
- });
1061
- };
1062
- record();
1063
- window.addEventListener(ANALYTICS_COLLECTION_ENABLED_EVENT, record);
1064
- return () => window.removeEventListener(ANALYTICS_COLLECTION_ENABLED_EVENT, record);
1065
- }, [startBlocker, workspaceId]);
1066
- const voiceSelection = useRealtimeModelSelection({
1067
- client: context.client,
1068
- workspaceId,
1069
- codexConnected
1070
- });
1071
- useEffect(() => {
1072
- if (createComposerFocusGen === 0 || newSessionDraft.loading) return;
1073
- const textarea = composerRegionRef.current?.querySelector("textarea");
1074
- if (!textarea || textarea.disabled) return;
1075
- textarea.focus();
1076
- }, [createComposerFocusGen, newSessionDraft.loading]);
1077
- const submitNewSession = useLatestCallback(
1078
- async (realtimeModel, policy) => {
1079
- if (startBlocker)
1080
- captureAnalyticsEvent("session_start_blocked", {
1081
- workspace_id: workspaceId,
1082
- reason: startBlocker
1083
- });
1084
- const hasTypedText = message.trim().length > 0;
1085
- const text = hasTypedText ? message : attachments.readyResources.length > 0 ? FILE_ONLY_MESSAGE_TEXT(t) : "";
1086
- if (busy || !context.workspaceMcpCatalogReady || newSessionDraft.loading || !newSessionPolicyValid || privateCreateUnavailable || personalResourceCatalogRefreshPending || !realtimeModel && createdSessionAuthority === null && (connectionAccounts.loading || connectionAccounts.error !== null || connectionAccounts.requiresAccountChoice) || createdSessionAuthority === null && !fixedResourceSelection.selectionResolved)
1087
- return false;
1088
- if (createdSessionAuthority === null) {
1089
- const unavailable = unavailableSessionMcpServerIds(
1090
- context.selectedCapabilityToolIds,
1091
- context.toolMcpServers,
1092
- context.workspaceMcpCatalogLoadedSuccessfully
1093
- );
1094
- if (unavailable.length > 0) {
1095
- const removed = new Set(unavailable);
1096
- context.setSelectedCapabilityToolIds(
1097
- (current) => new Set([...current].filter((id) => !removed.has(id)))
1098
- );
1099
- setConnectorExclusions((current) => [.../* @__PURE__ */ new Set([...current, ...unavailable])]);
1100
- toast.error("Some selected tools are no longer available", {
1101
- description: "Removed them from this draft. Your message is still here; review the tools and send again."
1102
- });
1103
- return false;
1104
- }
1105
- }
1106
- if (realtimeModel && personalMachineSelected) {
1107
- toast.error("Voice can't start on a personal Connected Machine", {
1108
- description: "Start the session with a message first so Opengeni can attach the machine to an accepted turn."
1109
- });
1110
- return false;
1111
- }
1112
- if (createdSessionAuthority === null && (!text && !realtimeModel || attachments.hasUnresolved || !computeReady)) {
1113
- return false;
1114
- }
1115
- const usageLimit = usageLimitCapability === "enabled" ? parseSessionUsageLimitDraft(usageLimitDraft) : null;
1116
- if (createdSessionAuthority === null && usageLimit && !usageLimit.ok) {
1117
- setUsageLimitSendBlocked(true);
1118
- toast.error("Check the usage limit", {
1119
- description: `${usageLimit.error} Change it under + > Usage limit.`
1120
- });
1121
- return false;
1122
- }
1123
- const usageLimitMicros = usageLimit?.ok ? usageLimit.limitMicros : null;
1124
- const model = policy?.model ?? persistedValue.model;
1125
- const reasoningEffort = policy?.effort ?? persistedValue.reasoningEffort;
1126
- const latencyMode = policy?.latency ?? persistedValue.latencyMode;
1127
- const visibleSignature = stableJson(persistedValue);
1128
- const submittedSnapshot = newSessionCreateSnapshot(
1129
- persistedValue,
1130
- realtimeModel ? persistedValue.text : text,
1131
- {
1132
- model,
1133
- reasoningEffort,
1134
- latencyMode
1135
- }
1136
- );
1137
- const preserveNewerLocalDraft = async () => {
1138
- if (!newSessionDraft.isCurrentSignature(visibleSignature)) {
1139
- await (realtimeModel ? newSessionDraft.flush() : newSessionDraft.flushForSend());
1140
- }
1141
- };
1142
- setSubmitting(true);
1143
- try {
1144
- return await runNewSessionRouteSubmission({
1145
- authority: createdSessionAuthority,
1146
- onAuthorityChange: setCreatedSessionAuthority,
1147
- create: async () => {
1148
- if (realtimeModel) {
1149
- for (let attempt = 0; attempt < 3; attempt += 1) {
1150
- const flushed = await newSessionDraft.flush();
1151
- if (!flushed) {
1152
- reportDraftSaveFailure(newSessionDraft);
1153
- return null;
1154
- }
1155
- const submission = submissionFromSessionDraft(
1156
- draft,
1157
- defaultFirstPartyMcpTools,
1158
- personalResourceAttachment.intent
1159
- );
1160
- let draftConflict = false;
1161
- let outcomeUnknown = false;
1162
- const created = await context.startSession(
1163
- workspaceId,
1164
- {
1165
- text: "",
1166
- resources: [],
1167
- tools: submittedSnapshot.tools,
1168
- model,
1169
- reasoningEffort,
1170
- latencyMode,
1171
- ...submission.extras
1172
- },
1173
- {
1174
- targetSandboxId: submission.options.targetSandboxId,
1175
- workingDir: submission.options.workingDir,
1176
- channelId: selectedChannelId,
1177
- omitWorkspaceResources: submission.omitWorkspaceResources,
1178
- installedSkillIds: launch.skillCapabilityId ? [launch.skillCapabilityId] : void 0,
1179
- bot: newSessionBot,
1180
- startMode: "realtime",
1181
- expectedNewSessionDraftRevision: flushed.revision,
1182
- newSessionDraftToolPolicy: persistedToolPolicy,
1183
- agentLearning: draft.agentLearning,
1184
- usageLimitMicros,
1185
- visibility: newSessionCreateVisibility(
1186
- personalWorkspace,
1187
- submission.options.visibility ?? "workspace",
1188
- tenancyCapabilities?.canCreatePrivate === true
1189
- ),
1190
- onFailure: ({ error, request, outcomeUnknown: uncertain }) => {
1191
- draftConflict = newSessionDraft.captureConflict(error);
1192
- outcomeUnknown = uncertain;
1193
- recoverPersonalResourceAttachment(error, request);
1194
- connectionAccounts.onSelectionError(error);
1195
- return draftConflict || newSessionDraft.reportUnavailable(error) || noteCreditRefusal(error, request);
1196
- }
1197
- }
1198
- );
1199
- if (!created) {
1200
- if (draftConflict) continue;
1201
- if (!outcomeUnknown) await preserveNewerLocalDraft();
1202
- return null;
1203
- }
1204
- setUsageLimitDraft(NO_SESSION_USAGE_LIMIT);
1205
- setCreateCreditRefusal(null);
1206
- setUsageLimitSendBlocked(false);
1207
- return {
1208
- sessionId: created.id,
1209
- settleDraft: async () => true
1210
- };
1211
- }
1212
- await preserveNewerLocalDraft();
1213
- newSessionDraft.clearError();
1214
- toast.error("Couldn't start voice", {
1215
- description: DRAFT_CHANGED_DURING_SEND_TEXT
1216
- });
1217
- return null;
1218
- }
1219
- const submittedResources = submittedSnapshot.resources;
1220
- for (let attempt = 0; attempt < 3; attempt += 1) {
1221
- const flushed = await newSessionDraft.flushForSend(submittedSnapshot);
1222
- if (!flushed) {
1223
- reportDraftSaveFailure(newSessionDraft);
1224
- return null;
1225
- }
1226
- const submission = submissionFromSessionDraft(
1227
- draft,
1228
- defaultFirstPartyMcpTools,
1229
- personalResourceAttachment.intent
1230
- );
1231
- let draftConflict = false;
1232
- let outcomeUnknown = false;
1233
- const created = await context.startSession(
1234
- workspaceId,
1235
- {
1236
- text,
1237
- resources: submittedResources,
1238
- tools: submittedSnapshot.tools,
1239
- model,
1240
- reasoningEffort,
1241
- latencyMode,
1242
- ...submission.extras,
1243
- connectionAccounts: connectionAccounts.selections
1244
- },
1245
- {
1246
- targetSandboxId: submission.options.targetSandboxId,
1247
- workingDir: submission.options.workingDir,
1248
- channelId: selectedChannelId,
1249
- omitWorkspaceResources: submission.omitWorkspaceResources,
1250
- installedSkillIds: launch.skillCapabilityId ? [launch.skillCapabilityId] : void 0,
1251
- bot: newSessionBot,
1252
- expectedNewSessionDraftRevision: flushed.revision,
1253
- newSessionDraftToolPolicy: persistedToolPolicy,
1254
- agentLearning: draft.agentLearning,
1255
- usageLimitMicros,
1256
- visibility: newSessionCreateVisibility(
1257
- personalWorkspace,
1258
- submission.options.visibility ?? "workspace",
1259
- tenancyCapabilities?.canCreatePrivate === true
1260
- ),
1261
- onFailure: ({ error, request, outcomeUnknown: uncertain }) => {
1262
- draftConflict = newSessionDraft.captureConflict(error);
1263
- outcomeUnknown = uncertain;
1264
- recoverPersonalResourceAttachment(error, request);
1265
- connectionAccounts.onSelectionError(error);
1266
- return draftConflict || newSessionDraft.reportUnavailable(error) || noteCreditRefusal(error, request);
1267
- }
1268
- }
1269
- );
1270
- if (!created) {
1271
- if (draftConflict) continue;
1272
- if (!outcomeUnknown) await preserveNewerLocalDraft();
1273
- return null;
1274
- }
1275
- setUsageLimitDraft(NO_SESSION_USAGE_LIMIT);
1276
- setCreateCreditRefusal(null);
1277
- setUsageLimitSendBlocked(false);
1278
- return {
1279
- sessionId: created.id,
1280
- settleDraft: async () => {
1281
- const acknowledged = await newSessionDraft.acknowledgeConsumed(
1282
- flushed,
1283
- visibleSignature
1284
- );
1285
- if (acknowledged?.kind === "consumed" && newSessionDraft.isCurrentSignature(visibleSignature)) {
1286
- setMessage("");
1287
- visibilityChosenRef.current = false;
1288
- setDraft({
1289
- ...emptySessionDraft(defaultFirstPartyMcpTools, defaultSandboxBackend),
1290
- visibility: tenancyCapabilities?.canCreatePrivate === true && tenancyCapabilities.defaultVisibility === "private" ? "private" : "workspace"
1291
- });
1292
- attachments.removeReadyFiles(
1293
- submittedResources.flatMap(
1294
- (resource) => resource.kind === "file" ? [resource.fileId] : []
1295
- )
1296
- );
1297
- } else if (acknowledged?.kind !== "preserved" || !newSessionDraft.isCurrentSignature(acknowledged.flushed.signature)) {
1298
- if (!acknowledged && newSessionDraft.isCurrentSignature(visibleSignature)) {
1299
- return true;
1300
- }
1301
- const preserved = await newSessionDraft.flushForSend();
1302
- if (!preserved || !newSessionDraft.isCurrentSignature(preserved.signature)) {
1303
- return false;
1304
- }
1305
- }
1306
- return true;
1307
- }
1308
- };
1309
- }
1310
- await preserveNewerLocalDraft();
1311
- newSessionDraft.clearError();
1312
- toast.error("Couldn't send", {
1313
- description: DRAFT_CHANGED_DURING_SEND_TEXT
1314
- });
1315
- return null;
1316
- },
1317
- navigate: async (sessionId) => {
1318
- const sessionPath = `/workspaces/${workspaceId}/sessions/${sessionId}`;
1319
- const abandonVoice = realtimeModel ? prestartSessionRealtime({
1320
- client: api.voiceRealtimeClient(
1321
- context.client,
1322
- () => new URL(sessionPath, page.origin()).href
1323
- ),
1324
- workspaceId,
1325
- sessionId,
1326
- model: realtimeModel,
1327
- language: voiceSelection.languageFor(realtimeModel),
1328
- voiceSettings: voiceSelection.voiceSettingsFor(realtimeModel)
1329
- }) : null;
1330
- try {
1331
- await navigate({
1332
- to: "/workspaces/$workspaceId/sessions/$sessionId",
1333
- params: { workspaceId, sessionId },
1334
- search: realtimeModel ? { realtime: realtimeModel } : {}
1335
- });
1336
- } catch (error) {
1337
- abandonVoice?.();
1338
- throw error;
1339
- }
1340
- }
1341
- });
1342
- } finally {
1343
- setSubmitting(false);
1344
- }
1345
- }
1346
- );
1347
- const prefilledBotTemplateRef = useRef(null);
1348
- const prefilledBotInstructionsRef = useRef(null);
1349
- const fillBotInstructions = useCallback((instructions) => {
1350
- prefilledBotInstructionsRef.current = instructions;
1351
- setMessage(instructions);
1352
- }, []);
1353
- useEffect(() => {
1354
- if (!botTemplate || newSessionDraft.loading) return;
1355
- if (prefilledBotTemplateRef.current === botTemplate.id) return;
1356
- prefilledBotTemplateRef.current = botTemplate.id;
1357
- if (message.trim().length === 0 || message === botTemplate.setupInstructions) {
1358
- fillBotInstructions(botTemplate.setupInstructions);
1359
- } else {
1360
- toast.info("Kept your unsent message", {
1361
- description: "Clear it to use the template's setup instructions instead.",
1362
- action: {
1363
- label: "Use setup instructions",
1364
- onClick: () => fillBotInstructions(botTemplate.setupInstructions)
1365
- }
1366
- });
1367
- }
1368
- }, [botTemplate, fillBotInstructions, message, newSessionDraft.loading]);
1369
- useEffect(() => {
1370
- if (launchBotTemplateId) return;
1371
- prefilledBotTemplateRef.current = null;
1372
- const prefilled = prefilledBotInstructionsRef.current;
1373
- prefilledBotInstructionsRef.current = null;
1374
- if (prefilled !== null) setMessage((current) => current === prefilled ? "" : current);
1375
- }, [launchBotTemplateId]);
1376
- const leftoverBotInstructionsCheckedRef = useRef(false);
1377
- useEffect(() => {
1378
- if (leftoverBotInstructionsCheckedRef.current) return;
1379
- if (newSessionDraft.loading || workspaceBotTemplates.templates === void 0) return;
1380
- leftoverBotInstructionsCheckedRef.current = true;
1381
- if (launchBotTemplateId || message.length === 0) return;
1382
- if (workspaceBotTemplates.templates.some((entry) => entry.setupInstructions === message)) {
1383
- setMessage("");
1384
- }
1385
- }, [launchBotTemplateId, message, newSessionDraft.loading, workspaceBotTemplates.templates]);
1386
- const launchContinueSessionId = launch.continueSessionId;
1387
- const continuedSessionRef = useRef(null);
1388
- useEffect(() => {
1389
- if (!launchContinueSessionId || newSessionDraft.loading) return;
1390
- if (continuedSessionRef.current === launchContinueSessionId) return;
1391
- continuedSessionRef.current = launchContinueSessionId;
1392
- const pointer = continueArchivedChatMessage(
1393
- page.origin(),
1394
- workspaceId,
1395
- launchContinueSessionId
1396
- );
1397
- setMessage(
1398
- (current) => current.includes(pointer.trim()) ? current : `${pointer}${current.trimStart()}`
1399
- );
1400
- void navigate({
1401
- to: "/workspaces/$workspaceId/sessions",
1402
- params: { workspaceId },
1403
- search: (previous) => {
1404
- const { continueSessionId: _dropped, ...rest } = previous;
1405
- return rest;
1406
- },
1407
- replace: true
1408
- });
1409
- }, [launchContinueSessionId, navigate, newSessionDraft.loading, page, workspaceId]);
1410
- const dismissBotLaunch = useCallback(() => {
1411
- void navigate({
1412
- to: "/workspaces/$workspaceId/sessions",
1413
- params: { workspaceId },
1414
- search: (previous) => {
1415
- const { botTemplateId: _dropped, ...rest } = previous;
1416
- return rest;
1417
- },
1418
- replace: true
1419
- });
1420
- }, [navigate, workspaceId]);
1421
- const launchModel = launch.model;
1422
- const launchEffort = launch.effort;
1423
- const launchLatency = launch.latency;
1424
- const launchRealtime = launch.realtime;
1425
- const launchFollowDefault = launch.followDefault === true;
1426
- const launchSkillCapabilityId = launch.skillCapabilityId;
1427
- const launchKey = composerLaunchSearchKey(launch);
1428
- const handledLaunchKeyRef = useRef(null);
1429
- useEffect(() => {
1430
- if (!launchKey || handledLaunchKeyRef.current === launchKey) return;
1431
- if (newSessionDraft.loading) return;
1432
- if (launchModel) setModel(launchModel);
1433
- if (launchEffort) setReasoningEffort(launchEffort);
1434
- if (launchLatency) setLatencyMode(launchLatency);
1435
- setModelProvided(
1436
- (current) => modelProvidedAfterLaunch(
1437
- {
1438
- ...launchModel ? { model: launchModel } : {},
1439
- ...launchEffort ? { effort: launchEffort } : {},
1440
- ...launchLatency ? { latency: launchLatency } : {},
1441
- ...launchFollowDefault ? { followDefault: true } : {}
1442
- },
1443
- current
1444
- )
1445
- );
1446
- if (!launchRealtime) {
1447
- handledLaunchKeyRef.current = launchKey;
1448
- void navigate({
1449
- to: "/workspaces/$workspaceId/sessions",
1450
- params: { workspaceId },
1451
- search: {
1452
- ...launch.channelId ? { channelId: launch.channelId } : {},
1453
- ...launchSkillCapabilityId ? { skillCapabilityId: launchSkillCapabilityId } : {},
1454
- ...launch.botTemplateId ? { botTemplateId: launch.botTemplateId } : {}
1455
- },
1456
- replace: true
1457
- });
1458
- return;
1459
- }
1460
- if (busy || !computeReady || !newSessionPolicyValid || !context.workspaceMcpCatalogReady || attachments.hasUnresolved) {
1461
- return;
1462
- }
1463
- handledLaunchKeyRef.current = launchKey;
1464
- void submitNewSession(launchRealtime, {
1465
- model: launchModel,
1466
- effort: launchEffort,
1467
- latency: launchLatency
1468
- }).then((ok) => {
1469
- if (!ok) handledLaunchKeyRef.current = null;
1470
- });
1471
- }, [
1472
- attachments.hasUnresolved,
1473
- busy,
1474
- computeReady,
1475
- context.workspaceMcpCatalogReady,
1476
- launchEffort,
1477
- launchFollowDefault,
1478
- launchLatency,
1479
- launchModel,
1480
- launchRealtime,
1481
- launchSkillCapabilityId,
1482
- launchKey,
1483
- launch.botTemplateId,
1484
- launch.channelId,
1485
- navigate,
1486
- newSessionDraft.loading,
1487
- newSessionPolicyValid,
1488
- setLatencyMode,
1489
- setModel,
1490
- setReasoningEffort,
1491
- submitNewSession,
1492
- workspaceId
1493
- ]);
1494
- const createComposer = {
1495
- value: message,
1496
- setValue: setMessage,
1497
- hasDraftContent: () => message.length > 0 || attachments.attachments.length > 0,
1498
- sending: busy,
1499
- // Nothing runs before the session exists: Send just sends.
1500
- working: false,
1501
- // Mirrors useComposer's gate: a ready attachment with no typed draft is a
1502
- // sendable file-only message (the API requires non-empty text, so send()
1503
- // substitutes FILE_ONLY_MESSAGE_TEXT).
1504
- canSend: (createdSessionAuthority !== null || message.trim().length > 0 || attachments.readyResources.length > 0) && !busy && !newSessionDraft.loading && newSessionPolicyValid && !personalResourceCatalogRefreshPending && (createdSessionAuthority !== null || !connectionAccounts.loading && connectionAccounts.error === null && !connectionAccounts.requiresAccountChoice) && (createdSessionAuthority !== null || fixedResourceSelection.selectionResolved) && (createdSessionAuthority !== null || !attachments.hasUnresolved && computeReady),
1505
- // What Send needs right after the page opens is still loading: an early
1506
- // Send waits for it instead of doing nothing.
1507
- preparing: modelCatalog.loading || newSessionDraft.loading || pendingFallbackModel !== null || personalResourceCatalogRefreshPending || createdSessionAuthority === null && (connectionAccounts.loading || fixedResourceCatalogEnabled && (rigs.loading || !personalResourceEligibilitySettled) || draft.compute.kind === "machine" && fleet.loading),
1508
- pause: async () => {
1509
- },
1510
- pausing: false,
1511
- resume: async () => {
1512
- },
1513
- resumeScope: async () => {
1514
- },
1515
- resuming: false,
1516
- draft: null,
1517
- draftRevision: newSessionDraft.revision,
1518
- draftLoading: newSessionDraft.loading,
1519
- draftSaving: newSessionDraft.saving,
1520
- // A stale autosaved draft must not block or distract from explicit Send.
1521
- draftConflict: null,
1522
- policy: {
1523
- model: context.model,
1524
- reasoningEffort: context.reasoningEffort,
1525
- latencyMode: context.latencyMode
1526
- },
1527
- setModel: (model) => {
1528
- setModelProvided(true);
1529
- context.setModel(model);
1530
- },
1531
- setReasoningEffort: (effort) => {
1532
- setModelProvided(true);
1533
- context.setReasoningEffort(effort);
1534
- },
1535
- setLatencyMode: (latencyMode) => {
1536
- setModelProvided(true);
1537
- context.setLatencyMode(latencyMode);
1538
- },
1539
- draftPersistence: "disabled",
1540
- applyDraft: () => {
1541
- },
1542
- reloadDraft: newSessionDraft.reload,
1543
- resolveDraftConflict: newSessionDraft.resolveConflict,
1544
- restoredResources: [],
1545
- removeRestoredResource: () => {
1546
- },
1547
- // A brief outage is explained once by the updating notice below the
1548
- // composer, never as a red error with a request reference.
1549
- error: newSessionDraft.unavailable || newSessionDraft.conflict ? null : newSessionDraft.error,
1550
- clearError: newSessionDraft.clearError,
1551
- send: async () => await submitNewSession(null),
1552
- steer: async () => {
1553
- const text = message.trim() || (attachments.readyResources.length > 0 ? FILE_ONLY_MESSAGE_TEXT(t) : "");
1554
- if (!text || busy || attachments.hasUnresolved || !computeReady || !newSessionPolicyValid) {
1555
- return false;
1556
- }
1557
- return await createComposer.send();
1558
- }
1559
- };
1560
- useBrowserAccountBridgeBlocker(`new-session-composer:${workspaceId}`, () => {
1561
- if (attachments.hasUnresolved) {
1562
- return {
1563
- id: "ignored",
1564
- label: "A file upload is not settled",
1565
- detail: "Wait for the upload or remove it before changing accounts."
1566
- };
1567
- }
1568
- if (busy || submitting || newSessionDraft.saving) {
1569
- return {
1570
- id: "ignored",
1571
- label: "A new-session mutation is still running",
1572
- detail: "Wait for the current save or session creation to finish."
1573
- };
1574
- }
1575
- return createComposer.hasDraftContent() ? {
1576
- id: "ignored",
1577
- label: "The new-session composer has an unsent draft",
1578
- detail: "Continuing clears the account-bound draft."
1579
- } : null;
1580
- });
1581
- const accountsFailure = connectionAccounts.error !== null && !connectionAccounts.unavailable;
1582
- const canTopUpCredits = addCredits && context.clientConfig.billingMode === "stripe" && Boolean(workspace?.accountId) && hasAccountPermission(context.accessContext, workspace?.accountId ?? "", "billing:manage");
1583
- const noUsableCredit = creditGap !== null || modelUsesCredits(selectedPolicyRow?.catalog) && selectedPolicyRow?.catalog.creditFunding === "unavailable";
1584
- const openCreditTopup = () => setCreditTopupOpen(true);
1585
- const setupDisabled = busy || newSessionDraft.loading;
1586
- const runsOnSetup = hasRunsOnChoices(runsOnChoices) ? {
1587
- label: "Runs on",
1588
- summary: runsOnSummary(runsOnChoices),
1589
- icon: runsOnSetupIcon(runsOnChoices),
1590
- disabled: setupDisabled,
1591
- renderMenu: () => /* @__PURE__ */ jsx(
1592
- RunsOnMenuBody,
1593
- {
1594
- ...runsOnChoices,
1595
- disabled: setupDisabled,
1596
- onChange: setDraft,
1597
- onComputeChange: setExplicitComputeDraft,
1598
- onRetryMachines: () => void fleet.refresh()
1599
- }
1600
- )
1601
- } : null;
1602
- const visibilitySetup = hasVisibilityChoice({
1603
- personalWorkspace,
1604
- canCreatePrivate: tenancyCapabilities?.canCreatePrivate === true
1605
- }) ? {
1606
- label: "Visibility",
1607
- summary: visibilitySummary(draft.visibility),
1608
- icon: visibilitySetupIcon(draft.visibility),
1609
- disabled: setupDisabled,
1610
- renderMenu: (close) => /* @__PURE__ */ jsx(
1611
- VisibilityMenuBody,
1612
- {
1613
- value: draft.visibility,
1614
- disabled: setupDisabled,
1615
- onChange: (visibility) => {
1616
- visibilityChosenRef.current = true;
1617
- if (visibility === "workspace" && selectedProjectOnlyMe) selectProject(null);
1618
- setDraft((current) => ({ ...current, visibility }));
1619
- close();
1620
- }
1621
- }
1622
- )
1623
- } : null;
1624
- return createElement(
1625
- LightboxProvider,
1626
- null,
1627
- // The canvas parent is overflow-hidden, so this route owns its scrolling —
1628
- // without it the page clips (recent sessions were unreachable below the fold).
1629
- /* @__PURE__ */ jsxs(
1630
- "div",
1631
- {
1632
- "data-workspace-scroll-owner": "self-managed",
1633
- "data-window-top-page": true,
1634
- className: "min-h-0 flex-1 overflow-y-auto",
1635
- children: [
1636
- githubAppConnect.element,
1637
- /* @__PURE__ */ jsxs("div", { className: "mx-auto flex w-full max-w-3xl flex-col px-4 pt-10 pb-16 sm:px-6 sm:pt-16", children: [
1638
- /* @__PURE__ */ jsxs("section", { className: "flex flex-col items-center gap-2 text-center", children: [
1639
- /* @__PURE__ */ jsx("h1", { className: "text-balance text-2xl font-semibold tracking-tight sm:text-3xl", children: wording.heading }),
1640
- canTopUpCredits && workspace?.accountId ? /* @__PURE__ */ jsxs(Fragment, { children: [
1641
- noUsableCredit ? null : /* @__PURE__ */ jsxs(
1642
- Button,
1643
- {
1644
- type: "button",
1645
- variant: "outline",
1646
- size: "sm",
1647
- className: "mt-2",
1648
- onClick: openCreditTopup,
1649
- children: [
1650
- /* @__PURE__ */ jsx(CreditCardIcon, { className: "size-4" }),
1651
- "Add credits"
1652
- ]
1653
- }
1654
- ),
1655
- /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
1656
- CreditTopupPrompt,
1657
- {
1658
- purpose: "topup",
1659
- refusalCode: refusedCreate?.code === "byok_paid_credit_required" ? "byok_paid_credit_required" : null,
1660
- open: creditTopupOpen,
1661
- workspaceId,
1662
- accountId: workspace.accountId,
1663
- canBuyCredits: true,
1664
- onOpenChange: setCreditTopupOpen,
1665
- beforeLeave: newSessionDraft.flush
1666
- }
1667
- ) })
1668
- ] }) : null
1669
- ] }),
1670
- launchSkillCapabilityId ? /* @__PURE__ */ jsx("div", { className: "mt-6", children: /* @__PURE__ */ jsx(Notice, { tone: "info", title: "Implementation guidance selected", children: "This installed Skill will be frozen onto this session only. Other workspace sessions will not receive it." }) }) : null,
1671
- creditGap ? /* @__PURE__ */ jsx("div", { className: "mt-6", children: /* @__PURE__ */ jsx(
1672
- CreditRefusalNotice,
1673
- {
1674
- gap: creditGap,
1675
- message: refusedCreate?.message,
1676
- refusalCode: refusedCreate?.code,
1677
- workspaceId,
1678
- accountId: workspace?.accountId ?? null,
1679
- canReadBilling: hasAccountPermission(
1680
- context.accessContext,
1681
- workspace?.accountId ?? "",
1682
- "billing:read"
1683
- ),
1684
- canBuyCredits: context.clientConfig.billingMode === "stripe" && hasAccountPermission(
1685
- context.accessContext,
1686
- workspace?.accountId ?? "",
1687
- "billing:manage"
1688
- ),
1689
- canConnectModel: hasWorkspacePermission(
1690
- context.accessContext,
1691
- workspaceId,
1692
- "connections:write"
1693
- ),
1694
- onChooseModel: busy ? void 0 : chooseCoveredModel,
1695
- ...canTopUpCredits ? { onAddCredits: openCreditTopup } : {},
1696
- ...refusedCreate ? { onDismiss: () => setCreateCreditRefusal(null) } : {}
1697
- }
1698
- ) }) : modelUsesCredits(selectedPolicyRow?.catalog) && hasAccountPermission(
1699
- context.accessContext,
1700
- workspace?.accountId ?? "",
1701
- "billing:read"
1702
- ) ? /* @__PURE__ */ jsx("div", { className: "mt-6", children: /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
1703
- EmptyCreditsNotice,
1704
- {
1705
- creditFunding: selectedPolicyRow?.catalog.creditFunding,
1706
- workspaceId,
1707
- accountId: workspace?.accountId ?? null,
1708
- canBuyCredits: hasAccountPermission(
1709
- context.accessContext,
1710
- workspace?.accountId ?? "",
1711
- "billing:manage"
1712
- ),
1713
- canReadBilling: true,
1714
- ...canTopUpCredits ? { onAddCredits: openCreditTopup } : {}
1715
- }
1716
- ) }) }) : null,
1717
- /* @__PURE__ */ jsxs("div", { ref: composerRegionRef, className: "mt-8 [&_textarea]:min-h-[calc(2lh+1rem)]", children: [
1718
- /* @__PURE__ */ jsx(
1719
- ConsoleComposer,
1720
- {
1721
- workspaceId,
1722
- composer: createComposer,
1723
- attachments,
1724
- autoFocus: true,
1725
- disabled: newSessionDraft.loading || submitting,
1726
- fileUploadsEnabled: context.clientConfig.fileUploads.enabled === true,
1727
- placeholder: wording.placeholder,
1728
- messages: wording.composerMessages,
1729
- controlsLeading: /* @__PURE__ */ jsxs(Fragment, { children: [
1730
- /* @__PURE__ */ jsx(
1731
- WorkspaceComposerPlus,
1732
- {
1733
- openRequest: capabilitiesOpenRequest,
1734
- connectorActions: {
1735
- accountControls: {
1736
- groups: connectionAccounts.availableAccountGroups,
1737
- choices: connectionAccounts.accountChoices,
1738
- onChoose: connectionAccounts.selectAccount,
1739
- loading: connectionAccounts.loading,
1740
- error: connectionAccounts.error,
1741
- accessDenied: connectionAccounts.accessDenied,
1742
- onRefresh: () => void connectionAccounts.refresh(),
1743
- disabled: busy || newSessionDraft.loading
1744
- }
1745
- },
1746
- menuSide: "bottom",
1747
- agentCapabilities: {
1748
- ...composerAgentCapabilities,
1749
- disabled: busy || newSessionDraft.loading
1750
- },
1751
- draftChatSettings: {
1752
- workspaceId,
1753
- scope: createVisibility === "private" || personalWorkspace ? "personal" : "workspace",
1754
- value: draft.agentLearning ?? {},
1755
- onChange: (agentLearning) => setDraft((current) => ({ ...current, agentLearning }))
1756
- },
1757
- workspaceId,
1758
- disabled: busy || newSessionDraft.loading,
1759
- fileUploadsEnabled: context.clientConfig.fileUploads.enabled === true,
1760
- servers: context.toolMcpServers,
1761
- firstPartyTools: firstPartyToolOptions,
1762
- selection: {
1763
- mcpServerIds: context.selectedCapabilityToolIds,
1764
- firstPartyToolIds: draft.firstPartyMcpTools
1765
- },
1766
- toolsDisabled: busy || newSessionDraft.loading,
1767
- connectorCustomizing,
1768
- onConnectorCustomizingChange: (next) => {
1769
- if (next) setConnectorCustomizing(true);
1770
- else followWorkspaceConnectors();
1771
- },
1772
- onToolSelectionChange: (selection) => {
1773
- changeConnectorSelection(selection);
1774
- },
1775
- ...usageLimitCapability === "enabled" ? {
1776
- usageLimit: {
1777
- summary: sessionUsageLimitDraftSummary(usageLimitDraft),
1778
- disabled: busy || newSessionDraft.loading,
1779
- panel: /* @__PURE__ */ jsx(
1780
- UsageLimitMenuBody,
1781
- {
1782
- value: usageLimitDraft,
1783
- disabled: busy || newSessionDraft.loading,
1784
- showRequiredError: usageLimitSendBlocked,
1785
- onChange: setUsageLimitDraft
1786
- }
1787
- )
1788
- }
1789
- } : {},
1790
- ...draft.compute.kind === "sandbox" ? {
1791
- repositories: {
1792
- selectedCount: context.selectedRepoIds.size + context.selectedPersonalGitHubRepoIds.size + context.manualRepos.filter((repo) => repo.url.trim().length > 0).length,
1793
- disabled: busy || newSessionDraft.loading,
1794
- panel: /* @__PURE__ */ jsx(
1795
- WorkspaceRepositoryMenuBody,
1796
- {
1797
- workspaceId,
1798
- disabled: busy || newSessionDraft.loading,
1799
- catalogRefresh: repositoryCatalogRefresh,
1800
- onConnectWorkspaceApp: githubAppConnect.open
1801
- }
1802
- )
1803
- }
1804
- } : {},
1805
- ...draftSecretsOn && canListSecrets ? {
1806
- secrets: {
1807
- summary: sessionSecretsSummary(draftVaultPolicy, draftVaultRows),
1808
- disabled: busy || newSessionDraft.loading,
1809
- panel: /* @__PURE__ */ jsx(
1810
- SessionSecretsMenuBody,
1811
- {
1812
- vaults: draftVaultRows,
1813
- policy: draftVaultPolicy,
1814
- narrowedByParent: false,
1815
- canEdit: true,
1816
- disabled: busy || newSessionDraft.loading,
1817
- loading: draftVaults.loading,
1818
- error: draftVaults.error,
1819
- onRetry: () => void draftVaults.refresh(),
1820
- onPolicyChange: (policy) => setDraft((current) => {
1821
- const { vaultPolicy: _previous, ...rest } = current;
1822
- return policy.mode === "all" ? rest : { ...rest, vaultPolicy: policy };
1823
- }),
1824
- onManage: () => void navigate({
1825
- to: "/workspaces/$workspaceId/secrets",
1826
- params: { workspaceId }
1827
- })
1828
- }
1829
- )
1830
- }
1831
- } : {}
1832
- }
1833
- ),
1834
- composerAgentCapabilities.customized ? /* @__PURE__ */ jsx(
1835
- ComposerCapabilitiesChip,
1836
- {
1837
- summary: capabilitySummary(
1838
- composerAgentCapabilities.draft.values,
1839
- composerAgentCapabilities.availability
1840
- ),
1841
- disabled: busy || newSessionDraft.loading,
1842
- onOpen: () => setCapabilitiesOpenRequest((current) => ({
1843
- panel: "capabilities",
1844
- nonce: (current?.nonce ?? 0) + 1
1845
- }))
1846
- }
1847
- ) : null
1848
- ] }),
1849
- controls: /* @__PURE__ */ jsx("div", { className: "@container/model-controls flex min-w-0 flex-1 items-center gap-1.5", children: /* @__PURE__ */ jsx(
1850
- SessionModelControl,
1851
- {
1852
- hasImageAttachments: attachments.attachments.some(
1853
- (file) => file.status !== "failed" && file.contentType.startsWith("image/")
1854
- ),
1855
- modelCatalog,
1856
- policyError: newSessionPolicyError,
1857
- disabled: busy || newSessionDraft.loading,
1858
- workspaceId,
1859
- onPolicyChosen: () => setModelProvided(true)
1860
- }
1861
- ) }),
1862
- actions: /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(
1863
- NewSessionRealtimeControl,
1864
- {
1865
- client: context.client,
1866
- workspaceId,
1867
- codexConnected,
1868
- models: voiceSelection.models,
1869
- selectedModel: voiceSelection.selectedModel,
1870
- onSelectModel: voiceSelection.selectModel,
1871
- loadState: voiceSelection.loadState === "ready" && modelCatalog.loading ? "loading" : voiceSelection.loadState,
1872
- modelMenu: "split",
1873
- disabled: busy || newSessionDraft.loading || attachments.hasUnresolved || !newSessionPolicyValid || !computeReady || personalMachineSelected || !context.workspaceMcpCatalogReady,
1874
- disabledReason: attachments.hasUnresolved ? "Wait for attachments to finish before starting voice." : !newSessionPolicyValid ? "Choose supported model settings before starting voice." : !computeReady ? "Choose where this session should run first." : personalMachineSelected ? "Start with a message so personal machine access can attach to an accepted turn." : !context.workspaceMcpCatalogReady ? "Wait for session tools to finish loading." : null,
1875
- onStart: async (model) => await submitNewSession(model)
1876
- }
1877
- ) }),
1878
- header: chatList || botLaunch || runsOnSetup || visibilitySetup ? /* @__PURE__ */ jsxs(Fragment, { children: [
1879
- botLaunch ? /* @__PURE__ */ jsx(
1880
- BotLaunchStrip,
1881
- {
1882
- state: botLaunch.state,
1883
- workspaceId,
1884
- onDismiss: dismissBotLaunch
1885
- }
1886
- ) : null,
1887
- chatList || runsOnSetup || visibilitySetup ? /* @__PURE__ */ jsx(
1888
- SessionSetupStrip,
1889
- {
1890
- disabled: busy || newSessionDraft.loading,
1891
- project: chatList ? {
1892
- channels: canCreatePrivateChat ? channelsQuery.channels : channelsQuery.channels.filter(
1893
- (channel) => channel.visibility !== "private"
1894
- ),
1895
- selectedChannelId,
1896
- onChange: selectProject,
1897
- onCreate: () => setProjectDialogOpen(true)
1898
- } : null,
1899
- runsOn: runsOnSetup,
1900
- visibility: visibilitySetup
1901
- }
1902
- ) : null
1903
- ] }) : void 0
1904
- }
1905
- ),
1906
- personalWorkspace ? /* @__PURE__ */ jsx(PrivateWorkspaceNote, {}) : null,
1907
- newSessionDraft.conflict ? /* @__PURE__ */ jsx(NewSessionDraftSyncNotice, {}) : null,
1908
- newSessionDraft.unavailable || connectionAccounts.unavailable ? /* @__PURE__ */ jsx("div", { role: "status", className: "mt-3", children: /* @__PURE__ */ jsx(Notice, { tone: "info", children: OPENGENI_UPDATING_NOTICE(t) }) }) : null,
1909
- accountsFailure || connectionAccounts.accountChoiceMessage ? /* @__PURE__ */ jsx("div", { role: "alert", className: "mt-3", children: /* @__PURE__ */ jsx(
1910
- Notice,
1911
- {
1912
- tone: "waiting",
1913
- action: accountsFailure && !connectionAccounts.accessDenied ? /* @__PURE__ */ jsx(
1914
- Button,
1915
- {
1916
- variant: "outline",
1917
- size: "sm",
1918
- onClick: () => void connectionAccounts.refresh(),
1919
- children: "Retry"
1920
- }
1921
- ) : void 0,
1922
- children: accountsFailure ? connectionAccounts.accessDenied ? connectionAccounts.error : "Couldn't send your message. Try again." : connectionAccounts.accountChoiceMessage
1923
- }
1924
- ) }) : null,
1925
- /* @__PURE__ */ jsx(
1926
- ComputeTargetControl,
1927
- {
1928
- workspaceId,
1929
- defaultSandboxBackend,
1930
- draft,
1931
- onChange: setDraft,
1932
- onComputeChange: setExplicitComputeDraft,
1933
- disabled: busy || newSessionDraft.loading,
1934
- personalResourceAccess: {
1935
- names: selectedPersonalResourceNames,
1936
- visibility: createVisibility
1937
- },
1938
- fleet,
1939
- machines,
1940
- rigs: selectableRigs,
1941
- workspaceDefaultRigId: workspace?.defaultRigId ?? null,
1942
- catalogRecovery: {
1943
- error: fixedResourceCatalogError,
1944
- refreshing: personalResourceCatalogRefreshPending,
1945
- onRetry: () => void refreshPersonalResourceCatalogs()
1946
- },
1947
- selectedChannelId,
1948
- selectionHistory
1949
- }
1950
- )
1951
- ] }),
1952
- !botLaunch ? /* @__PURE__ */ jsx(
1953
- BotTemplateShortcuts,
1954
- {
1955
- workspaceId,
1956
- templates: workspaceBotTemplates.templates,
1957
- disabled: busy
1958
- }
1959
- ) : null,
1960
- chatList ? /* @__PURE__ */ jsx(RecentSessions, { workspaceId }) : null,
1961
- starters ? /* @__PURE__ */ jsx(
1962
- NewSessionStarters,
1963
- {
1964
- workspaceId,
1965
- set: starterSet,
1966
- hostStarters,
1967
- fileUploads: context.clientConfig.fileUploads.enabled === true,
1968
- disabled: busy || newSessionDraft.loading,
1969
- onSelect: (prompt) => {
1970
- setMessage(prompt);
1971
- composerRegionRef.current?.querySelector("textarea")?.focus({ preventScroll: true });
1972
- }
1973
- }
1974
- ) : null
1975
- ] }),
1976
- /* @__PURE__ */ jsx(
1977
- ChannelCreateDialog,
1978
- {
1979
- open: projectDialogOpen,
1980
- name: projectNameDraft,
1981
- busy: channelsQuery.mutating,
1982
- audience: projectAudienceOffered ? { value: projectAudienceDraft, onChange: setProjectAudienceDraft } : void 0,
1983
- onNameChange: setProjectNameDraft,
1984
- onOpenChange: (open) => {
1985
- setProjectDialogOpen(open);
1986
- if (!open) {
1987
- setProjectNameDraft("");
1988
- setProjectAudienceDraft("workspace");
1989
- }
1990
- },
1991
- onSubmit: () => void createProject()
1992
- }
1993
- )
1994
- ]
1995
- }
1996
- )
1997
- );
1998
- }
1999
- var DRAFT_CHANGED_DURING_SEND_TEXT = "Your message is saved, but this draft kept changing in another tab or window. Check it and send again.";
2000
- function draftSaveFailureText(draft) {
2001
- if (draft.conflict || !draft.error) return "Your message is still here. Try again.";
2002
- return `Your message is still here. ${userErrorText(draft.error)}`;
2003
- }
2004
- function reportDraftSaveFailure(draft) {
2005
- const error = draft.currentError();
2006
- if (isTransientServiceFailure(error)) return;
2007
- toast.error("Couldn't save the draft", {
2008
- description: draftSaveFailureText({ conflict: draft.conflict, error })
2009
- });
2010
- }
2011
- function RecentSessions({ workspaceId }) {
2012
- const { workspaceSessionListEvent } = useOpenGeni();
2013
- const subjectId = useAppContext().accessContext.subjectId;
2014
- const hintsAvailable = workspaceSessionListEvent?.workspaceId === workspaceId && workspaceSessionListEvent.available;
2015
- const { sessions, pinned, refresh, error } = useWorkspaceSessions({
2016
- limit: 12,
2017
- // Top-level conversations: sub-agents open from their parent and would
2018
- // otherwise fill this short page in a workspace that runs many of them.
2019
- parentSessionId: null,
2020
- pollIntervalMs: hintsAvailable ? void 0 : 3e4
2021
- });
2022
- useSessionListHintRefresh(refresh, error);
2023
- const modelCatalog = useWorkspaceModelCatalog(workspaceId);
2024
- const directoryVersion = useChatDirectoryVersion(subjectId);
2025
- const opened = useMemo(() => {
2026
- void directoryVersion;
2027
- const directory = readChatDirectory(subjectId, workspaceId);
2028
- return directory.recent.flatMap((id) => {
2029
- const record = directory.rows.get(id);
2030
- return record && record.workspaceId === workspaceId && !record.archived ? [{ id, title: record.title, openedAt: record.updatedAt }] : [];
2031
- });
2032
- }, [directoryVersion, subjectId, workspaceId]);
2033
- const recent = useMemo(
2034
- () => recentSessionsWithOpened(t, sessions, pinned, opened, 6),
2035
- [opened, pinned, sessions]
2036
- );
2037
- if (recent.length === 0) {
2038
- return null;
2039
- }
2040
- return /* @__PURE__ */ jsxs("section", { className: "mt-12", children: [
2041
- /* @__PURE__ */ jsx("h2", { className: "mb-1.5 px-0.5 text-2xs font-semibold uppercase tracking-wider text-fg", children: "Recent sessions" }),
2042
- /* @__PURE__ */ jsx("ul", { className: "flex min-w-0 flex-col divide-y divide-border/60", children: recent.map(
2043
- (entry) => entry.kind === "session" ? /* @__PURE__ */ jsx(
2044
- RecentSessionRow,
2045
- {
2046
- workspaceId,
2047
- session: entry.session,
2048
- catalogRows: modelCatalog.rows
2049
- },
2050
- entry.session.id
2051
- ) : /* @__PURE__ */ jsx(OpenedChatRow, { workspaceId, chat: entry.chat }, entry.chat.id)
2052
- ) })
2053
- ] });
2054
- }
2055
- function OpenedChatRow({ workspaceId, chat }) {
2056
- return /* @__PURE__ */ jsx("li", { className: "min-w-0", children: /* @__PURE__ */ jsxs(
2057
- Link,
2058
- {
2059
- to: "/workspaces/$workspaceId/sessions/$sessionId",
2060
- params: { workspaceId, sessionId: chat.id },
2061
- className: "group flex items-center gap-3 rounded-md px-1 py-2.5 transition-colors hover:bg-hover",
2062
- children: [
2063
- /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "inline-block size-2 shrink-0" }),
2064
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx("span", { className: "block truncate text-sm text-fg group-hover:text-fg", children: chat.title }) }),
2065
- /* @__PURE__ */ jsx("span", { className: "shrink-0 text-2xs tabular-nums text-fg-subtle", children: chat.openedAt > 0 ? relativeTimeLabel(t, new Date(chat.openedAt).toISOString()) : null })
2066
- ]
2067
- }
2068
- ) });
2069
- }
2070
- function RecentSessionRow({
2071
- workspaceId,
2072
- session,
2073
- catalogRows
2074
- }) {
2075
- const title = sessionDisplayTitle(session);
2076
- const model = recentSessionModelPresentation(session.model, catalogRows);
2077
- const repo = sessionRepoLabel(session);
2078
- const metaBits = [model.label, repo].filter(Boolean);
2079
- const status = recentSessionStatus(session);
2080
- return /* @__PURE__ */ jsx("li", { className: "min-w-0", children: /* @__PURE__ */ jsxs(
2081
- Link,
2082
- {
2083
- to: "/workspaces/$workspaceId/sessions/$sessionId",
2084
- params: { workspaceId, sessionId: session.id },
2085
- className: "group flex items-center gap-3 rounded-md px-1 py-2.5 transition-colors hover:bg-hover",
2086
- children: [
2087
- /* @__PURE__ */ jsx(StatusDot, { tone: status.tone, pulse: status.pulse }),
2088
- /* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
2089
- /* @__PURE__ */ jsx("span", { className: "block truncate text-sm text-fg group-hover:text-fg", children: title }),
2090
- metaBits.length > 0 ? /* @__PURE__ */ jsxs("span", { className: "mt-0.5 flex min-w-0 items-center gap-1.5 text-2xs text-fg-subtle", children: [
2091
- /* @__PURE__ */ jsx(
2092
- ModelMark,
2093
- {
2094
- model: { id: session.model, logoUrl: model.logoUrl },
2095
- className: "size-3 text-fg-muted",
2096
- fallback: /* @__PURE__ */ jsx(
2097
- BillingClassMark,
2098
- {
2099
- billingClass: model.billingClass,
2100
- className: "size-3",
2101
- "aria-label": ""
2102
- }
2103
- )
2104
- }
2105
- ),
2106
- /* @__PURE__ */ jsx("span", { className: "truncate", children: metaBits.join(" \xB7 ") })
2107
- ] }) : null
2108
- ] }),
2109
- /* @__PURE__ */ jsx("span", { className: "shrink-0 text-2xs tabular-nums text-fg-subtle", children: relativeTimeLabel(t, session.updatedAt) })
2110
- ]
2111
- }
2112
- ) });
2113
- }
2114
- function SessionModelControl({
2115
- hasImageAttachments,
2116
- modelCatalog,
2117
- policyError,
2118
- disabled,
2119
- workspaceId,
2120
- onPolicyChosen
2121
- }) {
2122
- const context = useAppContext();
2123
- return /* @__PURE__ */ jsx(
2124
- ModelPicker,
2125
- {
2126
- hasImageAttachments,
2127
- onOpenChange: (open) => {
2128
- if (open) void modelCatalog.refresh();
2129
- },
2130
- rows: modelCatalog.rows,
2131
- model: context.model,
2132
- effort: context.reasoningEffort,
2133
- latencyMode: context.latencyMode,
2134
- disabled,
2135
- loading: modelCatalog.loading,
2136
- error: modelCatalog.error ?? policyError,
2137
- menuSide: "bottom",
2138
- connectModelsHref: `/workspaces/${encodeURIComponent(workspaceId)}/settings?section=models`,
2139
- claudeSubscriptionAvailable: context.clientConfig.claudeSubscriptionEnabled === true,
2140
- onModelChange: (model) => {
2141
- onPolicyChosen();
2142
- context.setModel(model);
2143
- },
2144
- onEffortChange: (effort) => {
2145
- onPolicyChosen();
2146
- context.setReasoningEffort(effort);
2147
- },
2148
- onLatencyModeChange: (latencyMode) => {
2149
- onPolicyChosen();
2150
- context.setLatencyMode(latencyMode);
2151
- }
2152
- }
2153
- );
2154
- }
2155
- function workspaceRepositoryPickerProps(context, workspaceId, disabled, onConnectWorkspaceApp) {
2156
- const githubSettingsUrl = `/workspaces/${encodeURIComponent(workspaceId)}/plugins?open=integration:github`;
2157
- return {
2158
- setupMode: context.githubStatus?.setupMode ?? (context.clientConfig.productAccessMode === "managed" ? "platform" : "operator"),
2159
- configured: context.githubStatus?.configured === true,
2160
- status: context.githubStatus?.status ?? "disabled",
2161
- installUrl: context.githubStatus?.installUrl ?? null,
2162
- linkUrl: context.githubStatus?.linkUrl ?? null,
2163
- installations: context.githubStatus?.installations ?? [],
2164
- repositories: context.githubRepos,
2165
- personalGitHubStatus: context.personalGitHubStatus,
2166
- personalGitHubRepositories: context.personalGitHubRepositories,
2167
- selectedPersonalGitHubRepoIds: context.selectedPersonalGitHubRepoIds,
2168
- selectedPersonalGitHubRepoRefs: context.selectedPersonalGitHubRepoRefs,
2169
- personalGitHubBusy: context.personalGitHubBusy,
2170
- personalGitHubManageUrl: `${githubSettingsUrl}&github=personal`,
2171
- githubSettingsUrl,
2172
- groups: context.repositoryGroups,
2173
- selectedRepoIds: context.selectedRepoIds,
2174
- selectedRepoRefs: context.selectedRepoRefs,
2175
- manualRepos: context.manualRepos,
2176
- manualOpen: context.manualReposOpen,
2177
- org: context.githubOrg,
2178
- pending: context.busy || disabled,
2179
- repoBusy: context.repoBusy,
2180
- githubLoadFailed: context.githubStatusFailed && !context.githubCatalogReady,
2181
- githubUpdateFailed: context.githubStatusFailed && context.githubCatalogReady,
2182
- githubAppBusy: context.githubAppBusy,
2183
- onRefresh: async () => {
2184
- await Promise.all([
2185
- context.refreshGitHub(workspaceId, void 0, { sync: true, userInitiated: true }),
2186
- context.refreshPersonalGitHub(workspaceId, void 0, { userInitiated: true })
2187
- ]);
2188
- },
2189
- onConnectPersonalGitHub: () => void context.connectPersonalGitHub(workspaceId),
2190
- onTogglePersonalGitHubRepo: (repository) => void context.togglePersonalGitHubRepository(workspaceId, repository),
2191
- onPersonalGitHubRefChange: (repositoryId, ref) => context.setSelectedPersonalGitHubRepoRefs((current) => ({
2192
- ...current,
2193
- [repositoryId]: ref
2194
- })),
2195
- onToggleRepo: context.toggleGitHubRepository,
2196
- onRefChange: (repoId, ref) => context.setSelectedRepoRefs((current) => ({ ...current, [repoId]: ref })),
2197
- onLoadGitHubBranches: async (repository) => {
2198
- const acceptedTransition = context.captureWorkspaceInvocation(workspaceId);
2199
- if (!acceptedTransition) throw new Error("The workspace changed; refresh and try again.");
2200
- const { listGitHubRepositoryBranches } = await import("@opengeni/sdk/github-repositories");
2201
- const response = await listGitHubRepositoryBranches(
2202
- context.client,
2203
- workspaceId,
2204
- repository.installationId,
2205
- repository.id,
2206
- { limit: 100 }
2207
- );
2208
- if (!context.ownsWorkspaceInvocation(workspaceId, acceptedTransition)) {
2209
- throw new Error("The workspace changed; refresh and try again.");
2210
- }
2211
- return response.branches;
2212
- },
2213
- onLoadPersonalGitHubBranches: async (repository) => {
2214
- const acceptedTransition = context.captureWorkspaceInvocation(workspaceId);
2215
- if (!acceptedTransition) throw new Error("The workspace changed; refresh and try again.");
2216
- const connectionId = context.personalGitHubStatus?.connection?.id;
2217
- if (!connectionId) throw new Error("Connect your GitHub identity to load branches.");
2218
- const { listPersonalGitHubRepositoryBranches } = await import("@opengeni/sdk/github-repositories");
2219
- const response = await listPersonalGitHubRepositoryBranches(
2220
- context.client,
2221
- workspaceId,
2222
- connectionId,
2223
- repository.repositoryId,
2224
- { limit: 100 }
2225
- );
2226
- if (!context.ownsWorkspaceInvocation(workspaceId, acceptedTransition)) {
2227
- throw new Error("The workspace changed; refresh and try again.");
2228
- }
2229
- return response.branches;
2230
- },
2231
- onManualOpenChange: context.setManualReposOpen,
2232
- onManualAdd: context.addManualRepository,
2233
- onManualUpdate: (id, patch) => context.setManualRepos(
2234
- (current) => current.map((repo) => repo.id === id ? { ...repo, ...patch } : repo)
2235
- ),
2236
- onManualRemove: (id) => context.setManualRepos((current) => current.filter((repo) => repo.id !== id)),
2237
- onManualAttach: async (repository) => {
2238
- const acceptedTransition = context.captureWorkspaceInvocation(workspaceId);
2239
- if (!acceptedTransition) throw new Error("The workspace changed; try again.");
2240
- const assertCurrent = () => {
2241
- if (!context.ownsWorkspaceInvocation(workspaceId, acceptedTransition)) {
2242
- throw new Error("The workspace changed; try again.");
2243
- }
2244
- };
2245
- assertCurrent();
2246
- return await attachManualRepository({
2247
- repository,
2248
- workspaceRepositories: context.githubRepos,
2249
- personalRepositories: context.personalGitHubRepositories,
2250
- selectWorkspaceRepository: (matched, ref) => {
2251
- assertCurrent();
2252
- context.setSelectedRepoIds((current) => {
2253
- const next = new Set(current);
2254
- next.add(matched.id);
2255
- return next;
2256
- });
2257
- context.setSelectedRepoRefs((current) => ({
2258
- ...current,
2259
- [matched.id]: ref
2260
- }));
2261
- context.setSelectedPersonalGitHubRepoIds(
2262
- (current) => new Set(
2263
- [...current].filter(
2264
- (id) => context.personalGitHubRepositories.find((candidate) => candidate.repositoryId === id)?.fullName.toLowerCase() !== matched.fullName.toLowerCase()
2265
- )
2266
- )
2267
- );
2268
- },
2269
- selectPersonalRepository: async (matched, ref) => {
2270
- if (!await context.ensurePersonalGitHubAuthority(workspaceId)) {
2271
- throw new Error("Your GitHub identity could not be authorized for this workspace.");
2272
- }
2273
- assertCurrent();
2274
- context.setSelectedRepoIds(
2275
- (current) => new Set(
2276
- [...current].filter(
2277
- (id) => context.githubRepos.find((candidate) => candidate.id === id)?.fullName.toLowerCase() !== matched.fullName.toLowerCase()
2278
- )
2279
- )
2280
- );
2281
- context.setSelectedPersonalGitHubRepoIds(
2282
- (current) => new Set(current).add(matched.repositoryId)
2283
- );
2284
- context.setSelectedPersonalGitHubRepoRefs((current) => ({
2285
- ...current,
2286
- [matched.repositoryId]: ref
2287
- }));
2288
- },
2289
- verifyPublicGitHubRepository: async (request) => {
2290
- const { verifyPublicGitHubRepositoryRef } = await import("@opengeni/sdk/github-repositories");
2291
- const verified = await verifyPublicGitHubRepositoryRef(
2292
- context.client,
2293
- workspaceId,
2294
- request
2295
- );
2296
- assertCurrent();
2297
- return verified;
2298
- },
2299
- attach: (attached) => {
2300
- assertCurrent();
2301
- context.setManualRepos(
2302
- (current) => current.map((candidate) => candidate.id === attached.id ? attached : candidate)
2303
- );
2304
- },
2305
- remove: (id) => {
2306
- assertCurrent();
2307
- context.setManualRepos((current) => current.filter((candidate) => candidate.id !== id));
2308
- }
2309
- });
2310
- },
2311
- validationError: context.repositoryValidationError,
2312
- onOrgChange: context.setGithubOrg,
2313
- onStartGitHubApp: () => void context.startGitHubAppManifestFlow(workspaceId),
2314
- onConnectWorkspaceApp
2315
- };
2316
- }
2317
- function WorkspaceRepositoryMenuBody({
2318
- workspaceId,
2319
- disabled,
2320
- leading,
2321
- catalogRefresh,
2322
- onConnectWorkspaceApp
2323
- }) {
2324
- const context = useAppContext();
2325
- return /* @__PURE__ */ jsx(
2326
- RepositoryContextMenuBody,
2327
- {
2328
- ...workspaceRepositoryPickerProps(context, workspaceId, disabled, onConnectWorkspaceApp),
2329
- ...catalogRefresh,
2330
- ...leading ? { leading } : {}
2331
- }
2332
- );
2333
- }
2334
- function ComputeTargetControl(props) {
2335
- const { draft, onChange } = props;
2336
- const { fleet, machines } = props;
2337
- const selfhostedPrimary = props.defaultSandboxBackend === "selfhosted";
2338
- const machineAvailabilityKey = machines.map((machine) => `${machine.sandboxId}:${machine.state}`).join("\0");
2339
- const selectedMachineSandboxId = draft.compute.kind === "machine" ? draft.compute.sandboxId : null;
2340
- useEffect(() => {
2341
- if (selfhostedPrimary && draft.compute.kind === "machine" && selectedMachineSandboxId === null && !fleet.loading) {
2342
- const firstSelectableId = resolveSelectableMachineSandboxId(machines, null);
2343
- if (firstSelectableId)
2344
- onChange({
2345
- ...draft,
2346
- compute: {
2347
- kind: "machine",
2348
- sandboxId: firstSelectableId,
2349
- folder: rememberedMachineFolder(
2350
- props.selectionHistory,
2351
- props.selectedChannelId,
2352
- firstSelectableId
2353
- )
2354
- }
2355
- });
2356
- }
2357
- }, [selfhostedPrimary, fleet.loading, machineAvailabilityKey, selectedMachineSandboxId]);
2358
- const fleetLoadFailed = fleet.error != null && !(fleet.error instanceof OpenGeniApiError && fleet.error.status === 404);
2359
- const attention = runsOnAttention({
2360
- draft,
2361
- machines,
2362
- fleetLoadFailed,
2363
- fleetLoading: fleet.loading
2364
- });
2365
- return /* @__PURE__ */ jsxs(Fragment, { children: [
2366
- attention ? /* @__PURE__ */ jsx("div", { className: "mt-3", children: /* @__PURE__ */ jsx(
2367
- RunsOnNotice,
2368
- {
2369
- attention,
2370
- machines,
2371
- disabled: props.disabled,
2372
- onRetryMachines: () => void fleet.refresh(),
2373
- connectAction: /* @__PURE__ */ jsx(Button, { asChild: true, variant: "outline", size: "sm", children: /* @__PURE__ */ jsx(
2374
- Link,
2375
- {
2376
- to: "/workspaces/$workspaceId/machines",
2377
- params: { workspaceId: props.workspaceId },
2378
- children: "Connect a machine"
2379
- }
2380
- ) })
2381
- }
2382
- ) }) : null,
2383
- props.catalogRecovery.error ? /* @__PURE__ */ jsx("div", { role: "alert", className: "mt-3", children: /* @__PURE__ */ jsx(
2384
- Notice,
2385
- {
2386
- tone: "failed",
2387
- title: "Couldn\u2019t verify the selected Sandbox Environment",
2388
- action: /* @__PURE__ */ jsx(
2389
- Button,
2390
- {
2391
- type: "button",
2392
- size: "sm",
2393
- variant: "outline",
2394
- disabled: props.disabled || props.catalogRecovery.refreshing,
2395
- onClick: props.catalogRecovery.onRetry,
2396
- children: "Try again"
2397
- }
2398
- ),
2399
- children: "Try again to reload your available resources before starting this session."
2400
- }
2401
- ) }) : null,
2402
- /* @__PURE__ */ jsx("div", { className: "mt-3", children: /* @__PURE__ */ jsx(PersonalResourceAccessInline, { access: props.personalResourceAccess }) })
2403
- ] });
2404
- }
2405
- function PersonalResourceAccessInline(props) {
2406
- if (props.access.names.length === 0) return null;
2407
- const content = /* @__PURE__ */ jsxs("p", { className: "text-2xs text-fg-subtle", children: [
2408
- props.access.names.join(", "),
2409
- " will be available for your work in this session.",
2410
- props.access.visibility === "workspace" ? " Results are visible to people who can access this chat." : null
2411
- ] });
2412
- return props.embedded ? /* @__PURE__ */ jsx("div", { className: "border-t border-border/70 px-3 py-2.5", children: content }) : /* @__PURE__ */ jsx("div", { className: "px-0.5", children: content });
2413
- }
2414
- function PrivateWorkspaceNote() {
2415
- return /* @__PURE__ */ jsxs("p", { className: "mt-3 flex items-center gap-1.5 px-0.5 text-xs text-fg-muted", children: [
2416
- /* @__PURE__ */ jsx(LockIcon, { "aria-hidden": "true", className: "size-3.5 shrink-0" }),
2417
- "Private: only you can see chats here."
2418
- ] });
2419
- }
2420
-
2421
- export {
2422
- SessionsIndexRoute
2423
- };
2424
- //# sourceMappingURL=chunk-FC2FTSK3.js.map