@opengeni/react 4.6.1 → 4.6.2-canary.39853438886001
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.
- package/dist/app/app-state.js +13 -13
- package/dist/app/components/Composer.js +14 -14
- package/dist/app/components/artifacts/artifact-library.js +5 -5
- package/dist/app/components/artifacts/chat-interactive-block.js +10 -10
- package/dist/app/components/artifacts/inline-chat-image.js +14 -14
- package/dist/app/components/artifacts/retained-file-preview.js +16 -16
- package/dist/app/components/artifacts/retained-text-preview.js +2 -2
- package/dist/app/components/artifacts/site-conversations.js +5 -4
- package/dist/app/components/artifacts/site-data.js +2 -2
- package/dist/app/components/artifacts/site-publishing.js +11 -11
- package/dist/app/components/artifacts/site-settings.js +15 -15
- package/dist/app/components/billing-class-mark.js +3 -3
- package/dist/app/components/capabilities/capability-detail-sheet.js +2 -2
- package/dist/app/components/capabilities/capability-logo-source.js +7 -7
- package/dist/app/components/capabilities/native-connect-readiness.js +1 -0
- package/dist/app/components/capabilities/native-connect-readiness.js.map +1 -1
- package/dist/app/components/capabilities/native-connect-setup.js +6 -6
- package/dist/app/components/capabilities/perform-capability-action.js +2 -1
- package/dist/app/components/capabilities/prepared-mcp-setup-card.js +8 -8
- package/dist/app/components/capabilities/session-capability-card.js +32 -31
- package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
- package/dist/app/components/capabilities/session-chrome-card.js +14 -14
- package/dist/app/components/capabilities/session-custom-mcp-card.js +9 -9
- package/dist/app/components/capabilities/session-github-card.js +9 -9
- package/dist/app/components/capabilities/session-machine-card.js +14 -14
- package/dist/app/components/command-menu/chat-status.js +6 -5
- package/dist/app/components/command-menu/chat-switcher.d.ts +2 -0
- package/dist/app/components/command-menu/chat-switcher.js +26 -9
- package/dist/app/components/command-menu/chat-switcher.js.map +1 -1
- package/dist/app/components/command-menu/command-menu.js +16 -15
- package/dist/app/components/command-menu/command-menu.js.map +1 -1
- package/dist/app/components/command-menu/shortcut-sheet.js +8 -8
- package/dist/app/components/composer-mobile-plus-panel.js +5 -5
- package/dist/app/components/composer-mobile-plus.js +1 -1
- package/dist/app/components/credit-required-gate.js +1 -1
- package/dist/app/components/credit-required-prompt.js +4 -4
- package/dist/app/components/desktop/app-shots.js +5 -5
- package/dist/app/components/desktop/this-computer.js +4 -4
- package/dist/app/components/feedback.js +3 -3
- package/dist/app/components/github-app-connect-launcher.js +1 -1
- package/dist/app/components/machines/connect-machine-dialog.js +3 -3
- package/dist/app/components/markdown.js +4 -4
- package/dist/app/components/models/models-ui.js +2 -2
- package/dist/app/components/pickers.js +5 -5
- package/dist/app/components/rail/rail-context.js +3 -3
- package/dist/app/components/rail/rail-sections.js +28 -27
- package/dist/app/components/rail/session-header.d.ts +6 -5
- package/dist/app/components/rail/session-header.js +20 -19
- package/dist/app/components/rail/session-list.js +27 -26
- package/dist/app/components/rail/session-row-hover-details.js +7 -6
- package/dist/app/components/rail/session-shell.js +51 -53
- package/dist/app/components/rail/site-session-group-heading.js +2 -1
- package/dist/app/components/session/agent-configuration-panel.js +6 -6
- package/dist/app/components/session/banners.js +6 -6
- package/dist/app/components/session/conversation-find.js +3 -3
- package/dist/app/components/session/editable-artifacts-workspace.js +17 -17
- package/dist/app/components/session/failed-session-banner.js +5 -5
- package/dist/app/components/session/human-input.js +26 -26
- package/dist/app/components/session/inspector.js +37 -37
- package/dist/app/components/session/message-actions.js +3 -3
- package/dist/app/components/session/message-resource-attachments.js +5 -5
- package/dist/app/components/session/model-recovery-notice.js +3 -3
- package/dist/app/components/session/new-session-settings-menu.js +4 -4
- package/dist/app/components/session/sandbox-switcher.js +8 -8
- package/dist/app/components/session/sandbox-workspace.js +36 -36
- package/dist/app/components/session/search-markdown-highlight.js +5 -5
- package/dist/app/components/session/search-results-view.js +6 -6
- package/dist/app/components/session/session-admission-notice.js +4 -4
- package/dist/app/components/session/session-machine-access-notice.js +4 -4
- package/dist/app/components/session/session-search-dialog.js +6 -6
- package/dist/app/components/session/session-tenancy-control.js +4 -4
- package/dist/app/components/session/session-usage-limit-section.js +3 -3
- package/dist/app/components/session/session-wait-status.js +2 -1
- package/dist/app/components/session/session-wait-status.js.map +1 -1
- package/dist/app/components/session/subagents.js +6 -5
- package/dist/app/components/session/subscription-account-indicator.d.ts +35 -0
- package/dist/app/components/session/{codex-account-indicator.js → subscription-account-indicator.js} +23 -10
- package/dist/app/components/session/subscription-account-menu.d.ts +11 -12
- package/dist/app/components/session/subscription-account-menu.js +1 -1
- package/dist/app/components/session/subscription-account.d.ts +105 -0
- package/dist/app/components/usage/usage-entry.js +3 -3
- package/dist/app/components/workspace-composer-plus.js +10 -10
- package/dist/app/embed/session-app.js +154 -156
- package/dist/app/lib/actions/actions-provider.js +8 -8
- package/dist/app/lib/actions/chat-switcher.d.ts +19 -7
- package/dist/app/lib/codex-usage-query.js +2 -2
- package/dist/app/lib/composer-connectors.js +8 -8
- package/dist/app/lib/console-text.js +2 -2
- package/dist/app/lib/drive-connect-return.d.ts +26 -0
- package/dist/app/lib/drive-connect-return.js +16 -0
- package/dist/app/lib/events.js +7 -7
- package/dist/app/lib/failed-session-copy.js +3 -3
- package/dist/app/lib/model-access-onboarding.js +3 -3
- package/dist/app/lib/move-chat-to-machine.js +3 -3
- package/dist/app/lib/session-branch-cache.js +6 -5
- package/dist/app/lib/session-group-pagination.js +6 -5
- package/dist/app/lib/session-hover-facts.js +6 -5
- package/dist/app/lib/session-rail.js +2 -1
- package/dist/app/lib/sessions-group.js +5 -4
- package/dist/app/lib/turn-failure-analytics.js +5 -5
- package/dist/app/lib/use-workspace-machines.js +4 -4
- package/dist/app/lib/use-workspace-model-catalog.js +3 -3
- package/dist/app/lib/use-workspace-rigs.js +2 -2
- package/dist/app/lib/workspace-navigation-preference.js +4 -4
- package/dist/app/lib/workspace-scope-context.js +3 -3
- package/dist/app/routes/artifacts.js +50 -49
- package/dist/app/routes/artifacts.js.map +1 -1
- package/dist/app/routes/retained-artifact.js +23 -23
- package/dist/app/routes/session.js +92 -91
- package/dist/app/routes/sessions-index.js +52 -52
- package/dist/app/routes/site-view.js +35 -34
- package/dist/app/routes/site-view.js.map +1 -1
- package/dist/artifacts-document.js +4 -4
- package/dist/artifacts-presentation.js +4 -4
- package/dist/artifacts-spreadsheet.js +4 -4
- package/dist/artifacts.js +10 -10
- package/dist/{browser-viewer-YQC6BFMS.js → browser-viewer-VKIAULG7.js} +4 -4
- package/dist/{chat-interactive-block-Z22YHDRU.js → chat-interactive-block-JGYSW4KB.js} +5 -5
- package/dist/{chunk-WN2MIB4Q.js → chunk-22V2QCEM.js} +2 -2
- package/dist/{chunk-SJPAKWWP.js → chunk-2BISI664.js} +2 -2
- package/dist/{chunk-O5UOCMH4.js → chunk-2LPJVEWY.js} +3 -3
- package/dist/{chunk-NPDL4W4Y.js → chunk-2MLJHNKJ.js} +108 -109
- package/dist/chunk-2MLJHNKJ.js.map +1 -0
- package/dist/{chunk-JI6WPLZB.js → chunk-2SBCOGQN.js} +4 -4
- package/dist/{chunk-6JF7C3U3.js → chunk-2WERWWSS.js} +2 -2
- package/dist/{chunk-4XKT4ENZ.js → chunk-2Y3QL3DA.js} +4 -4
- package/dist/{chunk-KVMFT6FN.js → chunk-3FL3F4WF.js} +2 -2
- package/dist/{chunk-4VJOZJDV.js → chunk-3JPQAIYJ.js} +2 -2
- package/dist/{chunk-27EORKJ4.js → chunk-3N4LNBJF.js} +2 -2
- package/dist/{chunk-7JZSFJHB.js → chunk-3OJU3RUR.js} +2 -2
- package/dist/{chunk-NV5OYV3G.js → chunk-3U6K36QA.js} +5 -5
- package/dist/{chunk-MDRLP5DO.js → chunk-3W7ROHN4.js} +3 -3
- package/dist/{chunk-3MQM4ZOC.js → chunk-3Y6ZR2VN.js} +3 -3
- package/dist/{chunk-HXZIX7MR.js → chunk-47AB65IO.js} +4 -4
- package/dist/{chunk-DNYD7AUG.js → chunk-4BOLIZ7Y.js} +3 -3
- package/dist/{chunk-4XO346BW.js → chunk-4FBJFQFU.js} +2 -2
- package/dist/{chunk-BWKZEW6K.js → chunk-4T3E56NT.js} +3 -3
- package/dist/{chunk-4PC7LIQK.js → chunk-4ZMUWRFF.js} +3 -3
- package/dist/{chunk-TM2ZLY3Q.js → chunk-5OLFYSVG.js} +13 -13
- package/dist/{chunk-D4QOZXPM.js → chunk-5WBRM7V4.js} +5 -5
- package/dist/{chunk-GXK4CUAB.js → chunk-5WQKTT5Z.js} +2 -2
- package/dist/{chunk-6N7W3TOV.js → chunk-63BPMTBM.js} +2 -2
- package/dist/{chunk-R5YZ3ROM.js → chunk-63PQKTTT.js} +2 -2
- package/dist/{chunk-WLZVXCPZ.js → chunk-6GO6WN22.js} +3 -3
- package/dist/{chunk-6PQBKMUL.js → chunk-6IIA63VD.js} +11 -7
- package/dist/chunk-6IIA63VD.js.map +1 -0
- package/dist/{chunk-XDCZBOEY.js → chunk-6LGBGPBU.js} +1 -1
- package/dist/{chunk-FMATVQFW.js → chunk-6XXMG5YP.js} +9 -9
- package/dist/{chunk-M5E3CKSE.js → chunk-7QWWE5XL.js} +2 -2
- package/dist/{chunk-RABKQFTA.js → chunk-A2HCAMRH.js} +2 -2
- package/dist/{chunk-6K3WNTRI.js → chunk-AODISQO6.js} +2 -2
- package/dist/{chunk-C6JL6PBL.js → chunk-AQDRH6VF.js} +3 -3
- package/dist/{chunk-72XEFLMD.js → chunk-ASWINLSW.js} +2 -2
- package/dist/{chunk-ZPZYYSHW.js → chunk-BVMDON5T.js} +8 -8
- package/dist/{chunk-EURDMOXZ.js → chunk-BYJZUCOQ.js} +2 -2
- package/dist/{chunk-BQWUXC55.js → chunk-CAVAVT5S.js} +9 -9
- package/dist/{chunk-ZWACUOU5.js → chunk-CDBGAAJY.js} +3 -3
- package/dist/chunk-CDBGAAJY.js.map +1 -0
- package/dist/{chunk-BPD4IJBG.js → chunk-CG6CJMIS.js} +2 -2
- package/dist/{chunk-B254JG72.js → chunk-CQX24PT7.js} +2 -2
- package/dist/{chunk-65K5LV4L.js → chunk-CTCOVPZU.js} +51 -50
- package/dist/{chunk-65K5LV4L.js.map → chunk-CTCOVPZU.js.map} +1 -1
- package/dist/{chunk-HJTTDLF6.js → chunk-CY3NO4JN.js} +4 -4
- package/dist/{chunk-OLUG4IFF.js → chunk-D2RLPRSG.js} +2 -2
- package/dist/{chunk-74NIHMAT.js → chunk-D653JH6D.js} +3 -3
- package/dist/{chunk-2LUO22FR.js → chunk-DAI5CTQF.js} +4 -4
- package/dist/{chunk-HTKVYEVB.js → chunk-DBM4ZXDN.js} +2 -2
- package/dist/{chunk-MB2DTUEG.js → chunk-DNYKLU3K.js} +4 -4
- package/dist/{chunk-26P7B46A.js → chunk-DXYARXK3.js} +3 -3
- package/dist/{chunk-JQKURO3S.js → chunk-E4MQRQ6Z.js} +2 -2
- package/dist/{chunk-KW53DBY7.js → chunk-EBW2E32G.js} +2 -2
- package/dist/{chunk-O73DRA77.js → chunk-ENKBO7FC.js} +4 -4
- package/dist/{chunk-FVCLVASD.js → chunk-FI3KRVOF.js} +24 -24
- package/dist/{chunk-WWM7WVD2.js → chunk-GABFKHQE.js} +2 -2
- package/dist/chunk-GLCOKWLH.js +42 -0
- package/dist/chunk-GLCOKWLH.js.map +1 -0
- package/dist/{chunk-32HA7DXJ.js → chunk-GNBRB3DH.js} +25 -25
- package/dist/{chunk-CEQUNJJY.js → chunk-HPALK6LD.js} +2 -2
- package/dist/{chunk-LR7U3HCD.js → chunk-HPSATFLQ.js} +4 -4
- package/dist/{chunk-O4AWXTZQ.js → chunk-HUYLQW75.js} +6 -6
- package/dist/{chunk-PQCFW2KT.js → chunk-IDDHH5AQ.js} +29 -24
- package/dist/chunk-IDDHH5AQ.js.map +1 -0
- package/dist/{chunk-ZZUKJ5HQ.js → chunk-IG2ERMSB.js} +2 -2
- package/dist/{chunk-2SZ3KC5S.js → chunk-IMKIIS4Y.js} +2 -2
- package/dist/{chunk-CA64OZLZ.js → chunk-IRXPXDY5.js} +4 -4
- package/dist/{chunk-I57HZMMA.js → chunk-IXIE3H43.js} +2 -2
- package/dist/{chunk-OWJD3V4V.js → chunk-J3YQ3554.js} +2 -2
- package/dist/{chunk-BCFHMBMK.js → chunk-J5HZBHU4.js} +7 -7
- package/dist/{chunk-UHMMRQGU.js → chunk-KD7GNHOP.js} +3 -3
- package/dist/{chunk-X7Z4B5GK.js → chunk-KPL7EXS6.js} +2 -2
- package/dist/{chunk-GTR2WUBA.js → chunk-KX6M5CJI.js} +1 -1
- package/dist/{chunk-CYO5HL4C.js → chunk-KYL2BPS2.js} +2 -2
- package/dist/{chunk-QLDMF7MH.js → chunk-LC5HE7PZ.js} +2 -2
- package/dist/{chunk-3SMJ2BIQ.js → chunk-LGD5RESZ.js} +7 -33
- package/dist/chunk-LGD5RESZ.js.map +1 -0
- package/dist/{chunk-4ICPJZAB.js → chunk-LMYSYG6U.js} +2 -2
- package/dist/{chunk-3ZZOE4SN.js → chunk-LOCDYMD6.js} +4 -4
- package/dist/{chunk-DNWBLT4U.js → chunk-MASBMJ2M.js} +2 -2
- package/dist/{chunk-NZMQDUOD.js → chunk-MU6HYDNF.js} +5 -5
- package/dist/{chunk-GMVKCEBG.js → chunk-MY6QEDZ2.js} +2 -2
- package/dist/{chunk-SK57RWSA.js → chunk-MZGKQ5WV.js} +2 -2
- package/dist/{chunk-HSQRYJ4P.js → chunk-N52SFH2K.js} +2 -2
- package/dist/{chunk-MY6VZVCP.js → chunk-OAJX5CEL.js} +4 -4
- package/dist/{chunk-IWIMIRV3.js → chunk-OSJTLQXA.js} +9 -4
- package/dist/chunk-OSJTLQXA.js.map +1 -0
- package/dist/{chunk-FH75NNLB.js → chunk-OZ5NAXCP.js} +2 -2
- package/dist/{chunk-PEGNFZ3F.js → chunk-P5S777YI.js} +2 -2
- package/dist/{chunk-LY6727IF.js → chunk-PPSVFNEA.js} +1 -1
- package/dist/{chunk-K4FDZVMQ.js → chunk-PR42VIVY.js} +2 -2
- package/dist/{chunk-I74J2UZ2.js → chunk-PWMZCW4H.js} +8 -8
- package/dist/{chunk-6YDXUE5H.js → chunk-PYA2O3WS.js} +2 -2
- package/dist/{chunk-GUIZDI5T.js → chunk-Q2PA4KZS.js} +2 -2
- package/dist/{chunk-JJ7VMIEQ.js → chunk-QCANSTLU.js} +64 -64
- package/dist/{chunk-DZH2HTTB.js → chunk-R27GW5WV.js} +1 -1
- package/dist/chunk-R4U4EWZG.js +414 -0
- package/dist/chunk-R4U4EWZG.js.map +1 -0
- package/dist/{chunk-DAQG3C4W.js → chunk-R6JY22SG.js} +29 -29
- package/dist/{chunk-7OIBLMDP.js → chunk-RAQISW42.js} +2 -2
- package/dist/{chunk-DNLXQUBX.js → chunk-RLS6PTL4.js} +32 -44
- package/dist/chunk-RLS6PTL4.js.map +1 -0
- package/dist/{chunk-CPKD2YGK.js → chunk-RNU5CUPI.js} +2 -2
- package/dist/{chunk-467VRP4E.js → chunk-RO5YZQHZ.js} +3 -3
- package/dist/{chunk-SSZROOOI.js → chunk-ROLXYGT5.js} +2 -2
- package/dist/{chunk-6VITVQ23.js → chunk-SHJ5SQOW.js} +7 -7
- package/dist/{chunk-F4B2YYCN.js → chunk-TAWFXRXB.js} +3 -3
- package/dist/{chunk-G3FU2IF7.js → chunk-TB7UW5BB.js} +3 -3
- package/dist/{chunk-NF6Q4XTN.js → chunk-TQF2I5SY.js} +3 -3
- package/dist/{chunk-MM7OKOTE.js → chunk-UBXHP224.js} +43 -18
- package/dist/chunk-UBXHP224.js.map +1 -0
- package/dist/{chunk-M7A226EQ.js → chunk-UL44R3W2.js} +2 -2
- package/dist/{chunk-GTR5NLVP.js → chunk-VCRQPLKS.js} +2 -2
- package/dist/{chunk-MHIYYHCL.js → chunk-VJU3ET7N.js} +12 -12
- package/dist/{chunk-RXMIXKB3.js → chunk-WGJUARF3.js} +13 -13
- package/dist/{chunk-NWSAF6P5.js → chunk-WJDH7CH5.js} +22 -1
- package/dist/chunk-WJDH7CH5.js.map +1 -0
- package/dist/{chunk-LG67ZNRU.js → chunk-WK2ZCTUF.js} +2 -2
- package/dist/{chunk-XGE75VPK.js → chunk-WNARM3LY.js} +3 -3
- package/dist/{chunk-RNBH5TSM.js → chunk-WQ2RTQYO.js} +2 -2
- package/dist/chunk-X5XEYQ4B.js +84 -0
- package/dist/chunk-X5XEYQ4B.js.map +1 -0
- package/dist/{chunk-W57QFLQD.js → chunk-X6JIGNLI.js} +4 -4
- package/dist/{chunk-CKA4SJRK.js → chunk-XIQDCQX7.js} +2 -2
- package/dist/{chunk-AJ7PY4FJ.js → chunk-Y3GCG6CA.js} +2 -2
- package/dist/{chunk-2K27S6LK.js → chunk-Y565N5ZJ.js} +24 -7
- package/dist/chunk-Y565N5ZJ.js.map +1 -0
- package/dist/{chunk-ZRB4M3GG.js → chunk-YC5KH7ZB.js} +3 -3
- package/dist/{chunk-4RY64KQY.js → chunk-YJUKLLNP.js} +2 -2
- package/dist/{chunk-OHG2UQ2O.js → chunk-YWP2H7SX.js} +60 -22
- package/dist/chunk-YWP2H7SX.js.map +1 -0
- package/dist/{chunk-24POWVUY.js → chunk-ZDJNRRVS.js} +4 -4
- package/dist/{chunk-S6WJ6TUT.js → chunk-ZEVJGMNB.js} +2 -2
- package/dist/chunk-ZEVJGMNB.js.map +1 -0
- package/dist/{chunk-M7YEZR6X.js → chunk-ZITMDA4C.js} +2 -2
- package/dist/components/model-policy-picker.d.ts +2 -0
- package/dist/composer.js +6 -6
- package/dist/{computer-viewer-BWVNDFTO.js → computer-viewer-6CRLWQHP.js} +5 -5
- package/dist/connect.js +6 -6
- package/dist/connection-service-presentation.d.ts +1 -4
- package/dist/desktop.js +2 -2
- package/dist/editor.js +2 -2
- package/dist/{embedded-new-voice-GBXSZ3TO.js → embedded-new-voice-KILV3RYM.js} +5 -5
- package/dist/{embedded-voice-MGI7EK7C.js → embedded-voice-GHDRLCFX.js} +5 -5
- package/dist/{fleet-decision-row-35S3GAUN.js → fleet-decision-row-DQXRRBT7.js} +2 -2
- package/dist/index.js +44 -44
- package/dist/interaction.js +5 -5
- package/dist/machines.js +3 -3
- package/dist/messages/en.d.ts +1 -1
- package/dist/messages.js +1 -1
- package/dist/{model-policy-picker-menu-KP53N6UJ.js → model-policy-picker-menu-5ALKUJMR.js} +4 -4
- package/dist/{platform-activity-row-ISMXR7NJ.js → platform-activity-row-227C764Z.js} +2 -2
- package/dist/{queue-surface-implementation-ULW7DDJA.js → queue-surface-implementation-H3NOBXU5.js} +5 -5
- package/dist/realtime.js +4 -4
- package/dist/{sandbox-files-QYSD4XCZ.js → sandbox-files-5FEOHUMD.js} +6 -6
- package/dist/session-app.js +155 -157
- package/dist/{session-realtime-JXRLPNUH.js → session-realtime-OHBMODNX.js} +3 -3
- package/dist/session-realtime.js +2 -2
- package/dist/session-ui.js +26 -26
- package/dist/session.js +6 -6
- package/dist/sites.js +2 -2
- package/dist/terminal.js +2 -2
- package/dist/this-computer.js +3 -3
- package/dist/timeline/connector-logo-index.d.ts +19 -0
- package/dist/{timeline-annotation-markers-OJYKHBEO.js → timeline-annotation-markers-NDHS7MCK.js} +2 -2
- package/dist/{timeline-annotation-selection-6OAZLXFU.js → timeline-annotation-selection-DRQSTJOV.js} +2 -2
- package/dist/{timeline-annotations-dialog-5M6DP5FX.js → timeline-annotations-dialog-G6J5ZJKN.js} +3 -3
- package/dist/timeline-model.d.ts +2 -0
- package/dist/timeline-model.js +9 -1
- package/dist/ui/list-row.js +1 -1
- package/dist/usage.js +2 -2
- package/dist/workbench.js +4 -4
- package/package.json +4 -4
- package/src/app/components/capabilities/native-connect-readiness.tsx +1 -0
- package/src/app/components/capabilities/perform-capability-action.test.ts +67 -0
- package/src/app/components/capabilities/perform-capability-action.tsx +28 -0
- package/src/app/components/command-menu/chat-switcher.tsx +25 -4
- package/src/app/components/rail/session-header.test.tsx +73 -2
- package/src/app/components/rail/session-header.tsx +20 -12
- package/src/app/components/rail/session-shell.tsx +10 -18
- package/src/app/components/session/subscription-account-indicator.test.ts +239 -0
- package/src/app/components/session/subscription-account-indicator.tsx +361 -0
- package/src/app/components/session/subscription-account-menu.tsx +21 -43
- package/src/app/components/session/subscription-account.test.ts +314 -0
- package/src/app/components/session/subscription-account.ts +354 -0
- package/src/app/lib/actions/actions-provider.tsx +11 -0
- package/src/app/lib/actions/actions.test.ts +59 -4
- package/src/app/lib/actions/chat-switcher.ts +73 -20
- package/src/app/lib/drive-connect-return.test.ts +183 -0
- package/src/app/lib/drive-connect-return.tsx +116 -0
- package/src/app/routes/session.tsx +12 -14
- package/src/app/routes/sessions-index.tsx +1 -0
- package/src/components/model-policy-picker-menu.tsx +25 -4
- package/src/components/model-policy-picker.tsx +2 -0
- package/src/components/session-mcp-capability-card.tsx +13 -4
- package/src/connection-service-presentation.ts +6 -1
- package/src/messages/en.ts +1 -1
- package/src/timeline/connector-logo-index.test.ts +46 -0
- package/src/timeline/connector-logo-index.ts +68 -0
- package/src/timeline-model.ts +6 -0
- package/src/ui/list-row.tsx +38 -10
- package/styles/compiled.css +13 -0
- package/dist/app/components/session/codex-account-indicator.d.ts +0 -9
- package/dist/app/components/session/model-account-indicator.d.ts +0 -10
- package/dist/app/components/session/model-account-indicator.js +0 -34
- package/dist/app/components/session/model-account-usage.d.ts +0 -8
- package/dist/app/components/session/model-account-usage.js +0 -8
- package/dist/chunk-2K27S6LK.js.map +0 -1
- package/dist/chunk-3SMJ2BIQ.js.map +0 -1
- package/dist/chunk-6PQBKMUL.js.map +0 -1
- package/dist/chunk-7H2D4VNU.js +0 -150
- package/dist/chunk-7H2D4VNU.js.map +0 -1
- package/dist/chunk-DNLXQUBX.js.map +0 -1
- package/dist/chunk-HCCSAECI.js +0 -132
- package/dist/chunk-HCCSAECI.js.map +0 -1
- package/dist/chunk-IWIMIRV3.js.map +0 -1
- package/dist/chunk-M77ZQE5T.js +0 -58
- package/dist/chunk-M77ZQE5T.js.map +0 -1
- package/dist/chunk-MM7OKOTE.js.map +0 -1
- package/dist/chunk-NPDL4W4Y.js.map +0 -1
- package/dist/chunk-NWSAF6P5.js.map +0 -1
- package/dist/chunk-OHG2UQ2O.js.map +0 -1
- package/dist/chunk-PQCFW2KT.js.map +0 -1
- package/dist/chunk-S6WJ6TUT.js.map +0 -1
- package/dist/chunk-ZWACUOU5.js.map +0 -1
- package/dist/session-realtime-JXRLPNUH.js.map +0 -1
- package/src/app/components/session/codex-account-indicator.tsx +0 -207
- package/src/app/components/session/model-account-indicator.tsx +0 -189
- package/src/app/components/session/model-account-usage.test.ts +0 -59
- package/src/app/components/session/model-account-usage.tsx +0 -89
- /package/dist/app/components/session/{codex-account-indicator.js.map → subscription-account-indicator.js.map} +0 -0
- /package/dist/app/{components/session/model-account-indicator.js.map → lib/drive-connect-return.js.map} +0 -0
- /package/dist/{app/components/session/model-account-usage.js.map → browser-viewer-VKIAULG7.js.map} +0 -0
- /package/dist/{browser-viewer-YQC6BFMS.js.map → chat-interactive-block-JGYSW4KB.js.map} +0 -0
- /package/dist/{chunk-WN2MIB4Q.js.map → chunk-22V2QCEM.js.map} +0 -0
- /package/dist/{chunk-SJPAKWWP.js.map → chunk-2BISI664.js.map} +0 -0
- /package/dist/{chunk-O5UOCMH4.js.map → chunk-2LPJVEWY.js.map} +0 -0
- /package/dist/{chunk-JI6WPLZB.js.map → chunk-2SBCOGQN.js.map} +0 -0
- /package/dist/{chunk-6JF7C3U3.js.map → chunk-2WERWWSS.js.map} +0 -0
- /package/dist/{chunk-4XKT4ENZ.js.map → chunk-2Y3QL3DA.js.map} +0 -0
- /package/dist/{chunk-KVMFT6FN.js.map → chunk-3FL3F4WF.js.map} +0 -0
- /package/dist/{chunk-4VJOZJDV.js.map → chunk-3JPQAIYJ.js.map} +0 -0
- /package/dist/{chunk-27EORKJ4.js.map → chunk-3N4LNBJF.js.map} +0 -0
- /package/dist/{chunk-7JZSFJHB.js.map → chunk-3OJU3RUR.js.map} +0 -0
- /package/dist/{chunk-NV5OYV3G.js.map → chunk-3U6K36QA.js.map} +0 -0
- /package/dist/{chunk-MDRLP5DO.js.map → chunk-3W7ROHN4.js.map} +0 -0
- /package/dist/{chunk-3MQM4ZOC.js.map → chunk-3Y6ZR2VN.js.map} +0 -0
- /package/dist/{chunk-HXZIX7MR.js.map → chunk-47AB65IO.js.map} +0 -0
- /package/dist/{chunk-DNYD7AUG.js.map → chunk-4BOLIZ7Y.js.map} +0 -0
- /package/dist/{chunk-4XO346BW.js.map → chunk-4FBJFQFU.js.map} +0 -0
- /package/dist/{chunk-BWKZEW6K.js.map → chunk-4T3E56NT.js.map} +0 -0
- /package/dist/{chunk-4PC7LIQK.js.map → chunk-4ZMUWRFF.js.map} +0 -0
- /package/dist/{chunk-TM2ZLY3Q.js.map → chunk-5OLFYSVG.js.map} +0 -0
- /package/dist/{chunk-D4QOZXPM.js.map → chunk-5WBRM7V4.js.map} +0 -0
- /package/dist/{chunk-GXK4CUAB.js.map → chunk-5WQKTT5Z.js.map} +0 -0
- /package/dist/{chunk-6N7W3TOV.js.map → chunk-63BPMTBM.js.map} +0 -0
- /package/dist/{chunk-R5YZ3ROM.js.map → chunk-63PQKTTT.js.map} +0 -0
- /package/dist/{chunk-WLZVXCPZ.js.map → chunk-6GO6WN22.js.map} +0 -0
- /package/dist/{chunk-XDCZBOEY.js.map → chunk-6LGBGPBU.js.map} +0 -0
- /package/dist/{chunk-FMATVQFW.js.map → chunk-6XXMG5YP.js.map} +0 -0
- /package/dist/{chunk-M5E3CKSE.js.map → chunk-7QWWE5XL.js.map} +0 -0
- /package/dist/{chunk-RABKQFTA.js.map → chunk-A2HCAMRH.js.map} +0 -0
- /package/dist/{chunk-6K3WNTRI.js.map → chunk-AODISQO6.js.map} +0 -0
- /package/dist/{chunk-C6JL6PBL.js.map → chunk-AQDRH6VF.js.map} +0 -0
- /package/dist/{chunk-72XEFLMD.js.map → chunk-ASWINLSW.js.map} +0 -0
- /package/dist/{chunk-ZPZYYSHW.js.map → chunk-BVMDON5T.js.map} +0 -0
- /package/dist/{chunk-EURDMOXZ.js.map → chunk-BYJZUCOQ.js.map} +0 -0
- /package/dist/{chunk-BQWUXC55.js.map → chunk-CAVAVT5S.js.map} +0 -0
- /package/dist/{chunk-BPD4IJBG.js.map → chunk-CG6CJMIS.js.map} +0 -0
- /package/dist/{chunk-B254JG72.js.map → chunk-CQX24PT7.js.map} +0 -0
- /package/dist/{chunk-HJTTDLF6.js.map → chunk-CY3NO4JN.js.map} +0 -0
- /package/dist/{chunk-OLUG4IFF.js.map → chunk-D2RLPRSG.js.map} +0 -0
- /package/dist/{chunk-74NIHMAT.js.map → chunk-D653JH6D.js.map} +0 -0
- /package/dist/{chunk-2LUO22FR.js.map → chunk-DAI5CTQF.js.map} +0 -0
- /package/dist/{chunk-HTKVYEVB.js.map → chunk-DBM4ZXDN.js.map} +0 -0
- /package/dist/{chunk-MB2DTUEG.js.map → chunk-DNYKLU3K.js.map} +0 -0
- /package/dist/{chunk-26P7B46A.js.map → chunk-DXYARXK3.js.map} +0 -0
- /package/dist/{chunk-JQKURO3S.js.map → chunk-E4MQRQ6Z.js.map} +0 -0
- /package/dist/{chunk-KW53DBY7.js.map → chunk-EBW2E32G.js.map} +0 -0
- /package/dist/{chunk-O73DRA77.js.map → chunk-ENKBO7FC.js.map} +0 -0
- /package/dist/{chunk-FVCLVASD.js.map → chunk-FI3KRVOF.js.map} +0 -0
- /package/dist/{chunk-WWM7WVD2.js.map → chunk-GABFKHQE.js.map} +0 -0
- /package/dist/{chunk-32HA7DXJ.js.map → chunk-GNBRB3DH.js.map} +0 -0
- /package/dist/{chunk-CEQUNJJY.js.map → chunk-HPALK6LD.js.map} +0 -0
- /package/dist/{chunk-LR7U3HCD.js.map → chunk-HPSATFLQ.js.map} +0 -0
- /package/dist/{chunk-O4AWXTZQ.js.map → chunk-HUYLQW75.js.map} +0 -0
- /package/dist/{chunk-ZZUKJ5HQ.js.map → chunk-IG2ERMSB.js.map} +0 -0
- /package/dist/{chunk-2SZ3KC5S.js.map → chunk-IMKIIS4Y.js.map} +0 -0
- /package/dist/{chunk-CA64OZLZ.js.map → chunk-IRXPXDY5.js.map} +0 -0
- /package/dist/{chunk-I57HZMMA.js.map → chunk-IXIE3H43.js.map} +0 -0
- /package/dist/{chunk-OWJD3V4V.js.map → chunk-J3YQ3554.js.map} +0 -0
- /package/dist/{chunk-BCFHMBMK.js.map → chunk-J5HZBHU4.js.map} +0 -0
- /package/dist/{chunk-UHMMRQGU.js.map → chunk-KD7GNHOP.js.map} +0 -0
- /package/dist/{chunk-X7Z4B5GK.js.map → chunk-KPL7EXS6.js.map} +0 -0
- /package/dist/{chunk-GTR2WUBA.js.map → chunk-KX6M5CJI.js.map} +0 -0
- /package/dist/{chunk-CYO5HL4C.js.map → chunk-KYL2BPS2.js.map} +0 -0
- /package/dist/{chunk-QLDMF7MH.js.map → chunk-LC5HE7PZ.js.map} +0 -0
- /package/dist/{chunk-4ICPJZAB.js.map → chunk-LMYSYG6U.js.map} +0 -0
- /package/dist/{chunk-3ZZOE4SN.js.map → chunk-LOCDYMD6.js.map} +0 -0
- /package/dist/{chunk-DNWBLT4U.js.map → chunk-MASBMJ2M.js.map} +0 -0
- /package/dist/{chunk-NZMQDUOD.js.map → chunk-MU6HYDNF.js.map} +0 -0
- /package/dist/{chunk-GMVKCEBG.js.map → chunk-MY6QEDZ2.js.map} +0 -0
- /package/dist/{chunk-SK57RWSA.js.map → chunk-MZGKQ5WV.js.map} +0 -0
- /package/dist/{chunk-HSQRYJ4P.js.map → chunk-N52SFH2K.js.map} +0 -0
- /package/dist/{chunk-MY6VZVCP.js.map → chunk-OAJX5CEL.js.map} +0 -0
- /package/dist/{chunk-FH75NNLB.js.map → chunk-OZ5NAXCP.js.map} +0 -0
- /package/dist/{chunk-PEGNFZ3F.js.map → chunk-P5S777YI.js.map} +0 -0
- /package/dist/{chunk-LY6727IF.js.map → chunk-PPSVFNEA.js.map} +0 -0
- /package/dist/{chunk-K4FDZVMQ.js.map → chunk-PR42VIVY.js.map} +0 -0
- /package/dist/{chunk-I74J2UZ2.js.map → chunk-PWMZCW4H.js.map} +0 -0
- /package/dist/{chunk-6YDXUE5H.js.map → chunk-PYA2O3WS.js.map} +0 -0
- /package/dist/{chunk-GUIZDI5T.js.map → chunk-Q2PA4KZS.js.map} +0 -0
- /package/dist/{chunk-JJ7VMIEQ.js.map → chunk-QCANSTLU.js.map} +0 -0
- /package/dist/{chunk-DZH2HTTB.js.map → chunk-R27GW5WV.js.map} +0 -0
- /package/dist/{chunk-DAQG3C4W.js.map → chunk-R6JY22SG.js.map} +0 -0
- /package/dist/{chunk-7OIBLMDP.js.map → chunk-RAQISW42.js.map} +0 -0
- /package/dist/{chunk-CPKD2YGK.js.map → chunk-RNU5CUPI.js.map} +0 -0
- /package/dist/{chunk-467VRP4E.js.map → chunk-RO5YZQHZ.js.map} +0 -0
- /package/dist/{chunk-SSZROOOI.js.map → chunk-ROLXYGT5.js.map} +0 -0
- /package/dist/{chunk-6VITVQ23.js.map → chunk-SHJ5SQOW.js.map} +0 -0
- /package/dist/{chunk-F4B2YYCN.js.map → chunk-TAWFXRXB.js.map} +0 -0
- /package/dist/{chunk-G3FU2IF7.js.map → chunk-TB7UW5BB.js.map} +0 -0
- /package/dist/{chunk-NF6Q4XTN.js.map → chunk-TQF2I5SY.js.map} +0 -0
- /package/dist/{chunk-M7A226EQ.js.map → chunk-UL44R3W2.js.map} +0 -0
- /package/dist/{chunk-GTR5NLVP.js.map → chunk-VCRQPLKS.js.map} +0 -0
- /package/dist/{chunk-MHIYYHCL.js.map → chunk-VJU3ET7N.js.map} +0 -0
- /package/dist/{chunk-RXMIXKB3.js.map → chunk-WGJUARF3.js.map} +0 -0
- /package/dist/{chunk-LG67ZNRU.js.map → chunk-WK2ZCTUF.js.map} +0 -0
- /package/dist/{chunk-XGE75VPK.js.map → chunk-WNARM3LY.js.map} +0 -0
- /package/dist/{chunk-RNBH5TSM.js.map → chunk-WQ2RTQYO.js.map} +0 -0
- /package/dist/{chunk-W57QFLQD.js.map → chunk-X6JIGNLI.js.map} +0 -0
- /package/dist/{chunk-CKA4SJRK.js.map → chunk-XIQDCQX7.js.map} +0 -0
- /package/dist/{chunk-AJ7PY4FJ.js.map → chunk-Y3GCG6CA.js.map} +0 -0
- /package/dist/{chunk-ZRB4M3GG.js.map → chunk-YC5KH7ZB.js.map} +0 -0
- /package/dist/{chunk-4RY64KQY.js.map → chunk-YJUKLLNP.js.map} +0 -0
- /package/dist/{chunk-24POWVUY.js.map → chunk-ZDJNRRVS.js.map} +0 -0
- /package/dist/{chunk-M7YEZR6X.js.map → chunk-ZITMDA4C.js.map} +0 -0
- /package/dist/{chat-interactive-block-Z22YHDRU.js.map → computer-viewer-6CRLWQHP.js.map} +0 -0
- /package/dist/{computer-viewer-BWVNDFTO.js.map → embedded-new-voice-KILV3RYM.js.map} +0 -0
- /package/dist/{embedded-new-voice-GBXSZ3TO.js.map → embedded-voice-GHDRLCFX.js.map} +0 -0
- /package/dist/{fleet-decision-row-35S3GAUN.js.map → fleet-decision-row-DQXRRBT7.js.map} +0 -0
- /package/dist/{embedded-voice-MGI7EK7C.js.map → model-policy-picker-menu-5ALKUJMR.js.map} +0 -0
- /package/dist/{platform-activity-row-ISMXR7NJ.js.map → platform-activity-row-227C764Z.js.map} +0 -0
- /package/dist/{queue-surface-implementation-ULW7DDJA.js.map → queue-surface-implementation-H3NOBXU5.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-KP53N6UJ.js.map → sandbox-files-5FEOHUMD.js.map} +0 -0
- /package/dist/{sandbox-files-QYSD4XCZ.js.map → session-realtime-OHBMODNX.js.map} +0 -0
- /package/dist/{timeline-annotation-markers-OJYKHBEO.js.map → timeline-annotation-markers-NDHS7MCK.js.map} +0 -0
- /package/dist/{timeline-annotation-selection-6OAZLXFU.js.map → timeline-annotation-selection-DRQSTJOV.js.map} +0 -0
- /package/dist/{timeline-annotations-dialog-5M6DP5FX.js.map → timeline-annotations-dialog-G6J5ZJKN.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/app/components/capabilities/native-connect-readiness.tsx"],"sourcesContent":["import type { ConnectProvider } from \"@opengeni/connect\";\nimport type { CapabilityCatalogItem, ConnectionMetadata, SocialConnection } from \"../../types\";\nimport type { IntegrationViewModel } from \"./integration-view-model\";\n\nexport type NativeConnectCatalog =\n | { status: \"loading\" | \"error\"; providers: [] }\n | { status: \"ready\"; providers: ConnectProvider[] };\n\nexport function nativeProviderAvailable(\n catalog: NativeConnectCatalog,\n providerId: string,\n): boolean {\n return (\n catalog.status === \"ready\" &&\n catalog.providers.some(\n (provider) => provider.id === providerId && provider.readiness === \"available\",\n )\n );\n}\n\n/** Only these exact built-in endpoints use native provider setup prerequisites.\n * A similarly named catalog entry or a custom MCP server keeps its own flow. */\nexport function nativeCatalogProviderId(\n item: Pick<CapabilityCatalogItem, \"kind\" | \"mcpUrl\" | \"endpointUrl\" | \"surfaceType\" | \"metadata\">,\n): string | null {\n if (item.surfaceType === \"first_party_fiken\") return \"fiken-token\";\n if (\n item.surfaceType === \"first_party_social\" ||\n (item.surfaceType === \"provider_integration\" && item.metadata.providerAdapter === \"social\")\n ) {\n if (item.metadata.provider === \"x\" || item.metadata.provider === \"reddit\")\n return item.metadata.provider;\n }\n if (item.kind !== \"mcp\") return null;\n const url = item.mcpUrl ?? item.endpointUrl;\n if (url === \"https://gmailmcp.googleapis.com/mcp/v1\") return \"gmail\";\n if (url === \"https://mcp.slack.com/mcp\") return \"slack-personal\";\n return null;\n}\n\nexport function nativeSetupNotice(\n catalog: NativeConnectCatalog,\n providerId: string,\n retry: () => void,\n): IntegrationViewModel[\"notice\"] {\n if (nativeProviderAvailable(catalog, providerId)) return undefined;\n if (catalog.status === \"loading\")\n return {\n tone: \"muted\",\n title: \"Checking connection availability…\",\n description: \"Setup will be available after this check finishes.\",\n };\n if (catalog.status === \"error\")\n return {\n tone: \"failed\",\n title: \"Couldn't check connection availability\",\n description: \"Try again to see whether you can connect here.\",\n action: { label: \"Retry\", onClick: retry },\n };\n const provider = catalog.providers.find((candidate) => candidate.id === providerId);\n return {\n tone: \"muted\",\n title: \"This connection isn't available here\",\n description:\n provider?.reason ??\n \"This deployment or your current access doesn't support setting up this connection.\",\n };\n}\n\n/** The stock Figma listing only accepts approved MCP clients. Preserve\n * configured/manual servers and already-enabled connection management. */\nfunction restrictedStockFigma(item: CapabilityCatalogItem): boolean {\n return (\n item.kind === \"mcp\" &&\n item.source === \"registry\" &&\n item.mcpUrl === \"https://mcp.figma.com/mcp\" &&\n !item.enabled\n );\n}\n\n/** The provider refuses OAuth self-registration and this deployment has no\n * operator-registered client for it, so Connect would fail on the first click.\n * Server-projected from `data/catalog/oauth-client-requirements.json`. */\nexport function operatorOAuthClientMissing(\n item: Pick<CapabilityCatalogItem, \"runtime\" | \"enabled\">,\n): boolean {\n return item.runtime?.operatorOAuthClient?.configured === false && !item.enabled;\n}\n\nexport type NativeConnectionFacts = {\n connections: ConnectionMetadata[] | null;\n socialConnections: SocialConnection[];\n};\n\n/** A credential can be saved before MCP installation/probing completes. The\n * visible account facts, including disabled history, must keep management\n * reachable without pretending the catalog entry was enabled. */\nfunction hasCatalogAccount(item: CapabilityCatalogItem, facts?: NativeConnectionFacts): boolean {\n if (item.enabled) return true;\n if (!facts) return false;\n const providerId = nativeCatalogProviderId(item);\n if (providerId === \"x\" || providerId === \"reddit\") {\n return facts.socialConnections.some((connection) => connection.provider === providerId);\n }\n if (providerId === \"fiken-token\") {\n return (facts.connections ?? []).some(\n (connection) =>\n connection.subjectId === null &&\n (connection.kind === \"oauth2\" || connection.kind === \"api_key\") &&\n connection.providerDomain === \"fiken.no\" &&\n connection.metadata.credentialRole === \"fiken_api_token\",\n );\n }\n const url = item.mcpUrl ?? item.endpointUrl;\n return (facts.connections ?? []).some(\n (connection) =>\n connection.id === item.connectionRef?.connectionId ||\n (url !== null && url !== undefined && connection.metadata.mcpUrl === url),\n );\n}\n\nexport function nativeCatalogItemNotice(\n item: CapabilityCatalogItem,\n catalog: NativeConnectCatalog,\n retry: () => void,\n facts?: NativeConnectionFacts,\n): IntegrationViewModel[\"notice\"] {\n if (hasCatalogAccount(item, facts)) return undefined;\n if (restrictedStockFigma(item))\n return {\n tone: \"muted\",\n title: \"Figma requires an approved client\",\n description:\n \"Figma's hosted MCP server only accepts approved clients. Opengeni isn't currently listed, so this catalog connection is unavailable.\",\n };\n const providerId = nativeCatalogProviderId(item);\n if (!providerId || item.enabled) return undefined;\n if (providerId === \"fiken-token\" && nativeProviderAvailable(catalog, \"fiken-oauth\"))\n return undefined;\n return nativeSetupNotice(catalog, providerId, retry);\n}\n\nexport function nativeCatalogItemVisible(\n item: CapabilityCatalogItem,\n catalog: NativeConnectCatalog,\n facts?: NativeConnectionFacts,\n): boolean {\n if (hasCatalogAccount(item, facts)) return true;\n // An unavailable metadata read cannot prove that a previous account vanished.\n if (\n facts?.connections === null &&\n (nativeCatalogProviderId(item) ||\n restrictedStockFigma(item) ||\n operatorOAuthClientMissing(item))\n )\n return true;\n if (restrictedStockFigma(item) || operatorOAuthClientMissing(item)) return false;\n const providerId = nativeCatalogProviderId(item);\n return (\n !providerId ||\n item.enabled ||\n nativeProviderAvailable(catalog, providerId) ||\n (providerId === \"fiken-token\" && nativeProviderAvailable(catalog, \"fiken-oauth\"))\n );\n}\n\n/** Connection facts alone can describe an unconfigured server. They are not\n * evidence of an existing account or installation. */\nfunction hasManagedConnection(model: IntegrationViewModel): boolean {\n return (\n model.access !== undefined ||\n model.footer.kind === \"connected\" ||\n model.footer.kind === \"repair\" ||\n [\"Connected\", \"Needs attention\", \"Retired\"].includes(model.chip.label)\n );\n}\n\nfunction primaryProviderId(modelId: string, slackBotMode: boolean): string | null {\n switch (modelId) {\n case \"slack\":\n return slackBotMode ? \"slack-bot\" : \"slack-personal\";\n case \"github\":\n return \"github-app\";\n case \"google-drive\":\n return \"google-drive-knowledge\";\n case \"outlook-mail\":\n return \"microsoft-outlook-mail\";\n case \"outlook-calendar\":\n return \"microsoft-outlook-calendar\";\n case \"outlook-contacts\":\n return \"microsoft-outlook-contacts\";\n case \"onedrive\":\n return \"microsoft-onedrive\";\n // Historical native Atlassian is absent from the Connect catalog but still\n // owns a disconnect surface. Unknown/custom providers keep their own flow.\n default:\n return null;\n }\n}\n\nexport function nativeIntegrationVisible(\n model: IntegrationViewModel,\n catalog: NativeConnectCatalog,\n slackBotMode: boolean,\n): boolean {\n const providerId = primaryProviderId(model.id, slackBotMode);\n return (\n !providerId ||\n hasManagedConnection(model) ||\n model.chip.label === \"Loading\" ||\n nativeProviderAvailable(catalog, providerId) ||\n (model.id === \"github\" && nativeProviderAvailable(catalog, \"github-personal\"))\n );\n}\n\n/** Guard setup separately from management: an existing account may still be\n * removed or repaired when starting a new provider connection is unavailable. */\nexport function nativeIntegrationModel(\n model: IntegrationViewModel,\n catalog: NativeConnectCatalog,\n slackBotMode: boolean,\n retry: () => void,\n): IntegrationViewModel {\n const providerId = primaryProviderId(model.id, slackBotMode);\n if (!providerId) return model;\n const managed = hasManagedConnection(model);\n const available = nativeProviderAvailable(catalog, providerId);\n const options = model.options.filter((option) => {\n if (\n model.id === \"github\" &&\n option.id === \"github-personal-identity\" &&\n option.kind === \"link\" &&\n option.action.label === \"Connect\"\n ) {\n return nativeProviderAvailable(catalog, \"github-personal\");\n }\n if (\n model.id === \"google-drive\" &&\n option.id === \"google-drive-publish\" &&\n option.kind === \"toggle\" &&\n !option.checked\n ) {\n return nativeProviderAvailable(catalog, \"google-drive-publish\");\n }\n return true;\n });\n const accountProviderId = model.id === \"google-drive\" ? \"google-drive\" : providerId;\n const access =\n model.access?.editLabel === \"Add account\" &&\n !nativeProviderAvailable(catalog, accountProviderId)\n ? { ...model.access, editLabel: undefined, onEdit: undefined }\n : model.access;\n let footer = model.footer;\n let blockedSetup = false;\n if (!available && footer.kind === \"setup\") {\n footer = { kind: \"locked\", message: \"\" };\n blockedSetup = true;\n } else if (\n !available &&\n model.id === \"github\" &&\n footer.kind === \"actions\" &&\n footer.primary &&\n (!model.access || footer.primary.label === \"Connect another account\")\n ) {\n // Personal GitHub can be connected before the workspace App is installed.\n footer = footer.secondary ? { ...footer, primary: undefined } : { kind: \"locked\", message: \"\" };\n blockedSetup = true;\n }\n const blockedFresh = !available && !managed;\n return {\n ...model,\n options,\n ...(access ? { access } : {}),\n footer,\n ...(blockedFresh && model.chip.label !== \"Loading\"\n ? {\n chip: { label: catalog.status === \"loading\" ? \"Loading\" : \"Unavailable\", tone: \"plain\" },\n }\n : {}),\n ...(blockedFresh || blockedSetup\n ? { notice: nativeSetupNotice(catalog, providerId, retry) }\n : {}),\n };\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/app/components/capabilities/native-connect-readiness.tsx"],"sourcesContent":["import type { ConnectProvider } from \"@opengeni/connect\";\nimport type { CapabilityCatalogItem, ConnectionMetadata, SocialConnection } from \"../../types\";\nimport type { IntegrationViewModel } from \"./integration-view-model\";\n\nexport type NativeConnectCatalog =\n | { status: \"loading\" | \"error\"; providers: [] }\n | { status: \"ready\"; providers: ConnectProvider[] };\n\nexport function nativeProviderAvailable(\n catalog: NativeConnectCatalog,\n providerId: string,\n): boolean {\n return (\n catalog.status === \"ready\" &&\n catalog.providers.some(\n (provider) => provider.id === providerId && provider.readiness === \"available\",\n )\n );\n}\n\n/** Only these exact built-in endpoints use native provider setup prerequisites.\n * A similarly named catalog entry or a custom MCP server keeps its own flow. */\nexport function nativeCatalogProviderId(\n item: Pick<CapabilityCatalogItem, \"kind\" | \"mcpUrl\" | \"endpointUrl\" | \"surfaceType\" | \"metadata\">,\n): string | null {\n if (item.surfaceType === \"first_party_fiken\") return \"fiken-token\";\n if (\n item.surfaceType === \"first_party_social\" ||\n (item.surfaceType === \"provider_integration\" && item.metadata.providerAdapter === \"social\")\n ) {\n if (item.metadata.provider === \"x\" || item.metadata.provider === \"reddit\")\n return item.metadata.provider;\n }\n if (item.kind !== \"mcp\") return null;\n const url = item.mcpUrl ?? item.endpointUrl;\n if (url === \"https://gmailmcp.googleapis.com/mcp/v1\") return \"gmail\";\n if (url === \"https://drivemcp.googleapis.com/mcp/v1\") return \"google-drive\";\n if (url === \"https://mcp.slack.com/mcp\") return \"slack-personal\";\n return null;\n}\n\nexport function nativeSetupNotice(\n catalog: NativeConnectCatalog,\n providerId: string,\n retry: () => void,\n): IntegrationViewModel[\"notice\"] {\n if (nativeProviderAvailable(catalog, providerId)) return undefined;\n if (catalog.status === \"loading\")\n return {\n tone: \"muted\",\n title: \"Checking connection availability…\",\n description: \"Setup will be available after this check finishes.\",\n };\n if (catalog.status === \"error\")\n return {\n tone: \"failed\",\n title: \"Couldn't check connection availability\",\n description: \"Try again to see whether you can connect here.\",\n action: { label: \"Retry\", onClick: retry },\n };\n const provider = catalog.providers.find((candidate) => candidate.id === providerId);\n return {\n tone: \"muted\",\n title: \"This connection isn't available here\",\n description:\n provider?.reason ??\n \"This deployment or your current access doesn't support setting up this connection.\",\n };\n}\n\n/** The stock Figma listing only accepts approved MCP clients. Preserve\n * configured/manual servers and already-enabled connection management. */\nfunction restrictedStockFigma(item: CapabilityCatalogItem): boolean {\n return (\n item.kind === \"mcp\" &&\n item.source === \"registry\" &&\n item.mcpUrl === \"https://mcp.figma.com/mcp\" &&\n !item.enabled\n );\n}\n\n/** The provider refuses OAuth self-registration and this deployment has no\n * operator-registered client for it, so Connect would fail on the first click.\n * Server-projected from `data/catalog/oauth-client-requirements.json`. */\nexport function operatorOAuthClientMissing(\n item: Pick<CapabilityCatalogItem, \"runtime\" | \"enabled\">,\n): boolean {\n return item.runtime?.operatorOAuthClient?.configured === false && !item.enabled;\n}\n\nexport type NativeConnectionFacts = {\n connections: ConnectionMetadata[] | null;\n socialConnections: SocialConnection[];\n};\n\n/** A credential can be saved before MCP installation/probing completes. The\n * visible account facts, including disabled history, must keep management\n * reachable without pretending the catalog entry was enabled. */\nfunction hasCatalogAccount(item: CapabilityCatalogItem, facts?: NativeConnectionFacts): boolean {\n if (item.enabled) return true;\n if (!facts) return false;\n const providerId = nativeCatalogProviderId(item);\n if (providerId === \"x\" || providerId === \"reddit\") {\n return facts.socialConnections.some((connection) => connection.provider === providerId);\n }\n if (providerId === \"fiken-token\") {\n return (facts.connections ?? []).some(\n (connection) =>\n connection.subjectId === null &&\n (connection.kind === \"oauth2\" || connection.kind === \"api_key\") &&\n connection.providerDomain === \"fiken.no\" &&\n connection.metadata.credentialRole === \"fiken_api_token\",\n );\n }\n const url = item.mcpUrl ?? item.endpointUrl;\n return (facts.connections ?? []).some(\n (connection) =>\n connection.id === item.connectionRef?.connectionId ||\n (url !== null && url !== undefined && connection.metadata.mcpUrl === url),\n );\n}\n\nexport function nativeCatalogItemNotice(\n item: CapabilityCatalogItem,\n catalog: NativeConnectCatalog,\n retry: () => void,\n facts?: NativeConnectionFacts,\n): IntegrationViewModel[\"notice\"] {\n if (hasCatalogAccount(item, facts)) return undefined;\n if (restrictedStockFigma(item))\n return {\n tone: \"muted\",\n title: \"Figma requires an approved client\",\n description:\n \"Figma's hosted MCP server only accepts approved clients. Opengeni isn't currently listed, so this catalog connection is unavailable.\",\n };\n const providerId = nativeCatalogProviderId(item);\n if (!providerId || item.enabled) return undefined;\n if (providerId === \"fiken-token\" && nativeProviderAvailable(catalog, \"fiken-oauth\"))\n return undefined;\n return nativeSetupNotice(catalog, providerId, retry);\n}\n\nexport function nativeCatalogItemVisible(\n item: CapabilityCatalogItem,\n catalog: NativeConnectCatalog,\n facts?: NativeConnectionFacts,\n): boolean {\n if (hasCatalogAccount(item, facts)) return true;\n // An unavailable metadata read cannot prove that a previous account vanished.\n if (\n facts?.connections === null &&\n (nativeCatalogProviderId(item) ||\n restrictedStockFigma(item) ||\n operatorOAuthClientMissing(item))\n )\n return true;\n if (restrictedStockFigma(item) || operatorOAuthClientMissing(item)) return false;\n const providerId = nativeCatalogProviderId(item);\n return (\n !providerId ||\n item.enabled ||\n nativeProviderAvailable(catalog, providerId) ||\n (providerId === \"fiken-token\" && nativeProviderAvailable(catalog, \"fiken-oauth\"))\n );\n}\n\n/** Connection facts alone can describe an unconfigured server. They are not\n * evidence of an existing account or installation. */\nfunction hasManagedConnection(model: IntegrationViewModel): boolean {\n return (\n model.access !== undefined ||\n model.footer.kind === \"connected\" ||\n model.footer.kind === \"repair\" ||\n [\"Connected\", \"Needs attention\", \"Retired\"].includes(model.chip.label)\n );\n}\n\nfunction primaryProviderId(modelId: string, slackBotMode: boolean): string | null {\n switch (modelId) {\n case \"slack\":\n return slackBotMode ? \"slack-bot\" : \"slack-personal\";\n case \"github\":\n return \"github-app\";\n case \"google-drive\":\n return \"google-drive-knowledge\";\n case \"outlook-mail\":\n return \"microsoft-outlook-mail\";\n case \"outlook-calendar\":\n return \"microsoft-outlook-calendar\";\n case \"outlook-contacts\":\n return \"microsoft-outlook-contacts\";\n case \"onedrive\":\n return \"microsoft-onedrive\";\n // Historical native Atlassian is absent from the Connect catalog but still\n // owns a disconnect surface. Unknown/custom providers keep their own flow.\n default:\n return null;\n }\n}\n\nexport function nativeIntegrationVisible(\n model: IntegrationViewModel,\n catalog: NativeConnectCatalog,\n slackBotMode: boolean,\n): boolean {\n const providerId = primaryProviderId(model.id, slackBotMode);\n return (\n !providerId ||\n hasManagedConnection(model) ||\n model.chip.label === \"Loading\" ||\n nativeProviderAvailable(catalog, providerId) ||\n (model.id === \"github\" && nativeProviderAvailable(catalog, \"github-personal\"))\n );\n}\n\n/** Guard setup separately from management: an existing account may still be\n * removed or repaired when starting a new provider connection is unavailable. */\nexport function nativeIntegrationModel(\n model: IntegrationViewModel,\n catalog: NativeConnectCatalog,\n slackBotMode: boolean,\n retry: () => void,\n): IntegrationViewModel {\n const providerId = primaryProviderId(model.id, slackBotMode);\n if (!providerId) return model;\n const managed = hasManagedConnection(model);\n const available = nativeProviderAvailable(catalog, providerId);\n const options = model.options.filter((option) => {\n if (\n model.id === \"github\" &&\n option.id === \"github-personal-identity\" &&\n option.kind === \"link\" &&\n option.action.label === \"Connect\"\n ) {\n return nativeProviderAvailable(catalog, \"github-personal\");\n }\n if (\n model.id === \"google-drive\" &&\n option.id === \"google-drive-publish\" &&\n option.kind === \"toggle\" &&\n !option.checked\n ) {\n return nativeProviderAvailable(catalog, \"google-drive-publish\");\n }\n return true;\n });\n const accountProviderId = model.id === \"google-drive\" ? \"google-drive\" : providerId;\n const access =\n model.access?.editLabel === \"Add account\" &&\n !nativeProviderAvailable(catalog, accountProviderId)\n ? { ...model.access, editLabel: undefined, onEdit: undefined }\n : model.access;\n let footer = model.footer;\n let blockedSetup = false;\n if (!available && footer.kind === \"setup\") {\n footer = { kind: \"locked\", message: \"\" };\n blockedSetup = true;\n } else if (\n !available &&\n model.id === \"github\" &&\n footer.kind === \"actions\" &&\n footer.primary &&\n (!model.access || footer.primary.label === \"Connect another account\")\n ) {\n // Personal GitHub can be connected before the workspace App is installed.\n footer = footer.secondary ? { ...footer, primary: undefined } : { kind: \"locked\", message: \"\" };\n blockedSetup = true;\n }\n const blockedFresh = !available && !managed;\n return {\n ...model,\n options,\n ...(access ? { access } : {}),\n footer,\n ...(blockedFresh && model.chip.label !== \"Loading\"\n ? {\n chip: { label: catalog.status === \"loading\" ? \"Loading\" : \"Unavailable\", tone: \"plain\" },\n }\n : {}),\n ...(blockedFresh || blockedSetup\n ? { notice: nativeSetupNotice(catalog, providerId, retry) }\n : {}),\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -30,12 +30,12 @@ import {
|
|
|
30
30
|
ConnectSetup,
|
|
31
31
|
ConnectionLogo,
|
|
32
32
|
isOwnerApprovalPending
|
|
33
|
-
} from "../../../chunk-
|
|
33
|
+
} from "../../../chunk-OSJTLQXA.js";
|
|
34
34
|
import "../../../chunk-M357MHH3.js";
|
|
35
|
-
import "../../../chunk-
|
|
35
|
+
import "../../../chunk-6IIA63VD.js";
|
|
36
36
|
import "../../../chunk-CUUJROYT.js";
|
|
37
|
-
import "../../../chunk-
|
|
38
|
-
import "../../../chunk-
|
|
37
|
+
import "../../../chunk-KPL7EXS6.js";
|
|
38
|
+
import "../../../chunk-DXYARXK3.js";
|
|
39
39
|
import "../../../chunk-OYQQJL3J.js";
|
|
40
40
|
import "../../../chunk-RZLBICR5.js";
|
|
41
41
|
import "../../../chunk-H3LIIAGE.js";
|
|
@@ -44,13 +44,13 @@ import "../../../chunk-DNJ23AWQ.js";
|
|
|
44
44
|
import "../../../chunk-OB3YGXHQ.js";
|
|
45
45
|
import "../../../chunk-UNJPZGNK.js";
|
|
46
46
|
import "../../../chunk-PEHTX3V7.js";
|
|
47
|
-
import "../../../chunk-
|
|
47
|
+
import "../../../chunk-MASBMJ2M.js";
|
|
48
48
|
import "../../../chunk-J3BHDXQQ.js";
|
|
49
49
|
import "../../../chunk-XEA5BCMA.js";
|
|
50
50
|
import "../../../chunk-SJGAHTY5.js";
|
|
51
51
|
import "../../../chunk-4NHJ6EXL.js";
|
|
52
52
|
import "../../../chunk-TXS65BB2.js";
|
|
53
|
-
import "../../../chunk-
|
|
53
|
+
import "../../../chunk-ZEVJGMNB.js";
|
|
54
54
|
|
|
55
55
|
// src/app/components/capabilities/native-connect-setup.tsx
|
|
56
56
|
import { useEffect, useState, useRef } from "react";
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
performCapabilityAction
|
|
4
|
-
} from "../../../chunk-
|
|
4
|
+
} from "../../../chunk-WJDH7CH5.js";
|
|
5
|
+
import "../../../chunk-X5XEYQ4B.js";
|
|
5
6
|
import "../../../chunk-46I7MMAL.js";
|
|
6
7
|
import "../../../chunk-NRREC7JK.js";
|
|
7
8
|
import "../../../chunk-HUKUDAIP.js";
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
PreparedMcpSetupCard
|
|
4
|
-
} from "../../../chunk-
|
|
4
|
+
} from "../../../chunk-3U6K36QA.js";
|
|
5
5
|
import "../../../chunk-AF53CDFM.js";
|
|
6
|
-
import "../../../chunk-
|
|
6
|
+
import "../../../chunk-CG6CJMIS.js";
|
|
7
7
|
import "../../../chunk-VYKW6TB2.js";
|
|
8
8
|
import "../../../chunk-IZUAIHR4.js";
|
|
9
9
|
import "../../../chunk-A3KMTJZS.js";
|
|
10
10
|
import "../../../chunk-HMU5IELG.js";
|
|
11
|
-
import "../../../chunk-
|
|
11
|
+
import "../../../chunk-OSJTLQXA.js";
|
|
12
12
|
import "../../../chunk-M357MHH3.js";
|
|
13
|
-
import "../../../chunk-
|
|
13
|
+
import "../../../chunk-6IIA63VD.js";
|
|
14
14
|
import "../../../chunk-CUUJROYT.js";
|
|
15
|
-
import "../../../chunk-
|
|
16
|
-
import "../../../chunk-
|
|
15
|
+
import "../../../chunk-KPL7EXS6.js";
|
|
16
|
+
import "../../../chunk-DXYARXK3.js";
|
|
17
17
|
import "../../../chunk-OYQQJL3J.js";
|
|
18
18
|
import "../../../chunk-RZLBICR5.js";
|
|
19
19
|
import "../../../chunk-H3LIIAGE.js";
|
|
@@ -22,13 +22,13 @@ import "../../../chunk-DNJ23AWQ.js";
|
|
|
22
22
|
import "../../../chunk-OB3YGXHQ.js";
|
|
23
23
|
import "../../../chunk-UNJPZGNK.js";
|
|
24
24
|
import "../../../chunk-PEHTX3V7.js";
|
|
25
|
-
import "../../../chunk-
|
|
25
|
+
import "../../../chunk-MASBMJ2M.js";
|
|
26
26
|
import "../../../chunk-J3BHDXQQ.js";
|
|
27
27
|
import "../../../chunk-XEA5BCMA.js";
|
|
28
28
|
import "../../../chunk-SJGAHTY5.js";
|
|
29
29
|
import "../../../chunk-4NHJ6EXL.js";
|
|
30
30
|
import "../../../chunk-TXS65BB2.js";
|
|
31
|
-
import "../../../chunk-
|
|
31
|
+
import "../../../chunk-ZEVJGMNB.js";
|
|
32
32
|
export {
|
|
33
33
|
PreparedMcpSetupCard
|
|
34
34
|
};
|
|
@@ -1,69 +1,70 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import {
|
|
3
|
+
SessionCustomMcpCard
|
|
4
|
+
} from "../../../chunk-3W7ROHN4.js";
|
|
2
5
|
import {
|
|
3
6
|
useCapabilitiesCatalog
|
|
4
7
|
} from "../../../chunk-F3NERYBQ.js";
|
|
5
|
-
import {
|
|
6
|
-
SessionCustomMcpCard
|
|
7
|
-
} from "../../../chunk-MDRLP5DO.js";
|
|
8
8
|
import {
|
|
9
9
|
performCapabilityAction
|
|
10
|
-
} from "../../../chunk-
|
|
10
|
+
} from "../../../chunk-WJDH7CH5.js";
|
|
11
11
|
import {
|
|
12
12
|
DetailBody
|
|
13
|
-
} from "../../../chunk-
|
|
13
|
+
} from "../../../chunk-47AB65IO.js";
|
|
14
14
|
import "../../../chunk-Y6TTMPZC.js";
|
|
15
|
+
import "../../../chunk-VHDCIO4V.js";
|
|
15
16
|
import "../../../chunk-V3RHG7CF.js";
|
|
16
17
|
import "../../../chunk-C535KSTY.js";
|
|
17
18
|
import "../../../chunk-FIPSOCVC.js";
|
|
18
|
-
import "../../../chunk-VHDCIO4V.js";
|
|
19
19
|
import {
|
|
20
20
|
SessionGitHubCapabilityCard
|
|
21
|
-
} from "../../../chunk-
|
|
21
|
+
} from "../../../chunk-X6JIGNLI.js";
|
|
22
22
|
import "../../../chunk-MOMM26UR.js";
|
|
23
23
|
import "../../../chunk-IYEI5OZL.js";
|
|
24
24
|
import "../../../chunk-5N6XZ7LG.js";
|
|
25
25
|
import {
|
|
26
26
|
SessionChromeCapabilityCard
|
|
27
|
-
} from "../../../chunk-
|
|
27
|
+
} from "../../../chunk-CAVAVT5S.js";
|
|
28
28
|
import {
|
|
29
29
|
RepeatedMachineRequestNote,
|
|
30
30
|
SessionMachineCapabilityCard
|
|
31
|
-
} from "../../../chunk-
|
|
32
|
-
import "../../../chunk-
|
|
33
|
-
import "../../../chunk-NV5OYV3G.js";
|
|
31
|
+
} from "../../../chunk-VJU3ET7N.js";
|
|
32
|
+
import "../../../chunk-3U6K36QA.js";
|
|
34
33
|
import "../../../chunk-AF53CDFM.js";
|
|
34
|
+
import "../../../chunk-LMYSYG6U.js";
|
|
35
|
+
import {
|
|
36
|
+
CodexSubscriptionsSurface
|
|
37
|
+
} from "../../../chunk-SOKNCW5U.js";
|
|
35
38
|
import "../../../chunk-M27WO6W3.js";
|
|
39
|
+
import "../../../chunk-X5XEYQ4B.js";
|
|
36
40
|
import "../../../chunk-MKG5VTIJ.js";
|
|
37
41
|
import "../../../chunk-46I7MMAL.js";
|
|
38
42
|
import "../../../chunk-NRREC7JK.js";
|
|
39
43
|
import "../../../chunk-KV6GUPL2.js";
|
|
40
|
-
import {
|
|
41
|
-
CodexSubscriptionsSurface
|
|
42
|
-
} from "../../../chunk-SOKNCW5U.js";
|
|
43
44
|
import "../../../chunk-LEDS7L3I.js";
|
|
44
45
|
import "../../../chunk-VAIESMPY.js";
|
|
45
46
|
import "../../../chunk-2LUBBDZV.js";
|
|
46
47
|
import "../../../chunk-QZRDCFHI.js";
|
|
47
|
-
import "../../../chunk-
|
|
48
|
+
import "../../../chunk-UBXHP224.js";
|
|
48
49
|
import "../../../chunk-LEXPBQ56.js";
|
|
49
50
|
import "../../../chunk-J6WRB3VZ.js";
|
|
50
51
|
import "../../../chunk-TFK4KFKA.js";
|
|
51
52
|
import "../../../chunk-HI7BTJRG.js";
|
|
52
|
-
import "../../../chunk-PVNI2KHS.js";
|
|
53
|
-
import "../../../chunk-KVMFT6FN.js";
|
|
54
53
|
import "../../../chunk-J4OPEWC3.js";
|
|
55
|
-
import "../../../chunk-
|
|
54
|
+
import "../../../chunk-PVNI2KHS.js";
|
|
55
|
+
import "../../../chunk-UL44R3W2.js";
|
|
56
|
+
import "../../../chunk-3FL3F4WF.js";
|
|
56
57
|
import "../../../chunk-HUKUDAIP.js";
|
|
57
58
|
import {
|
|
58
59
|
capabilityLogoSource
|
|
59
|
-
} from "../../../chunk-
|
|
60
|
+
} from "../../../chunk-WQ2RTQYO.js";
|
|
60
61
|
import {
|
|
61
62
|
capabilityConnectPlan,
|
|
62
63
|
capabilityErrorToast,
|
|
63
64
|
connectionHealth
|
|
64
65
|
} from "../../../chunk-22NENBA3.js";
|
|
65
66
|
import "../../../chunk-G46333YC.js";
|
|
66
|
-
import "../../../chunk-
|
|
67
|
+
import "../../../chunk-3Y6ZR2VN.js";
|
|
67
68
|
import "../../../chunk-L5HJ4UYB.js";
|
|
68
69
|
import "../../../chunk-FABYS4WM.js";
|
|
69
70
|
import "../../../chunk-55S3W7RZ.js";
|
|
@@ -84,7 +85,7 @@ import "../../../chunk-HZUL2CUH.js";
|
|
|
84
85
|
import "../../../chunk-X6WZOHBI.js";
|
|
85
86
|
import {
|
|
86
87
|
t
|
|
87
|
-
} from "../../../chunk-
|
|
88
|
+
} from "../../../chunk-CG6CJMIS.js";
|
|
88
89
|
import "../../../chunk-L6Y4ALSM.js";
|
|
89
90
|
import {
|
|
90
91
|
hasWorkspacePermission
|
|
@@ -108,7 +109,7 @@ import "../../../chunk-KS57MLGE.js";
|
|
|
108
109
|
import "../../../chunk-TREHTIBD.js";
|
|
109
110
|
import "../../../chunk-5OTQA7CM.js";
|
|
110
111
|
import "../../../chunk-A3KMTJZS.js";
|
|
111
|
-
import "../../../chunk-
|
|
112
|
+
import "../../../chunk-ROLXYGT5.js";
|
|
112
113
|
import {
|
|
113
114
|
Notice
|
|
114
115
|
} from "../../../chunk-WLEDGIVS.js";
|
|
@@ -116,12 +117,12 @@ import {
|
|
|
116
117
|
Button
|
|
117
118
|
} from "../../../chunk-HMU5IELG.js";
|
|
118
119
|
import "../../../chunk-CPLCSM6K.js";
|
|
119
|
-
import "../../../chunk-
|
|
120
|
-
import "../../../chunk-
|
|
120
|
+
import "../../../chunk-GABFKHQE.js";
|
|
121
|
+
import "../../../chunk-OSJTLQXA.js";
|
|
121
122
|
import "../../../chunk-M357MHH3.js";
|
|
122
123
|
import {
|
|
123
124
|
SessionMcpCapabilityCard
|
|
124
|
-
} from "../../../chunk-
|
|
125
|
+
} from "../../../chunk-6IIA63VD.js";
|
|
125
126
|
import {
|
|
126
127
|
applySessionCapabilityAccess,
|
|
127
128
|
attachSessionCapability,
|
|
@@ -129,14 +130,14 @@ import {
|
|
|
129
130
|
} from "../../../chunk-CUUJROYT.js";
|
|
130
131
|
import {
|
|
131
132
|
SessionCapabilityFrame
|
|
132
|
-
} from "../../../chunk-
|
|
133
|
-
import "../../../chunk-
|
|
133
|
+
} from "../../../chunk-KPL7EXS6.js";
|
|
134
|
+
import "../../../chunk-DXYARXK3.js";
|
|
134
135
|
import "../../../chunk-OYQQJL3J.js";
|
|
135
136
|
import "../../../chunk-RZLBICR5.js";
|
|
136
137
|
import "../../../chunk-H3LIIAGE.js";
|
|
137
138
|
import "../../../chunk-VHB3E6PT.js";
|
|
138
|
-
import "../../../chunk-
|
|
139
|
-
import "../../../chunk-
|
|
139
|
+
import "../../../chunk-4T3E56NT.js";
|
|
140
|
+
import "../../../chunk-PR42VIVY.js";
|
|
140
141
|
import "../../../chunk-BOG2FED3.js";
|
|
141
142
|
import "../../../chunk-DNJ23AWQ.js";
|
|
142
143
|
import "../../../chunk-OB3YGXHQ.js";
|
|
@@ -145,7 +146,7 @@ import "../../../chunk-XV6ZYRHK.js";
|
|
|
145
146
|
import "../../../chunk-IGVL3ELX.js";
|
|
146
147
|
import "../../../chunk-PEHTX3V7.js";
|
|
147
148
|
import "../../../chunk-NRP4REXE.js";
|
|
148
|
-
import "../../../chunk-
|
|
149
|
+
import "../../../chunk-MASBMJ2M.js";
|
|
149
150
|
import "../../../chunk-J3BHDXQQ.js";
|
|
150
151
|
import "../../../chunk-XEA5BCMA.js";
|
|
151
152
|
import "../../../chunk-2KO2G3RI.js";
|
|
@@ -154,7 +155,7 @@ import "../../../chunk-TVQCDDSZ.js";
|
|
|
154
155
|
import "../../../chunk-SJGAHTY5.js";
|
|
155
156
|
import "../../../chunk-4NHJ6EXL.js";
|
|
156
157
|
import "../../../chunk-TXS65BB2.js";
|
|
157
|
-
import "../../../chunk-
|
|
158
|
+
import "../../../chunk-ZEVJGMNB.js";
|
|
158
159
|
|
|
159
160
|
// src/app/components/capabilities/session-capability-card.tsx
|
|
160
161
|
import { Suspense, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
@@ -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 { 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,SAAS,UAAU,aAAa,WAAW,SAAS,QAAQ,gBAAgB;AAG5E,SAAS,WAAW,mBAAmB;AAuDjC,cAodE,YApdF;AA7BC,IAAM,kCAAkC;AAGxC,IAAM,4BAA4B;AAgBlC,SAAS,sBAAsB,OAAmC;AACvE,QAAM,OAAO,QAAQ;AACrB,QAAM,UAAU,cAAc;AAC9B,QAAM,CAAC,YAAY,aAAa,IAAI,SAAuD,IAAI;AAC/F,QAAM,eAAe;AAAA,IACnB,CAAC,IAAY,iBAA0B,cAAc,EAAE,IAAI,aAAa,CAAC;AAAA,IACzE,CAAC;AAAA,EACH;AACA,MAAI,MAAM,KAAK,gBAAgB,CAAC,YAAY;AAC1C,WACE;AAAA,MAAC;AAAA;AAAA,QAEC,MAAM,MAAM;AAAA,QACZ,aAAa,MAAM;AAAA,QACnB,WAAW,MAAM;AAAA,QACjB,cAAc,MAAM;AAAA,QACpB;AAAA;AAAA,MALK,GAAG,MAAM,WAAW,IAAI,MAAM,KAAK,EAAE;AAAA,IAM5C;AAAA,EAEJ;AACA,QAAM,OAAO,aACT;AAAA,IACE,GAAG,MAAM;AAAA,IACT,cAAc;AAAA,IACd,YAAY;AAAA,MACV,IAAI,WAAW;AAAA,MACf,MAAM,MAAM,KAAK,aAAc;AAAA,MAC/B,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,WAAW,MAAM,KAAK,aAAc;AAAA,MACpC,mBAAmB,CAAC;AAAA,IACtB;AAAA,EACF,IACA,MAAM;AACV,QAAM,aAAa,KAAK;AACxB,MAAI,YAAY,OAAO,iCAAiC;AAEtD,QAAI,KAAK;AACP,aAAO,oBAAC,8BAA2B,QAAQ,KAAK,YAAY,UAAU;AACxE,QAAI,KAAK,YAAY,UAAU;AAC7B,aACE;AAAA,QAAC;AAAA;AAAA,UAEC;AAAA,UACA,aAAa,MAAM;AAAA,UACnB,WAAW,MAAM;AAAA,UACjB,aAAa,MAAM;AAAA;AAAA,QAJd,GAAG,MAAM,WAAW,IAAI,MAAM,SAAS;AAAA,MAK9C;AAAA,IAEJ;AACA,WACE;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA,QACA,aAAa,MAAM;AAAA,QACnB,WAAW,MAAM;AAAA,QACjB,aAAa,MAAM;AAAA,QACnB,cAAc,MAAM;AAAA;AAAA,MALf,GAAG,MAAM,WAAW,IAAI,MAAM,SAAS;AAAA,IAM9C;AAAA,EAEJ;AACA,MAAI,YAAY,OAAO,kBAAkB;AACvC,WACE;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA,QACA,aAAa,MAAM;AAAA,QACnB,WAAW,MAAM;AAAA,QACjB,WAAW,MAAM;AAAA,QACjB,aAAa,MAAM;AAAA,QACnB,cAAc,MAAM;AAAA;AAAA,MANf,GAAG,MAAM,WAAW,IAAI,MAAM,SAAS;AAAA,IAO9C;AAAA,EAEJ;AACA,QAAM,WAAW,QAAQ,2BAA2B,KAAK,CAAC,UAAU,MAAM,OAAO,YAAY,EAAE;AAC/F,MAAI,cAAc,UAAU,SAAS,SAAS,SAAS,aAAa,UAAU;AAC5E,WACE;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,QAAQ;AAAA,QAChB,aAAa,MAAM;AAAA,QACnB,WAAW,MAAM;AAAA,QACjB,cAAc,WAAW;AAAA,QACzB,MAAM,WAAW;AAAA,QACjB,WAAW,WAAW;AAAA,QACtB,WAAW,KAAK,KAAK;AAAA,QACrB,cAAc,MAAM;AAAA;AAAA,IACtB;AAAA,EAEJ;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MAEE,GAAG;AAAA,MACJ;AAAA,MACA,cAAc,YAAY,gBAAgB;AAAA;AAAA,IAHrC,GAAG,MAAM,WAAW,IAAI,MAAM,SAAS,IAAI,WAAY,EAAE;AAAA,EAIhE;AAEJ;AAEA,SAAS,4BAA4B;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AACjB,GAAwE;AACtE,QAAM,UAAU,cAAc;AAC9B,QAAM,iBAAiB,KAAK;AAC5B,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,QAAM,CAAC,cAAc,eAAe,IAAI,SAAuC,IAAI;AACnF,QAAM,SAAS,OAA0B,IAAI;AAC7C,QAAM,UAAU,OAAoB,IAAI;AACxC,YAAU,MAAM;AACd,QAAI,CAAC,aAAc;AAGnB,UAAM,QAAQ,sBAAsB,MAAM,OAAO,SAAS,MAAM,CAAC;AACjE,WAAO,MAAM,qBAAqB,KAAK;AAAA,EACzC,GAAG,CAAC,YAAY,CAAC;AACjB,QAAM,cACJ,gBACA,QAAQ,2BAA2B,KAAK,CAAC,UAAU,MAAM,OAAO,eAAe,EAAE;AACnF,QAAM,OAAO,cACT,qBAAqB,aAAa,CAAC,SAAS,QAAQ,OAAO,gBAAgB,IAAI,CAAC,IAChF;AACJ,QAAM,QAAQ,MAAM;AAClB,gBAAY,KAAK;AAAA,EACnB;AACA,QAAM,QAAQ,eAAe,SAAS;AACtC,QAAM,QAAQ,eAAe,OAAO;AACpC,QAAM,SAAS,cAAc,sBAAsB,WAAW,EAAE,SAAS,YAAY;AACrF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,aAAa,QAAQ,eAAe;AAAA,MAC1C,UAAU,cAAe,YAAY,kBAAkB,KAAM,KAAK;AAAA,MAClE;AAAA,MACA,WACE,QAAQ,UAAU,QAAQ,WAAW,eAAe,SAAS,QAAQ,eAAe;AAAA,MAEtF,aAAa,aAAa,eAAe,eAAe;AAAA,MACxD;AAAA,MACA;AAAA,MACA;AAAA,MACA,aACE,QACI,iBACA,aAAa,UACX,WACA,QACE,iBACA,SACE,gBACA,WAAW,aAAa,QAAQ,eAAe,IAAI;AAAA,MAE/D,MACE,QACI,0GACA,QACE,iFACA,SACE,kEACA;AAAA,MAEV,QAAQ,MAAM,YAAY,IAAI;AAAA,MAC9B,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MAEC,yBAAe,OAAO,mBACrB;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS;AAAA,UACT,YAAY,MAAM;AAChB,wBAAY,IAAI;AAChB,kBAAM;AAAA,UACR;AAAA;AAAA,MACF,IAEA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UAEA,cAAc,eAAe;AAAA,UAC7B,gBAAgB;AAAA,UAChB;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS;AAAA,UACT,YAAY,MAAM;AAChB,wBAAY,IAAI;AAChB,kBAAM;AAAA,UACR;AAAA;AAAA,QAVK,GAAG,WAAW,IAAI,SAAS,IAAI,eAAe,EAAE;AAAA,MAWvD;AAAA;AAAA,EAEJ;AAEJ;AAEA,SAAS,uBAAuB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAUG;AACD,QAAM,OAAO,QAAQ;AACrB,QAAM,UAAU,cAAc;AAC9B,QAAM,UAAU,uBAAuB,WAAW;AAClD,QAAM,qBACJ,QAAQ,kBAAkB,OACtB,OACA,uBAAuB,QAAQ,eAAe,aAAa,kBAAkB;AACnF,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AACtD,QAAM,YAAY,QAAQ,eAAe,aAAa;AACtD,QAAM,CAAC,oBAAoB,qBAAqB,IAAI,SAG1C,IAAI;AACd,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAKlC,IAAI;AACd,QAAM,CAAC,wBAAwB,yBAAyB,IAAI,SAAS,CAAC;AACtE,QAAM,WAAW,OAAsB,IAAI;AAC3C,QAAM,QAAQ,OAAO;AAAA,IACnB,QAAQ,QAAQ;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,QAAQ;AAAA,IACtB,OAAO;AAAA,EACT,CAAC;AACD,MACE,MAAM,QAAQ,WAAW,QAAQ,UACjC,MAAM,QAAQ,gBAAgB,eAC9B,MAAM,QAAQ,cAAc,aAC5B,MAAM,QAAQ,uBAAuB,sBACrC,MAAM,QAAQ,cAAc,aAC5B,MAAM,QAAQ,iBAAiB,QAAQ,cACvC;AACA,UAAM,UAAU;AAAA,MACd,QAAQ,QAAQ;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,QAAQ;AAAA,MACtB,OAAO;AAAA,IACT;AAAA,EACF;AACA,QAAM,mBACJ,oBAAoB,eAAe,MAAM,UAAU,mBAAmB,OAAO;AAC/E,YAAU,MAAM;AAGd,QAAI,CAAC,MAAM,QAAQ,MAAO,OAAM,UAAU,EAAE,GAAG,MAAM,SAAS,OAAO,KAAK;AAC1E,UAAM,cAAc,MAAM;AAC1B,0BAAsB,IAAI;AAC1B,YAAQ,KAAK;AACb,SAAK,QAAQ,QAAQ;AACrB,WAAO,MAAM;AACX,kBAAY,QAAQ;AAAA,IACtB;AAAA,EAGF,GAAG;AAAA,IACD,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,EACF,CAAC;AACD,QAAM,UAAU,QAAQ,MAAM,KAAK,CAAC,UAAU,MAAM,OAAO,YAAY;AACvE,QAAM,YAAY,SAAS;AAC3B,QAAM,aAAa,SAAS,UAAU,SAAS;AAC/C,QAAM,sBACJ,SAAS,SAAS,SAClB,CAAC,QAAQ,WACT,sBAAsB,OAAO,EAAE,SAAS,oBACxC,QAAQ,UAAU;AACpB,YAAU,MAAM;AACd,QAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,WAAY;AACvD,QAAI,SAAS;AACb,sBAAkB,IAAI;AACtB,SAAK,QAAQ,OAAO,yBAAyB,aAAa,UAAU,EAAE;AAAA,MACpE,CAAC,WAAW;AACV,YAAI,OAAQ,mBAAkB,EAAE,IAAI,WAAW,KAAK,YAAY,GAAG,OAAO,CAAC;AAAA,MAC7E;AAAA,MACA,MAAM;AACJ,YAAI,OAAQ,mBAAkB,EAAE,IAAI,WAAW,KAAK,YAAY,MAAM,UAAU,CAAC;AAAA,MACnF;AAAA,IACF;AACA,WAAO,MAAM;AACX,eAAS;AAAA,IACX;AAAA,EACF,GAAG;AAAA,IACD,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,OAAO,QAAQ,MAAM;AACzB,QAAI,CAAC,WAAW,CAAC,oBAAqB,QAAO;AAC7C,UAAM,aACJ,gBAAgB,OAAO,QAAQ,MAAM,eAAe,QAAQ,aACxD,eAAe,OACf;AACN,WAAO;AAAA,MACL,GAAG;AAAA,MACH,UACE,eAAe,WACV,WACD,eAAe,SACZ,SACD;AAAA,MACR,UAAU;AAAA,QACR,GAAG,QAAQ;AAAA,QACX,eAAe;AAAA,QACf,sBAAsB,eAAe,YAAY,gBAAgB,UAAU;AAAA,MAC7E;AAAA,IACF;AAAA,EACF,GAAG,CAAC,SAAS,qBAAqB,YAAY,cAAc,CAAC;AAC7D,YAAU,MAAM;AACd,QAAI,KAAM,gBAAe,IAAI;AAAA,EAC/B,GAAG,CAAC,MAAM,cAAc,CAAC;AACzB,QAAM,iBAAiB,YAAY,MAAM;AACvC,SAAK,QAAQ,2BAA2B,WAAW;AAAA,EACrD,GAAG,CAAC,SAAS,WAAW,CAAC;AACzB,iBAAe,IAAI,QAAuB;AACxC,QAAI,CAAC,KAAM;AACX,UAAM,aAAa,MAAM;AACzB,QAAI,SAAS,YAAY,WAAY;AACrC,aAAS,UAAU;AACnB,YAAQ,IAAI;AACZ,aAAS,IAAI;AACb,0BAAsB,IAAI;AAC1B,UAAM,UAAU,MAAM,MAAM,YAAY,cAAc,WAAW;AACjE,QAAI;AACF,YAAM;AAAA,QACJ;AAAA,UACE,QAAQ,QAAQ;AAAA,UAChB;AAAA,UACA;AAAA,UACA,aAAa,QAAQ,wBAAwB,OAAO,QAAQ;AAAA,UAC5D,iBAAiB;AAAA,YACf,QAAQ;AAAA,YACR;AAAA,YACA;AAAA,UACF;AAAA,UACA,SAAS,QAAQ;AAAA,UACjB,kBAAkB,MAAM;AACtB,gBAAI,QAAQ,EAAG,gBAAe;AAAA,UAChC;AAAA,UACA,YAAY,YAAY;AACtB,gBAAI,CAAC,QAAQ,EAAG;AAChB,kBAAM,WAAW,MAAM,QAAQ,OAAO,iBAAiB,WAAW,GAAG,MAAM;AAAA,cACzE,CAAC,UAAU,MAAM,OAAO,KAAK;AAAA,YAC/B;AACA,gBAAI,CAAC,QAAQ,EAAG;AAChB,gBAAI,CAAC,SAAS;AACZ,oBAAM,IAAI,MAAM,qDAAqD;AACvE,kBAAM,OAAO,MAAM;AAAA,cACjB;AAAA,cACA,QAAQ;AAAA,cACR;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AACA,gBAAI,CAAC,QAAQ,EAAG;AAChB,gBAAI,KAAK,SAAS,KAAK,CAAC,SAAS,KAAK,OAAO,aAAa,KAAK,OAAO,GAAG;AACvE,oCAAsB,EAAE,MAAM,WAAW,CAAC;AAC1C;AAAA,YACF;AACA,kBAAM,6BAA6B,GAAG,QAAQ,QAAQ,MAAM,OAAO;AACnE,kBAAM,eAAe;AACrB,gBAAI,QAAQ,EAAG,YAAW;AAAA,UAC5B;AAAA,UACA,gBAAgB,MAAM;AACpB,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAAA,UACA,eAAe,CAAC,OACd,eAAe,mBAAmB,WAAW,CAAC,aAAa,mBAAmB,SAAS,CAAC,oBAAoB,mBAAmB,EAAE,CAAC;AAAA,UACpI,UAAU,CAAC,QAAQ;AACjB,gBAAI,QAAQ,EAAG,MAAK,OAAO,GAAG;AAAA,UAChC;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF,SAAS,SAAS;AAGhB,UAAI,QAAQ,EAAG,OAAM,QAAQ,QAAQ;AACrC,UAAI,QAAQ,EAAG,UAAS,qBAAqB,SAAS,yBAAyB,EAAE,WAAW;AAAA,IAC9F,UAAE;AACA,UAAI,SAAS,YAAY,WAAY,UAAS,UAAU;AACxD,UAAI,QAAQ,EAAG,SAAQ,KAAK;AAAA,IAC9B;AAAA,EACF;AACA,iBAAe,eAAe;AAC5B,QAAI,CAAC,KAAM;AACX,UAAM,aAAa,MAAM;AACzB,QAAI,SAAS,YAAY,WAAY;AACrC,aAAS,UAAU;AACnB,YAAQ,IAAI;AACZ,aAAS,IAAI;AACb,UAAM,UAAU,MAAM,MAAM,YAAY,cAAc,WAAW;AACjE,QAAI;AACF,YAAM,OACJ,oBACC,MAAM;AAAA,QACL;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACF,UAAI,CAAC,QAAQ,EAAG;AAChB,UACE,CAAC,oBACD,KAAK,SAAS,KAAK,CAAC,SAAS,KAAK,OAAO,aAAa,KAAK,OAAO,GAClE;AACA,8BAAsB,EAAE,MAAM,WAAW,CAAC;AAC1C;AAAA,MACF;AACA,YAAM,6BAA6B,GAAG,QAAQ,QAAQ,MAAM,OAAO;AACnE,UAAI,QAAQ,EAAG,uBAAsB,IAAI;AACzC,UAAI,QAAQ,EAAG,OAAM,eAAe;AACpC,UAAI,QAAQ,EAAG,YAAW;AAAA,IAC5B,SAAS,SAAS;AAChB,UAAI,QAAQ,GAAG;AACb,8BAAsB,IAAI;AAC1B,iBAAS,iCAAiC,cAAc,SAAS,YAAY,CAAC,EAAE;AAAA,MAClF;AAAA,IACF,UAAE;AACA,UAAI,SAAS,YAAY,WAAY,UAAS,UAAU;AACxD,UAAI,QAAQ,EAAG,SAAQ,KAAK;AAAA,IAC9B;AAAA,EACF;AACA,QAAM,gBACJ,CAAC,QAAQ,aAAa,QAAQ,CAAC,KAAK,YAAY,KAAK,SAAS,WAAW,KAAK,SAAS;AACzF,QAAM,SAAS,OACX,iBAAiB,MAAM,QAAQ,eAAe,CAAC,GAAG,QAAQ,gBAAgB,IAAI,IAC9E;AACJ,SACE,qBAAC,SAAI,WAAU,cACZ;AAAA,YAAQ,WAAW,CAAC,OACnB,qBAAC,OAAE,MAAK,UAAS,WAAU,iDACzB;AAAA,0BAAC,eAAY,WAAU,uBAAsB;AAAA,MAAE;AAAA,OAEjD,IACE,QAAQ,aAAa,CAAC,OACxB;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,QACE,oBAAC,UAAO,MAAK,MAAK,SAAS,MAAM,KAAK,QAAQ,QAAQ,GAAG,mBAEzD;AAAA,QAGD,kBAAQ,YACL,2CACA;AAAA;AAAA,IACN,IAEA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAS;AAAA,QACT,cAAc;AAAA,QACd,UAAU,gBAAgB,UAAU;AAAA,QACpC;AAAA,QACA,QAAQ,iBAAiB,MAAM,QAAQ,eAAe,CAAC,GAAG,QAAQ,gBAAgB,IAAI;AAAA,QACtF,SAAS,qBAAqB,MAAM,CAAC,SAAS,QAAQ,OAAO,gBAAgB,IAAI,CAAC;AAAA,QAClF;AAAA,QACA,cAAc;AAAA,QACd,mBAAmB,QAAQ;AAAA,QAC3B,iBAAiB;AAAA,UACf,QAAQ;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,iBAAiB;AAAA,UACf,QAAQ;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,UAAU,CAAC,WAAW,KAAK,IAAI,MAAM;AAAA,QACrC,uBACE,sBACI,MAAM;AACJ,4BAAkB,IAAI;AACtB,oCAA0B,CAAC,aAAa,WAAW,CAAC;AAAA,QACtD,IACA;AAAA;AAAA,IAER;AAAA,IAED,oBAAoB,OACnB,qBAAC,UAAO,MAAK,WAAU,MAAK,UAC1B;AAAA,2BAAC,OAAE;AAAA;AAAA,QAC2D,KAAK;AAAA,QAAK;AAAA,SAExE;AAAA,MACA,oBAAC,QAAG,WAAU,uBACX,2BAAiB,SACf,OAAO,CAAC,SAAS,KAAK,OAAO,aAAa,KAAK,OAAO,EACtD,IAAI,CAAC,SACJ,oBAAC,QACC;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,MAAM,eAAe,mBAAmB,WAAW,CAAC,aAAa,mBAAmB,KAAK,EAAE,CAAC;AAAA,UAE3F,eAAK,SAAS;AAAA;AAAA,MACjB,KANO,KAAK,EAOd,CACD,GACL;AAAA,MACA,qBAAC,OAAE,WAAU,QAAO;AAAA;AAAA,QACD,KAAK;AAAA,QAAK;AAAA,SAI7B;AAAA,MACA,oBAAC,OAAE,WAAU,QAAO,kHAGpB;AAAA,OACF,IACE;AAAA,IACJ,qBAAC,SAAI,WAAU,+BACZ;AAAA,OAAC,gBACA,oBAAC,UAAO,MAAK,MAAK,SAAQ,SAAQ,UAAU,MAAM,SAAS,SAAS,oBAEpE,IACE;AAAA,MACH,MAAM,WAAW,QAAQ,UAAU,eAAe,QAAQ,UAAU,eACnE,qBAAC,UAAO,MAAK,MAAK,UAAU,MAAM,SAAS,MAAM,KAAK,aAAa,GAChE;AAAA,eAAO,oBAAC,eAAY,WAAU,gBAAe,IAAK,oBAAC,aAAU;AAAA,QAC7D,mBAAmB,oCAAoC;AAAA,SAC1D,IACE;AAAA,OACN;AAAA,KACF;AAEJ;AAEA,SAAS,sBAAsB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOG;AACD,QAAM,UAAU,cAAc;AAC9B,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AACtD,QAAM,WAAW,OAAO,KAAK;AAC7B,QAAM,SAAS,OAAO,IAAI;AAC1B;AAAA,IACE,MAAM,MAAM;AACV,aAAO,UAAU;AAAA,IACnB;AAAA,IACA,CAAC;AAAA,EACH;AACA,iBAAe,UAAU;AACvB,QAAI,SAAS,QAAS;AACtB,aAAS,UAAU;AACnB,YAAQ,IAAI;AACZ,aAAS,IAAI;AACb,QAAI;AACF,YAAM,UAAU,MAAM,QAAQ,OAAO,iBAAiB,WAAW;AACjE,YAAM,OAAO,QAAQ,MAAM,KAAK,CAAC,UAAU,MAAM,OAAO,gBAAgB;AACxE,UAAI,CAAC,OAAO,QAAS;AACrB,UAAI,CAAC,MAAM,WAAW,CAAC,KAAK,QAAQ;AAClC,cAAM,IAAI,MAAM,iEAAiE;AACnF,YAAM;AAAA,QACJ;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM,OAAO;AAAA,MACf;AACA,YAAM,QAAQ,2BAA2B,WAAW;AACpD,UAAI,OAAO,QAAS,YAAW;AAAA,IACjC,SAAS,SAAS;AAChB,UAAI,OAAO;AACT;AAAA,UACE,8CAA8C,cAAc,SAAS,YAAY,CAAC;AAAA,QACpF;AAAA,IACJ,UAAE;AACA,eAAS,UAAU;AACnB,UAAI,OAAO,QAAS,SAAQ,KAAK;AAAA,IACnC;AAAA,EACF;AACA,SACE,qBAAC,SAAI,WAAU,cACb;AAAA,wBAAC,YAAS,UAAU,oBAAC,OAAE,MAAK,UAAS,+CAA4B,GAC/D;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT,QAAQ;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA;AAAA,IACF,GACF;AAAA,IACC,QAAQ,oBAAC,UAAO,MAAK,UAAU,iBAAM,IAAY;AAAA,IAClD,qBAAC,SAAI,WAAU,+BACb;AAAA,0BAAC,UAAO,SAAQ,SAAQ,MAAK,MAAK,UAAU,MAAM,SAAS,SAAS,oBAEpE;AAAA,MACA,qBAAC,UAAO,MAAK,MAAK,UAAU,MAAM,SAAS,MAAM,KAAK,QAAQ,GAC3D;AAAA,eAAO,oBAAC,eAAY,WAAU,gBAAe,IAAK,oBAAC,aAAU;AAAA,QAAG;AAAA,SACnE;AAAA,OACF;AAAA,KACF;AAEJ;","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":[]}
|
|
@@ -2,21 +2,21 @@
|
|
|
2
2
|
import {
|
|
3
3
|
CHROME_CONNECTED_MESSAGE,
|
|
4
4
|
SessionChromeCapabilityCard
|
|
5
|
-
} from "../../../chunk-
|
|
6
|
-
import "../../../chunk-
|
|
7
|
-
import "../../../chunk-
|
|
5
|
+
} from "../../../chunk-CAVAVT5S.js";
|
|
6
|
+
import "../../../chunk-VJU3ET7N.js";
|
|
7
|
+
import "../../../chunk-LMYSYG6U.js";
|
|
8
8
|
import "../../../chunk-M27WO6W3.js";
|
|
9
9
|
import "../../../chunk-KV6GUPL2.js";
|
|
10
10
|
import "../../../chunk-VAIESMPY.js";
|
|
11
11
|
import "../../../chunk-2LUBBDZV.js";
|
|
12
12
|
import "../../../chunk-QZRDCFHI.js";
|
|
13
|
-
import "../../../chunk-
|
|
13
|
+
import "../../../chunk-UBXHP224.js";
|
|
14
14
|
import "../../../chunk-LEXPBQ56.js";
|
|
15
15
|
import "../../../chunk-J6WRB3VZ.js";
|
|
16
|
-
import "../../../chunk-KVMFT6FN.js";
|
|
17
16
|
import "../../../chunk-J4OPEWC3.js";
|
|
18
|
-
import "../../../chunk-
|
|
19
|
-
import "../../../chunk-
|
|
17
|
+
import "../../../chunk-UL44R3W2.js";
|
|
18
|
+
import "../../../chunk-3FL3F4WF.js";
|
|
19
|
+
import "../../../chunk-3Y6ZR2VN.js";
|
|
20
20
|
import "../../../chunk-L5HJ4UYB.js";
|
|
21
21
|
import "../../../chunk-FABYS4WM.js";
|
|
22
22
|
import "../../../chunk-EPCPGUIF.js";
|
|
@@ -29,7 +29,7 @@ import "../../../chunk-XSOPQZGH.js";
|
|
|
29
29
|
import "../../../chunk-ZMBJPN4T.js";
|
|
30
30
|
import "../../../chunk-HZUL2CUH.js";
|
|
31
31
|
import "../../../chunk-X6WZOHBI.js";
|
|
32
|
-
import "../../../chunk-
|
|
32
|
+
import "../../../chunk-CG6CJMIS.js";
|
|
33
33
|
import "../../../chunk-FIDD34ZF.js";
|
|
34
34
|
import "../../../chunk-74JEZLLQ.js";
|
|
35
35
|
import "../../../chunk-IZUAIHR4.js";
|
|
@@ -42,15 +42,15 @@ import "../../../chunk-KS57MLGE.js";
|
|
|
42
42
|
import "../../../chunk-TREHTIBD.js";
|
|
43
43
|
import "../../../chunk-5OTQA7CM.js";
|
|
44
44
|
import "../../../chunk-A3KMTJZS.js";
|
|
45
|
-
import "../../../chunk-
|
|
45
|
+
import "../../../chunk-ROLXYGT5.js";
|
|
46
46
|
import "../../../chunk-WLEDGIVS.js";
|
|
47
47
|
import "../../../chunk-HMU5IELG.js";
|
|
48
48
|
import "../../../chunk-CPLCSM6K.js";
|
|
49
|
-
import "../../../chunk-
|
|
49
|
+
import "../../../chunk-GABFKHQE.js";
|
|
50
50
|
import "../../../chunk-M357MHH3.js";
|
|
51
|
-
import "../../../chunk-
|
|
52
|
-
import "../../../chunk-
|
|
53
|
-
import "../../../chunk-
|
|
51
|
+
import "../../../chunk-KPL7EXS6.js";
|
|
52
|
+
import "../../../chunk-4T3E56NT.js";
|
|
53
|
+
import "../../../chunk-PR42VIVY.js";
|
|
54
54
|
import "../../../chunk-BOG2FED3.js";
|
|
55
55
|
import "../../../chunk-XV6ZYRHK.js";
|
|
56
56
|
import "../../../chunk-IGVL3ELX.js";
|
|
@@ -64,7 +64,7 @@ import "../../../chunk-TVQCDDSZ.js";
|
|
|
64
64
|
import "../../../chunk-SJGAHTY5.js";
|
|
65
65
|
import "../../../chunk-4NHJ6EXL.js";
|
|
66
66
|
import "../../../chunk-TXS65BB2.js";
|
|
67
|
-
import "../../../chunk-
|
|
67
|
+
import "../../../chunk-ZEVJGMNB.js";
|
|
68
68
|
export {
|
|
69
69
|
CHROME_CONNECTED_MESSAGE,
|
|
70
70
|
SessionChromeCapabilityCard
|