@opengeni/react 4.3.3-canary.39780140124001 → 4.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) hide show
  1. package/dist/app/app-state.js +29 -29
  2. package/dist/app/components/Composer.js +22 -22
  3. package/dist/app/components/agent/agent-capability-picker.js +4 -4
  4. package/dist/app/components/artifacts/artifact-browse-controls.js +1 -1
  5. package/dist/app/components/artifacts/artifact-library.js +19 -19
  6. package/dist/app/components/artifacts/chat-interactive-block.js +14 -14
  7. package/dist/app/components/artifacts/inline-chat-image.js +25 -25
  8. package/dist/app/components/artifacts/retained-file-preview.js +28 -28
  9. package/dist/app/components/artifacts/retained-text-preview.js +3 -3
  10. package/dist/app/components/artifacts/site-audience.js +4 -4
  11. package/dist/app/components/artifacts/site-conversations.js +18 -18
  12. package/dist/app/components/artifacts/site-data.js +19 -19
  13. package/dist/app/components/artifacts/site-publishing.js +38 -38
  14. package/dist/app/components/artifacts/site-settings.js +47 -47
  15. package/dist/app/components/billing-class-mark.js +4 -4
  16. package/dist/app/components/capabilities/capability-detail-sheet.js +8 -8
  17. package/dist/app/components/capabilities/capability-logo-source.js +8 -8
  18. package/dist/app/components/capabilities/connector-tool-permissions.js +4 -4
  19. package/dist/app/components/capabilities/native-connect-setup.js +12 -12
  20. package/dist/app/components/capabilities/perform-capability-action.js +1 -1
  21. package/dist/app/components/capabilities/prepared-mcp-setup-card.js +11 -11
  22. package/dist/app/components/capabilities/session-capability-card.js +90 -74
  23. package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
  24. package/dist/app/components/capabilities/session-chrome-card.css +1023 -0
  25. package/dist/app/components/capabilities/session-chrome-card.css.map +1 -0
  26. package/dist/app/components/capabilities/session-chrome-card.d.ts +18 -0
  27. package/dist/app/components/capabilities/session-chrome-card.js +70 -0
  28. package/dist/app/components/capabilities/session-custom-mcp-card.js +16 -16
  29. package/dist/app/components/capabilities/session-github-card.js +20 -20
  30. package/dist/app/components/capabilities/session-machine-card.d.ts +27 -1
  31. package/dist/app/components/capabilities/session-machine-card.js +31 -29
  32. package/dist/app/components/capabilities/use-capabilities-catalog.js +3 -3
  33. package/dist/app/components/capabilities/use-connection-accounts.js +1 -1
  34. package/dist/app/components/command-menu/chat-status.js +12 -12
  35. package/dist/app/components/command-menu/chat-switcher.js +17 -17
  36. package/dist/app/components/command-menu/command-menu.js +35 -35
  37. package/dist/app/components/command-menu/shortcut-sheet.js +16 -16
  38. package/dist/app/components/composer-capabilities-menu-body.js +3 -3
  39. package/dist/app/components/composer-mobile-plus-panel.js +16 -16
  40. package/dist/app/components/composer-mobile-plus.js +1 -1
  41. package/dist/app/components/credit-required-gate.js +1 -1
  42. package/dist/app/components/credit-required-prompt.js +10 -10
  43. package/dist/app/components/desktop/app-shots.js +2 -2
  44. package/dist/app/components/feedback.js +2 -2
  45. package/dist/app/components/follow-up-repository-menu-body.js +7 -7
  46. package/dist/app/components/follow-up-repository-picker.js +2 -2
  47. package/dist/app/components/github-app-connect-launcher.js +2 -2
  48. package/dist/app/components/knowledge/agent-learning-settings.js +3 -3
  49. package/dist/app/components/machines/connect-machine-dialog.js +16 -16
  50. package/dist/app/components/markdown.js +7 -7
  51. package/dist/app/components/message-context-pills.js +2 -2
  52. package/dist/app/components/models/models-ui.js +8 -8
  53. package/dist/app/components/pickers.js +7 -7
  54. package/dist/app/components/rail/rail-context.js +2 -2
  55. package/dist/app/components/rail/rail-sections.js +63 -63
  56. package/dist/app/components/rail/session-header.js +48 -48
  57. package/dist/app/components/rail/session-list.js +62 -62
  58. package/dist/app/components/rail/session-row-content.js +2 -2
  59. package/dist/app/components/rail/session-row-hover-details.js +17 -17
  60. package/dist/app/components/rail/session-shell.js +102 -102
  61. package/dist/app/components/rail/site-session-group-heading.js +3 -3
  62. package/dist/app/components/repository-picker.js +7 -7
  63. package/dist/app/components/secrets/session-secrets-panel.js +3 -3
  64. package/dist/app/components/session/agent-configuration-panel.js +33 -33
  65. package/dist/app/components/session/artifact-session-page.js +1 -1
  66. package/dist/app/components/session/banners.js +10 -10
  67. package/dist/app/components/session/codex-account-indicator.js +8 -8
  68. package/dist/app/components/session/editable-artifacts-workspace.js +38 -38
  69. package/dist/app/components/session/failed-session-banner.js +7 -7
  70. package/dist/app/components/session/human-input.js +44 -44
  71. package/dist/app/components/session/inspector.js +87 -87
  72. package/dist/app/components/session/message-actions.js +2 -2
  73. package/dist/app/components/session/message-resource-attachments.js +20 -20
  74. package/dist/app/components/session/model-account-indicator.js +8 -8
  75. package/dist/app/components/session/model-context-inspector.js +2 -2
  76. package/dist/app/components/session/new-session-settings-menu.js +10 -10
  77. package/dist/app/components/session/sandbox-switcher.js +12 -12
  78. package/dist/app/components/session/sandbox-workspace.js +62 -62
  79. package/dist/app/components/session/search-markdown-highlight.js +8 -8
  80. package/dist/app/components/session/search-results-view.js +9 -9
  81. package/dist/app/components/session/session-admin-access.js +8 -8
  82. package/dist/app/components/session/session-admission-notice.js +2 -2
  83. package/dist/app/components/session/session-machine-access-notice.js +2 -2
  84. package/dist/app/components/session/session-retention.js +4 -4
  85. package/dist/app/components/session/session-search-dialog.js +9 -9
  86. package/dist/app/components/session/session-skill-reviews.js +1 -1
  87. package/dist/app/components/session/session-tenancy-control.js +24 -24
  88. package/dist/app/components/session/session-usage-limit-section.js +10 -10
  89. package/dist/app/components/session/session-wait-status.js +7 -7
  90. package/dist/app/components/session/subagents.js +13 -13
  91. package/dist/app/components/session-connectors-menu-body.js +5 -5
  92. package/dist/app/components/settings/row-select.js +3 -3
  93. package/dist/app/components/transcription-settings.js +4 -4
  94. package/dist/app/components/ui/destructive-confirm.js +6 -6
  95. package/dist/app/components/usage/usage-entry.js +4 -4
  96. package/dist/app/components/workspace-composer-plus.js +18 -18
  97. package/dist/app/embed/session-app.js +268 -268
  98. package/dist/app/lib/actions/actions-provider.js +16 -16
  99. package/dist/app/lib/app-surfaces.js +1 -1
  100. package/dist/app/lib/codex-usage-query.js +2 -2
  101. package/dist/app/lib/composer-connectors.js +9 -9
  102. package/dist/app/lib/events.js +12 -12
  103. package/dist/app/lib/session-branch-cache.js +9 -9
  104. package/dist/app/lib/session-create.js +2 -2
  105. package/dist/app/lib/session-group-pagination.js +9 -9
  106. package/dist/app/lib/session-hover-facts.js +10 -10
  107. package/dist/app/lib/session-model.js +3 -3
  108. package/dist/app/lib/session-rail.js +7 -7
  109. package/dist/app/lib/session-rename.js +3 -3
  110. package/dist/app/lib/sessions-group.js +9 -9
  111. package/dist/app/lib/turn-failure-analytics.js +1 -1
  112. package/dist/app/lib/use-duplicate-site.js +3 -3
  113. package/dist/app/lib/use-follow-up-repositories.js +5 -5
  114. package/dist/app/lib/use-workspace-integrations.js +2 -2
  115. package/dist/app/lib/use-workspace-machines.js +2 -2
  116. package/dist/app/lib/use-workspace-model-catalog.js +2 -2
  117. package/dist/app/lib/use-workspace-rigs.js +3 -3
  118. package/dist/app/lib/workspace-navigation-preference.js +1 -1
  119. package/dist/app/lib/workspace-scope-context.js +1 -1
  120. package/dist/app/routes/artifacts.js +132 -132
  121. package/dist/app/routes/retained-artifact.js +62 -62
  122. package/dist/app/routes/session-unavailable.js +2 -2
  123. package/dist/app/routes/session.js +163 -163
  124. package/dist/app/routes/sessions-index-hydration.js +3 -3
  125. package/dist/app/routes/sessions-index.js +109 -109
  126. package/dist/artifacts-document.js +2 -2
  127. package/dist/artifacts-presentation.js +2 -2
  128. package/dist/artifacts-spreadsheet.js +2 -2
  129. package/dist/artifacts.js +36 -36
  130. package/dist/{browser-viewer-VYZLJH3P.js → browser-viewer-RYYQSRTC.js} +5 -5
  131. package/dist/{chat-interactive-block-MECBXZ7V.js → chat-interactive-block-ABCRKXJ4.js} +5 -5
  132. package/dist/{chunk-Y4D4N2EF.js → chunk-22ZBT6CN.js} +2 -2
  133. package/dist/{chunk-TFK4KFKA.js → chunk-33TPANCR.js} +4 -4
  134. package/dist/{chunk-CFFNT2OY.js → chunk-3GLAPCVI.js} +8 -8
  135. package/dist/{chunk-BXQYAAVE.js → chunk-3XOISKZC.js} +4 -4
  136. package/dist/{chunk-FYGMIMEG.js → chunk-4432A3HQ.js} +2 -2
  137. package/dist/{chunk-3MOD23RS.js → chunk-46VBQG2D.js} +13 -13
  138. package/dist/{chunk-Q2PVSCJV.js → chunk-4EAF3HSD.js} +2 -2
  139. package/dist/{chunk-YTK6MYZH.js → chunk-4EONHNJU.js} +2 -2
  140. package/dist/{chunk-7YLXFFF5.js → chunk-4R3JCVID.js} +141 -141
  141. package/dist/{chunk-73DMIW44.js → chunk-4VKA5O7T.js} +2 -2
  142. package/dist/{chunk-SLTOYHG6.js → chunk-4W7VISE7.js} +108 -108
  143. package/dist/{chunk-SLTOYHG6.js.map → chunk-4W7VISE7.js.map} +1 -1
  144. package/dist/{chunk-TIBPTOLQ.js → chunk-5JEIDFPD.js} +1 -1
  145. package/dist/{chunk-L7UDYTU3.js → chunk-5MZTJMZ3.js} +7 -6
  146. package/dist/chunk-5MZTJMZ3.js.map +1 -0
  147. package/dist/{chunk-3E4SJHVW.js → chunk-5POTDNQT.js} +5 -5
  148. package/dist/{chunk-JW6CYU5F.js → chunk-63VGE4OH.js} +2 -2
  149. package/dist/{chunk-2VDCH2DF.js → chunk-6JKZILLF.js} +65 -65
  150. package/dist/{chunk-2VDCH2DF.js.map → chunk-6JKZILLF.js.map} +1 -1
  151. package/dist/{chunk-7HVOIRGN.js → chunk-6NIB2KGJ.js} +41 -41
  152. package/dist/{chunk-KLVK7BN5.js → chunk-6PQNLL4E.js} +35 -35
  153. package/dist/{chunk-FGPSTD37.js → chunk-72J6C2AJ.js} +4 -4
  154. package/dist/{chunk-N34NUHUO.js → chunk-73SOCVLS.js} +4 -4
  155. package/dist/{chunk-43OV5QK7.js → chunk-7BST7BA6.js} +4 -4
  156. package/dist/{chunk-FDAV72IX.js → chunk-7CZTKBTI.js} +5 -5
  157. package/dist/{chunk-G4ONAC4P.js → chunk-7DU35P5J.js} +6 -6
  158. package/dist/{chunk-SM5QX6UK.js → chunk-A2EWJQXX.js} +4 -4
  159. package/dist/{chunk-3WDWLSYX.js → chunk-AD22P5X3.js} +3 -3
  160. package/dist/{chunk-ZQSRAMSH.js → chunk-ADJJQSYC.js} +42 -42
  161. package/dist/{chunk-5C6KUGFG.js → chunk-AG7VGUIW.js} +6 -6
  162. package/dist/{chunk-LF5CBAOS.js → chunk-AOLE4IRZ.js} +5 -5
  163. package/dist/{chunk-CF7ZCKZC.js → chunk-APU42QDI.js} +133 -133
  164. package/dist/{chunk-P56F4SFD.js → chunk-BJIZ7PL7.js} +2 -2
  165. package/dist/{chunk-XEL2ZJ3Z.js → chunk-BJW7G6EF.js} +2 -2
  166. package/dist/{chunk-NNNXKGJH.js → chunk-BNUPYHHZ.js} +2 -2
  167. package/dist/{chunk-FYSOHZSM.js → chunk-BXRIQZAH.js} +8 -8
  168. package/dist/{chunk-N4ZDRONX.js → chunk-CBY5CXBD.js} +4 -4
  169. package/dist/{chunk-7PTHBHEW.js → chunk-CVG4FILQ.js} +69 -69
  170. package/dist/{chunk-LMN7SO4T.js → chunk-DDK4WFJ3.js} +12 -12
  171. package/dist/{chunk-G4HQUBO4.js → chunk-DLOYMWUQ.js} +7 -7
  172. package/dist/{chunk-OTMWHZBY.js → chunk-DWPOQ3S5.js} +2 -2
  173. package/dist/{chunk-C32ZOZTE.js → chunk-EF5SYXAY.js} +59 -34
  174. package/dist/chunk-EF5SYXAY.js.map +1 -0
  175. package/dist/{chunk-JIJGQPW2.js → chunk-EHCUFCXM.js} +18 -18
  176. package/dist/{chunk-SFTKDFOQ.js → chunk-EU6XSQFM.js} +2 -2
  177. package/dist/{chunk-62VER7O4.js → chunk-F3NERYBQ.js} +6 -6
  178. package/dist/{chunk-XZTOGYSM.js → chunk-F6LBGYS6.js} +39 -39
  179. package/dist/{chunk-EX5YO2KX.js → chunk-FDNJVZRE.js} +16 -16
  180. package/dist/{chunk-E5GLL7GL.js → chunk-FLGUVRR7.js} +5 -5
  181. package/dist/{chunk-YGD4MVPD.js → chunk-FSN6APRD.js} +4 -4
  182. package/dist/{chunk-J2YMBA2R.js → chunk-GAIM5RNE.js} +2 -2
  183. package/dist/{chunk-X2AH4DRF.js → chunk-GALB2G3W.js} +2 -2
  184. package/dist/{chunk-E2NTKB4G.js → chunk-GFUUFM2O.js} +4 -4
  185. package/dist/{chunk-7FTEIGVP.js → chunk-GTQ3SNEI.js} +2 -2
  186. package/dist/{chunk-SPH2HDSW.js → chunk-HDHK3SXK.js} +6 -6
  187. package/dist/{chunk-IJ6WELGP.js → chunk-HGMWMK5K.js} +2 -2
  188. package/dist/{chunk-HRMDE6MI.js → chunk-HNYJEAES.js} +7 -7
  189. package/dist/{chunk-BYASTRHQ.js → chunk-HO5Y2OOX.js} +11 -11
  190. package/dist/{chunk-WW7VY5LC.js → chunk-HOJGAJAB.js} +9 -9
  191. package/dist/{chunk-DYGAOHXK.js → chunk-HTT3FB7T.js} +2 -2
  192. package/dist/{chunk-O2WCMUQG.js → chunk-HWDGJFM4.js} +13 -13
  193. package/dist/{chunk-2JASYO6P.js → chunk-I6VUUEXH.js} +149 -149
  194. package/dist/chunk-I6VUUEXH.js.map +1 -0
  195. package/dist/{chunk-3AOXZHF6.js → chunk-IVOA3DXA.js} +10 -10
  196. package/dist/{chunk-5O5NCXJP.js → chunk-JK7C5A4I.js} +27 -27
  197. package/dist/{chunk-R7S6NSUB.js → chunk-JTN3T4QN.js} +20 -20
  198. package/dist/{chunk-7DUTMHRQ.js → chunk-JXT5QDJC.js} +4 -4
  199. package/dist/{chunk-BWTNB77U.js → chunk-KTRKZRID.js} +13 -13
  200. package/dist/{chunk-MWAFZVC4.js → chunk-KWKGBGAF.js} +10 -10
  201. package/dist/{chunk-5HXZC3OM.js → chunk-KZHW27BV.js} +2 -2
  202. package/dist/{chunk-RWUIKGLS.js → chunk-L7YURQI2.js} +2 -2
  203. package/dist/{chunk-73WI7FL2.js → chunk-LE2EDBXU.js} +18 -18
  204. package/dist/{chunk-5DSKMG2I.js → chunk-LEXPBQ56.js} +4 -4
  205. package/dist/{chunk-DWOP7YQX.js → chunk-N3ZP4IDU.js} +2 -2
  206. package/dist/{chunk-2KKFUNVW.js → chunk-NCX5SAQY.js} +7 -7
  207. package/dist/{chunk-ITGR4HN7.js → chunk-NDF3SH3X.js} +13 -13
  208. package/dist/{chunk-JQCGPTZ6.js → chunk-NWZW2WHN.js} +9 -9
  209. package/dist/{chunk-NQA5WCKG.js → chunk-NYZQ7LO7.js} +19 -19
  210. package/dist/{chunk-ZDL4ZALP.js → chunk-O756O2I7.js} +1 -1
  211. package/dist/{chunk-GRSODLVO.js → chunk-OANSIX34.js} +4 -4
  212. package/dist/{chunk-JLMDWUME.js → chunk-OBQVTCTW.js} +3 -3
  213. package/dist/{chunk-TUERKBGA.js → chunk-OO2T63BY.js} +2 -2
  214. package/dist/{chunk-EPWD4KRA.js → chunk-OOEO4MKY.js} +2 -2
  215. package/dist/{chunk-IKN3XCJU.js → chunk-OR37STQZ.js} +2 -2
  216. package/dist/{chunk-62LZQOAH.js → chunk-OSVHU2WU.js} +14 -14
  217. package/dist/{chunk-73YPB5IB.js → chunk-P5WABK2H.js} +8 -8
  218. package/dist/{chunk-JNFRC3AW.js → chunk-PM3OSANE.js} +4 -4
  219. package/dist/{chunk-W57X2TSV.js → chunk-PN66T6JA.js} +5 -5
  220. package/dist/{chunk-4NDE4JTJ.js → chunk-Q35DT6I6.js} +200 -200
  221. package/dist/{chunk-WFS5EUCL.js → chunk-Q35YZVDZ.js} +7 -7
  222. package/dist/{chunk-P5GMHOZB.js → chunk-QCD5Y7K5.js} +17 -17
  223. package/dist/{chunk-YTX274IC.js → chunk-QM5H4FPT.js} +2 -2
  224. package/dist/{chunk-VCUGPND2.js → chunk-QRVNI5V6.js} +3 -3
  225. package/dist/{chunk-JM4HQPAI.js → chunk-QZRDCFHI.js} +5 -5
  226. package/dist/{chunk-ELABMEDP.js → chunk-R63QEVPK.js} +15 -15
  227. package/dist/{chunk-CP7ZQHBW.js → chunk-RA3FNMWF.js} +10 -10
  228. package/dist/{chunk-D6II4KOG.js → chunk-RGW24ZZM.js} +74 -74
  229. package/dist/{chunk-2FUVCKGA.js → chunk-ROQOVH4N.js} +18 -18
  230. package/dist/chunk-ROQOVH4N.js.map +1 -0
  231. package/dist/{chunk-WSYR6CUF.js → chunk-RQDFYQHA.js} +7 -7
  232. package/dist/{chunk-CSLCTVND.js → chunk-RSNYGEVZ.js} +7 -7
  233. package/dist/{chunk-B2ES3U36.js → chunk-S4EZ3JUB.js} +39 -39
  234. package/dist/{chunk-OOUEPFGL.js → chunk-S4SC5SSV.js} +16 -16
  235. package/dist/{chunk-A4BD4ZVB.js → chunk-S7PVL7XH.js} +4 -4
  236. package/dist/{chunk-4LPA25NQ.js → chunk-SD2K5ZN5.js} +4 -4
  237. package/dist/chunk-ST22GONV.js +204 -0
  238. package/dist/chunk-ST22GONV.js.map +1 -0
  239. package/dist/{chunk-XAXTE2NA.js → chunk-SUVEDKE2.js} +3 -3
  240. package/dist/{chunk-LCFU5YUA.js → chunk-TGVVEGZG.js} +9 -9
  241. package/dist/{chunk-E74ISUXA.js → chunk-TQGJN5UZ.js} +233 -233
  242. package/dist/chunk-TQGJN5UZ.js.map +1 -0
  243. package/dist/{chunk-OEL73V62.js → chunk-U36PO27Q.js} +3 -3
  244. package/dist/{chunk-HZT5H5ZP.js → chunk-U3HSFCON.js} +22 -22
  245. package/dist/{chunk-J5MEDX7C.js → chunk-U47YDYLQ.js} +8 -8
  246. package/dist/{chunk-BLT4KQTS.js → chunk-UP4BE32Y.js} +4 -4
  247. package/dist/{chunk-ZSKUBXA6.js → chunk-UWJ5P5CU.js} +2 -2
  248. package/dist/{chunk-YVBHGMKC.js → chunk-VAIESMPY.js} +4 -4
  249. package/dist/{chunk-5P6EKYTC.js → chunk-VP62LPLW.js} +14 -14
  250. package/dist/{chunk-GOEN2FSD.js → chunk-VUHPA3XQ.js} +4 -4
  251. package/dist/{chunk-5FA455GR.js → chunk-WNG757ID.js} +4 -4
  252. package/dist/{chunk-4LMNYFES.js → chunk-WSMYOLHG.js} +9 -9
  253. package/dist/{chunk-JXEMUZTV.js → chunk-X7ASQHR6.js} +2 -2
  254. package/dist/{chunk-YSSTNTJD.js → chunk-X7L4H4VG.js} +223 -223
  255. package/dist/chunk-X7L4H4VG.js.map +1 -0
  256. package/dist/{chunk-CZSYF7UF.js → chunk-XOFUXMPP.js} +2 -2
  257. package/dist/{chunk-VNMM6DQP.js → chunk-XWWXIZFP.js} +4 -4
  258. package/dist/{chunk-XC4DZXZZ.js → chunk-YXOKAG66.js} +2 -2
  259. package/dist/{chunk-XMNUZUUA.js → chunk-Z2DAWUO3.js} +6 -6
  260. package/dist/{chunk-TJ2MBYK4.js → chunk-Z5WMLJKI.js} +4 -4
  261. package/dist/{chunk-WCK2NF54.js → chunk-ZKYYZH6L.js} +7 -7
  262. package/dist/{chunk-AS6ZXN5K.js → chunk-ZRJCGBVV.js} +2 -2
  263. package/dist/composer.js +11 -11
  264. package/dist/{computer-viewer-MUOPCKPS.js → computer-viewer-KEDVLD42.js} +6 -6
  265. package/dist/connect.js +7 -7
  266. package/dist/{embedded-new-voice-IIZPNXHC.js → embedded-new-voice-LFHWWYD2.js} +5 -5
  267. package/dist/{embedded-voice-5PXDBGOI.js → embedded-voice-6QS4ANNX.js} +5 -5
  268. package/dist/index.js +206 -206
  269. package/dist/interaction.js +6 -6
  270. package/dist/{latest-question-ZCZYQZMD.js → latest-question-AW3PPDUM.js} +2 -2
  271. package/dist/machines.js +1 -1
  272. package/dist/{model-policy-picker-menu-4GWYXUP3.js → model-policy-picker-menu-CURJ247L.js} +5 -5
  273. package/dist/native-previews.js +3 -3
  274. package/dist/{queue-surface-implementation-VPPIEPJL.js → queue-surface-implementation-2X5AXB6I.js} +4 -4
  275. package/dist/realtime.js +4 -4
  276. package/dist/{sandbox-files-QXIZJJMW.js → sandbox-files-4FBG3GS2.js} +8 -8
  277. package/dist/sandbox-files-4FBG3GS2.js.map +1 -0
  278. package/dist/session-app.js +268 -268
  279. package/dist/session-list-model.js +2 -2
  280. package/dist/session-ui.js +57 -57
  281. package/dist/session.js +11 -11
  282. package/dist/terminal.js +1 -1
  283. package/dist/timeline/types.d.ts +2 -0
  284. package/dist/{timeline-annotation-markers-BSTWUL4V.js → timeline-annotation-markers-X4K2IEOO.js} +4 -4
  285. package/dist/{timeline-annotation-selection-3SMCLIJE.js → timeline-annotation-selection-MEHBW676.js} +6 -6
  286. package/dist/{timeline-annotations-dialog-GFF3RFYZ.js → timeline-annotations-dialog-U2FPQ3UY.js} +7 -7
  287. package/dist/timeline-model.js +15 -15
  288. package/dist/ui/access-list.js +18 -18
  289. package/dist/ui/cadence-picker.js +2 -2
  290. package/dist/ui/choice-cards.js +2 -2
  291. package/dist/ui/detail-page.js +2 -2
  292. package/dist/ui/detail-sheet.js +2 -2
  293. package/dist/ui/diff-view.js +2 -2
  294. package/dist/ui/disclosure.js +4 -4
  295. package/dist/ui/flush-form-page.js +3 -3
  296. package/dist/ui/form-dialog.js +2 -2
  297. package/dist/ui/list-row.js +4 -4
  298. package/dist/ui/revision-history.js +11 -11
  299. package/dist/ui/role-select.js +7 -7
  300. package/dist/ui/select-menu.js +2 -2
  301. package/dist/ui/settings-nav.js +3 -3
  302. package/dist/workbench.js +9 -9
  303. package/package.json +4 -4
  304. package/src/app/components/capabilities/session-capability-card.tsx +14 -1
  305. package/src/app/components/capabilities/session-chrome-card.dom-fixture.tsx +377 -0
  306. package/src/app/components/capabilities/session-chrome-card.test.tsx +18 -0
  307. package/src/app/components/capabilities/session-chrome-card.tsx +243 -0
  308. package/src/app/components/capabilities/session-machine-card.dom-fixture.tsx +2 -0
  309. package/src/app/components/capabilities/session-machine-card.tsx +65 -14
  310. package/src/timeline/projection.ts +4 -2
  311. package/src/timeline/types.ts +2 -0
  312. package/dist/chunk-2FUVCKGA.js.map +0 -1
  313. package/dist/chunk-2JASYO6P.js.map +0 -1
  314. package/dist/chunk-C32ZOZTE.js.map +0 -1
  315. package/dist/chunk-E74ISUXA.js.map +0 -1
  316. package/dist/chunk-L7UDYTU3.js.map +0 -1
  317. package/dist/chunk-YSSTNTJD.js.map +0 -1
  318. /package/dist/{browser-viewer-VYZLJH3P.js.map → app/components/capabilities/session-chrome-card.js.map} +0 -0
  319. /package/dist/{chat-interactive-block-MECBXZ7V.js.map → browser-viewer-RYYQSRTC.js.map} +0 -0
  320. /package/dist/{computer-viewer-MUOPCKPS.js.map → chat-interactive-block-ABCRKXJ4.js.map} +0 -0
  321. /package/dist/{chunk-Y4D4N2EF.js.map → chunk-22ZBT6CN.js.map} +0 -0
  322. /package/dist/{chunk-TFK4KFKA.js.map → chunk-33TPANCR.js.map} +0 -0
  323. /package/dist/{chunk-CFFNT2OY.js.map → chunk-3GLAPCVI.js.map} +0 -0
  324. /package/dist/{chunk-BXQYAAVE.js.map → chunk-3XOISKZC.js.map} +0 -0
  325. /package/dist/{chunk-FYGMIMEG.js.map → chunk-4432A3HQ.js.map} +0 -0
  326. /package/dist/{chunk-3MOD23RS.js.map → chunk-46VBQG2D.js.map} +0 -0
  327. /package/dist/{chunk-Q2PVSCJV.js.map → chunk-4EAF3HSD.js.map} +0 -0
  328. /package/dist/{chunk-YTK6MYZH.js.map → chunk-4EONHNJU.js.map} +0 -0
  329. /package/dist/{chunk-7YLXFFF5.js.map → chunk-4R3JCVID.js.map} +0 -0
  330. /package/dist/{chunk-73DMIW44.js.map → chunk-4VKA5O7T.js.map} +0 -0
  331. /package/dist/{chunk-TIBPTOLQ.js.map → chunk-5JEIDFPD.js.map} +0 -0
  332. /package/dist/{chunk-3E4SJHVW.js.map → chunk-5POTDNQT.js.map} +0 -0
  333. /package/dist/{chunk-JW6CYU5F.js.map → chunk-63VGE4OH.js.map} +0 -0
  334. /package/dist/{chunk-7HVOIRGN.js.map → chunk-6NIB2KGJ.js.map} +0 -0
  335. /package/dist/{chunk-KLVK7BN5.js.map → chunk-6PQNLL4E.js.map} +0 -0
  336. /package/dist/{chunk-FGPSTD37.js.map → chunk-72J6C2AJ.js.map} +0 -0
  337. /package/dist/{chunk-N34NUHUO.js.map → chunk-73SOCVLS.js.map} +0 -0
  338. /package/dist/{chunk-43OV5QK7.js.map → chunk-7BST7BA6.js.map} +0 -0
  339. /package/dist/{chunk-FDAV72IX.js.map → chunk-7CZTKBTI.js.map} +0 -0
  340. /package/dist/{chunk-G4ONAC4P.js.map → chunk-7DU35P5J.js.map} +0 -0
  341. /package/dist/{chunk-SM5QX6UK.js.map → chunk-A2EWJQXX.js.map} +0 -0
  342. /package/dist/{chunk-3WDWLSYX.js.map → chunk-AD22P5X3.js.map} +0 -0
  343. /package/dist/{chunk-ZQSRAMSH.js.map → chunk-ADJJQSYC.js.map} +0 -0
  344. /package/dist/{chunk-5C6KUGFG.js.map → chunk-AG7VGUIW.js.map} +0 -0
  345. /package/dist/{chunk-LF5CBAOS.js.map → chunk-AOLE4IRZ.js.map} +0 -0
  346. /package/dist/{chunk-CF7ZCKZC.js.map → chunk-APU42QDI.js.map} +0 -0
  347. /package/dist/{chunk-P56F4SFD.js.map → chunk-BJIZ7PL7.js.map} +0 -0
  348. /package/dist/{chunk-XEL2ZJ3Z.js.map → chunk-BJW7G6EF.js.map} +0 -0
  349. /package/dist/{chunk-NNNXKGJH.js.map → chunk-BNUPYHHZ.js.map} +0 -0
  350. /package/dist/{chunk-FYSOHZSM.js.map → chunk-BXRIQZAH.js.map} +0 -0
  351. /package/dist/{chunk-N4ZDRONX.js.map → chunk-CBY5CXBD.js.map} +0 -0
  352. /package/dist/{chunk-7PTHBHEW.js.map → chunk-CVG4FILQ.js.map} +0 -0
  353. /package/dist/{chunk-LMN7SO4T.js.map → chunk-DDK4WFJ3.js.map} +0 -0
  354. /package/dist/{chunk-G4HQUBO4.js.map → chunk-DLOYMWUQ.js.map} +0 -0
  355. /package/dist/{chunk-OTMWHZBY.js.map → chunk-DWPOQ3S5.js.map} +0 -0
  356. /package/dist/{chunk-JIJGQPW2.js.map → chunk-EHCUFCXM.js.map} +0 -0
  357. /package/dist/{chunk-SFTKDFOQ.js.map → chunk-EU6XSQFM.js.map} +0 -0
  358. /package/dist/{chunk-62VER7O4.js.map → chunk-F3NERYBQ.js.map} +0 -0
  359. /package/dist/{chunk-XZTOGYSM.js.map → chunk-F6LBGYS6.js.map} +0 -0
  360. /package/dist/{chunk-EX5YO2KX.js.map → chunk-FDNJVZRE.js.map} +0 -0
  361. /package/dist/{chunk-E5GLL7GL.js.map → chunk-FLGUVRR7.js.map} +0 -0
  362. /package/dist/{chunk-YGD4MVPD.js.map → chunk-FSN6APRD.js.map} +0 -0
  363. /package/dist/{chunk-J2YMBA2R.js.map → chunk-GAIM5RNE.js.map} +0 -0
  364. /package/dist/{chunk-X2AH4DRF.js.map → chunk-GALB2G3W.js.map} +0 -0
  365. /package/dist/{chunk-E2NTKB4G.js.map → chunk-GFUUFM2O.js.map} +0 -0
  366. /package/dist/{chunk-7FTEIGVP.js.map → chunk-GTQ3SNEI.js.map} +0 -0
  367. /package/dist/{chunk-SPH2HDSW.js.map → chunk-HDHK3SXK.js.map} +0 -0
  368. /package/dist/{chunk-IJ6WELGP.js.map → chunk-HGMWMK5K.js.map} +0 -0
  369. /package/dist/{chunk-HRMDE6MI.js.map → chunk-HNYJEAES.js.map} +0 -0
  370. /package/dist/{chunk-BYASTRHQ.js.map → chunk-HO5Y2OOX.js.map} +0 -0
  371. /package/dist/{chunk-WW7VY5LC.js.map → chunk-HOJGAJAB.js.map} +0 -0
  372. /package/dist/{chunk-DYGAOHXK.js.map → chunk-HTT3FB7T.js.map} +0 -0
  373. /package/dist/{chunk-O2WCMUQG.js.map → chunk-HWDGJFM4.js.map} +0 -0
  374. /package/dist/{chunk-3AOXZHF6.js.map → chunk-IVOA3DXA.js.map} +0 -0
  375. /package/dist/{chunk-5O5NCXJP.js.map → chunk-JK7C5A4I.js.map} +0 -0
  376. /package/dist/{chunk-R7S6NSUB.js.map → chunk-JTN3T4QN.js.map} +0 -0
  377. /package/dist/{chunk-7DUTMHRQ.js.map → chunk-JXT5QDJC.js.map} +0 -0
  378. /package/dist/{chunk-BWTNB77U.js.map → chunk-KTRKZRID.js.map} +0 -0
  379. /package/dist/{chunk-MWAFZVC4.js.map → chunk-KWKGBGAF.js.map} +0 -0
  380. /package/dist/{chunk-5HXZC3OM.js.map → chunk-KZHW27BV.js.map} +0 -0
  381. /package/dist/{chunk-RWUIKGLS.js.map → chunk-L7YURQI2.js.map} +0 -0
  382. /package/dist/{chunk-73WI7FL2.js.map → chunk-LE2EDBXU.js.map} +0 -0
  383. /package/dist/{chunk-5DSKMG2I.js.map → chunk-LEXPBQ56.js.map} +0 -0
  384. /package/dist/{chunk-DWOP7YQX.js.map → chunk-N3ZP4IDU.js.map} +0 -0
  385. /package/dist/{chunk-2KKFUNVW.js.map → chunk-NCX5SAQY.js.map} +0 -0
  386. /package/dist/{chunk-ITGR4HN7.js.map → chunk-NDF3SH3X.js.map} +0 -0
  387. /package/dist/{chunk-JQCGPTZ6.js.map → chunk-NWZW2WHN.js.map} +0 -0
  388. /package/dist/{chunk-NQA5WCKG.js.map → chunk-NYZQ7LO7.js.map} +0 -0
  389. /package/dist/{chunk-ZDL4ZALP.js.map → chunk-O756O2I7.js.map} +0 -0
  390. /package/dist/{chunk-GRSODLVO.js.map → chunk-OANSIX34.js.map} +0 -0
  391. /package/dist/{chunk-JLMDWUME.js.map → chunk-OBQVTCTW.js.map} +0 -0
  392. /package/dist/{chunk-TUERKBGA.js.map → chunk-OO2T63BY.js.map} +0 -0
  393. /package/dist/{chunk-EPWD4KRA.js.map → chunk-OOEO4MKY.js.map} +0 -0
  394. /package/dist/{chunk-IKN3XCJU.js.map → chunk-OR37STQZ.js.map} +0 -0
  395. /package/dist/{chunk-62LZQOAH.js.map → chunk-OSVHU2WU.js.map} +0 -0
  396. /package/dist/{chunk-73YPB5IB.js.map → chunk-P5WABK2H.js.map} +0 -0
  397. /package/dist/{chunk-JNFRC3AW.js.map → chunk-PM3OSANE.js.map} +0 -0
  398. /package/dist/{chunk-W57X2TSV.js.map → chunk-PN66T6JA.js.map} +0 -0
  399. /package/dist/{chunk-4NDE4JTJ.js.map → chunk-Q35DT6I6.js.map} +0 -0
  400. /package/dist/{chunk-WFS5EUCL.js.map → chunk-Q35YZVDZ.js.map} +0 -0
  401. /package/dist/{chunk-P5GMHOZB.js.map → chunk-QCD5Y7K5.js.map} +0 -0
  402. /package/dist/{chunk-YTX274IC.js.map → chunk-QM5H4FPT.js.map} +0 -0
  403. /package/dist/{chunk-VCUGPND2.js.map → chunk-QRVNI5V6.js.map} +0 -0
  404. /package/dist/{chunk-JM4HQPAI.js.map → chunk-QZRDCFHI.js.map} +0 -0
  405. /package/dist/{chunk-ELABMEDP.js.map → chunk-R63QEVPK.js.map} +0 -0
  406. /package/dist/{chunk-CP7ZQHBW.js.map → chunk-RA3FNMWF.js.map} +0 -0
  407. /package/dist/{chunk-D6II4KOG.js.map → chunk-RGW24ZZM.js.map} +0 -0
  408. /package/dist/{chunk-WSYR6CUF.js.map → chunk-RQDFYQHA.js.map} +0 -0
  409. /package/dist/{chunk-CSLCTVND.js.map → chunk-RSNYGEVZ.js.map} +0 -0
  410. /package/dist/{chunk-B2ES3U36.js.map → chunk-S4EZ3JUB.js.map} +0 -0
  411. /package/dist/{chunk-OOUEPFGL.js.map → chunk-S4SC5SSV.js.map} +0 -0
  412. /package/dist/{chunk-A4BD4ZVB.js.map → chunk-S7PVL7XH.js.map} +0 -0
  413. /package/dist/{chunk-4LPA25NQ.js.map → chunk-SD2K5ZN5.js.map} +0 -0
  414. /package/dist/{chunk-XAXTE2NA.js.map → chunk-SUVEDKE2.js.map} +0 -0
  415. /package/dist/{chunk-LCFU5YUA.js.map → chunk-TGVVEGZG.js.map} +0 -0
  416. /package/dist/{chunk-OEL73V62.js.map → chunk-U36PO27Q.js.map} +0 -0
  417. /package/dist/{chunk-HZT5H5ZP.js.map → chunk-U3HSFCON.js.map} +0 -0
  418. /package/dist/{chunk-J5MEDX7C.js.map → chunk-U47YDYLQ.js.map} +0 -0
  419. /package/dist/{chunk-BLT4KQTS.js.map → chunk-UP4BE32Y.js.map} +0 -0
  420. /package/dist/{chunk-ZSKUBXA6.js.map → chunk-UWJ5P5CU.js.map} +0 -0
  421. /package/dist/{chunk-YVBHGMKC.js.map → chunk-VAIESMPY.js.map} +0 -0
  422. /package/dist/{chunk-5P6EKYTC.js.map → chunk-VP62LPLW.js.map} +0 -0
  423. /package/dist/{chunk-GOEN2FSD.js.map → chunk-VUHPA3XQ.js.map} +0 -0
  424. /package/dist/{chunk-5FA455GR.js.map → chunk-WNG757ID.js.map} +0 -0
  425. /package/dist/{chunk-4LMNYFES.js.map → chunk-WSMYOLHG.js.map} +0 -0
  426. /package/dist/{chunk-JXEMUZTV.js.map → chunk-X7ASQHR6.js.map} +0 -0
  427. /package/dist/{chunk-CZSYF7UF.js.map → chunk-XOFUXMPP.js.map} +0 -0
  428. /package/dist/{chunk-VNMM6DQP.js.map → chunk-XWWXIZFP.js.map} +0 -0
  429. /package/dist/{chunk-XC4DZXZZ.js.map → chunk-YXOKAG66.js.map} +0 -0
  430. /package/dist/{chunk-XMNUZUUA.js.map → chunk-Z2DAWUO3.js.map} +0 -0
  431. /package/dist/{chunk-TJ2MBYK4.js.map → chunk-Z5WMLJKI.js.map} +0 -0
  432. /package/dist/{chunk-WCK2NF54.js.map → chunk-ZKYYZH6L.js.map} +0 -0
  433. /package/dist/{chunk-AS6ZXN5K.js.map → chunk-ZRJCGBVV.js.map} +0 -0
  434. /package/dist/{embedded-new-voice-IIZPNXHC.js.map → computer-viewer-KEDVLD42.js.map} +0 -0
  435. /package/dist/{embedded-voice-5PXDBGOI.js.map → embedded-new-voice-LFHWWYD2.js.map} +0 -0
  436. /package/dist/{model-policy-picker-menu-4GWYXUP3.js.map → embedded-voice-6QS4ANNX.js.map} +0 -0
  437. /package/dist/{latest-question-ZCZYQZMD.js.map → latest-question-AW3PPDUM.js.map} +0 -0
  438. /package/dist/{sandbox-files-QXIZJJMW.js.map → model-policy-picker-menu-CURJ247L.js.map} +0 -0
  439. /package/dist/{queue-surface-implementation-VPPIEPJL.js.map → queue-surface-implementation-2X5AXB6I.js.map} +0 -0
  440. /package/dist/{timeline-annotation-markers-BSTWUL4V.js.map → timeline-annotation-markers-X4K2IEOO.js.map} +0 -0
  441. /package/dist/{timeline-annotation-selection-3SMCLIJE.js.map → timeline-annotation-selection-MEHBW676.js.map} +0 -0
  442. /package/dist/{timeline-annotations-dialog-GFF3RFYZ.js.map → timeline-annotations-dialog-U2FPQ3UY.js.map} +0 -0
@@ -1,114 +1,124 @@
1
1
  "use client";
2
- import {
3
- DetailBody
4
- } from "../../../chunk-MWAFZVC4.js";
5
- import "../../../chunk-Y6TTMPZC.js";
6
- import "../../../chunk-5N6XZ7LG.js";
7
- import {
8
- SessionGitHubCapabilityCard
9
- } from "../../../chunk-5P6EKYTC.js";
10
2
  import {
11
3
  useCapabilitiesCatalog
12
- } from "../../../chunk-62VER7O4.js";
13
- import "../../../chunk-MOMM26UR.js";
4
+ } from "../../../chunk-F3NERYBQ.js";
14
5
  import {
15
6
  SessionCustomMcpCard
16
- } from "../../../chunk-HRMDE6MI.js";
17
- import "../../../chunk-FIPSOCVC.js";
18
- import "../../../chunk-WSYR6CUF.js";
19
- import "../../../chunk-AF53CDFM.js";
20
- import "../../../chunk-LF5CBAOS.js";
7
+ } from "../../../chunk-HNYJEAES.js";
21
8
  import {
22
9
  performCapabilityAction
23
10
  } from "../../../chunk-NWSAF6P5.js";
24
- import "../../../chunk-VHDCIO4V.js";
11
+ import {
12
+ DetailBody
13
+ } from "../../../chunk-KWKGBGAF.js";
14
+ import "../../../chunk-Y6TTMPZC.js";
25
15
  import "../../../chunk-V3RHG7CF.js";
16
+ import "../../../chunk-AOLE4IRZ.js";
17
+ import "../../../chunk-FIPSOCVC.js";
18
+ import "../../../chunk-VHDCIO4V.js";
26
19
  import "../../../chunk-IYEI5OZL.js";
20
+ import "../../../chunk-5N6XZ7LG.js";
21
+ import {
22
+ SessionChromeCapabilityCard
23
+ } from "../../../chunk-ST22GONV.js";
24
+ import "../../../chunk-RQDFYQHA.js";
25
+ import "../../../chunk-AF53CDFM.js";
27
26
  import {
28
27
  RepeatedMachineRequestNote,
29
28
  SessionMachineCapabilityCard
30
- } from "../../../chunk-C32ZOZTE.js";
31
- import "../../../chunk-NQA5WCKG.js";
32
- import "../../../chunk-LEDS7L3I.js";
29
+ } from "../../../chunk-EF5SYXAY.js";
30
+ import "../../../chunk-NYZQ7LO7.js";
33
31
  import {
34
- CodexSubscriptionsSurface
35
- } from "../../../chunk-FBE6AIIW.js";
36
- import "../../../chunk-MKG5VTIJ.js";
32
+ SessionGitHubCapabilityCard
33
+ } from "../../../chunk-VP62LPLW.js";
34
+ import "../../../chunk-MOMM26UR.js";
35
+ import "../../../chunk-LEDS7L3I.js";
37
36
  import "../../../chunk-M27WO6W3.js";
37
+ import "../../../chunk-MKG5VTIJ.js";
38
38
  import "../../../chunk-46I7MMAL.js";
39
- import "../../../chunk-KV6GUPL2.js";
40
39
  import "../../../chunk-NRREC7JK.js";
41
- import "../../../chunk-JM4HQPAI.js";
40
+ import "../../../chunk-KV6GUPL2.js";
41
+ import {
42
+ CodexSubscriptionsSurface
43
+ } from "../../../chunk-FBE6AIIW.js";
44
+ import "../../../chunk-VAIESMPY.js";
42
45
  import "../../../chunk-2LUBBDZV.js";
43
- import "../../../chunk-JQCGPTZ6.js";
44
- import "../../../chunk-YVBHGMKC.js";
45
- import "../../../chunk-5DSKMG2I.js";
46
+ import "../../../chunk-QZRDCFHI.js";
47
+ import "../../../chunk-NWZW2WHN.js";
48
+ import "../../../chunk-LEXPBQ56.js";
46
49
  import "../../../chunk-J6WRB3VZ.js";
47
- import "../../../chunk-TFK4KFKA.js";
50
+ import "../../../chunk-33TPANCR.js";
48
51
  import "../../../chunk-HI7BTJRG.js";
49
- import "../../../chunk-VVCDB2T7.js";
50
- import "../../../chunk-G46333YC.js";
52
+ import "../../../chunk-PVNI2KHS.js";
51
53
  import "../../../chunk-AZVANYMB.js";
54
+ import "../../../chunk-VVCDB2T7.js";
52
55
  import "../../../chunk-J4OPEWC3.js";
53
56
  import "../../../chunk-HUKUDAIP.js";
54
- import "../../../chunk-55S3W7RZ.js";
55
- import "../../../chunk-FABYS4WM.js";
56
57
  import {
57
58
  capabilityLogoSource
58
- } from "../../../chunk-AS6ZXN5K.js";
59
+ } from "../../../chunk-ZRJCGBVV.js";
60
+ import "../../../chunk-722UO6YQ.js";
61
+ import "../../../chunk-FABYS4WM.js";
59
62
  import {
60
63
  capabilityConnectPlan,
61
64
  capabilityErrorToast,
62
65
  connectionHealth
63
66
  } from "../../../chunk-22NENBA3.js";
67
+ import "../../../chunk-55S3W7RZ.js";
68
+ import "../../../chunk-G46333YC.js";
64
69
  import "../../../chunk-L5HJ4UYB.js";
65
- import "../../../chunk-PVNI2KHS.js";
66
70
  import "../../../chunk-A3MTTRCX.js";
67
- import "../../../chunk-722UO6YQ.js";
68
71
  import "../../../chunk-ECNX3UOI.js";
69
- import "../../../chunk-IZMUUUYD.js";
72
+ import "../../../chunk-EPCPGUIF.js";
70
73
  import "../../../chunk-SS3N75VI.js";
71
74
  import "../../../chunk-325C2TCI.js";
72
- import "../../../chunk-XSOPQZGH.js";
73
75
  import "../../../chunk-WMSCYECP.js";
74
- import "../../../chunk-PYC2ZWBJ.js";
76
+ import "../../../chunk-FQQEZUSN.js";
77
+ import "../../../chunk-6KELG2EG.js";
78
+ import "../../../chunk-IZMUUUYD.js";
75
79
  import "../../../chunk-T6KM63FZ.js";
80
+ import "../../../chunk-PYC2ZWBJ.js";
81
+ import "../../../chunk-XSOPQZGH.js";
82
+ import "../../../chunk-ZMBJPN4T.js";
76
83
  import "../../../chunk-HZUL2CUH.js";
77
- import "../../../chunk-6KELG2EG.js";
78
- import "../../../chunk-TREHTIBD.js";
79
- import "../../../chunk-FQQEZUSN.js";
80
- import "../../../chunk-XNTW77T6.js";
81
- import "../../../chunk-EPCPGUIF.js";
82
84
  import "../../../chunk-X6WZOHBI.js";
83
85
  import {
84
- usePage
85
- } from "../../../chunk-MYNUBDU7.js";
86
- import "../../../chunk-YG6NARQY.js";
87
- import "../../../chunk-IZUAIHR4.js";
86
+ t
87
+ } from "../../../chunk-HPPKLBTJ.js";
88
+ import "../../../chunk-L6Y4ALSM.js";
88
89
  import {
89
90
  hasWorkspacePermission
90
91
  } from "../../../chunk-FIDD34ZF.js";
91
92
  import "../../../chunk-74JEZLLQ.js";
93
+ import "../../../chunk-YG6NARQY.js";
92
94
  import {
93
- t
94
- } from "../../../chunk-HPPKLBTJ.js";
95
- import "../../../chunk-L6Y4ALSM.js";
95
+ usePage
96
+ } from "../../../chunk-MYNUBDU7.js";
97
+ import "../../../chunk-IZUAIHR4.js";
98
+ import {
99
+ userErrorText
100
+ } from "../../../chunk-L4OF77LE.js";
96
101
  import {
97
102
  useAppContext
98
103
  } from "../../../chunk-W6KAUGXO.js";
104
+ import "../../../chunk-TREHTIBD.js";
99
105
  import "../../../chunk-5OTQA7CM.js";
106
+ import "../../../chunk-XNTW77T6.js";
107
+ import "../../../chunk-HY7EYWIG.js";
100
108
  import "../../../chunk-XG57V2BN.js";
101
109
  import "../../../chunk-KS57MLGE.js";
102
- import "../../../chunk-ZMBJPN4T.js";
103
- import "../../../chunk-HY7EYWIG.js";
110
+ import "../../../chunk-A3KMTJZS.js";
111
+ import "../../../chunk-2DS4UOYQ.js";
104
112
  import {
105
- userErrorText
106
- } from "../../../chunk-L4OF77LE.js";
107
- import "../../../chunk-FYGMIMEG.js";
113
+ Notice
114
+ } from "../../../chunk-WLEDGIVS.js";
115
+ import {
116
+ Button
117
+ } from "../../../chunk-HMU5IELG.js";
118
+ import "../../../chunk-CPLCSM6K.js";
119
+ import "../../../chunk-HT5WSUC7.js";
120
+ import "../../../chunk-4432A3HQ.js";
108
121
  import "../../../chunk-M357MHH3.js";
109
- import "../../../chunk-NRP4REXE.js";
110
- import "../../../chunk-SQGXMHJO.js";
111
- import "../../../chunk-A3KMTJZS.js";
112
122
  import {
113
123
  SessionMcpCapabilityCard
114
124
  } from "../../../chunk-L6RXRRN3.js";
@@ -120,32 +130,25 @@ import {
120
130
  import {
121
131
  SessionCapabilityFrame
122
132
  } from "../../../chunk-HRJQAFKR.js";
123
- import "../../../chunk-2DS4UOYQ.js";
124
- import {
125
- Notice
126
- } from "../../../chunk-WLEDGIVS.js";
127
- import {
128
- Button
129
- } from "../../../chunk-HMU5IELG.js";
130
- import "../../../chunk-ELABMEDP.js";
133
+ import "../../../chunk-R63QEVPK.js";
131
134
  import "../../../chunk-OYQQJL3J.js";
132
135
  import "../../../chunk-H3LIIAGE.js";
133
136
  import "../../../chunk-RZLBICR5.js";
134
137
  import "../../../chunk-VHB3E6PT.js";
138
+ import "../../../chunk-SQGXMHJO.js";
135
139
  import "../../../chunk-4LKNIGHB.js";
136
140
  import "../../../chunk-BOG2FED3.js";
137
- import "../../../chunk-JLMDWUME.js";
141
+ import "../../../chunk-DNJ23AWQ.js";
142
+ import "../../../chunk-OB3YGXHQ.js";
143
+ import "../../../chunk-UNJPZGNK.js";
144
+ import "../../../chunk-PEHTX3V7.js";
145
+ import "../../../chunk-NRP4REXE.js";
146
+ import "../../../chunk-OBQVTCTW.js";
138
147
  import "../../../chunk-J3BHDXQQ.js";
139
148
  import "../../../chunk-XEA5BCMA.js";
140
- import "../../../chunk-CPLCSM6K.js";
141
- import "../../../chunk-HT5WSUC7.js";
142
- import "../../../chunk-PEHTX3V7.js";
143
149
  import "../../../chunk-NAWXARTY.js";
144
150
  import "../../../chunk-CM7LVUKC.js";
145
151
  import "../../../chunk-TVQCDDSZ.js";
146
- import "../../../chunk-UNJPZGNK.js";
147
- import "../../../chunk-DNJ23AWQ.js";
148
- import "../../../chunk-OB3YGXHQ.js";
149
152
  import "../../../chunk-SJGAHTY5.js";
150
153
  import "../../../chunk-4NHJ6EXL.js";
151
154
  import "../../../chunk-TXS65BB2.js";
@@ -193,7 +196,20 @@ function SessionCapabilityCard(props) {
193
196
  } : props.item;
194
197
  const capability = item.capability;
195
198
  if (capability?.id === CONNECTED_MACHINE_CAPABILITY_ID) {
196
- if (item.askedAgainLater) return /* @__PURE__ */ jsx(RepeatedMachineRequestNote, {});
199
+ if (item.askedAgainLater)
200
+ return /* @__PURE__ */ jsx(RepeatedMachineRequestNote, { chrome: item.purpose === "chrome" });
201
+ if (item.purpose === "chrome") {
202
+ return /* @__PURE__ */ jsx(
203
+ SessionChromeCapabilityCard,
204
+ {
205
+ item,
206
+ workspaceId: props.workspaceId,
207
+ sessionId: props.sessionId,
208
+ sendContext: props.sendContext
209
+ },
210
+ `${props.workspaceId}:${props.sessionId}`
211
+ );
212
+ }
197
213
  return /* @__PURE__ */ jsx(
198
214
  SessionMachineCapabilityCard,
199
215
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/app/components/capabilities/session-capability-card.tsx"],"sourcesContent":["import { t } from \"../../lib/console-text\";\nimport {\n attachSessionCapability,\n prepareSessionCapabilityAccess,\n applySessionCapabilityAccess,\n type SessionCapabilityAccessPlan,\n} from \"./attach-session-capability\";\nimport { Suspense, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { SessionMcpCapabilityCard } from \"../../../components/session-mcp-capability-card\";\nimport type { AuthNeededItem } from \"../../../timeline\";\nimport { CheckIcon, Loader2Icon } from \"lucide-react\";\nimport { useAppContext } from \"../../app-context\";\nimport { CodexSubscriptionsSurface } from \"../../lib/app-surfaces\";\nimport { Button } from \"../../../ui/button\";\nimport { Notice } from \"../../../ui/notice\";\nimport { SessionCapabilityFrame } from \"../../../components/session-capability-frame\";\nimport { capabilityLogoSource } from \"./capability-logo-source\";\nimport { DetailBody, type ConnectAction } from \"./capability-detail-sheet\";\nimport { performCapabilityAction } from \"./perform-capability-action\";\nimport { useCapabilitiesCatalog } from \"./use-capabilities-catalog\";\nimport { SessionCustomMcpCard } from \"./session-custom-mcp-card\";\nimport {\n capabilityConnectPlan,\n capabilityErrorToast,\n connectionHealth,\n} from \"../../lib/capabilities\";\nimport { userErrorText } from \"../../../ui/api-error\";\nimport { hasWorkspacePermission } from \"../../lib/permissions\";\nimport type { CapabilityCatalogItem, ResourceRef } from \"../../types\";\nimport type { ChatSendContext } from \"./session-github-repositories\";\nimport { SessionGitHubCapabilityCard } from \"./session-github-card\";\nimport { RepeatedMachineRequestNote, SessionMachineCapabilityCard } from \"./session-machine-card\";\nimport { usePage } from \"../../lib/navigation\";\n\n/** The built-in card for connecting a person's own computer to this chat. */\nexport const CONNECTED_MACHINE_CAPABILITY_ID = \"api:connected-machine\";\n\n/** The built-in tile and card that install the deployment's Excel add-in. */\nexport const EXCEL_ADDIN_CAPABILITY_ID = \"api:excel-addin\";\n\n/** Recommendations carry identity and rationale, never connection configuration.\n * Expand against the current authenticated catalog before rendering any form. */\ntype SessionCapabilityCardProps = {\n visibility?: \"private\" | \"workspace\" | undefined;\n onConfigured?: (() => Promise<void>) | undefined;\n item: AuthNeededItem;\n workspaceId: string;\n sessionId: string;\n /** The chat's mounted resources, for cards that add a resource to this chat. */\n resources?: readonly ResourceRef[] | undefined;\n /** What a composer Send would carry now, for cards that send a human message. */\n sendContext?: (() => ChatSendContext) | undefined;\n};\n\nexport function SessionCapabilityCard(props: SessionCapabilityCardProps) {\n const page = usePage();\n const context = useAppContext();\n const [registered, setRegistered] = useState<{ id: string; restoreFocus: boolean } | null>(null);\n const onRegistered = useCallback(\n (id: string, restoreFocus: boolean) => setRegistered({ id, restoreFocus }),\n [],\n );\n if (props.item.setupRequest && !registered) {\n return (\n <SessionCustomMcpCard\n key={`${props.workspaceId}:${props.item.id}`}\n item={props.item}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n onConfigured={props.onConfigured}\n onRegistered={onRegistered}\n />\n );\n }\n const item = registered\n ? {\n ...props.item,\n setupRequest: null,\n capability: {\n id: registered.id,\n name: props.item.setupRequest!.name,\n kind: \"mcp\" as const,\n source: \"manual\" as const,\n action: \"connect\" as const,\n rationale: props.item.setupRequest!.rationale,\n requiredVariables: [],\n },\n }\n : props.item;\n const capability = item.capability;\n if (capability?.id === CONNECTED_MACHINE_CAPABILITY_ID) {\n // The same request was made again further down, where its card is live.\n if (item.askedAgainLater) return <RepeatedMachineRequestNote />;\n return (\n <SessionMachineCapabilityCard\n key={`${props.workspaceId}:${props.sessionId}`}\n item={item}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n sendContext={props.sendContext}\n onConfigured={props.onConfigured}\n />\n );\n }\n if (capability?.id === \"api:github-app\") {\n return (\n <SessionGitHubCapabilityCard\n key={`${props.workspaceId}:${props.sessionId}`}\n item={item}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n resources={props.resources}\n sendContext={props.sendContext}\n onConfigured={props.onConfigured}\n />\n );\n }\n const resolved = context.workspaceCapabilityCatalog.find((entry) => entry.id === capability?.id);\n if (capability && resolved?.kind === \"mcp\" && resolved.authKind === \"oauth2\") {\n return (\n <SessionMcpCapabilityCard\n client={context.client}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n capabilityId={capability.id}\n name={capability.name}\n rationale={capability.rationale}\n returnUrl={page.href()}\n onConfigured={props.onConfigured}\n />\n );\n }\n return (\n <ScopedSessionCapabilityCard\n key={`${props.workspaceId}:${props.sessionId}:${capability!.id}`}\n {...props}\n item={item}\n restoreFocus={registered?.restoreFocus ?? false}\n />\n );\n}\n\nfunction ScopedSessionCapabilityCard({\n item,\n workspaceId,\n sessionId,\n onConfigured,\n restoreFocus = false,\n}: SessionCapabilityCardProps & { restoreFocus?: boolean | undefined }) {\n const context = useAppContext();\n const recommendation = item.capability!;\n const [expanded, setExpanded] = useState(false);\n const [complete, setComplete] = useState(false);\n const [busy, setBusy] = useState(false);\n const [resolvedItem, setResolvedItem] = useState<CapabilityCatalogItem | null>(null);\n const opener = useRef<HTMLButtonElement>(null);\n const cardRef = useRef<HTMLElement>(null);\n useEffect(() => {\n if (!restoreFocus) return;\n // The review dialog's opener is removed when the new connection card\n // replaces it. Focus the next actionable control after Radix closes it.\n const frame = requestAnimationFrame(() => opener.current?.focus());\n return () => cancelAnimationFrame(frame);\n }, [restoreFocus]);\n const catalogItem =\n resolvedItem ??\n context.workspaceCapabilityCatalog.find((entry) => entry.id === recommendation.id);\n const logo = catalogItem\n ? capabilityLogoSource(catalogItem, (path) => context.client.catalogAssetUrl(path))\n : null;\n const close = () => {\n setExpanded(false);\n };\n const skill = recommendation.kind === \"skill\";\n const excel = recommendation.id === EXCEL_ADDIN_CAPABILITY_ID;\n const apiKey = catalogItem ? capabilityConnectPlan(catalogItem).mode === \"api_key\" : false;\n return (\n <SessionCapabilityFrame\n name={catalogItem?.name ?? recommendation.name}\n subtitle={catalogItem ? (catalogItem.providerDomain ?? \"\") : item.providerDomain}\n logo={logo}\n typeLabel={\n skill ? \"Skill\" : excel ? \"Add-in\" : recommendation.kind === \"mcp\" ? \"MCP server\" : \"API\"\n }\n description={catalogItem?.description || recommendation.rationale}\n skill={skill}\n expanded={expanded}\n complete={complete}\n actionLabel={\n excel\n ? \"Add to Excel\"\n : catalogItem?.enabled\n ? \"Review\"\n : skill\n ? \"Review skill\"\n : apiKey\n ? \"Add API key\"\n : `Connect ${catalogItem?.name ?? recommendation.name}`\n }\n note={\n excel\n ? \"The add-in runs in your own Excel. Agents reach a workbook only while you have the add-in open in it.\"\n : skill\n ? \"Skill content is reviewed separately from permission to use any integration.\"\n : apiKey\n ? \"Add credentials in the protected form, not in a chat message.\"\n : \"Review access before signing in. You'll return to this conversation after authorization.\"\n }\n onOpen={() => setExpanded(true)}\n onClose={close}\n busy={busy}\n opener={opener}\n cardRef={cardRef}\n >\n {recommendation.id === \"mcp:codex_apps\" ? (\n <SessionCodexAppsSetup\n busy={busy}\n setBusy={setBusy}\n workspaceId={workspaceId}\n sessionId={sessionId}\n onClose={close}\n onComplete={() => {\n setComplete(true);\n close();\n }}\n />\n ) : (\n <SessionCapabilitySetup\n busy={busy}\n setBusy={setBusy}\n key={`${workspaceId}:${sessionId}:${recommendation.id}`}\n capabilityId={recommendation.id}\n onResolvedItem={setResolvedItem}\n onConfigured={onConfigured}\n workspaceId={workspaceId}\n sessionId={sessionId}\n onClose={close}\n onComplete={() => {\n setComplete(true);\n close();\n }}\n />\n )}\n </SessionCapabilityFrame>\n );\n}\n\nfunction SessionCapabilitySetup({\n busy,\n setBusy,\n capabilityId,\n onResolvedItem,\n onConfigured,\n workspaceId,\n sessionId,\n onClose,\n onComplete,\n}: {\n busy: boolean;\n setBusy: (busy: boolean) => void;\n capabilityId: string;\n onResolvedItem: (item: CapabilityCatalogItem) => void;\n onConfigured?: (() => Promise<void>) | undefined;\n workspaceId: string;\n sessionId: string;\n onClose: () => void;\n onComplete: () => void;\n}) {\n const page = usePage();\n const context = useAppContext();\n const catalog = useCapabilitiesCatalog(workspaceId);\n const canReadConnections =\n context.accessContext === null\n ? null\n : hasWorkspacePermission(context.accessContext, workspaceId, \"connections:read\");\n const [error, setError] = useState<string | null>(null);\n const subjectId = context.accessContext?.subjectId ?? null;\n const [parentAccessReview, setParentAccessReview] = useState<{\n plan: SessionCapabilityAccessPlan;\n invocation: object;\n } | null>(null);\n const [authInspection, setAuthInspection] = useState<{\n id: string;\n url: string;\n kind: \"oauth2\" | \"none\" | \"unknown\";\n message?: string | undefined;\n } | null>(null);\n const [authInspectionRevision, setAuthInspectionRevision] = useState(0);\n const inFlight = useRef<object | null>(null);\n const scope = useRef({\n client: context.client,\n workspaceId,\n sessionId,\n canReadConnections,\n subjectId,\n authorityKey: catalog.authorityKey,\n alive: true,\n });\n if (\n scope.current.client !== context.client ||\n scope.current.workspaceId !== workspaceId ||\n scope.current.sessionId !== sessionId ||\n scope.current.canReadConnections !== canReadConnections ||\n scope.current.subjectId !== subjectId ||\n scope.current.authorityKey !== catalog.authorityKey\n ) {\n scope.current = {\n client: context.client,\n workspaceId,\n sessionId,\n canReadConnections,\n subjectId,\n authorityKey: catalog.authorityKey,\n alive: true,\n };\n }\n const parentAccessPlan =\n parentAccessReview?.invocation === scope.current ? parentAccessReview.plan : null;\n useEffect(() => {\n // StrictMode replays setup after cleanup. Give the replay a new owner:\n // reusing the retired object would either keep it dead or revive old work.\n if (!scope.current.alive) scope.current = { ...scope.current, alive: true };\n const activeScope = scope.current;\n setParentAccessReview(null);\n setBusy(false);\n void catalog.refresh();\n return () => {\n activeScope.alive = false;\n };\n // Refetch on a live read-grant change; the hook masks prior rows during render.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n context.client,\n workspaceId,\n sessionId,\n canReadConnections,\n subjectId,\n catalog.authorityKey,\n setBusy,\n ]);\n const rawItem = catalog.items.find((entry) => entry.id === capabilityId);\n const rawItemId = rawItem?.id;\n const inspectUrl = rawItem?.mcpUrl ?? rawItem?.endpointUrl;\n const needsAuthInspection =\n rawItem?.kind === \"mcp\" &&\n !rawItem.enabled &&\n capabilityConnectPlan(rawItem).mode === \"setup_required\" &&\n Boolean(inspectUrl);\n useEffect(() => {\n if (!needsAuthInspection || !rawItemId || !inspectUrl) return;\n let active = true;\n setAuthInspection(null);\n void context.client.inspectMcpAuthentication(workspaceId, inspectUrl).then(\n (result) => {\n if (active) setAuthInspection({ id: rawItemId, url: inspectUrl, ...result });\n },\n () => {\n if (active) setAuthInspection({ id: rawItemId, url: inspectUrl, kind: \"unknown\" });\n },\n );\n return () => {\n active = false;\n };\n }, [\n context.client,\n workspaceId,\n rawItemId,\n inspectUrl,\n needsAuthInspection,\n authInspectionRevision,\n ]);\n const item = useMemo(() => {\n if (!rawItem || !needsAuthInspection) return rawItem;\n const inspection =\n authInspection?.id === rawItem.id && authInspection.url === inspectUrl\n ? authInspection.kind\n : \"checking\";\n return {\n ...rawItem,\n authKind:\n inspection === \"oauth2\"\n ? (\"oauth2\" as const)\n : inspection === \"none\"\n ? (\"none\" as const)\n : null,\n metadata: {\n ...rawItem.metadata,\n authDiscovery: inspection,\n authDiscoveryMessage: inspection === \"unknown\" ? authInspection?.message : undefined,\n },\n };\n }, [rawItem, needsAuthInspection, inspectUrl, authInspection]);\n useEffect(() => {\n if (item) onResolvedItem(item);\n }, [item, onResolvedItem]);\n const refreshRuntime = useCallback(() => {\n void context.refreshWorkspaceMcpServers(workspaceId);\n }, [context, workspaceId]);\n async function act(action: ConnectAction) {\n if (!item) return;\n const invocation = scope.current;\n if (inFlight.current === invocation) return;\n inFlight.current = invocation;\n setBusy(true);\n setError(null);\n setParentAccessReview(null);\n const current = () => scope.current === invocation && invocation.alive;\n try {\n await performCapabilityAction(\n {\n client: context.client,\n workspaceId,\n item,\n connections: catalog.connectionsLoadFailed ? null : catalog.connections,\n canManageSkills: hasWorkspacePermission(\n context.accessContext,\n workspaceId,\n \"capabilities:manage\",\n ),\n refresh: catalog.refresh,\n onRuntimeChanged: () => {\n if (current()) refreshRuntime();\n },\n onComplete: async () => {\n if (!current()) return;\n const updated = (await context.client.listCapabilities(workspaceId)).items.find(\n (entry) => entry.id === item.id,\n );\n if (!current()) return;\n if (!updated?.enabled)\n throw new Error(\"Setup could not be verified. Refresh and try again.\");\n const plan = await prepareSessionCapabilityAccess(\n t,\n context.client,\n workspaceId,\n sessionId,\n updated,\n current,\n );\n if (!current()) return;\n if (plan.sessions.some((chat) => chat.id !== sessionId && chat.request)) {\n setParentAccessReview({ plan, invocation });\n return;\n }\n await applySessionCapabilityAccess(t, context.client, plan, current);\n await onConfigured?.();\n if (current()) onComplete();\n },\n onSkillRemoval: () => {\n throw new Error(\n \"Use the workspace Skill controls to review removal and its other owners.\",\n );\n },\n returnPathFor: (id) =>\n `/workspaces/${encodeURIComponent(workspaceId)}/sessions/${encodeURIComponent(sessionId)}?capability_auth=${encodeURIComponent(id)}`,\n redirect: (url) => {\n if (current()) page.assign(url);\n },\n },\n action,\n );\n } catch (failure) {\n // A credential may have committed before enabling failed. Reconcile before\n // offering Retry so it reuses that row instead of minting a duplicate.\n if (current()) await catalog.refresh();\n if (current()) setError(capabilityErrorToast(failure, \"Couldn't complete setup\").description);\n } finally {\n if (inFlight.current === invocation) inFlight.current = null;\n if (current()) setBusy(false);\n }\n }\n async function useConnected() {\n if (!item) return;\n const invocation = scope.current;\n if (inFlight.current === invocation) return;\n inFlight.current = invocation;\n setBusy(true);\n setError(null);\n const current = () => scope.current === invocation && invocation.alive;\n try {\n const plan =\n parentAccessPlan ??\n (await prepareSessionCapabilityAccess(\n t,\n context.client,\n workspaceId,\n sessionId,\n item,\n current,\n ));\n if (!current()) return;\n if (\n !parentAccessPlan &&\n plan.sessions.some((chat) => chat.id !== sessionId && chat.request)\n ) {\n setParentAccessReview({ plan, invocation });\n return;\n }\n await applySessionCapabilityAccess(t, context.client, plan, current);\n if (current()) setParentAccessReview(null);\n if (current()) await onConfigured?.();\n if (current()) onComplete();\n } catch (failure) {\n if (current()) {\n setParentAccessReview(null);\n setError(`Couldn't add this connection. ${userErrorText(failure, \"Try again.\")}`);\n }\n } finally {\n if (inFlight.current === invocation) inFlight.current = null;\n if (current()) setBusy(false);\n }\n }\n const ownsActionRow =\n !catalog.loadError && item && !item.enabled && (item.kind === \"skill\" || item.kind === \"mcp\");\n const health = item\n ? connectionHealth(item, catalog.connections ?? [], catalog.connections !== null)\n : null;\n return (\n <div className=\"p-6 sm:p-8\">\n {catalog.loading && !item ? (\n <p role=\"status\" className=\"flex items-center gap-2 text-sm text-fg-muted\">\n <Loader2Icon className=\"size-4 animate-spin\" />\n Loading connection details…\n </p>\n ) : catalog.loadError || !item ? (\n <Notice\n tone=\"failed\"\n action={\n <Button size=\"sm\" onClick={() => void catalog.refresh()}>\n Retry\n </Button>\n }\n >\n {catalog.loadError\n ? \"Couldn't load the integration catalog.\"\n : \"This recommendation is no longer in the current catalog.\"}\n </Notice>\n ) : (\n <DetailBody\n workspaceId={workspaceId}\n setupOnly\n showIdentity={false}\n onCancel={ownsActionRow ? onClose : undefined}\n item={item}\n health={connectionHealth(item, catalog.connections ?? [], catalog.connections !== null)}\n logoSrc={capabilityLogoSource(item, (path) => context.client.catalogAssetUrl(path))}\n busy={busy}\n errorMessage={error}\n socialConnections={catalog.socialConnections}\n canManageSocial={hasWorkspacePermission(\n context.accessContext,\n workspaceId,\n \"connections:write\",\n )}\n canManageSkills={hasWorkspacePermission(\n context.accessContext,\n workspaceId,\n \"capabilities:manage\",\n )}\n onAction={(action) => void act(action)}\n onRetryAuthInspection={\n needsAuthInspection\n ? () => {\n setAuthInspection(null);\n setAuthInspectionRevision((revision) => revision + 1);\n }\n : undefined\n }\n />\n )}\n {parentAccessPlan && item ? (\n <Notice tone=\"waiting\" live=\"polite\">\n <p>\n This chat inherits its tool access from its parent. To add {item.name}, enable its tools\n in these parent chats first:\n </p>\n <ul className=\"mt-2 list-disc pl-5\">\n {parentAccessPlan.sessions\n .filter((chat) => chat.id !== sessionId && chat.request)\n .map((chat) => (\n <li key={chat.id}>\n <a\n className=\"underline\"\n href={`/workspaces/${encodeURIComponent(workspaceId)}/sessions/${encodeURIComponent(chat.id)}`}\n >\n {chat.title || \"Parent chat\"}\n </a>\n </li>\n ))}\n </ul>\n <p className=\"mt-2\">\n Confirming adds {item.name}'s tools to these chats and this chat. Parent chats and\n future children can then use them. Existing tool choices are preserved; workspace\n defaults become chat-specific selections where needed. Current turns keep their accepted\n access.\n </p>\n <p className=\"mt-2\">\n Updates are saved separately. If a later update fails, approved parent changes may\n already be saved.\n </p>\n </Notice>\n ) : null}\n <div className=\"mt-2 flex justify-end gap-2\">\n {!ownsActionRow ? (\n <Button size=\"sm\" variant=\"ghost\" disabled={busy} onClick={onClose}>\n Cancel\n </Button>\n ) : null}\n {item?.enabled && health?.state !== \"attention\" && health?.state !== \"unverified\" ? (\n <Button size=\"sm\" disabled={busy} onClick={() => void useConnected()}>\n {busy ? <Loader2Icon className=\"animate-spin\" /> : <CheckIcon />}\n {parentAccessPlan ? \"Enable in parents and add tools\" : \"Add tools\"}\n </Button>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction SessionCodexAppsSetup({\n busy,\n setBusy,\n workspaceId,\n sessionId,\n onClose,\n onComplete,\n}: {\n busy: boolean;\n setBusy: (busy: boolean) => void;\n workspaceId: string;\n sessionId: string;\n onClose: () => void;\n onComplete: () => void;\n}) {\n const context = useAppContext();\n const [error, setError] = useState<string | null>(null);\n const inFlight = useRef(false);\n const active = useRef(true);\n useEffect(\n () => () => {\n active.current = false;\n },\n [],\n );\n async function useApps() {\n if (inFlight.current) return;\n inFlight.current = true;\n setBusy(true);\n setError(null);\n try {\n const catalog = await context.client.listCapabilities(workspaceId);\n const item = catalog.items.find((entry) => entry.id === \"mcp:codex_apps\");\n if (!active.current) return;\n if (!item?.enabled || !item.runtime.available)\n throw new Error(\"Choose an active subscription for Codex Apps before continuing.\");\n await attachSessionCapability(\n t,\n context.client,\n workspaceId,\n sessionId,\n item,\n () => active.current,\n );\n await context.refreshWorkspaceMcpServers(workspaceId);\n if (active.current) onComplete();\n } catch (failure) {\n if (active.current)\n setError(\n `Couldn't enable Apps in this conversation. ${userErrorText(failure, \"Try again.\")}`,\n );\n } finally {\n inFlight.current = false;\n if (active.current) setBusy(false);\n }\n }\n return (\n <div className=\"p-6 sm:p-8\">\n <Suspense fallback={<p role=\"status\">Loading connection controls…</p>}>\n <CodexSubscriptionsSurface\n workspaceId={workspaceId}\n canManage={hasWorkspacePermission(\n context.accessContext,\n workspaceId,\n \"connections:write\",\n )}\n />\n </Suspense>\n {error ? <Notice tone=\"failed\">{error}</Notice> : null}\n <div className=\"mt-2 flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" disabled={busy} onClick={onClose}>\n Cancel\n </Button>\n <Button size=\"sm\" disabled={busy} onClick={() => void useApps()}>\n {busy ? <Loader2Icon className=\"animate-spin\" /> : <CheckIcon />}Use in this conversation\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/app/components/capabilities/session-capability-card.tsx"],"sourcesContent":["import { t } from \"../../lib/console-text\";\nimport {\n attachSessionCapability,\n prepareSessionCapabilityAccess,\n applySessionCapabilityAccess,\n type SessionCapabilityAccessPlan,\n} from \"./attach-session-capability\";\nimport { Suspense, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { SessionMcpCapabilityCard } from \"../../../components/session-mcp-capability-card\";\nimport type { AuthNeededItem } from \"../../../timeline\";\nimport { CheckIcon, Loader2Icon } from \"lucide-react\";\nimport { useAppContext } from \"../../app-context\";\nimport { CodexSubscriptionsSurface } from \"../../lib/app-surfaces\";\nimport { Button } from \"../../../ui/button\";\nimport { Notice } from \"../../../ui/notice\";\nimport { SessionCapabilityFrame } from \"../../../components/session-capability-frame\";\nimport { capabilityLogoSource } from \"./capability-logo-source\";\nimport { DetailBody, type ConnectAction } from \"./capability-detail-sheet\";\nimport { performCapabilityAction } from \"./perform-capability-action\";\nimport { useCapabilitiesCatalog } from \"./use-capabilities-catalog\";\nimport { SessionCustomMcpCard } from \"./session-custom-mcp-card\";\nimport {\n capabilityConnectPlan,\n capabilityErrorToast,\n connectionHealth,\n} from \"../../lib/capabilities\";\nimport { userErrorText } from \"../../../ui/api-error\";\nimport { hasWorkspacePermission } from \"../../lib/permissions\";\nimport type { CapabilityCatalogItem, ResourceRef } from \"../../types\";\nimport type { ChatSendContext } from \"./session-github-repositories\";\nimport { SessionGitHubCapabilityCard } from \"./session-github-card\";\nimport { RepeatedMachineRequestNote, SessionMachineCapabilityCard } from \"./session-machine-card\";\nimport { SessionChromeCapabilityCard } from \"./session-chrome-card\";\nimport { usePage } from \"../../lib/navigation\";\n\n/** The built-in card for connecting a person's own computer to this chat. */\nexport const CONNECTED_MACHINE_CAPABILITY_ID = \"api:connected-machine\";\n\n/** The built-in tile and card that install the deployment's Excel add-in. */\nexport const EXCEL_ADDIN_CAPABILITY_ID = \"api:excel-addin\";\n\n/** Recommendations carry identity and rationale, never connection configuration.\n * Expand against the current authenticated catalog before rendering any form. */\ntype SessionCapabilityCardProps = {\n visibility?: \"private\" | \"workspace\" | undefined;\n onConfigured?: (() => Promise<void>) | undefined;\n item: AuthNeededItem;\n workspaceId: string;\n sessionId: string;\n /** The chat's mounted resources, for cards that add a resource to this chat. */\n resources?: readonly ResourceRef[] | undefined;\n /** What a composer Send would carry now, for cards that send a human message. */\n sendContext?: (() => ChatSendContext) | undefined;\n};\n\nexport function SessionCapabilityCard(props: SessionCapabilityCardProps) {\n const page = usePage();\n const context = useAppContext();\n const [registered, setRegistered] = useState<{ id: string; restoreFocus: boolean } | null>(null);\n const onRegistered = useCallback(\n (id: string, restoreFocus: boolean) => setRegistered({ id, restoreFocus }),\n [],\n );\n if (props.item.setupRequest && !registered) {\n return (\n <SessionCustomMcpCard\n key={`${props.workspaceId}:${props.item.id}`}\n item={props.item}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n onConfigured={props.onConfigured}\n onRegistered={onRegistered}\n />\n );\n }\n const item = registered\n ? {\n ...props.item,\n setupRequest: null,\n capability: {\n id: registered.id,\n name: props.item.setupRequest!.name,\n kind: \"mcp\" as const,\n source: \"manual\" as const,\n action: \"connect\" as const,\n rationale: props.item.setupRequest!.rationale,\n requiredVariables: [],\n },\n }\n : props.item;\n const capability = item.capability;\n if (capability?.id === CONNECTED_MACHINE_CAPABILITY_ID) {\n // The same request was made again further down, where its card is live.\n if (item.askedAgainLater)\n return <RepeatedMachineRequestNote chrome={item.purpose === \"chrome\"} />;\n if (item.purpose === \"chrome\") {\n return (\n <SessionChromeCapabilityCard\n key={`${props.workspaceId}:${props.sessionId}`}\n item={item}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n sendContext={props.sendContext}\n />\n );\n }\n return (\n <SessionMachineCapabilityCard\n key={`${props.workspaceId}:${props.sessionId}`}\n item={item}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n sendContext={props.sendContext}\n onConfigured={props.onConfigured}\n />\n );\n }\n if (capability?.id === \"api:github-app\") {\n return (\n <SessionGitHubCapabilityCard\n key={`${props.workspaceId}:${props.sessionId}`}\n item={item}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n resources={props.resources}\n sendContext={props.sendContext}\n onConfigured={props.onConfigured}\n />\n );\n }\n const resolved = context.workspaceCapabilityCatalog.find((entry) => entry.id === capability?.id);\n if (capability && resolved?.kind === \"mcp\" && resolved.authKind === \"oauth2\") {\n return (\n <SessionMcpCapabilityCard\n client={context.client}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n capabilityId={capability.id}\n name={capability.name}\n rationale={capability.rationale}\n returnUrl={page.href()}\n onConfigured={props.onConfigured}\n />\n );\n }\n return (\n <ScopedSessionCapabilityCard\n key={`${props.workspaceId}:${props.sessionId}:${capability!.id}`}\n {...props}\n item={item}\n restoreFocus={registered?.restoreFocus ?? false}\n />\n );\n}\n\nfunction ScopedSessionCapabilityCard({\n item,\n workspaceId,\n sessionId,\n onConfigured,\n restoreFocus = false,\n}: SessionCapabilityCardProps & { restoreFocus?: boolean | undefined }) {\n const context = useAppContext();\n const recommendation = item.capability!;\n const [expanded, setExpanded] = useState(false);\n const [complete, setComplete] = useState(false);\n const [busy, setBusy] = useState(false);\n const [resolvedItem, setResolvedItem] = useState<CapabilityCatalogItem | null>(null);\n const opener = useRef<HTMLButtonElement>(null);\n const cardRef = useRef<HTMLElement>(null);\n useEffect(() => {\n if (!restoreFocus) return;\n // The review dialog's opener is removed when the new connection card\n // replaces it. Focus the next actionable control after Radix closes it.\n const frame = requestAnimationFrame(() => opener.current?.focus());\n return () => cancelAnimationFrame(frame);\n }, [restoreFocus]);\n const catalogItem =\n resolvedItem ??\n context.workspaceCapabilityCatalog.find((entry) => entry.id === recommendation.id);\n const logo = catalogItem\n ? capabilityLogoSource(catalogItem, (path) => context.client.catalogAssetUrl(path))\n : null;\n const close = () => {\n setExpanded(false);\n };\n const skill = recommendation.kind === \"skill\";\n const excel = recommendation.id === EXCEL_ADDIN_CAPABILITY_ID;\n const apiKey = catalogItem ? capabilityConnectPlan(catalogItem).mode === \"api_key\" : false;\n return (\n <SessionCapabilityFrame\n name={catalogItem?.name ?? recommendation.name}\n subtitle={catalogItem ? (catalogItem.providerDomain ?? \"\") : item.providerDomain}\n logo={logo}\n typeLabel={\n skill ? \"Skill\" : excel ? \"Add-in\" : recommendation.kind === \"mcp\" ? \"MCP server\" : \"API\"\n }\n description={catalogItem?.description || recommendation.rationale}\n skill={skill}\n expanded={expanded}\n complete={complete}\n actionLabel={\n excel\n ? \"Add to Excel\"\n : catalogItem?.enabled\n ? \"Review\"\n : skill\n ? \"Review skill\"\n : apiKey\n ? \"Add API key\"\n : `Connect ${catalogItem?.name ?? recommendation.name}`\n }\n note={\n excel\n ? \"The add-in runs in your own Excel. Agents reach a workbook only while you have the add-in open in it.\"\n : skill\n ? \"Skill content is reviewed separately from permission to use any integration.\"\n : apiKey\n ? \"Add credentials in the protected form, not in a chat message.\"\n : \"Review access before signing in. You'll return to this conversation after authorization.\"\n }\n onOpen={() => setExpanded(true)}\n onClose={close}\n busy={busy}\n opener={opener}\n cardRef={cardRef}\n >\n {recommendation.id === \"mcp:codex_apps\" ? (\n <SessionCodexAppsSetup\n busy={busy}\n setBusy={setBusy}\n workspaceId={workspaceId}\n sessionId={sessionId}\n onClose={close}\n onComplete={() => {\n setComplete(true);\n close();\n }}\n />\n ) : (\n <SessionCapabilitySetup\n busy={busy}\n setBusy={setBusy}\n key={`${workspaceId}:${sessionId}:${recommendation.id}`}\n capabilityId={recommendation.id}\n onResolvedItem={setResolvedItem}\n onConfigured={onConfigured}\n workspaceId={workspaceId}\n sessionId={sessionId}\n onClose={close}\n onComplete={() => {\n setComplete(true);\n close();\n }}\n />\n )}\n </SessionCapabilityFrame>\n );\n}\n\nfunction SessionCapabilitySetup({\n busy,\n setBusy,\n capabilityId,\n onResolvedItem,\n onConfigured,\n workspaceId,\n sessionId,\n onClose,\n onComplete,\n}: {\n busy: boolean;\n setBusy: (busy: boolean) => void;\n capabilityId: string;\n onResolvedItem: (item: CapabilityCatalogItem) => void;\n onConfigured?: (() => Promise<void>) | undefined;\n workspaceId: string;\n sessionId: string;\n onClose: () => void;\n onComplete: () => void;\n}) {\n const page = usePage();\n const context = useAppContext();\n const catalog = useCapabilitiesCatalog(workspaceId);\n const canReadConnections =\n context.accessContext === null\n ? null\n : hasWorkspacePermission(context.accessContext, workspaceId, \"connections:read\");\n const [error, setError] = useState<string | null>(null);\n const subjectId = context.accessContext?.subjectId ?? null;\n const [parentAccessReview, setParentAccessReview] = useState<{\n plan: SessionCapabilityAccessPlan;\n invocation: object;\n } | null>(null);\n const [authInspection, setAuthInspection] = useState<{\n id: string;\n url: string;\n kind: \"oauth2\" | \"none\" | \"unknown\";\n message?: string | undefined;\n } | null>(null);\n const [authInspectionRevision, setAuthInspectionRevision] = useState(0);\n const inFlight = useRef<object | null>(null);\n const scope = useRef({\n client: context.client,\n workspaceId,\n sessionId,\n canReadConnections,\n subjectId,\n authorityKey: catalog.authorityKey,\n alive: true,\n });\n if (\n scope.current.client !== context.client ||\n scope.current.workspaceId !== workspaceId ||\n scope.current.sessionId !== sessionId ||\n scope.current.canReadConnections !== canReadConnections ||\n scope.current.subjectId !== subjectId ||\n scope.current.authorityKey !== catalog.authorityKey\n ) {\n scope.current = {\n client: context.client,\n workspaceId,\n sessionId,\n canReadConnections,\n subjectId,\n authorityKey: catalog.authorityKey,\n alive: true,\n };\n }\n const parentAccessPlan =\n parentAccessReview?.invocation === scope.current ? parentAccessReview.plan : null;\n useEffect(() => {\n // StrictMode replays setup after cleanup. Give the replay a new owner:\n // reusing the retired object would either keep it dead or revive old work.\n if (!scope.current.alive) scope.current = { ...scope.current, alive: true };\n const activeScope = scope.current;\n setParentAccessReview(null);\n setBusy(false);\n void catalog.refresh();\n return () => {\n activeScope.alive = false;\n };\n // Refetch on a live read-grant change; the hook masks prior rows during render.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n context.client,\n workspaceId,\n sessionId,\n canReadConnections,\n subjectId,\n catalog.authorityKey,\n setBusy,\n ]);\n const rawItem = catalog.items.find((entry) => entry.id === capabilityId);\n const rawItemId = rawItem?.id;\n const inspectUrl = rawItem?.mcpUrl ?? rawItem?.endpointUrl;\n const needsAuthInspection =\n rawItem?.kind === \"mcp\" &&\n !rawItem.enabled &&\n capabilityConnectPlan(rawItem).mode === \"setup_required\" &&\n Boolean(inspectUrl);\n useEffect(() => {\n if (!needsAuthInspection || !rawItemId || !inspectUrl) return;\n let active = true;\n setAuthInspection(null);\n void context.client.inspectMcpAuthentication(workspaceId, inspectUrl).then(\n (result) => {\n if (active) setAuthInspection({ id: rawItemId, url: inspectUrl, ...result });\n },\n () => {\n if (active) setAuthInspection({ id: rawItemId, url: inspectUrl, kind: \"unknown\" });\n },\n );\n return () => {\n active = false;\n };\n }, [\n context.client,\n workspaceId,\n rawItemId,\n inspectUrl,\n needsAuthInspection,\n authInspectionRevision,\n ]);\n const item = useMemo(() => {\n if (!rawItem || !needsAuthInspection) return rawItem;\n const inspection =\n authInspection?.id === rawItem.id && authInspection.url === inspectUrl\n ? authInspection.kind\n : \"checking\";\n return {\n ...rawItem,\n authKind:\n inspection === \"oauth2\"\n ? (\"oauth2\" as const)\n : inspection === \"none\"\n ? (\"none\" as const)\n : null,\n metadata: {\n ...rawItem.metadata,\n authDiscovery: inspection,\n authDiscoveryMessage: inspection === \"unknown\" ? authInspection?.message : undefined,\n },\n };\n }, [rawItem, needsAuthInspection, inspectUrl, authInspection]);\n useEffect(() => {\n if (item) onResolvedItem(item);\n }, [item, onResolvedItem]);\n const refreshRuntime = useCallback(() => {\n void context.refreshWorkspaceMcpServers(workspaceId);\n }, [context, workspaceId]);\n async function act(action: ConnectAction) {\n if (!item) return;\n const invocation = scope.current;\n if (inFlight.current === invocation) return;\n inFlight.current = invocation;\n setBusy(true);\n setError(null);\n setParentAccessReview(null);\n const current = () => scope.current === invocation && invocation.alive;\n try {\n await performCapabilityAction(\n {\n client: context.client,\n workspaceId,\n item,\n connections: catalog.connectionsLoadFailed ? null : catalog.connections,\n canManageSkills: hasWorkspacePermission(\n context.accessContext,\n workspaceId,\n \"capabilities:manage\",\n ),\n refresh: catalog.refresh,\n onRuntimeChanged: () => {\n if (current()) refreshRuntime();\n },\n onComplete: async () => {\n if (!current()) return;\n const updated = (await context.client.listCapabilities(workspaceId)).items.find(\n (entry) => entry.id === item.id,\n );\n if (!current()) return;\n if (!updated?.enabled)\n throw new Error(\"Setup could not be verified. Refresh and try again.\");\n const plan = await prepareSessionCapabilityAccess(\n t,\n context.client,\n workspaceId,\n sessionId,\n updated,\n current,\n );\n if (!current()) return;\n if (plan.sessions.some((chat) => chat.id !== sessionId && chat.request)) {\n setParentAccessReview({ plan, invocation });\n return;\n }\n await applySessionCapabilityAccess(t, context.client, plan, current);\n await onConfigured?.();\n if (current()) onComplete();\n },\n onSkillRemoval: () => {\n throw new Error(\n \"Use the workspace Skill controls to review removal and its other owners.\",\n );\n },\n returnPathFor: (id) =>\n `/workspaces/${encodeURIComponent(workspaceId)}/sessions/${encodeURIComponent(sessionId)}?capability_auth=${encodeURIComponent(id)}`,\n redirect: (url) => {\n if (current()) page.assign(url);\n },\n },\n action,\n );\n } catch (failure) {\n // A credential may have committed before enabling failed. Reconcile before\n // offering Retry so it reuses that row instead of minting a duplicate.\n if (current()) await catalog.refresh();\n if (current()) setError(capabilityErrorToast(failure, \"Couldn't complete setup\").description);\n } finally {\n if (inFlight.current === invocation) inFlight.current = null;\n if (current()) setBusy(false);\n }\n }\n async function useConnected() {\n if (!item) return;\n const invocation = scope.current;\n if (inFlight.current === invocation) return;\n inFlight.current = invocation;\n setBusy(true);\n setError(null);\n const current = () => scope.current === invocation && invocation.alive;\n try {\n const plan =\n parentAccessPlan ??\n (await prepareSessionCapabilityAccess(\n t,\n context.client,\n workspaceId,\n sessionId,\n item,\n current,\n ));\n if (!current()) return;\n if (\n !parentAccessPlan &&\n plan.sessions.some((chat) => chat.id !== sessionId && chat.request)\n ) {\n setParentAccessReview({ plan, invocation });\n return;\n }\n await applySessionCapabilityAccess(t, context.client, plan, current);\n if (current()) setParentAccessReview(null);\n if (current()) await onConfigured?.();\n if (current()) onComplete();\n } catch (failure) {\n if (current()) {\n setParentAccessReview(null);\n setError(`Couldn't add this connection. ${userErrorText(failure, \"Try again.\")}`);\n }\n } finally {\n if (inFlight.current === invocation) inFlight.current = null;\n if (current()) setBusy(false);\n }\n }\n const ownsActionRow =\n !catalog.loadError && item && !item.enabled && (item.kind === \"skill\" || item.kind === \"mcp\");\n const health = item\n ? connectionHealth(item, catalog.connections ?? [], catalog.connections !== null)\n : null;\n return (\n <div className=\"p-6 sm:p-8\">\n {catalog.loading && !item ? (\n <p role=\"status\" className=\"flex items-center gap-2 text-sm text-fg-muted\">\n <Loader2Icon className=\"size-4 animate-spin\" />\n Loading connection details…\n </p>\n ) : catalog.loadError || !item ? (\n <Notice\n tone=\"failed\"\n action={\n <Button size=\"sm\" onClick={() => void catalog.refresh()}>\n Retry\n </Button>\n }\n >\n {catalog.loadError\n ? \"Couldn't load the integration catalog.\"\n : \"This recommendation is no longer in the current catalog.\"}\n </Notice>\n ) : (\n <DetailBody\n workspaceId={workspaceId}\n setupOnly\n showIdentity={false}\n onCancel={ownsActionRow ? onClose : undefined}\n item={item}\n health={connectionHealth(item, catalog.connections ?? [], catalog.connections !== null)}\n logoSrc={capabilityLogoSource(item, (path) => context.client.catalogAssetUrl(path))}\n busy={busy}\n errorMessage={error}\n socialConnections={catalog.socialConnections}\n canManageSocial={hasWorkspacePermission(\n context.accessContext,\n workspaceId,\n \"connections:write\",\n )}\n canManageSkills={hasWorkspacePermission(\n context.accessContext,\n workspaceId,\n \"capabilities:manage\",\n )}\n onAction={(action) => void act(action)}\n onRetryAuthInspection={\n needsAuthInspection\n ? () => {\n setAuthInspection(null);\n setAuthInspectionRevision((revision) => revision + 1);\n }\n : undefined\n }\n />\n )}\n {parentAccessPlan && item ? (\n <Notice tone=\"waiting\" live=\"polite\">\n <p>\n This chat inherits its tool access from its parent. To add {item.name}, enable its tools\n in these parent chats first:\n </p>\n <ul className=\"mt-2 list-disc pl-5\">\n {parentAccessPlan.sessions\n .filter((chat) => chat.id !== sessionId && chat.request)\n .map((chat) => (\n <li key={chat.id}>\n <a\n className=\"underline\"\n href={`/workspaces/${encodeURIComponent(workspaceId)}/sessions/${encodeURIComponent(chat.id)}`}\n >\n {chat.title || \"Parent chat\"}\n </a>\n </li>\n ))}\n </ul>\n <p className=\"mt-2\">\n Confirming adds {item.name}'s tools to these chats and this chat. Parent chats and\n future children can then use them. Existing tool choices are preserved; workspace\n defaults become chat-specific selections where needed. Current turns keep their accepted\n access.\n </p>\n <p className=\"mt-2\">\n Updates are saved separately. If a later update fails, approved parent changes may\n already be saved.\n </p>\n </Notice>\n ) : null}\n <div className=\"mt-2 flex justify-end gap-2\">\n {!ownsActionRow ? (\n <Button size=\"sm\" variant=\"ghost\" disabled={busy} onClick={onClose}>\n Cancel\n </Button>\n ) : null}\n {item?.enabled && health?.state !== \"attention\" && health?.state !== \"unverified\" ? (\n <Button size=\"sm\" disabled={busy} onClick={() => void useConnected()}>\n {busy ? <Loader2Icon className=\"animate-spin\" /> : <CheckIcon />}\n {parentAccessPlan ? \"Enable in parents and add tools\" : \"Add tools\"}\n </Button>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction SessionCodexAppsSetup({\n busy,\n setBusy,\n workspaceId,\n sessionId,\n onClose,\n onComplete,\n}: {\n busy: boolean;\n setBusy: (busy: boolean) => void;\n workspaceId: string;\n sessionId: string;\n onClose: () => void;\n onComplete: () => void;\n}) {\n const context = useAppContext();\n const [error, setError] = useState<string | null>(null);\n const inFlight = useRef(false);\n const active = useRef(true);\n useEffect(\n () => () => {\n active.current = false;\n },\n [],\n );\n async function useApps() {\n if (inFlight.current) return;\n inFlight.current = true;\n setBusy(true);\n setError(null);\n try {\n const catalog = await context.client.listCapabilities(workspaceId);\n const item = catalog.items.find((entry) => entry.id === \"mcp:codex_apps\");\n if (!active.current) return;\n if (!item?.enabled || !item.runtime.available)\n throw new Error(\"Choose an active subscription for Codex Apps before continuing.\");\n await attachSessionCapability(\n t,\n context.client,\n workspaceId,\n sessionId,\n item,\n () => active.current,\n );\n await context.refreshWorkspaceMcpServers(workspaceId);\n if (active.current) onComplete();\n } catch (failure) {\n if (active.current)\n setError(\n `Couldn't enable Apps in this conversation. ${userErrorText(failure, \"Try again.\")}`,\n );\n } finally {\n inFlight.current = false;\n if (active.current) setBusy(false);\n }\n }\n return (\n <div className=\"p-6 sm:p-8\">\n <Suspense fallback={<p role=\"status\">Loading connection controls…</p>}>\n <CodexSubscriptionsSurface\n workspaceId={workspaceId}\n canManage={hasWorkspacePermission(\n context.accessContext,\n workspaceId,\n \"connections:write\",\n )}\n />\n </Suspense>\n {error ? <Notice tone=\"failed\">{error}</Notice> : null}\n <div className=\"mt-2 flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" disabled={busy} onClick={onClose}>\n Cancel\n </Button>\n <Button size=\"sm\" disabled={busy} onClick={() => void useApps()}>\n {busy ? <Loader2Icon className=\"animate-spin\" /> : <CheckIcon />}Use in this conversation\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":"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","names":[]}