@opengeni/react 4.3.3-canary.39786771332001 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/app-state.js +29 -29
- package/dist/app/components/Composer.js +27 -27
- package/dist/app/components/agent/agent-capability-picker.js +4 -4
- package/dist/app/components/artifacts/artifact-browse-controls.js +2 -2
- package/dist/app/components/artifacts/artifact-library.js +19 -19
- package/dist/app/components/artifacts/artifact-page-chrome.js +2 -2
- package/dist/app/components/artifacts/chat-interactive-block.js +16 -16
- package/dist/app/components/artifacts/inline-chat-image.js +31 -30
- package/dist/app/components/artifacts/retained-file-preview.js +35 -34
- package/dist/app/components/artifacts/retained-text-preview.js +5 -5
- package/dist/app/components/artifacts/site-audience.js +4 -4
- package/dist/app/components/artifacts/site-conversations.js +22 -21
- package/dist/app/components/artifacts/site-data.js +19 -19
- package/dist/app/components/artifacts/site-publishing.js +41 -41
- package/dist/app/components/artifacts/site-settings.js +50 -50
- package/dist/app/components/billing-class-mark.js +5 -5
- package/dist/app/components/capabilities/capability-detail-sheet.js +9 -9
- package/dist/app/components/capabilities/capability-logo-source.js +12 -12
- package/dist/app/components/capabilities/connector-tool-permissions.js +3 -3
- package/dist/app/components/capabilities/native-connect-setup.js +14 -14
- package/dist/app/components/capabilities/perform-capability-action.js +1 -1
- package/dist/app/components/capabilities/prepared-mcp-setup-card.js +16 -16
- package/dist/app/components/capabilities/session-capability-card.js +94 -76
- package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
- package/dist/app/components/capabilities/session-chrome-card.css +1023 -0
- package/dist/app/components/capabilities/session-chrome-card.css.map +1 -0
- package/dist/app/components/capabilities/session-chrome-card.d.ts +18 -0
- package/dist/app/components/capabilities/session-chrome-card.js +72 -0
- package/dist/app/components/capabilities/session-custom-mcp-card.js +20 -20
- package/dist/app/components/capabilities/session-github-card.js +24 -24
- package/dist/app/components/capabilities/session-machine-card.d.ts +27 -1
- package/dist/app/components/capabilities/session-machine-card.js +40 -36
- package/dist/app/components/capabilities/use-capabilities-catalog.js +3 -3
- package/dist/app/components/capabilities/use-connection-accounts.js +1 -1
- package/dist/app/components/command-menu/chat-status.js +18 -17
- package/dist/app/components/command-menu/chat-switcher.js +19 -18
- package/dist/app/components/command-menu/chat-switcher.js.map +1 -1
- package/dist/app/components/command-menu/command-menu.js +36 -114
- package/dist/app/components/command-menu/command-menu.js.map +1 -1
- package/dist/app/components/command-menu/shortcut-sheet.js +17 -17
- package/dist/app/components/composer-capabilities-menu-body.js +3 -3
- package/dist/app/components/composer-mobile-plus-panel.js +20 -20
- 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 +12 -12
- package/dist/app/components/credits/coupon-redeem.js +2 -2
- package/dist/app/components/credits/credit-refusal-notice.js +2 -2
- package/dist/app/components/desktop/app-shots.js +7 -7
- package/dist/app/components/desktop/this-computer.js +4 -4
- package/dist/app/components/feedback.js +4 -4
- package/dist/app/components/follow-up-repository-menu-body.js +5 -5
- package/dist/app/components/follow-up-repository-picker.js +1 -1
- package/dist/app/components/github-app-connect-launcher.js +2 -2
- package/dist/app/components/in-app-help-link.js +2 -2
- package/dist/app/components/knowledge/agent-learning-settings.js +3 -3
- package/dist/app/components/machines/connect-machine-dialog.js +18 -18
- package/dist/app/components/markdown.js +9 -9
- package/dist/app/components/message-context-pills.js +2 -2
- package/dist/app/components/models/models-ui.js +8 -8
- package/dist/app/components/new-session-starters.js +2 -2
- package/dist/app/components/pickers.js +9 -9
- package/dist/app/components/rail/rail-context.js +2 -2
- package/dist/app/components/rail/rail-sections.js +69 -66
- package/dist/app/components/rail/session-header.js +49 -48
- package/dist/app/components/rail/session-list.js +68 -65
- package/dist/app/components/rail/session-row-content.d.ts +6 -2
- package/dist/app/components/rail/session-row-content.js +1 -1
- package/dist/app/components/rail/session-row-hover-details.js +24 -23
- package/dist/app/components/rail/session-shell.js +107 -104
- package/dist/app/components/rail/site-session-group-heading.d.ts +7 -1
- package/dist/app/components/rail/site-session-group-heading.js +20 -3
- package/dist/app/components/repository-picker.js +5 -5
- package/dist/app/components/secrets/session-secrets-panel.js +3 -3
- package/dist/app/components/session/agent-configuration-panel.js +38 -38
- package/dist/app/components/session/artifact-link-boundary.js +2 -2
- package/dist/app/components/session/artifact-session-page.js +4 -4
- package/dist/app/components/session/banners.js +11 -11
- package/dist/app/components/session/codex-account-indicator.js +12 -12
- package/dist/app/components/session/editable-artifacts-workspace.js +45 -45
- package/dist/app/components/session/failed-session-banner.js +11 -11
- package/dist/app/components/session/human-input.js +59 -55
- package/dist/app/components/session/inspector.js +91 -87
- package/dist/app/components/session/inspector.js.map +1 -1
- package/dist/app/components/session/message-actions.js +4 -4
- package/dist/app/components/session/message-resource-attachments.js +21 -20
- package/dist/app/components/session/message-resource-attachments.js.map +1 -1
- package/dist/app/components/session/model-account-indicator.js +11 -11
- package/dist/app/components/session/model-context-inspector.js +2 -2
- package/dist/app/components/session/model-recovery-notice.js +3 -3
- package/dist/app/components/session/new-session-settings-menu.js +12 -12
- package/dist/app/components/session/sandbox-switcher.js +16 -16
- package/dist/app/components/session/sandbox-workspace.js +83 -79
- package/dist/app/components/session/search-markdown-highlight.js +10 -10
- package/dist/app/components/session/search-results-view.js +11 -11
- package/dist/app/components/session/session-admin-access.js +9 -9
- package/dist/app/components/session/session-admission-notice.js +6 -6
- package/dist/app/components/session/session-machine-access-notice.js +6 -6
- package/dist/app/components/session/session-retention.js +4 -4
- package/dist/app/components/session/session-search-dialog.js +12 -12
- package/dist/app/components/session/session-skill-reviews.js +1 -1
- package/dist/app/components/session/session-tenancy-control.d.ts +2 -0
- package/dist/app/components/session/session-tenancy-control.js +41 -26
- package/dist/app/components/session/session-tenancy-control.js.map +1 -1
- package/dist/app/components/session/session-usage-limit-section.js +11 -11
- package/dist/app/components/session/session-wait-status.js +10 -9
- package/dist/app/components/session/session-wait-status.js.map +1 -1
- package/dist/app/components/session/site-origin-link.d.ts +1 -0
- package/dist/app/components/session/site-origin-link.js +2 -2
- package/dist/app/components/session/subagents.js +17 -16
- package/dist/app/components/session-connectors-menu-body.js +5 -5
- package/dist/app/components/settings/row-select.js +1 -1
- package/dist/app/components/transcription-settings.js +2 -2
- package/dist/app/components/ui/destructive-confirm.js +6 -6
- package/dist/app/components/usage/usage-entry.js +8 -8
- package/dist/app/components/workspace-composer-plus.js +22 -22
- package/dist/app/embed/memory-navigation.js +2 -2
- package/dist/app/embed/session-app.js +275 -269
- package/dist/app/lib/actions/actions-provider.js +14 -14
- package/dist/app/lib/actions/held-modifier.d.ts +11 -0
- package/dist/app/lib/app-surfaces.js +2 -2
- package/dist/app/lib/codex-usage-query.js +6 -6
- package/dist/app/lib/composer-connectors.js +13 -13
- package/dist/app/lib/console-site.d.ts +6 -0
- package/dist/app/lib/console-site.js +14 -0
- package/dist/app/lib/console-text.js +2 -2
- package/dist/app/lib/events.js +18 -17
- 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/navigation.d.ts +5 -0
- package/dist/app/lib/navigation.js +1 -1
- package/dist/app/lib/routes.d.ts +17 -0
- package/dist/app/lib/routes.js +9 -3
- package/dist/app/lib/session-branch-cache.js +14 -13
- package/dist/app/lib/session-create.js +2 -2
- package/dist/app/lib/session-deep-link.js +2 -2
- package/dist/app/lib/session-failure-toasts.d.ts +8 -0
- package/dist/app/lib/session-group-pagination.js +14 -13
- package/dist/app/lib/session-hover-facts.js +15 -14
- package/dist/app/lib/session-model.js +3 -3
- package/dist/app/lib/session-rail.js +10 -9
- package/dist/app/lib/session-rename.js +3 -3
- package/dist/app/lib/session-ui-features.d.ts +6 -1
- package/dist/app/lib/session-ui-features.js +1 -1
- package/dist/app/lib/sessions-group.d.ts +43 -3
- package/dist/app/lib/sessions-group.js +22 -15
- package/dist/app/lib/shared-query.js +3 -3
- package/dist/app/lib/site-opened.d.ts +6 -0
- package/dist/app/lib/site-opened.js +10 -0
- package/dist/app/lib/turn-failure-analytics.js +5 -5
- package/dist/app/lib/use-duplicate-site.js +3 -3
- package/dist/app/lib/use-follow-up-repositories.js +4 -4
- package/dist/app/lib/use-session-list-hint-refresh.d.ts +20 -2
- package/dist/app/lib/use-session-list-hint-refresh.js +5 -1
- package/dist/app/lib/use-workspace-machines.js +6 -6
- package/dist/app/lib/use-workspace-model-catalog.js +8 -8
- package/dist/app/lib/use-workspace-rigs.js +8 -8
- package/dist/app/lib/workspace-navigation-preference.js +5 -5
- package/dist/app/lib/workspace-scope-context.js +4 -4
- package/dist/app/routes/artifacts.js +136 -153
- package/dist/app/routes/artifacts.js.map +1 -1
- package/dist/app/routes/retained-artifact.js +63 -62
- package/dist/app/routes/retained-artifact.js.map +1 -1
- package/dist/app/routes/session-unavailable.js +7 -5
- package/dist/app/routes/session.js +177 -173
- package/dist/app/routes/sessions-index-hydration.js +3 -3
- package/dist/app/routes/sessions-index.js +123 -121
- package/dist/app/routes/site-view.d.ts +11 -0
- package/dist/app/routes/site-view.js +597 -0
- package/dist/app/routes/site-view.js.map +1 -0
- 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 +39 -39
- package/dist/{browser-viewer-RYYQSRTC.js → browser-viewer-QMCNV4RI.js} +9 -7
- package/dist/{chat-interactive-block-ABCRKXJ4.js → chat-interactive-block-PMIAUXSO.js} +6 -6
- package/dist/{chunk-GIZGNFIX.js → chunk-22FFOHPT.js} +11 -11
- package/dist/chunk-22GTC4MZ.js +15 -0
- package/dist/chunk-22GTC4MZ.js.map +1 -0
- package/dist/{chunk-Z5WMLJKI.js → chunk-22JFMNMF.js} +92 -4
- package/dist/chunk-22JFMNMF.js.map +1 -0
- package/dist/{chunk-UHFWF6ZU.js → chunk-2FPS5H2D.js} +2 -2
- package/dist/{chunk-NAWXARTY.js → chunk-2KO2G3RI.js} +72 -6
- package/dist/chunk-2KO2G3RI.js.map +1 -0
- package/dist/{chunk-5POTDNQT.js → chunk-2NC7NZCE.js} +6 -6
- package/dist/{chunk-ZKYYZH6L.js → chunk-2QBYDGWO.js} +9 -9
- package/dist/{chunk-TWXIFWBD.js → chunk-34EU25RL.js} +2 -2
- package/dist/{chunk-LQKKSUCR.js → chunk-35BC2FU2.js} +19 -19
- package/dist/{chunk-PTGRFAMH.js → chunk-3ABPIUCK.js} +2 -2
- package/dist/{chunk-S4SC5SSV.js → chunk-3GU7AWG7.js} +18 -18
- package/dist/{chunk-722UO6YQ.js → chunk-3PEXVG4D.js} +2 -2
- package/dist/{chunk-OQAAI33Y.js → chunk-3RMKPHBL.js} +3 -3
- package/dist/{chunk-6JKZILLF.js → chunk-3RQUWFZT.js} +67 -67
- package/dist/{chunk-6JKZILLF.js.map → chunk-3RQUWFZT.js.map} +1 -1
- package/dist/{chunk-GCGTYXJJ.js → chunk-3STBLX4O.js} +9 -9
- package/dist/{chunk-YXIW7H4N.js → chunk-3X5FKDYQ.js} +28 -28
- package/dist/{chunk-KTRKZRID.js → chunk-4GLLWX33.js} +11 -11
- package/dist/{chunk-ROQOVH4N.js → chunk-4HEXNAFI.js} +20 -20
- package/dist/chunk-4HEXNAFI.js.map +1 -0
- package/dist/{chunk-SD2K5ZN5.js → chunk-4LPA25NQ.js} +4 -4
- package/dist/{chunk-DKCX643S.js → chunk-4RMN4E2Y.js} +13 -13
- package/dist/{chunk-E5FCEDMU.js → chunk-4SAGYEVB.js} +2 -2
- package/dist/{chunk-HTT3FB7T.js → chunk-4VK2R5QC.js} +3 -3
- package/dist/{chunk-CKG2EG62.js → chunk-4XQC7VLT.js} +14 -14
- package/dist/{chunk-IVOA3DXA.js → chunk-4YXAQMTD.js} +12 -12
- package/dist/{chunk-HOJGAJAB.js → chunk-52WK2GGK.js} +8 -8
- package/dist/{chunk-NYZQ7LO7.js → chunk-552UYIQ7.js} +20 -20
- package/dist/{chunk-LEXPBQ56.js → chunk-5DSKMG2I.js} +4 -4
- package/dist/{chunk-WNG757ID.js → chunk-5FA455GR.js} +4 -4
- package/dist/{chunk-MNWQAYY3.js → chunk-5FEN3KYH.js} +11 -11
- package/dist/{chunk-OSVHU2WU.js → chunk-5JHRMUAZ.js} +12 -12
- package/dist/{chunk-PM3OSANE.js → chunk-5MJHH72T.js} +14 -3
- package/dist/chunk-5MJHH72T.js.map +1 -0
- package/dist/{chunk-RKB2Z457.js → chunk-5VGJXWQ2.js} +2 -2
- package/dist/{chunk-GFUUFM2O.js → chunk-5W6ZDKRR.js} +6 -6
- package/dist/{chunk-NDETTZQA.js → chunk-5W7KJ5NQ.js} +37 -37
- package/dist/{chunk-Q35YZVDZ.js → chunk-5Y2FPLZE.js} +9 -9
- package/dist/{chunk-6W3LF3DB.js → chunk-5YFY4SFC.js} +2 -12
- package/dist/chunk-5YFY4SFC.js.map +1 -0
- package/dist/{chunk-F3NERYBQ.js → chunk-62VER7O4.js} +6 -6
- package/dist/{chunk-FBMU3VK5.js → chunk-6DCEDIF6.js} +2 -2
- package/dist/{chunk-WUHB422G.js → chunk-73WI7FL2.js} +18 -18
- package/dist/chunk-756MKA2J.js +45 -0
- package/dist/chunk-756MKA2J.js.map +1 -0
- package/dist/{chunk-QECZVL7S.js → chunk-7FJMRJDG.js} +2 -2
- package/dist/{chunk-7KGKDWWR.js → chunk-7HFLYNWN.js} +2 -2
- package/dist/{chunk-XVM566II.js → chunk-7KIENXRE.js} +2 -2
- package/dist/{chunk-CBY5CXBD.js → chunk-7NPCEBZE.js} +5 -5
- package/dist/{chunk-46VBQG2D.js → chunk-7P4AQMGA.js} +13 -13
- package/dist/{chunk-CKZW7A5S.js → chunk-7TCT7KPQ.js} +742 -644
- package/dist/chunk-7TCT7KPQ.js.map +1 -0
- package/dist/{chunk-O77Q4NG2.js → chunk-7XO7YKPC.js} +283 -1038
- package/dist/chunk-7XO7YKPC.js.map +1 -0
- package/dist/{chunk-S7PVL7XH.js → chunk-A4BD4ZVB.js} +4 -4
- package/dist/{chunk-VSQHDBHU.js → chunk-ACL2V2KE.js} +68 -35
- package/dist/chunk-ACL2V2KE.js.map +1 -0
- package/dist/{chunk-73SOCVLS.js → chunk-AIEXYO2X.js} +3 -3
- package/dist/{chunk-U7TC2XJQ.js → chunk-AJPW3SV4.js} +3 -3
- package/dist/{chunk-HRJQAFKR.js → chunk-AX6YJA5U.js} +2 -2
- package/dist/{chunk-P5WABK2H.js → chunk-BCM7C3MJ.js} +9 -9
- package/dist/{chunk-DT7BORXG.js → chunk-BMJTNPWK.js} +2 -2
- package/dist/{chunk-HIHO2QE7.js → chunk-BT2MVGHT.js} +2 -2
- package/dist/{chunk-3XOISKZC.js → chunk-BXQYAAVE.js} +4 -4
- package/dist/{chunk-IBTXYLBW.js → chunk-CCFWY4GF.js} +2 -2
- package/dist/{chunk-ZOC3OP6F.js → chunk-CCR33J7L.js} +2 -2
- package/dist/{chunk-GTQ3SNEI.js → chunk-CD3MO3IC.js} +2 -2
- package/dist/{chunk-WSMYOLHG.js → chunk-CDEXRJB6.js} +5 -5
- package/dist/{chunk-3GLAPCVI.js → chunk-CFFNT2OY.js} +8 -8
- package/dist/{chunk-FUSFVUIJ.js → chunk-CMLJSF2F.js} +12 -12
- package/dist/{chunk-O4DYOSOL.js → chunk-CP7ZQHBW.js} +13 -13
- package/dist/{chunk-IOKSNX74.js → chunk-D5OWJZQR.js} +2 -2
- package/dist/{chunk-SQGXMHJO.js → chunk-DGLRZMXL.js} +3 -3
- package/dist/{chunk-GNEHAPKV.js → chunk-DJFTH2DI.js} +3 -3
- package/dist/{chunk-HQG4SLTE.js → chunk-DYJGYGPB.js} +2 -2
- package/dist/{chunk-4EAF3HSD.js → chunk-EJ7WARW7.js} +2 -2
- package/dist/{chunk-3AA6RNGE.js → chunk-ENS6E4RZ.js} +2 -2
- package/dist/{chunk-OOEO4MKY.js → chunk-EPWD4KRA.js} +2 -2
- package/dist/{chunk-V5RJAWRP.js → chunk-EQE3MNQN.js} +5 -5
- package/dist/{chunk-TSBE4KOQ.js → chunk-EWL6NDOO.js} +3 -3
- package/dist/{chunk-OO2T63BY.js → chunk-EYS4ZOF5.js} +2 -2
- package/dist/{chunk-IC7KNOBB.js → chunk-FDAV72IX.js} +7 -7
- package/dist/{chunk-AG7VGUIW.js → chunk-FFNPUSVO.js} +7 -7
- package/dist/{chunk-P5T36BA3.js → chunk-FRP64DEK.js} +2 -2
- package/dist/{chunk-KBF3SE7G.js → chunk-FSP334UU.js} +2 -2
- package/dist/{chunk-ZHFKMMOT.js → chunk-FTX5CNHA.js} +6 -6
- package/dist/{chunk-KYBALSWW.js → chunk-FWOBNL2A.js} +1 -1
- package/dist/{chunk-HJ5XWW62.js → chunk-FWYEZ3LE.js} +34 -34
- package/dist/{chunk-WSLPZ43N.js → chunk-G4HQUBO4.js} +12 -12
- package/dist/{chunk-CSHBR2IZ.js → chunk-GDLDBR6B.js} +2 -2
- package/dist/chunk-GGV4NSG3.js +792 -0
- package/dist/chunk-GGV4NSG3.js.map +1 -0
- package/dist/{chunk-G3S2F35T.js → chunk-GHHM6WN4.js} +3 -3
- package/dist/{chunk-OANSIX34.js → chunk-GRSODLVO.js} +4 -4
- package/dist/{chunk-DDIBZA4X.js → chunk-GT7JFQ4E.js} +405 -148
- package/dist/chunk-GT7JFQ4E.js.map +1 -0
- package/dist/{chunk-EU6XSQFM.js → chunk-GXW2I2M2.js} +2 -2
- package/dist/{chunk-4246UYVG.js → chunk-GZS37O3G.js} +1 -1
- package/dist/{chunk-XFNLU7EW.js → chunk-H5M33DAL.js} +15 -6
- package/dist/chunk-H5M33DAL.js.map +1 -0
- package/dist/{chunk-Y7WMW74G.js → chunk-HQWVDQXW.js} +7 -7
- package/dist/{chunk-YTZQV2DD.js → chunk-HU6JTNWF.js} +2 -2
- package/dist/{chunk-QRVNI5V6.js → chunk-I6KIQKU6.js} +3 -3
- package/dist/{chunk-Q262Y2YX.js → chunk-IBA5FMRE.js} +141 -137
- package/dist/chunk-IBA5FMRE.js.map +1 -0
- package/dist/{chunk-BNUPYHHZ.js → chunk-IDXTASGN.js} +4 -4
- package/dist/{chunk-KF3MF6FP.js → chunk-IECRGM6K.js} +3 -2
- package/dist/chunk-IECRGM6K.js.map +1 -0
- package/dist/chunk-IJYL5BZM.js +38 -0
- package/dist/chunk-IJYL5BZM.js.map +1 -0
- package/dist/{chunk-L6RXRRN3.js → chunk-ILDOW2IQ.js} +3 -3
- package/dist/{chunk-VUHPA3XQ.js → chunk-ITX2TB4K.js} +6 -6
- package/dist/{chunk-ETCB6SUJ.js → chunk-J22HD2PB.js} +6 -6
- package/dist/{chunk-U47YDYLQ.js → chunk-J5MEDX7C.js} +8 -8
- package/dist/{chunk-6VQTHC4W.js → chunk-J7FBBLHF.js} +36 -36
- package/dist/{chunk-5JZYPZ72.js → chunk-JFK7NTEA.js} +4 -4
- package/dist/chunk-JFK7NTEA.js.map +1 -0
- package/dist/{chunk-QZRDCFHI.js → chunk-JM4HQPAI.js} +5 -5
- package/dist/{chunk-PIVGX42P.js → chunk-JNY5MT3I.js} +2 -2
- package/dist/{chunk-XWWXIZFP.js → chunk-JO6R5EXF.js} +7 -7
- package/dist/{chunk-MM7OKOTE.js → chunk-JQCGPTZ6.js} +9 -9
- package/dist/chunk-JRSNCSZN.js +37 -0
- package/dist/chunk-JRSNCSZN.js.map +1 -0
- package/dist/{chunk-KNFDWNCH.js → chunk-JXT5QDJC.js} +5 -5
- package/dist/{chunk-OR37STQZ.js → chunk-KEXYBG7Q.js} +3 -3
- package/dist/{chunk-AZVANYMB.js → chunk-KUNFUSZ7.js} +2 -2
- package/dist/{chunk-DXZNDKQD.js → chunk-LEEJBZ5B.js} +2 -2
- package/dist/{chunk-STUCI6QA.js → chunk-LEKBNKLD.js} +1 -1
- package/dist/{chunk-STUCI6QA.js.map → chunk-LEKBNKLD.js.map} +1 -1
- package/dist/{chunk-C535KSTY.js → chunk-LF5CBAOS.js} +4 -4
- package/dist/{chunk-BJIZ7PL7.js → chunk-LHLK7FUA.js} +145 -29
- package/dist/chunk-LHLK7FUA.js.map +1 -0
- package/dist/{chunk-RIMKJBCD.js → chunk-LMPTC4CX.js} +2 -2
- package/dist/{chunk-3KVWXKD6.js → chunk-LQ47YL6E.js} +2 -2
- package/dist/{chunk-H5WGWAYX.js → chunk-LT4J7RHI.js} +13 -13
- package/dist/{chunk-DSGMYES6.js → chunk-MCTTONOW.js} +28 -28
- package/dist/{chunk-IGHELZI7.js → chunk-MIECLOQC.js} +9 -9
- package/dist/{chunk-FM4OUCC2.js → chunk-MOKYT3X3.js} +3 -3
- package/dist/{chunk-GZ64CASI.js → chunk-MVZYNZXE.js} +5 -4
- package/dist/chunk-MVZYNZXE.js.map +1 -0
- package/dist/{chunk-RKILMLA7.js → chunk-MXLKI7BI.js} +3 -3
- package/dist/{chunk-45WYYFP6.js → chunk-N3ZP4IDU.js} +2 -2
- package/dist/{chunk-XRRSFQEV.js → chunk-NAZZLAWX.js} +2 -2
- package/dist/{chunk-UWJ5P5CU.js → chunk-NEK4WB5P.js} +3 -3
- package/dist/{chunk-6L7U46Y2.js → chunk-NKNVIO66.js} +2 -2
- package/dist/{chunk-JKUICTLM.js → chunk-NLAFNMPK.js} +2 -2
- package/dist/{chunk-4LKNIGHB.js → chunk-O2SBHS2N.js} +2 -2
- package/dist/{chunk-D3RK3NGM.js → chunk-PCFK7HKD.js} +17 -17
- package/dist/{chunk-VVCDB2T7.js → chunk-PCJLH45G.js} +3 -3
- package/dist/{chunk-PZ24CYDO.js → chunk-PFAUGEV5.js} +2 -2
- package/dist/{chunk-HGMWMK5K.js → chunk-PO3BH3KQ.js} +2 -2
- package/dist/{chunk-B74GSYR6.js → chunk-PUTS4DYW.js} +2 -2
- package/dist/{chunk-JSIDLTTG.js → chunk-PZ2V2XIK.js} +2 -2
- package/dist/{chunk-TMEQPODK.js → chunk-PZ37VDB5.js} +2 -2
- package/dist/{chunk-QIYBOFUV.js → chunk-QFMLAT7L.js} +246 -237
- package/dist/chunk-QFMLAT7L.js.map +1 -0
- package/dist/{chunk-LVONK3YQ.js → chunk-QRKTESVE.js} +2 -2
- package/dist/{chunk-HT5WSUC7.js → chunk-QXEDIDBZ.js} +3 -3
- package/dist/{chunk-WURSS6MP.js → chunk-R66YMYJU.js} +2 -2
- package/dist/{chunk-HDHK3SXK.js → chunk-RFLYID6H.js} +5 -5
- package/dist/{chunk-V77JK73U.js → chunk-RIYZFKIM.js} +37 -35
- package/dist/chunk-RIYZFKIM.js.map +1 -0
- package/dist/{chunk-VMFID36H.js → chunk-RQNZDTKT.js} +19 -19
- package/dist/{chunk-EHCUFCXM.js → chunk-RYSRFAHN.js} +32 -22
- package/dist/chunk-RYSRFAHN.js.map +1 -0
- package/dist/{chunk-I6VUUEXH.js → chunk-S2U4CDAC.js} +150 -150
- package/dist/chunk-S2U4CDAC.js.map +1 -0
- package/dist/chunk-S37GP7LX.js +204 -0
- package/dist/chunk-S37GP7LX.js.map +1 -0
- package/dist/{chunk-A2EWJQXX.js → chunk-SM5QX6UK.js} +4 -4
- package/dist/{chunk-FBE6AIIW.js → chunk-SOKNCW5U.js} +2 -2
- package/dist/{chunk-Q4NM77K7.js → chunk-SSOO4GWN.js} +193 -194
- package/dist/chunk-SSOO4GWN.js.map +1 -0
- package/dist/{chunk-PFKTGZKE.js → chunk-SY2AAZNB.js} +2 -2
- package/dist/{chunk-DFZMKCVP.js → chunk-TIQPKOFW.js} +4 -4
- package/dist/{chunk-HPPKLBTJ.js → chunk-TJQDL3JH.js} +2 -2
- package/dist/chunk-TL7BOFFL.js +89 -0
- package/dist/chunk-TL7BOFFL.js.map +1 -0
- package/dist/{chunk-FD4Q5KFL.js → chunk-TLL22FFO.js} +2 -2
- package/dist/{chunk-QM5H4FPT.js → chunk-TV6BWONY.js} +3 -3
- package/dist/{chunk-EDFJBX3V.js → chunk-U6MPB3K6.js} +9 -9
- package/dist/{chunk-TZD3U2S5.js → chunk-ULJAOMJA.js} +4 -4
- package/dist/chunk-ULYQEFNH.js +529 -0
- package/dist/chunk-ULYQEFNH.js.map +1 -0
- package/dist/{chunk-H5EVWF6L.js → chunk-UNNJUJVD.js} +2 -2
- package/dist/{chunk-324X6T6G.js → chunk-UP7I3W6O.js} +57 -55
- package/dist/chunk-UP7I3W6O.js.map +1 -0
- package/dist/{chunk-VU2EWALC.js → chunk-UUGR3X5I.js} +19 -12
- package/dist/chunk-UUGR3X5I.js.map +1 -0
- package/dist/{chunk-Z6DKXQG7.js → chunk-UXXFMF4X.js} +2 -2
- package/dist/{chunk-OBQVTCTW.js → chunk-UYNCMZX5.js} +4 -4
- package/dist/{chunk-RGPYMHKI.js → chunk-V3K4RQO7.js} +9 -3
- package/dist/chunk-V3K4RQO7.js.map +1 -0
- package/dist/{chunk-KZHW27BV.js → chunk-V4QZ7UBK.js} +2 -2
- package/dist/{chunk-NEVRLD77.js → chunk-VH5EGTH2.js} +3 -3
- package/dist/{chunk-MYNUBDU7.js → chunk-VYKW6TB2.js} +1 -1
- package/dist/chunk-VYKW6TB2.js.map +1 -0
- package/dist/{chunk-QEJTQTF5.js → chunk-W6T5HR3Z.js} +3 -3
- package/dist/{chunk-H6WWEKEV.js → chunk-WCMG4HYI.js} +10 -10
- package/dist/{chunk-GZLLDA6P.js → chunk-WEFN327U.js} +2 -2
- package/dist/{chunk-VW3BBTMA.js → chunk-WKHUZIOW.js} +1 -1
- package/dist/{chunk-ANHUMDJX.js → chunk-WNDTLK44.js} +2 -2
- package/dist/{chunk-2DS4UOYQ.js → chunk-WSZQNTVN.js} +2 -2
- package/dist/{chunk-Z2DAWUO3.js → chunk-XMNUZUUA.js} +6 -6
- package/dist/{chunk-GAIM5RNE.js → chunk-XN7NSPE6.js} +3 -3
- package/dist/chunk-XV6ZYRHK.js +59 -0
- package/dist/chunk-XV6ZYRHK.js.map +1 -0
- package/dist/{chunk-FLGUVRR7.js → chunk-Y5BSA3I7.js} +5 -5
- package/dist/{chunk-WRLWLGEF.js → chunk-Y5E3XQ2S.js} +25 -2
- package/dist/{chunk-WRLWLGEF.js.map → chunk-Y5E3XQ2S.js.map} +1 -1
- package/dist/{chunk-QILLL4JE.js → chunk-YEROLKOA.js} +16 -16
- package/dist/{chunk-NDF3SH3X.js → chunk-YJPKDRI2.js} +15 -15
- package/dist/{chunk-TQGJN5UZ.js → chunk-YV56F4UP.js} +318 -700
- package/dist/chunk-YV56F4UP.js.map +1 -0
- package/dist/{chunk-VAIESMPY.js → chunk-YVBHGMKC.js} +4 -4
- package/dist/{chunk-AD22P5X3.js → chunk-YXA2EKV3.js} +3 -3
- package/dist/{chunk-FDNJVZRE.js → chunk-YYCOSTUU.js} +17 -17
- package/dist/{chunk-NLMTNEWW.js → chunk-Z6E6TUAE.js} +2 -2
- package/dist/{chunk-BJW7G6EF.js → chunk-Z7IGO5EA.js} +3 -3
- package/dist/{chunk-N7JKT4ZU.js → chunk-ZEIFJ6PX.js} +7 -7
- package/dist/{chunk-Q4OHNGGB.js → chunk-ZS2UQ3DV.js} +68 -11
- package/dist/chunk-ZS2UQ3DV.js.map +1 -0
- package/dist/{chunk-VRGOOVDB.js → chunk-ZVVT72MT.js} +2 -2
- package/dist/components/browser-viewer.d.ts +1 -1
- package/dist/composer.js +14 -14
- package/dist/{computer-viewer-KEDVLD42.js → computer-viewer-25AJIDYA.js} +9 -9
- package/dist/connect.js +11 -11
- package/dist/desktop.js +2 -2
- package/dist/editor.js +2 -2
- package/dist/{embedded-new-voice-5PYRDZ6T.js → embedded-new-voice-RZZEJT6M.js} +8 -8
- package/dist/{embedded-voice-PABC5NBD.js → embedded-voice-6OKSSPLW.js} +8 -8
- package/dist/{fleet-decision-row-QNSTP3VX.js → fleet-decision-row-NN2HXDX3.js} +2 -2
- package/dist/hooks/internal.d.ts +38 -0
- package/dist/hooks/use-client-config-flags.d.ts +12 -0
- package/dist/hooks/use-workspace-sessions.d.ts +10 -1
- package/dist/index.js +233 -227
- package/dist/interaction.js +11 -9
- package/dist/interaction.js.map +1 -1
- package/dist/{latest-question-5LIRVG4G.js → latest-question-2PFWQSSG.js} +4 -3
- package/dist/{latest-question-5LIRVG4G.js.map → latest-question-2PFWQSSG.js.map} +1 -1
- package/dist/machines.js +5 -5
- package/dist/messages/en.d.ts +3 -3
- package/dist/messages.js +1 -1
- package/dist/{model-policy-picker-menu-CURJ247L.js → model-policy-picker-menu-VVFGGAI6.js} +6 -6
- package/dist/model-policy-picker-menu-VVFGGAI6.js.map +1 -0
- package/dist/native-previews.js +3 -3
- package/dist/{platform-activity-row-BMXXNZKX.js → platform-activity-row-ENQVIFTL.js} +2 -2
- package/dist/{queue-surface-implementation-2X5AXB6I.js → queue-surface-implementation-4SHOQPQQ.js} +10 -8
- package/dist/{queue-surface-implementation-2X5AXB6I.js.map → queue-surface-implementation-4SHOQPQQ.js.map} +1 -1
- package/dist/realtime.js +7 -7
- package/dist/{sandbox-files-4FBG3GS2.js → sandbox-files-CCOTGXXA.js} +11 -11
- package/dist/sandbox-files-CCOTGXXA.js.map +1 -0
- package/dist/session-app.js +277 -271
- package/dist/session-list-model.d.ts +1 -0
- package/dist/session-list-model.js +8 -2
- package/dist/{session-realtime-2XIB254N.js → session-realtime-JNKDSGH7.js} +3 -3
- package/dist/session-realtime-JNKDSGH7.js.map +1 -0
- package/dist/session-realtime.js +2 -2
- package/dist/session-ui.js +77 -72
- package/dist/session.js +27 -25
- package/dist/sites.js +2 -2
- package/dist/terminal.js +2 -2
- package/dist/this-computer.js +3 -3
- package/dist/timeline/invoked-tool.d.ts +5 -0
- package/dist/timeline/tool-display-name.d.ts +2 -2
- package/dist/timeline/tool-icon.d.ts +14 -0
- package/dist/timeline/tool-presentation.d.ts +8 -3
- package/dist/timeline/types.d.ts +2 -0
- package/dist/{timeline-annotation-markers-X4K2IEOO.js → timeline-annotation-markers-KHNYNY2J.js} +5 -5
- package/dist/{timeline-annotation-selection-MEHBW676.js → timeline-annotation-selection-AXEDJHBP.js} +7 -7
- package/dist/{timeline-annotations-dialog-U2FPQ3UY.js → timeline-annotations-dialog-AV4ZBXRC.js} +9 -9
- package/dist/timeline-model.js +28 -26
- package/dist/ui/access-list.js +20 -20
- package/dist/ui/choice-cards.js +2 -2
- package/dist/ui/detail-page.js +2 -2
- package/dist/ui/detail-sheet.js +2 -2
- package/dist/ui/diff-view.js +2 -2
- package/dist/ui/disclosure.js +4 -4
- package/dist/ui/flush-form-page.js +3 -3
- package/dist/ui/form-dialog.js +2 -2
- package/dist/ui/list-row.js +5 -5
- package/dist/ui/revision-history.js +11 -11
- package/dist/ui/role-select.js +6 -6
- package/dist/ui/settings-nav.js +3 -3
- package/dist/usage.js +3 -3
- package/dist/workbench.js +11 -11
- package/package.json +4 -4
- package/src/app/app-state.tsx +3 -1
- package/src/app/components/capabilities/session-capability-card.tsx +14 -1
- package/src/app/components/capabilities/session-chrome-card.dom-fixture.tsx +377 -0
- package/src/app/components/capabilities/session-chrome-card.test.tsx +18 -0
- package/src/app/components/capabilities/session-chrome-card.tsx +243 -0
- package/src/app/components/capabilities/session-machine-card.dom-fixture.tsx +2 -0
- package/src/app/components/capabilities/session-machine-card.tsx +74 -16
- package/src/app/components/rail/session-list.tsx +254 -44
- package/src/app/components/rail/session-row-content.tsx +24 -2
- package/src/app/components/rail/session-shell.tsx +14 -9
- package/src/app/components/rail/site-session-group-heading.tsx +59 -20
- package/src/app/components/session/session-tenancy-control.tsx +18 -0
- package/src/app/components/session/site-origin-link.test.tsx +73 -0
- package/src/app/components/session/site-origin-link.tsx +4 -2
- package/src/app/embed/memory-navigation.tsx +1 -0
- package/src/app/lib/actions/held-modifier.test.ts +101 -0
- package/src/app/lib/actions/held-modifier.ts +108 -0
- package/src/app/lib/console-site.tsx +38 -0
- package/src/app/lib/navigation.tsx +4 -0
- package/src/app/lib/routes.tsx +42 -0
- package/src/app/lib/session-failure-toasts.ts +26 -0
- package/src/app/lib/session-ui-features.tsx +18 -4
- package/src/app/lib/sessions-group.tsx +219 -30
- package/src/app/lib/site-opened.tsx +48 -0
- package/src/app/lib/site-session-groups.test.ts +173 -6
- package/src/app/lib/site-view-routes.test.ts +55 -0
- package/src/app/lib/use-session-list-hint-refresh.tsx +44 -4
- package/src/app/routes/artifacts.tsx +2 -29
- package/src/app/routes/session-transient-failures.test.tsx +343 -0
- package/src/app/routes/session-unavailable.tsx +74 -3
- package/src/app/routes/session.tsx +4 -13
- package/src/app/routes/sessions-index.tsx +13 -9
- package/src/app/routes/site-view.test.tsx +476 -0
- package/src/app/routes/site-view.tsx +583 -0
- package/src/components/browser-viewer.tsx +16 -2
- package/src/hooks/internal.ts +129 -6
- package/src/hooks/use-client-config-flags.ts +8 -0
- package/src/hooks/use-session-events.ts +83 -9
- package/src/hooks/use-workspace-sessions.ts +21 -1
- package/src/messages/en.ts +3 -3
- package/src/session-list-model.ts +4 -0
- package/src/timeline/activity-rail.tsx +3 -2
- package/src/timeline/invoked-tool.ts +14 -4
- package/src/timeline/projection.ts +15 -8
- package/src/timeline/rolling-activity.tsx +6 -2
- package/src/timeline/tool-display-name.ts +2 -2
- package/src/timeline/tool-icon.tsx +165 -0
- package/src/timeline/tool-presentation.ts +207 -48
- package/src/timeline/tool-renderers.tsx +1 -70
- package/src/timeline/types.ts +2 -0
- package/styles/compiled.css +38 -0
- package/dist/chunk-22ZBT6CN.js +0 -50
- package/dist/chunk-22ZBT6CN.js.map +0 -1
- package/dist/chunk-324X6T6G.js.map +0 -1
- package/dist/chunk-5JZYPZ72.js.map +0 -1
- package/dist/chunk-6W3LF3DB.js.map +0 -1
- package/dist/chunk-BJIZ7PL7.js.map +0 -1
- package/dist/chunk-CKZW7A5S.js.map +0 -1
- package/dist/chunk-DDIBZA4X.js.map +0 -1
- package/dist/chunk-EHCUFCXM.js.map +0 -1
- package/dist/chunk-GZ64CASI.js.map +0 -1
- package/dist/chunk-I6VUUEXH.js.map +0 -1
- package/dist/chunk-KF3MF6FP.js.map +0 -1
- package/dist/chunk-MYNUBDU7.js.map +0 -1
- package/dist/chunk-NAWXARTY.js.map +0 -1
- package/dist/chunk-O77Q4NG2.js.map +0 -1
- package/dist/chunk-PM3OSANE.js.map +0 -1
- package/dist/chunk-Q262Y2YX.js.map +0 -1
- package/dist/chunk-Q4NM77K7.js.map +0 -1
- package/dist/chunk-Q4OHNGGB.js.map +0 -1
- package/dist/chunk-QIYBOFUV.js.map +0 -1
- package/dist/chunk-R25ZKOZR.js +0 -24
- package/dist/chunk-R25ZKOZR.js.map +0 -1
- package/dist/chunk-RGPYMHKI.js.map +0 -1
- package/dist/chunk-ROQOVH4N.js.map +0 -1
- package/dist/chunk-TQGJN5UZ.js.map +0 -1
- package/dist/chunk-V77JK73U.js.map +0 -1
- package/dist/chunk-VSQHDBHU.js.map +0 -1
- package/dist/chunk-VU2EWALC.js.map +0 -1
- package/dist/chunk-XFNLU7EW.js.map +0 -1
- package/dist/chunk-Z5WMLJKI.js.map +0 -1
- /package/dist/{browser-viewer-RYYQSRTC.js.map → app/components/capabilities/session-chrome-card.js.map} +0 -0
- /package/dist/{chat-interactive-block-ABCRKXJ4.js.map → app/lib/console-site.js.map} +0 -0
- /package/dist/{computer-viewer-KEDVLD42.js.map → app/lib/site-opened.js.map} +0 -0
- /package/dist/{embedded-new-voice-5PYRDZ6T.js.map → browser-viewer-QMCNV4RI.js.map} +0 -0
- /package/dist/{embedded-voice-PABC5NBD.js.map → chat-interactive-block-PMIAUXSO.js.map} +0 -0
- /package/dist/{chunk-GIZGNFIX.js.map → chunk-22FFOHPT.js.map} +0 -0
- /package/dist/{chunk-UHFWF6ZU.js.map → chunk-2FPS5H2D.js.map} +0 -0
- /package/dist/{chunk-5POTDNQT.js.map → chunk-2NC7NZCE.js.map} +0 -0
- /package/dist/{chunk-ZKYYZH6L.js.map → chunk-2QBYDGWO.js.map} +0 -0
- /package/dist/{chunk-TWXIFWBD.js.map → chunk-34EU25RL.js.map} +0 -0
- /package/dist/{chunk-LQKKSUCR.js.map → chunk-35BC2FU2.js.map} +0 -0
- /package/dist/{chunk-PTGRFAMH.js.map → chunk-3ABPIUCK.js.map} +0 -0
- /package/dist/{chunk-S4SC5SSV.js.map → chunk-3GU7AWG7.js.map} +0 -0
- /package/dist/{chunk-722UO6YQ.js.map → chunk-3PEXVG4D.js.map} +0 -0
- /package/dist/{chunk-OQAAI33Y.js.map → chunk-3RMKPHBL.js.map} +0 -0
- /package/dist/{chunk-GCGTYXJJ.js.map → chunk-3STBLX4O.js.map} +0 -0
- /package/dist/{chunk-YXIW7H4N.js.map → chunk-3X5FKDYQ.js.map} +0 -0
- /package/dist/{chunk-KTRKZRID.js.map → chunk-4GLLWX33.js.map} +0 -0
- /package/dist/{chunk-SD2K5ZN5.js.map → chunk-4LPA25NQ.js.map} +0 -0
- /package/dist/{chunk-DKCX643S.js.map → chunk-4RMN4E2Y.js.map} +0 -0
- /package/dist/{chunk-E5FCEDMU.js.map → chunk-4SAGYEVB.js.map} +0 -0
- /package/dist/{chunk-HTT3FB7T.js.map → chunk-4VK2R5QC.js.map} +0 -0
- /package/dist/{chunk-CKG2EG62.js.map → chunk-4XQC7VLT.js.map} +0 -0
- /package/dist/{chunk-IVOA3DXA.js.map → chunk-4YXAQMTD.js.map} +0 -0
- /package/dist/{chunk-HOJGAJAB.js.map → chunk-52WK2GGK.js.map} +0 -0
- /package/dist/{chunk-NYZQ7LO7.js.map → chunk-552UYIQ7.js.map} +0 -0
- /package/dist/{chunk-LEXPBQ56.js.map → chunk-5DSKMG2I.js.map} +0 -0
- /package/dist/{chunk-WNG757ID.js.map → chunk-5FA455GR.js.map} +0 -0
- /package/dist/{chunk-MNWQAYY3.js.map → chunk-5FEN3KYH.js.map} +0 -0
- /package/dist/{chunk-OSVHU2WU.js.map → chunk-5JHRMUAZ.js.map} +0 -0
- /package/dist/{chunk-RKB2Z457.js.map → chunk-5VGJXWQ2.js.map} +0 -0
- /package/dist/{chunk-GFUUFM2O.js.map → chunk-5W6ZDKRR.js.map} +0 -0
- /package/dist/{chunk-NDETTZQA.js.map → chunk-5W7KJ5NQ.js.map} +0 -0
- /package/dist/{chunk-Q35YZVDZ.js.map → chunk-5Y2FPLZE.js.map} +0 -0
- /package/dist/{chunk-F3NERYBQ.js.map → chunk-62VER7O4.js.map} +0 -0
- /package/dist/{chunk-FBMU3VK5.js.map → chunk-6DCEDIF6.js.map} +0 -0
- /package/dist/{chunk-WUHB422G.js.map → chunk-73WI7FL2.js.map} +0 -0
- /package/dist/{chunk-QECZVL7S.js.map → chunk-7FJMRJDG.js.map} +0 -0
- /package/dist/{chunk-7KGKDWWR.js.map → chunk-7HFLYNWN.js.map} +0 -0
- /package/dist/{chunk-XVM566II.js.map → chunk-7KIENXRE.js.map} +0 -0
- /package/dist/{chunk-CBY5CXBD.js.map → chunk-7NPCEBZE.js.map} +0 -0
- /package/dist/{chunk-46VBQG2D.js.map → chunk-7P4AQMGA.js.map} +0 -0
- /package/dist/{chunk-S7PVL7XH.js.map → chunk-A4BD4ZVB.js.map} +0 -0
- /package/dist/{chunk-73SOCVLS.js.map → chunk-AIEXYO2X.js.map} +0 -0
- /package/dist/{chunk-U7TC2XJQ.js.map → chunk-AJPW3SV4.js.map} +0 -0
- /package/dist/{chunk-HRJQAFKR.js.map → chunk-AX6YJA5U.js.map} +0 -0
- /package/dist/{chunk-P5WABK2H.js.map → chunk-BCM7C3MJ.js.map} +0 -0
- /package/dist/{chunk-DT7BORXG.js.map → chunk-BMJTNPWK.js.map} +0 -0
- /package/dist/{chunk-HIHO2QE7.js.map → chunk-BT2MVGHT.js.map} +0 -0
- /package/dist/{chunk-3XOISKZC.js.map → chunk-BXQYAAVE.js.map} +0 -0
- /package/dist/{chunk-IBTXYLBW.js.map → chunk-CCFWY4GF.js.map} +0 -0
- /package/dist/{chunk-ZOC3OP6F.js.map → chunk-CCR33J7L.js.map} +0 -0
- /package/dist/{chunk-GTQ3SNEI.js.map → chunk-CD3MO3IC.js.map} +0 -0
- /package/dist/{chunk-WSMYOLHG.js.map → chunk-CDEXRJB6.js.map} +0 -0
- /package/dist/{chunk-3GLAPCVI.js.map → chunk-CFFNT2OY.js.map} +0 -0
- /package/dist/{chunk-FUSFVUIJ.js.map → chunk-CMLJSF2F.js.map} +0 -0
- /package/dist/{chunk-O4DYOSOL.js.map → chunk-CP7ZQHBW.js.map} +0 -0
- /package/dist/{chunk-IOKSNX74.js.map → chunk-D5OWJZQR.js.map} +0 -0
- /package/dist/{chunk-SQGXMHJO.js.map → chunk-DGLRZMXL.js.map} +0 -0
- /package/dist/{chunk-GNEHAPKV.js.map → chunk-DJFTH2DI.js.map} +0 -0
- /package/dist/{chunk-HQG4SLTE.js.map → chunk-DYJGYGPB.js.map} +0 -0
- /package/dist/{chunk-4EAF3HSD.js.map → chunk-EJ7WARW7.js.map} +0 -0
- /package/dist/{chunk-3AA6RNGE.js.map → chunk-ENS6E4RZ.js.map} +0 -0
- /package/dist/{chunk-OOEO4MKY.js.map → chunk-EPWD4KRA.js.map} +0 -0
- /package/dist/{chunk-V5RJAWRP.js.map → chunk-EQE3MNQN.js.map} +0 -0
- /package/dist/{chunk-TSBE4KOQ.js.map → chunk-EWL6NDOO.js.map} +0 -0
- /package/dist/{chunk-OO2T63BY.js.map → chunk-EYS4ZOF5.js.map} +0 -0
- /package/dist/{chunk-IC7KNOBB.js.map → chunk-FDAV72IX.js.map} +0 -0
- /package/dist/{chunk-AG7VGUIW.js.map → chunk-FFNPUSVO.js.map} +0 -0
- /package/dist/{chunk-P5T36BA3.js.map → chunk-FRP64DEK.js.map} +0 -0
- /package/dist/{chunk-KBF3SE7G.js.map → chunk-FSP334UU.js.map} +0 -0
- /package/dist/{chunk-ZHFKMMOT.js.map → chunk-FTX5CNHA.js.map} +0 -0
- /package/dist/{chunk-KYBALSWW.js.map → chunk-FWOBNL2A.js.map} +0 -0
- /package/dist/{chunk-HJ5XWW62.js.map → chunk-FWYEZ3LE.js.map} +0 -0
- /package/dist/{chunk-WSLPZ43N.js.map → chunk-G4HQUBO4.js.map} +0 -0
- /package/dist/{chunk-CSHBR2IZ.js.map → chunk-GDLDBR6B.js.map} +0 -0
- /package/dist/{chunk-G3S2F35T.js.map → chunk-GHHM6WN4.js.map} +0 -0
- /package/dist/{chunk-OANSIX34.js.map → chunk-GRSODLVO.js.map} +0 -0
- /package/dist/{chunk-EU6XSQFM.js.map → chunk-GXW2I2M2.js.map} +0 -0
- /package/dist/{chunk-4246UYVG.js.map → chunk-GZS37O3G.js.map} +0 -0
- /package/dist/{chunk-Y7WMW74G.js.map → chunk-HQWVDQXW.js.map} +0 -0
- /package/dist/{chunk-YTZQV2DD.js.map → chunk-HU6JTNWF.js.map} +0 -0
- /package/dist/{chunk-QRVNI5V6.js.map → chunk-I6KIQKU6.js.map} +0 -0
- /package/dist/{chunk-BNUPYHHZ.js.map → chunk-IDXTASGN.js.map} +0 -0
- /package/dist/{chunk-L6RXRRN3.js.map → chunk-ILDOW2IQ.js.map} +0 -0
- /package/dist/{chunk-VUHPA3XQ.js.map → chunk-ITX2TB4K.js.map} +0 -0
- /package/dist/{chunk-ETCB6SUJ.js.map → chunk-J22HD2PB.js.map} +0 -0
- /package/dist/{chunk-U47YDYLQ.js.map → chunk-J5MEDX7C.js.map} +0 -0
- /package/dist/{chunk-6VQTHC4W.js.map → chunk-J7FBBLHF.js.map} +0 -0
- /package/dist/{chunk-QZRDCFHI.js.map → chunk-JM4HQPAI.js.map} +0 -0
- /package/dist/{chunk-PIVGX42P.js.map → chunk-JNY5MT3I.js.map} +0 -0
- /package/dist/{chunk-XWWXIZFP.js.map → chunk-JO6R5EXF.js.map} +0 -0
- /package/dist/{chunk-MM7OKOTE.js.map → chunk-JQCGPTZ6.js.map} +0 -0
- /package/dist/{chunk-KNFDWNCH.js.map → chunk-JXT5QDJC.js.map} +0 -0
- /package/dist/{chunk-OR37STQZ.js.map → chunk-KEXYBG7Q.js.map} +0 -0
- /package/dist/{chunk-AZVANYMB.js.map → chunk-KUNFUSZ7.js.map} +0 -0
- /package/dist/{chunk-DXZNDKQD.js.map → chunk-LEEJBZ5B.js.map} +0 -0
- /package/dist/{chunk-C535KSTY.js.map → chunk-LF5CBAOS.js.map} +0 -0
- /package/dist/{chunk-RIMKJBCD.js.map → chunk-LMPTC4CX.js.map} +0 -0
- /package/dist/{chunk-3KVWXKD6.js.map → chunk-LQ47YL6E.js.map} +0 -0
- /package/dist/{chunk-H5WGWAYX.js.map → chunk-LT4J7RHI.js.map} +0 -0
- /package/dist/{chunk-DSGMYES6.js.map → chunk-MCTTONOW.js.map} +0 -0
- /package/dist/{chunk-IGHELZI7.js.map → chunk-MIECLOQC.js.map} +0 -0
- /package/dist/{chunk-FM4OUCC2.js.map → chunk-MOKYT3X3.js.map} +0 -0
- /package/dist/{chunk-RKILMLA7.js.map → chunk-MXLKI7BI.js.map} +0 -0
- /package/dist/{chunk-45WYYFP6.js.map → chunk-N3ZP4IDU.js.map} +0 -0
- /package/dist/{chunk-XRRSFQEV.js.map → chunk-NAZZLAWX.js.map} +0 -0
- /package/dist/{chunk-UWJ5P5CU.js.map → chunk-NEK4WB5P.js.map} +0 -0
- /package/dist/{chunk-6L7U46Y2.js.map → chunk-NKNVIO66.js.map} +0 -0
- /package/dist/{chunk-JKUICTLM.js.map → chunk-NLAFNMPK.js.map} +0 -0
- /package/dist/{chunk-4LKNIGHB.js.map → chunk-O2SBHS2N.js.map} +0 -0
- /package/dist/{chunk-D3RK3NGM.js.map → chunk-PCFK7HKD.js.map} +0 -0
- /package/dist/{chunk-VVCDB2T7.js.map → chunk-PCJLH45G.js.map} +0 -0
- /package/dist/{chunk-PZ24CYDO.js.map → chunk-PFAUGEV5.js.map} +0 -0
- /package/dist/{chunk-HGMWMK5K.js.map → chunk-PO3BH3KQ.js.map} +0 -0
- /package/dist/{chunk-B74GSYR6.js.map → chunk-PUTS4DYW.js.map} +0 -0
- /package/dist/{chunk-JSIDLTTG.js.map → chunk-PZ2V2XIK.js.map} +0 -0
- /package/dist/{chunk-TMEQPODK.js.map → chunk-PZ37VDB5.js.map} +0 -0
- /package/dist/{chunk-LVONK3YQ.js.map → chunk-QRKTESVE.js.map} +0 -0
- /package/dist/{chunk-HT5WSUC7.js.map → chunk-QXEDIDBZ.js.map} +0 -0
- /package/dist/{chunk-WURSS6MP.js.map → chunk-R66YMYJU.js.map} +0 -0
- /package/dist/{chunk-HDHK3SXK.js.map → chunk-RFLYID6H.js.map} +0 -0
- /package/dist/{chunk-VMFID36H.js.map → chunk-RQNZDTKT.js.map} +0 -0
- /package/dist/{chunk-A2EWJQXX.js.map → chunk-SM5QX6UK.js.map} +0 -0
- /package/dist/{chunk-FBE6AIIW.js.map → chunk-SOKNCW5U.js.map} +0 -0
- /package/dist/{chunk-PFKTGZKE.js.map → chunk-SY2AAZNB.js.map} +0 -0
- /package/dist/{chunk-DFZMKCVP.js.map → chunk-TIQPKOFW.js.map} +0 -0
- /package/dist/{chunk-HPPKLBTJ.js.map → chunk-TJQDL3JH.js.map} +0 -0
- /package/dist/{chunk-FD4Q5KFL.js.map → chunk-TLL22FFO.js.map} +0 -0
- /package/dist/{chunk-QM5H4FPT.js.map → chunk-TV6BWONY.js.map} +0 -0
- /package/dist/{chunk-EDFJBX3V.js.map → chunk-U6MPB3K6.js.map} +0 -0
- /package/dist/{chunk-TZD3U2S5.js.map → chunk-ULJAOMJA.js.map} +0 -0
- /package/dist/{chunk-H5EVWF6L.js.map → chunk-UNNJUJVD.js.map} +0 -0
- /package/dist/{chunk-Z6DKXQG7.js.map → chunk-UXXFMF4X.js.map} +0 -0
- /package/dist/{chunk-OBQVTCTW.js.map → chunk-UYNCMZX5.js.map} +0 -0
- /package/dist/{chunk-KZHW27BV.js.map → chunk-V4QZ7UBK.js.map} +0 -0
- /package/dist/{chunk-NEVRLD77.js.map → chunk-VH5EGTH2.js.map} +0 -0
- /package/dist/{chunk-QEJTQTF5.js.map → chunk-W6T5HR3Z.js.map} +0 -0
- /package/dist/{chunk-H6WWEKEV.js.map → chunk-WCMG4HYI.js.map} +0 -0
- /package/dist/{chunk-GZLLDA6P.js.map → chunk-WEFN327U.js.map} +0 -0
- /package/dist/{chunk-VW3BBTMA.js.map → chunk-WKHUZIOW.js.map} +0 -0
- /package/dist/{chunk-ANHUMDJX.js.map → chunk-WNDTLK44.js.map} +0 -0
- /package/dist/{chunk-2DS4UOYQ.js.map → chunk-WSZQNTVN.js.map} +0 -0
- /package/dist/{chunk-Z2DAWUO3.js.map → chunk-XMNUZUUA.js.map} +0 -0
- /package/dist/{chunk-GAIM5RNE.js.map → chunk-XN7NSPE6.js.map} +0 -0
- /package/dist/{chunk-FLGUVRR7.js.map → chunk-Y5BSA3I7.js.map} +0 -0
- /package/dist/{chunk-QILLL4JE.js.map → chunk-YEROLKOA.js.map} +0 -0
- /package/dist/{chunk-NDF3SH3X.js.map → chunk-YJPKDRI2.js.map} +0 -0
- /package/dist/{chunk-VAIESMPY.js.map → chunk-YVBHGMKC.js.map} +0 -0
- /package/dist/{chunk-AD22P5X3.js.map → chunk-YXA2EKV3.js.map} +0 -0
- /package/dist/{chunk-FDNJVZRE.js.map → chunk-YYCOSTUU.js.map} +0 -0
- /package/dist/{chunk-NLMTNEWW.js.map → chunk-Z6E6TUAE.js.map} +0 -0
- /package/dist/{chunk-BJW7G6EF.js.map → chunk-Z7IGO5EA.js.map} +0 -0
- /package/dist/{chunk-N7JKT4ZU.js.map → chunk-ZEIFJ6PX.js.map} +0 -0
- /package/dist/{chunk-VRGOOVDB.js.map → chunk-ZVVT72MT.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-CURJ247L.js.map → computer-viewer-25AJIDYA.js.map} +0 -0
- /package/dist/{sandbox-files-4FBG3GS2.js.map → embedded-new-voice-RZZEJT6M.js.map} +0 -0
- /package/dist/{session-realtime-2XIB254N.js.map → embedded-voice-6OKSSPLW.js.map} +0 -0
- /package/dist/{fleet-decision-row-QNSTP3VX.js.map → fleet-decision-row-NN2HXDX3.js.map} +0 -0
- /package/dist/{platform-activity-row-BMXXNZKX.js.map → platform-activity-row-ENQVIFTL.js.map} +0 -0
- /package/dist/{timeline-annotation-markers-X4K2IEOO.js.map → timeline-annotation-markers-KHNYNY2J.js.map} +0 -0
- /package/dist/{timeline-annotation-selection-MEHBW676.js.map → timeline-annotation-selection-AXEDJHBP.js.map} +0 -0
- /package/dist/{timeline-annotations-dialog-U2FPQ3UY.js.map → timeline-annotations-dialog-AV4ZBXRC.js.map} +0 -0
|
@@ -1,124 +1,120 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
SessionCustomMcpCard
|
|
4
|
-
} from "../../../chunk-Y7WMW74G.js";
|
|
5
2
|
import {
|
|
6
3
|
DetailBody
|
|
7
|
-
} from "../../../chunk-
|
|
8
|
-
import "../../../chunk-C535KSTY.js";
|
|
4
|
+
} from "../../../chunk-4RMN4E2Y.js";
|
|
9
5
|
import "../../../chunk-Y6TTMPZC.js";
|
|
10
|
-
import
|
|
6
|
+
import {
|
|
7
|
+
SessionGitHubCapabilityCard
|
|
8
|
+
} from "../../../chunk-WCMG4HYI.js";
|
|
11
9
|
import {
|
|
12
10
|
useCapabilitiesCatalog
|
|
13
|
-
} from "../../../chunk-
|
|
14
|
-
import "../../../chunk-
|
|
15
|
-
import "../../../chunk-GCGTYXJJ.js";
|
|
16
|
-
import "../../../chunk-AF53CDFM.js";
|
|
11
|
+
} from "../../../chunk-62VER7O4.js";
|
|
12
|
+
import "../../../chunk-MOMM26UR.js";
|
|
17
13
|
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
} from "../../../chunk-VSQHDBHU.js";
|
|
14
|
+
SessionCustomMcpCard
|
|
15
|
+
} from "../../../chunk-HQWVDQXW.js";
|
|
21
16
|
import "../../../chunk-FIPSOCVC.js";
|
|
17
|
+
import "../../../chunk-3STBLX4O.js";
|
|
18
|
+
import "../../../chunk-LF5CBAOS.js";
|
|
22
19
|
import {
|
|
23
20
|
performCapabilityAction
|
|
24
21
|
} from "../../../chunk-NWSAF6P5.js";
|
|
25
|
-
import "../../../chunk-
|
|
22
|
+
import "../../../chunk-5N6XZ7LG.js";
|
|
23
|
+
import "../../../chunk-VHDCIO4V.js";
|
|
24
|
+
import "../../../chunk-V3RHG7CF.js";
|
|
26
25
|
import {
|
|
27
|
-
|
|
28
|
-
} from "../../../chunk-
|
|
29
|
-
import
|
|
26
|
+
SessionChromeCapabilityCard
|
|
27
|
+
} from "../../../chunk-S37GP7LX.js";
|
|
28
|
+
import {
|
|
29
|
+
RepeatedMachineRequestNote,
|
|
30
|
+
SessionMachineCapabilityCard
|
|
31
|
+
} from "../../../chunk-ACL2V2KE.js";
|
|
32
|
+
import "../../../chunk-552UYIQ7.js";
|
|
33
|
+
import "../../../chunk-AF53CDFM.js";
|
|
30
34
|
import "../../../chunk-IYEI5OZL.js";
|
|
31
|
-
import "../../../chunk-
|
|
32
|
-
import "../../../chunk-M27WO6W3.js";
|
|
35
|
+
import "../../../chunk-LEDS7L3I.js";
|
|
33
36
|
import "../../../chunk-MKG5VTIJ.js";
|
|
37
|
+
import "../../../chunk-M27WO6W3.js";
|
|
34
38
|
import "../../../chunk-46I7MMAL.js";
|
|
35
39
|
import "../../../chunk-NRREC7JK.js";
|
|
36
40
|
import "../../../chunk-KV6GUPL2.js";
|
|
37
41
|
import {
|
|
38
42
|
CodexSubscriptionsSurface
|
|
39
|
-
} from "../../../chunk-
|
|
40
|
-
import "../../../chunk-
|
|
41
|
-
import "../../../chunk-VAIESMPY.js";
|
|
43
|
+
} from "../../../chunk-SOKNCW5U.js";
|
|
44
|
+
import "../../../chunk-JM4HQPAI.js";
|
|
42
45
|
import "../../../chunk-2LUBBDZV.js";
|
|
43
|
-
import "../../../chunk-
|
|
44
|
-
import "../../../chunk-
|
|
45
|
-
import "../../../chunk-
|
|
46
|
+
import "../../../chunk-JQCGPTZ6.js";
|
|
47
|
+
import "../../../chunk-YVBHGMKC.js";
|
|
48
|
+
import "../../../chunk-5DSKMG2I.js";
|
|
46
49
|
import "../../../chunk-J6WRB3VZ.js";
|
|
47
50
|
import "../../../chunk-TFK4KFKA.js";
|
|
48
51
|
import "../../../chunk-HI7BTJRG.js";
|
|
52
|
+
import "../../../chunk-KUNFUSZ7.js";
|
|
49
53
|
import "../../../chunk-PVNI2KHS.js";
|
|
50
|
-
import "../../../chunk-
|
|
54
|
+
import "../../../chunk-PCJLH45G.js";
|
|
51
55
|
import "../../../chunk-J4OPEWC3.js";
|
|
52
|
-
import "../../../chunk-722UO6YQ.js";
|
|
53
56
|
import "../../../chunk-HUKUDAIP.js";
|
|
57
|
+
import "../../../chunk-55S3W7RZ.js";
|
|
58
|
+
import "../../../chunk-FABYS4WM.js";
|
|
54
59
|
import {
|
|
55
60
|
capabilityLogoSource
|
|
56
|
-
} from "../../../chunk-
|
|
61
|
+
} from "../../../chunk-7FJMRJDG.js";
|
|
57
62
|
import {
|
|
58
63
|
capabilityConnectPlan,
|
|
59
64
|
capabilityErrorToast,
|
|
60
65
|
connectionHealth
|
|
61
66
|
} from "../../../chunk-22NENBA3.js";
|
|
67
|
+
import "../../../chunk-3PEXVG4D.js";
|
|
62
68
|
import "../../../chunk-G46333YC.js";
|
|
63
|
-
import "../../../chunk-VVCDB2T7.js";
|
|
64
69
|
import "../../../chunk-L5HJ4UYB.js";
|
|
65
|
-
import "../../../chunk-FABYS4WM.js";
|
|
66
|
-
import "../../../chunk-55S3W7RZ.js";
|
|
67
70
|
import "../../../chunk-A3MTTRCX.js";
|
|
68
71
|
import "../../../chunk-ECNX3UOI.js";
|
|
69
|
-
import "../../../chunk-
|
|
72
|
+
import "../../../chunk-IZMUUUYD.js";
|
|
70
73
|
import "../../../chunk-SS3N75VI.js";
|
|
71
74
|
import "../../../chunk-325C2TCI.js";
|
|
75
|
+
import "../../../chunk-XSOPQZGH.js";
|
|
72
76
|
import "../../../chunk-WMSCYECP.js";
|
|
73
|
-
import "../../../chunk-FQQEZUSN.js";
|
|
74
|
-
import "../../../chunk-6KELG2EG.js";
|
|
75
|
-
import "../../../chunk-IZMUUUYD.js";
|
|
76
|
-
import "../../../chunk-T6KM63FZ.js";
|
|
77
77
|
import "../../../chunk-PYC2ZWBJ.js";
|
|
78
|
-
import "../../../chunk-
|
|
79
|
-
import "../../../chunk-ZMBJPN4T.js";
|
|
78
|
+
import "../../../chunk-T6KM63FZ.js";
|
|
80
79
|
import "../../../chunk-HZUL2CUH.js";
|
|
80
|
+
import "../../../chunk-6KELG2EG.js";
|
|
81
|
+
import "../../../chunk-TREHTIBD.js";
|
|
82
|
+
import "../../../chunk-FQQEZUSN.js";
|
|
83
|
+
import "../../../chunk-XNTW77T6.js";
|
|
84
|
+
import "../../../chunk-EPCPGUIF.js";
|
|
81
85
|
import "../../../chunk-X6WZOHBI.js";
|
|
82
|
-
import {
|
|
83
|
-
t
|
|
84
|
-
} from "../../../chunk-HPPKLBTJ.js";
|
|
85
86
|
import "../../../chunk-L6Y4ALSM.js";
|
|
86
87
|
import {
|
|
87
|
-
|
|
88
|
-
} from "../../../chunk-
|
|
89
|
-
import "../../../chunk-74JEZLLQ.js";
|
|
88
|
+
t
|
|
89
|
+
} from "../../../chunk-TJQDL3JH.js";
|
|
90
90
|
import "../../../chunk-YG6NARQY.js";
|
|
91
91
|
import {
|
|
92
92
|
usePage
|
|
93
|
-
} from "../../../chunk-
|
|
93
|
+
} from "../../../chunk-VYKW6TB2.js";
|
|
94
94
|
import "../../../chunk-IZUAIHR4.js";
|
|
95
95
|
import {
|
|
96
|
-
|
|
97
|
-
} from "../../../chunk-
|
|
96
|
+
hasWorkspacePermission
|
|
97
|
+
} from "../../../chunk-FIDD34ZF.js";
|
|
98
|
+
import "../../../chunk-74JEZLLQ.js";
|
|
98
99
|
import {
|
|
99
100
|
useAppContext
|
|
100
101
|
} from "../../../chunk-W6KAUGXO.js";
|
|
101
|
-
import "../../../chunk-
|
|
102
|
-
import "../../../chunk-HY7EYWIG.js";
|
|
102
|
+
import "../../../chunk-5OTQA7CM.js";
|
|
103
103
|
import "../../../chunk-XG57V2BN.js";
|
|
104
104
|
import "../../../chunk-KS57MLGE.js";
|
|
105
|
-
import "../../../chunk-
|
|
106
|
-
import "../../../chunk-
|
|
107
|
-
import "../../../chunk-A3KMTJZS.js";
|
|
108
|
-
import "../../../chunk-2DS4UOYQ.js";
|
|
109
|
-
import {
|
|
110
|
-
Notice
|
|
111
|
-
} from "../../../chunk-WLEDGIVS.js";
|
|
105
|
+
import "../../../chunk-ZMBJPN4T.js";
|
|
106
|
+
import "../../../chunk-HY7EYWIG.js";
|
|
112
107
|
import {
|
|
113
|
-
|
|
114
|
-
} from "../../../chunk-
|
|
115
|
-
import "../../../chunk-
|
|
116
|
-
import "../../../chunk-HT5WSUC7.js";
|
|
117
|
-
import "../../../chunk-DFZMKCVP.js";
|
|
108
|
+
userErrorText
|
|
109
|
+
} from "../../../chunk-L4OF77LE.js";
|
|
110
|
+
import "../../../chunk-TIQPKOFW.js";
|
|
118
111
|
import "../../../chunk-M357MHH3.js";
|
|
112
|
+
import "../../../chunk-NRP4REXE.js";
|
|
113
|
+
import "../../../chunk-DGLRZMXL.js";
|
|
114
|
+
import "../../../chunk-A3KMTJZS.js";
|
|
119
115
|
import {
|
|
120
116
|
SessionMcpCapabilityCard
|
|
121
|
-
} from "../../../chunk-
|
|
117
|
+
} from "../../../chunk-ILDOW2IQ.js";
|
|
122
118
|
import {
|
|
123
119
|
applySessionCapabilityAccess,
|
|
124
120
|
attachSessionCapability,
|
|
@@ -126,30 +122,39 @@ import {
|
|
|
126
122
|
} from "../../../chunk-CUUJROYT.js";
|
|
127
123
|
import {
|
|
128
124
|
SessionCapabilityFrame
|
|
129
|
-
} from "../../../chunk-
|
|
130
|
-
import "../../../chunk-
|
|
125
|
+
} from "../../../chunk-AX6YJA5U.js";
|
|
126
|
+
import "../../../chunk-WSZQNTVN.js";
|
|
127
|
+
import {
|
|
128
|
+
Notice
|
|
129
|
+
} from "../../../chunk-WLEDGIVS.js";
|
|
130
|
+
import {
|
|
131
|
+
Button
|
|
132
|
+
} from "../../../chunk-HMU5IELG.js";
|
|
133
|
+
import "../../../chunk-35BC2FU2.js";
|
|
131
134
|
import "../../../chunk-OYQQJL3J.js";
|
|
132
|
-
import "../../../chunk-RZLBICR5.js";
|
|
133
135
|
import "../../../chunk-H3LIIAGE.js";
|
|
136
|
+
import "../../../chunk-RZLBICR5.js";
|
|
134
137
|
import "../../../chunk-VHB3E6PT.js";
|
|
135
|
-
import "../../../chunk-
|
|
136
|
-
import "../../../chunk-4LKNIGHB.js";
|
|
138
|
+
import "../../../chunk-O2SBHS2N.js";
|
|
137
139
|
import "../../../chunk-BOG2FED3.js";
|
|
138
|
-
import "../../../chunk-
|
|
139
|
-
import "../../../chunk-OB3YGXHQ.js";
|
|
140
|
-
import "../../../chunk-UNJPZGNK.js";
|
|
141
|
-
import "../../../chunk-PEHTX3V7.js";
|
|
142
|
-
import "../../../chunk-NRP4REXE.js";
|
|
143
|
-
import "../../../chunk-OBQVTCTW.js";
|
|
140
|
+
import "../../../chunk-UYNCMZX5.js";
|
|
144
141
|
import "../../../chunk-J3BHDXQQ.js";
|
|
145
142
|
import "../../../chunk-XEA5BCMA.js";
|
|
146
|
-
import "../../../chunk-
|
|
143
|
+
import "../../../chunk-CPLCSM6K.js";
|
|
144
|
+
import "../../../chunk-QXEDIDBZ.js";
|
|
145
|
+
import "../../../chunk-PEHTX3V7.js";
|
|
146
|
+
import "../../../chunk-XV6ZYRHK.js";
|
|
147
|
+
import "../../../chunk-IGVL3ELX.js";
|
|
148
|
+
import "../../../chunk-2KO2G3RI.js";
|
|
147
149
|
import "../../../chunk-CM7LVUKC.js";
|
|
148
150
|
import "../../../chunk-TVQCDDSZ.js";
|
|
151
|
+
import "../../../chunk-UNJPZGNK.js";
|
|
152
|
+
import "../../../chunk-DNJ23AWQ.js";
|
|
153
|
+
import "../../../chunk-OB3YGXHQ.js";
|
|
149
154
|
import "../../../chunk-SJGAHTY5.js";
|
|
150
155
|
import "../../../chunk-4NHJ6EXL.js";
|
|
151
156
|
import "../../../chunk-TXS65BB2.js";
|
|
152
|
-
import "../../../chunk-
|
|
157
|
+
import "../../../chunk-JFK7NTEA.js";
|
|
153
158
|
|
|
154
159
|
// src/app/components/capabilities/session-capability-card.tsx
|
|
155
160
|
import { Suspense, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
@@ -193,7 +198,20 @@ function SessionCapabilityCard(props) {
|
|
|
193
198
|
} : props.item;
|
|
194
199
|
const capability = item.capability;
|
|
195
200
|
if (capability?.id === CONNECTED_MACHINE_CAPABILITY_ID) {
|
|
196
|
-
if (item.askedAgainLater)
|
|
201
|
+
if (item.askedAgainLater)
|
|
202
|
+
return /* @__PURE__ */ jsx(RepeatedMachineRequestNote, { chrome: item.purpose === "chrome" });
|
|
203
|
+
if (item.purpose === "chrome") {
|
|
204
|
+
return /* @__PURE__ */ jsx(
|
|
205
|
+
SessionChromeCapabilityCard,
|
|
206
|
+
{
|
|
207
|
+
item,
|
|
208
|
+
workspaceId: props.workspaceId,
|
|
209
|
+
sessionId: props.sessionId,
|
|
210
|
+
sendContext: props.sendContext
|
|
211
|
+
},
|
|
212
|
+
`${props.workspaceId}:${props.sessionId}`
|
|
213
|
+
);
|
|
214
|
+
}
|
|
197
215
|
return /* @__PURE__ */ jsx(
|
|
198
216
|
SessionMachineCapabilityCard,
|
|
199
217
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/app/components/capabilities/session-capability-card.tsx"],"sourcesContent":["import { t } from \"../../lib/console-text\";\nimport {\n attachSessionCapability,\n prepareSessionCapabilityAccess,\n applySessionCapabilityAccess,\n type SessionCapabilityAccessPlan,\n} from \"./attach-session-capability\";\nimport { Suspense, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { SessionMcpCapabilityCard } from \"../../../components/session-mcp-capability-card\";\nimport type { AuthNeededItem } from \"../../../timeline\";\nimport { CheckIcon, Loader2Icon } from \"lucide-react\";\nimport { useAppContext } from \"../../app-context\";\nimport { CodexSubscriptionsSurface } from \"../../lib/app-surfaces\";\nimport { Button } from \"../../../ui/button\";\nimport { Notice } from \"../../../ui/notice\";\nimport { SessionCapabilityFrame } from \"../../../components/session-capability-frame\";\nimport { capabilityLogoSource } from \"./capability-logo-source\";\nimport { DetailBody, type ConnectAction } from \"./capability-detail-sheet\";\nimport { performCapabilityAction } from \"./perform-capability-action\";\nimport { useCapabilitiesCatalog } from \"./use-capabilities-catalog\";\nimport { SessionCustomMcpCard } from \"./session-custom-mcp-card\";\nimport {\n capabilityConnectPlan,\n capabilityErrorToast,\n connectionHealth,\n} from \"../../lib/capabilities\";\nimport { userErrorText } from \"../../../ui/api-error\";\nimport { hasWorkspacePermission } from \"../../lib/permissions\";\nimport type { CapabilityCatalogItem, ResourceRef } from \"../../types\";\nimport type { ChatSendContext } from \"./session-github-repositories\";\nimport { SessionGitHubCapabilityCard } from \"./session-github-card\";\nimport { RepeatedMachineRequestNote, SessionMachineCapabilityCard } from \"./session-machine-card\";\nimport { usePage } from \"../../lib/navigation\";\n\n/** The built-in card for connecting a person's own computer to this chat. */\nexport const CONNECTED_MACHINE_CAPABILITY_ID = \"api:connected-machine\";\n\n/** The built-in tile and card that install the deployment's Excel add-in. */\nexport const EXCEL_ADDIN_CAPABILITY_ID = \"api:excel-addin\";\n\n/** Recommendations carry identity and rationale, never connection configuration.\n * Expand against the current authenticated catalog before rendering any form. */\ntype SessionCapabilityCardProps = {\n visibility?: \"private\" | \"workspace\" | undefined;\n onConfigured?: (() => Promise<void>) | undefined;\n item: AuthNeededItem;\n workspaceId: string;\n sessionId: string;\n /** The chat's mounted resources, for cards that add a resource to this chat. */\n resources?: readonly ResourceRef[] | undefined;\n /** What a composer Send would carry now, for cards that send a human message. */\n sendContext?: (() => ChatSendContext) | undefined;\n};\n\nexport function SessionCapabilityCard(props: SessionCapabilityCardProps) {\n const page = usePage();\n const context = useAppContext();\n const [registered, setRegistered] = useState<{ id: string; restoreFocus: boolean } | null>(null);\n const onRegistered = useCallback(\n (id: string, restoreFocus: boolean) => setRegistered({ id, restoreFocus }),\n [],\n );\n if (props.item.setupRequest && !registered) {\n return (\n <SessionCustomMcpCard\n key={`${props.workspaceId}:${props.item.id}`}\n item={props.item}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n onConfigured={props.onConfigured}\n onRegistered={onRegistered}\n />\n );\n }\n const item = registered\n ? {\n ...props.item,\n setupRequest: null,\n capability: {\n id: registered.id,\n name: props.item.setupRequest!.name,\n kind: \"mcp\" as const,\n source: \"manual\" as const,\n action: \"connect\" as const,\n rationale: props.item.setupRequest!.rationale,\n requiredVariables: [],\n },\n }\n : props.item;\n const capability = item.capability;\n if (capability?.id === CONNECTED_MACHINE_CAPABILITY_ID) {\n // The same request was made again further down, where its card is live.\n if (item.askedAgainLater) return <RepeatedMachineRequestNote />;\n return (\n <SessionMachineCapabilityCard\n key={`${props.workspaceId}:${props.sessionId}`}\n item={item}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n sendContext={props.sendContext}\n onConfigured={props.onConfigured}\n />\n );\n }\n if (capability?.id === \"api:github-app\") {\n return (\n <SessionGitHubCapabilityCard\n key={`${props.workspaceId}:${props.sessionId}`}\n item={item}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n resources={props.resources}\n sendContext={props.sendContext}\n onConfigured={props.onConfigured}\n />\n );\n }\n const resolved = context.workspaceCapabilityCatalog.find((entry) => entry.id === capability?.id);\n if (capability && resolved?.kind === \"mcp\" && resolved.authKind === \"oauth2\") {\n return (\n <SessionMcpCapabilityCard\n client={context.client}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n capabilityId={capability.id}\n name={capability.name}\n rationale={capability.rationale}\n returnUrl={page.href()}\n onConfigured={props.onConfigured}\n />\n );\n }\n return (\n <ScopedSessionCapabilityCard\n key={`${props.workspaceId}:${props.sessionId}:${capability!.id}`}\n {...props}\n item={item}\n restoreFocus={registered?.restoreFocus ?? false}\n />\n );\n}\n\nfunction ScopedSessionCapabilityCard({\n item,\n workspaceId,\n sessionId,\n onConfigured,\n restoreFocus = false,\n}: SessionCapabilityCardProps & { restoreFocus?: boolean | undefined }) {\n const context = useAppContext();\n const recommendation = item.capability!;\n const [expanded, setExpanded] = useState(false);\n const [complete, setComplete] = useState(false);\n const [busy, setBusy] = useState(false);\n const [resolvedItem, setResolvedItem] = useState<CapabilityCatalogItem | null>(null);\n const opener = useRef<HTMLButtonElement>(null);\n const cardRef = useRef<HTMLElement>(null);\n useEffect(() => {\n if (!restoreFocus) return;\n // The review dialog's opener is removed when the new connection card\n // replaces it. Focus the next actionable control after Radix closes it.\n const frame = requestAnimationFrame(() => opener.current?.focus());\n return () => cancelAnimationFrame(frame);\n }, [restoreFocus]);\n const catalogItem =\n resolvedItem ??\n context.workspaceCapabilityCatalog.find((entry) => entry.id === recommendation.id);\n const logo = catalogItem\n ? capabilityLogoSource(catalogItem, (path) => context.client.catalogAssetUrl(path))\n : null;\n const close = () => {\n setExpanded(false);\n };\n const skill = recommendation.kind === \"skill\";\n const excel = recommendation.id === EXCEL_ADDIN_CAPABILITY_ID;\n const apiKey = catalogItem ? capabilityConnectPlan(catalogItem).mode === \"api_key\" : false;\n return (\n <SessionCapabilityFrame\n name={catalogItem?.name ?? recommendation.name}\n subtitle={catalogItem ? (catalogItem.providerDomain ?? \"\") : item.providerDomain}\n logo={logo}\n typeLabel={\n skill ? \"Skill\" : excel ? \"Add-in\" : recommendation.kind === \"mcp\" ? \"MCP server\" : \"API\"\n }\n description={catalogItem?.description || recommendation.rationale}\n skill={skill}\n expanded={expanded}\n complete={complete}\n actionLabel={\n excel\n ? \"Add to Excel\"\n : catalogItem?.enabled\n ? \"Review\"\n : skill\n ? \"Review skill\"\n : apiKey\n ? \"Add API key\"\n : `Connect ${catalogItem?.name ?? recommendation.name}`\n }\n note={\n excel\n ? \"The add-in runs in your own Excel. Agents reach a workbook only while you have the add-in open in it.\"\n : skill\n ? \"Skill content is reviewed separately from permission to use any integration.\"\n : apiKey\n ? \"Add credentials in the protected form, not in a chat message.\"\n : \"Review access before signing in. You'll return to this conversation after authorization.\"\n }\n onOpen={() => setExpanded(true)}\n onClose={close}\n busy={busy}\n opener={opener}\n cardRef={cardRef}\n >\n {recommendation.id === \"mcp:codex_apps\" ? (\n <SessionCodexAppsSetup\n busy={busy}\n setBusy={setBusy}\n workspaceId={workspaceId}\n sessionId={sessionId}\n onClose={close}\n onComplete={() => {\n setComplete(true);\n close();\n }}\n />\n ) : (\n <SessionCapabilitySetup\n busy={busy}\n setBusy={setBusy}\n key={`${workspaceId}:${sessionId}:${recommendation.id}`}\n capabilityId={recommendation.id}\n onResolvedItem={setResolvedItem}\n onConfigured={onConfigured}\n workspaceId={workspaceId}\n sessionId={sessionId}\n onClose={close}\n onComplete={() => {\n setComplete(true);\n close();\n }}\n />\n )}\n </SessionCapabilityFrame>\n );\n}\n\nfunction SessionCapabilitySetup({\n busy,\n setBusy,\n capabilityId,\n onResolvedItem,\n onConfigured,\n workspaceId,\n sessionId,\n onClose,\n onComplete,\n}: {\n busy: boolean;\n setBusy: (busy: boolean) => void;\n capabilityId: string;\n onResolvedItem: (item: CapabilityCatalogItem) => void;\n onConfigured?: (() => Promise<void>) | undefined;\n workspaceId: string;\n sessionId: string;\n onClose: () => void;\n onComplete: () => void;\n}) {\n const page = usePage();\n const context = useAppContext();\n const catalog = useCapabilitiesCatalog(workspaceId);\n const canReadConnections =\n context.accessContext === null\n ? null\n : hasWorkspacePermission(context.accessContext, workspaceId, \"connections:read\");\n const [error, setError] = useState<string | null>(null);\n const subjectId = context.accessContext?.subjectId ?? null;\n const [parentAccessReview, setParentAccessReview] = useState<{\n plan: SessionCapabilityAccessPlan;\n invocation: object;\n } | null>(null);\n const [authInspection, setAuthInspection] = useState<{\n id: string;\n url: string;\n kind: \"oauth2\" | \"none\" | \"unknown\";\n message?: string | undefined;\n } | null>(null);\n const [authInspectionRevision, setAuthInspectionRevision] = useState(0);\n const inFlight = useRef<object | null>(null);\n const scope = useRef({\n client: context.client,\n workspaceId,\n sessionId,\n canReadConnections,\n subjectId,\n authorityKey: catalog.authorityKey,\n alive: true,\n });\n if (\n scope.current.client !== context.client ||\n scope.current.workspaceId !== workspaceId ||\n scope.current.sessionId !== sessionId ||\n scope.current.canReadConnections !== canReadConnections ||\n scope.current.subjectId !== subjectId ||\n scope.current.authorityKey !== catalog.authorityKey\n ) {\n scope.current = {\n client: context.client,\n workspaceId,\n sessionId,\n canReadConnections,\n subjectId,\n authorityKey: catalog.authorityKey,\n alive: true,\n };\n }\n const parentAccessPlan =\n parentAccessReview?.invocation === scope.current ? parentAccessReview.plan : null;\n useEffect(() => {\n // StrictMode replays setup after cleanup. Give the replay a new owner:\n // reusing the retired object would either keep it dead or revive old work.\n if (!scope.current.alive) scope.current = { ...scope.current, alive: true };\n const activeScope = scope.current;\n setParentAccessReview(null);\n setBusy(false);\n void catalog.refresh();\n return () => {\n activeScope.alive = false;\n };\n // Refetch on a live read-grant change; the hook masks prior rows during render.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n context.client,\n workspaceId,\n sessionId,\n canReadConnections,\n subjectId,\n catalog.authorityKey,\n setBusy,\n ]);\n const rawItem = catalog.items.find((entry) => entry.id === capabilityId);\n const rawItemId = rawItem?.id;\n const inspectUrl = rawItem?.mcpUrl ?? rawItem?.endpointUrl;\n const needsAuthInspection =\n rawItem?.kind === \"mcp\" &&\n !rawItem.enabled &&\n capabilityConnectPlan(rawItem).mode === \"setup_required\" &&\n Boolean(inspectUrl);\n useEffect(() => {\n if (!needsAuthInspection || !rawItemId || !inspectUrl) return;\n let active = true;\n setAuthInspection(null);\n void context.client.inspectMcpAuthentication(workspaceId, inspectUrl).then(\n (result) => {\n if (active) setAuthInspection({ id: rawItemId, url: inspectUrl, ...result });\n },\n () => {\n if (active) setAuthInspection({ id: rawItemId, url: inspectUrl, kind: \"unknown\" });\n },\n );\n return () => {\n active = false;\n };\n }, [\n context.client,\n workspaceId,\n rawItemId,\n inspectUrl,\n needsAuthInspection,\n authInspectionRevision,\n ]);\n const item = useMemo(() => {\n if (!rawItem || !needsAuthInspection) return rawItem;\n const inspection =\n authInspection?.id === rawItem.id && authInspection.url === inspectUrl\n ? authInspection.kind\n : \"checking\";\n return {\n ...rawItem,\n authKind:\n inspection === \"oauth2\"\n ? (\"oauth2\" as const)\n : inspection === \"none\"\n ? (\"none\" as const)\n : null,\n metadata: {\n ...rawItem.metadata,\n authDiscovery: inspection,\n authDiscoveryMessage: inspection === \"unknown\" ? authInspection?.message : undefined,\n },\n };\n }, [rawItem, needsAuthInspection, inspectUrl, authInspection]);\n useEffect(() => {\n if (item) onResolvedItem(item);\n }, [item, onResolvedItem]);\n const refreshRuntime = useCallback(() => {\n void context.refreshWorkspaceMcpServers(workspaceId);\n }, [context, workspaceId]);\n async function act(action: ConnectAction) {\n if (!item) return;\n const invocation = scope.current;\n if (inFlight.current === invocation) return;\n inFlight.current = invocation;\n setBusy(true);\n setError(null);\n setParentAccessReview(null);\n const current = () => scope.current === invocation && invocation.alive;\n try {\n await performCapabilityAction(\n {\n client: context.client,\n workspaceId,\n item,\n connections: catalog.connectionsLoadFailed ? null : catalog.connections,\n canManageSkills: hasWorkspacePermission(\n context.accessContext,\n workspaceId,\n \"capabilities:manage\",\n ),\n refresh: catalog.refresh,\n onRuntimeChanged: () => {\n if (current()) refreshRuntime();\n },\n onComplete: async () => {\n if (!current()) return;\n const updated = (await context.client.listCapabilities(workspaceId)).items.find(\n (entry) => entry.id === item.id,\n );\n if (!current()) return;\n if (!updated?.enabled)\n throw new Error(\"Setup could not be verified. Refresh and try again.\");\n const plan = await prepareSessionCapabilityAccess(\n t,\n context.client,\n workspaceId,\n sessionId,\n updated,\n current,\n );\n if (!current()) return;\n if (plan.sessions.some((chat) => chat.id !== sessionId && chat.request)) {\n setParentAccessReview({ plan, invocation });\n return;\n }\n await applySessionCapabilityAccess(t, context.client, plan, current);\n await onConfigured?.();\n if (current()) onComplete();\n },\n onSkillRemoval: () => {\n throw new Error(\n \"Use the workspace Skill controls to review removal and its other owners.\",\n );\n },\n returnPathFor: (id) =>\n `/workspaces/${encodeURIComponent(workspaceId)}/sessions/${encodeURIComponent(sessionId)}?capability_auth=${encodeURIComponent(id)}`,\n redirect: (url) => {\n if (current()) page.assign(url);\n },\n },\n action,\n );\n } catch (failure) {\n // A credential may have committed before enabling failed. Reconcile before\n // offering Retry so it reuses that row instead of minting a duplicate.\n if (current()) await catalog.refresh();\n if (current()) setError(capabilityErrorToast(failure, \"Couldn't complete setup\").description);\n } finally {\n if (inFlight.current === invocation) inFlight.current = null;\n if (current()) setBusy(false);\n }\n }\n async function useConnected() {\n if (!item) return;\n const invocation = scope.current;\n if (inFlight.current === invocation) return;\n inFlight.current = invocation;\n setBusy(true);\n setError(null);\n const current = () => scope.current === invocation && invocation.alive;\n try {\n const plan =\n parentAccessPlan ??\n (await prepareSessionCapabilityAccess(\n t,\n context.client,\n workspaceId,\n sessionId,\n item,\n current,\n ));\n if (!current()) return;\n if (\n !parentAccessPlan &&\n plan.sessions.some((chat) => chat.id !== sessionId && chat.request)\n ) {\n setParentAccessReview({ plan, invocation });\n return;\n }\n await applySessionCapabilityAccess(t, context.client, plan, current);\n if (current()) setParentAccessReview(null);\n if (current()) await onConfigured?.();\n if (current()) onComplete();\n } catch (failure) {\n if (current()) {\n setParentAccessReview(null);\n setError(`Couldn't add this connection. ${userErrorText(failure, \"Try again.\")}`);\n }\n } finally {\n if (inFlight.current === invocation) inFlight.current = null;\n if (current()) setBusy(false);\n }\n }\n const ownsActionRow =\n !catalog.loadError && item && !item.enabled && (item.kind === \"skill\" || item.kind === \"mcp\");\n const health = item\n ? connectionHealth(item, catalog.connections ?? [], catalog.connections !== null)\n : null;\n return (\n <div className=\"p-6 sm:p-8\">\n {catalog.loading && !item ? (\n <p role=\"status\" className=\"flex items-center gap-2 text-sm text-fg-muted\">\n <Loader2Icon className=\"size-4 animate-spin\" />\n Loading connection details…\n </p>\n ) : catalog.loadError || !item ? (\n <Notice\n tone=\"failed\"\n action={\n <Button size=\"sm\" onClick={() => void catalog.refresh()}>\n Retry\n </Button>\n }\n >\n {catalog.loadError\n ? \"Couldn't load the integration catalog.\"\n : \"This recommendation is no longer in the current catalog.\"}\n </Notice>\n ) : (\n <DetailBody\n workspaceId={workspaceId}\n setupOnly\n showIdentity={false}\n onCancel={ownsActionRow ? onClose : undefined}\n item={item}\n health={connectionHealth(item, catalog.connections ?? [], catalog.connections !== null)}\n logoSrc={capabilityLogoSource(item, (path) => context.client.catalogAssetUrl(path))}\n busy={busy}\n errorMessage={error}\n socialConnections={catalog.socialConnections}\n canManageSocial={hasWorkspacePermission(\n context.accessContext,\n workspaceId,\n \"connections:write\",\n )}\n canManageSkills={hasWorkspacePermission(\n context.accessContext,\n workspaceId,\n \"capabilities:manage\",\n )}\n onAction={(action) => void act(action)}\n onRetryAuthInspection={\n needsAuthInspection\n ? () => {\n setAuthInspection(null);\n setAuthInspectionRevision((revision) => revision + 1);\n }\n : undefined\n }\n />\n )}\n {parentAccessPlan && item ? (\n <Notice tone=\"waiting\" live=\"polite\">\n <p>\n This chat inherits its tool access from its parent. To add {item.name}, enable its tools\n in these parent chats first:\n </p>\n <ul className=\"mt-2 list-disc pl-5\">\n {parentAccessPlan.sessions\n .filter((chat) => chat.id !== sessionId && chat.request)\n .map((chat) => (\n <li key={chat.id}>\n <a\n className=\"underline\"\n href={`/workspaces/${encodeURIComponent(workspaceId)}/sessions/${encodeURIComponent(chat.id)}`}\n >\n {chat.title || \"Parent chat\"}\n </a>\n </li>\n ))}\n </ul>\n <p className=\"mt-2\">\n Confirming adds {item.name}'s tools to these chats and this chat. Parent chats and\n future children can then use them. Existing tool choices are preserved; workspace\n defaults become chat-specific selections where needed. Current turns keep their accepted\n access.\n </p>\n <p className=\"mt-2\">\n Updates are saved separately. If a later update fails, approved parent changes may\n already be saved.\n </p>\n </Notice>\n ) : null}\n <div className=\"mt-2 flex justify-end gap-2\">\n {!ownsActionRow ? (\n <Button size=\"sm\" variant=\"ghost\" disabled={busy} onClick={onClose}>\n Cancel\n </Button>\n ) : null}\n {item?.enabled && health?.state !== \"attention\" && health?.state !== \"unverified\" ? (\n <Button size=\"sm\" disabled={busy} onClick={() => void useConnected()}>\n {busy ? <Loader2Icon className=\"animate-spin\" /> : <CheckIcon />}\n {parentAccessPlan ? \"Enable in parents and add tools\" : \"Add tools\"}\n </Button>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction SessionCodexAppsSetup({\n busy,\n setBusy,\n workspaceId,\n sessionId,\n onClose,\n onComplete,\n}: {\n busy: boolean;\n setBusy: (busy: boolean) => void;\n workspaceId: string;\n sessionId: string;\n onClose: () => void;\n onComplete: () => void;\n}) {\n const context = useAppContext();\n const [error, setError] = useState<string | null>(null);\n const inFlight = useRef(false);\n const active = useRef(true);\n useEffect(\n () => () => {\n active.current = false;\n },\n [],\n );\n async function useApps() {\n if (inFlight.current) return;\n inFlight.current = true;\n setBusy(true);\n setError(null);\n try {\n const catalog = await context.client.listCapabilities(workspaceId);\n const item = catalog.items.find((entry) => entry.id === \"mcp:codex_apps\");\n if (!active.current) return;\n if (!item?.enabled || !item.runtime.available)\n throw new Error(\"Choose an active subscription for Codex Apps before continuing.\");\n await attachSessionCapability(\n t,\n context.client,\n workspaceId,\n sessionId,\n item,\n () => active.current,\n );\n await context.refreshWorkspaceMcpServers(workspaceId);\n if (active.current) onComplete();\n } catch (failure) {\n if (active.current)\n setError(\n `Couldn't enable Apps in this conversation. ${userErrorText(failure, \"Try again.\")}`,\n );\n } finally {\n inFlight.current = false;\n if (active.current) setBusy(false);\n }\n }\n return (\n <div className=\"p-6 sm:p-8\">\n <Suspense fallback={<p role=\"status\">Loading connection controls…</p>}>\n <CodexSubscriptionsSurface\n workspaceId={workspaceId}\n canManage={hasWorkspacePermission(\n context.accessContext,\n workspaceId,\n \"connections:write\",\n )}\n />\n </Suspense>\n {error ? <Notice tone=\"failed\">{error}</Notice> : null}\n <div className=\"mt-2 flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" disabled={busy} onClick={onClose}>\n Cancel\n </Button>\n <Button size=\"sm\" disabled={busy} onClick={() => void useApps()}>\n {busy ? <Loader2Icon className=\"animate-spin\" /> : <CheckIcon />}Use in this conversation\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/app/components/capabilities/session-capability-card.tsx"],"sourcesContent":["import { t } from \"../../lib/console-text\";\nimport {\n attachSessionCapability,\n prepareSessionCapabilityAccess,\n applySessionCapabilityAccess,\n type SessionCapabilityAccessPlan,\n} from \"./attach-session-capability\";\nimport { Suspense, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { SessionMcpCapabilityCard } from \"../../../components/session-mcp-capability-card\";\nimport type { AuthNeededItem } from \"../../../timeline\";\nimport { CheckIcon, Loader2Icon } from \"lucide-react\";\nimport { useAppContext } from \"../../app-context\";\nimport { CodexSubscriptionsSurface } from \"../../lib/app-surfaces\";\nimport { Button } from \"../../../ui/button\";\nimport { Notice } from \"../../../ui/notice\";\nimport { SessionCapabilityFrame } from \"../../../components/session-capability-frame\";\nimport { capabilityLogoSource } from \"./capability-logo-source\";\nimport { DetailBody, type ConnectAction } from \"./capability-detail-sheet\";\nimport { performCapabilityAction } from \"./perform-capability-action\";\nimport { useCapabilitiesCatalog } from \"./use-capabilities-catalog\";\nimport { SessionCustomMcpCard } from \"./session-custom-mcp-card\";\nimport {\n capabilityConnectPlan,\n capabilityErrorToast,\n connectionHealth,\n} from \"../../lib/capabilities\";\nimport { userErrorText } from \"../../../ui/api-error\";\nimport { hasWorkspacePermission } from \"../../lib/permissions\";\nimport type { CapabilityCatalogItem, ResourceRef } from \"../../types\";\nimport type { ChatSendContext } from \"./session-github-repositories\";\nimport { SessionGitHubCapabilityCard } from \"./session-github-card\";\nimport { RepeatedMachineRequestNote, SessionMachineCapabilityCard } from \"./session-machine-card\";\nimport { SessionChromeCapabilityCard } from \"./session-chrome-card\";\nimport { usePage } from \"../../lib/navigation\";\n\n/** The built-in card for connecting a person's own computer to this chat. */\nexport const CONNECTED_MACHINE_CAPABILITY_ID = \"api:connected-machine\";\n\n/** The built-in tile and card that install the deployment's Excel add-in. */\nexport const EXCEL_ADDIN_CAPABILITY_ID = \"api:excel-addin\";\n\n/** Recommendations carry identity and rationale, never connection configuration.\n * Expand against the current authenticated catalog before rendering any form. */\ntype SessionCapabilityCardProps = {\n visibility?: \"private\" | \"workspace\" | undefined;\n onConfigured?: (() => Promise<void>) | undefined;\n item: AuthNeededItem;\n workspaceId: string;\n sessionId: string;\n /** The chat's mounted resources, for cards that add a resource to this chat. */\n resources?: readonly ResourceRef[] | undefined;\n /** What a composer Send would carry now, for cards that send a human message. */\n sendContext?: (() => ChatSendContext) | undefined;\n};\n\nexport function SessionCapabilityCard(props: SessionCapabilityCardProps) {\n const page = usePage();\n const context = useAppContext();\n const [registered, setRegistered] = useState<{ id: string; restoreFocus: boolean } | null>(null);\n const onRegistered = useCallback(\n (id: string, restoreFocus: boolean) => setRegistered({ id, restoreFocus }),\n [],\n );\n if (props.item.setupRequest && !registered) {\n return (\n <SessionCustomMcpCard\n key={`${props.workspaceId}:${props.item.id}`}\n item={props.item}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n onConfigured={props.onConfigured}\n onRegistered={onRegistered}\n />\n );\n }\n const item = registered\n ? {\n ...props.item,\n setupRequest: null,\n capability: {\n id: registered.id,\n name: props.item.setupRequest!.name,\n kind: \"mcp\" as const,\n source: \"manual\" as const,\n action: \"connect\" as const,\n rationale: props.item.setupRequest!.rationale,\n requiredVariables: [],\n },\n }\n : props.item;\n const capability = item.capability;\n if (capability?.id === CONNECTED_MACHINE_CAPABILITY_ID) {\n // The same request was made again further down, where its card is live.\n if (item.askedAgainLater)\n return <RepeatedMachineRequestNote chrome={item.purpose === \"chrome\"} />;\n if (item.purpose === \"chrome\") {\n return (\n <SessionChromeCapabilityCard\n key={`${props.workspaceId}:${props.sessionId}`}\n item={item}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n sendContext={props.sendContext}\n />\n );\n }\n return (\n <SessionMachineCapabilityCard\n key={`${props.workspaceId}:${props.sessionId}`}\n item={item}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n sendContext={props.sendContext}\n onConfigured={props.onConfigured}\n />\n );\n }\n if (capability?.id === \"api:github-app\") {\n return (\n <SessionGitHubCapabilityCard\n key={`${props.workspaceId}:${props.sessionId}`}\n item={item}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n resources={props.resources}\n sendContext={props.sendContext}\n onConfigured={props.onConfigured}\n />\n );\n }\n const resolved = context.workspaceCapabilityCatalog.find((entry) => entry.id === capability?.id);\n if (capability && resolved?.kind === \"mcp\" && resolved.authKind === \"oauth2\") {\n return (\n <SessionMcpCapabilityCard\n client={context.client}\n workspaceId={props.workspaceId}\n sessionId={props.sessionId}\n capabilityId={capability.id}\n name={capability.name}\n rationale={capability.rationale}\n returnUrl={page.href()}\n onConfigured={props.onConfigured}\n />\n );\n }\n return (\n <ScopedSessionCapabilityCard\n key={`${props.workspaceId}:${props.sessionId}:${capability!.id}`}\n {...props}\n item={item}\n restoreFocus={registered?.restoreFocus ?? false}\n />\n );\n}\n\nfunction ScopedSessionCapabilityCard({\n item,\n workspaceId,\n sessionId,\n onConfigured,\n restoreFocus = false,\n}: SessionCapabilityCardProps & { restoreFocus?: boolean | undefined }) {\n const context = useAppContext();\n const recommendation = item.capability!;\n const [expanded, setExpanded] = useState(false);\n const [complete, setComplete] = useState(false);\n const [busy, setBusy] = useState(false);\n const [resolvedItem, setResolvedItem] = useState<CapabilityCatalogItem | null>(null);\n const opener = useRef<HTMLButtonElement>(null);\n const cardRef = useRef<HTMLElement>(null);\n useEffect(() => {\n if (!restoreFocus) return;\n // The review dialog's opener is removed when the new connection card\n // replaces it. Focus the next actionable control after Radix closes it.\n const frame = requestAnimationFrame(() => opener.current?.focus());\n return () => cancelAnimationFrame(frame);\n }, [restoreFocus]);\n const catalogItem =\n resolvedItem ??\n context.workspaceCapabilityCatalog.find((entry) => entry.id === recommendation.id);\n const logo = catalogItem\n ? capabilityLogoSource(catalogItem, (path) => context.client.catalogAssetUrl(path))\n : null;\n const close = () => {\n setExpanded(false);\n };\n const skill = recommendation.kind === \"skill\";\n const excel = recommendation.id === EXCEL_ADDIN_CAPABILITY_ID;\n const apiKey = catalogItem ? capabilityConnectPlan(catalogItem).mode === \"api_key\" : false;\n return (\n <SessionCapabilityFrame\n name={catalogItem?.name ?? recommendation.name}\n subtitle={catalogItem ? (catalogItem.providerDomain ?? \"\") : item.providerDomain}\n logo={logo}\n typeLabel={\n skill ? \"Skill\" : excel ? \"Add-in\" : recommendation.kind === \"mcp\" ? \"MCP server\" : \"API\"\n }\n description={catalogItem?.description || recommendation.rationale}\n skill={skill}\n expanded={expanded}\n complete={complete}\n actionLabel={\n excel\n ? \"Add to Excel\"\n : catalogItem?.enabled\n ? \"Review\"\n : skill\n ? \"Review skill\"\n : apiKey\n ? \"Add API key\"\n : `Connect ${catalogItem?.name ?? recommendation.name}`\n }\n note={\n excel\n ? \"The add-in runs in your own Excel. Agents reach a workbook only while you have the add-in open in it.\"\n : skill\n ? \"Skill content is reviewed separately from permission to use any integration.\"\n : apiKey\n ? \"Add credentials in the protected form, not in a chat message.\"\n : \"Review access before signing in. You'll return to this conversation after authorization.\"\n }\n onOpen={() => setExpanded(true)}\n onClose={close}\n busy={busy}\n opener={opener}\n cardRef={cardRef}\n >\n {recommendation.id === \"mcp:codex_apps\" ? (\n <SessionCodexAppsSetup\n busy={busy}\n setBusy={setBusy}\n workspaceId={workspaceId}\n sessionId={sessionId}\n onClose={close}\n onComplete={() => {\n setComplete(true);\n close();\n }}\n />\n ) : (\n <SessionCapabilitySetup\n busy={busy}\n setBusy={setBusy}\n key={`${workspaceId}:${sessionId}:${recommendation.id}`}\n capabilityId={recommendation.id}\n onResolvedItem={setResolvedItem}\n onConfigured={onConfigured}\n workspaceId={workspaceId}\n sessionId={sessionId}\n onClose={close}\n onComplete={() => {\n setComplete(true);\n close();\n }}\n />\n )}\n </SessionCapabilityFrame>\n );\n}\n\nfunction SessionCapabilitySetup({\n busy,\n setBusy,\n capabilityId,\n onResolvedItem,\n onConfigured,\n workspaceId,\n sessionId,\n onClose,\n onComplete,\n}: {\n busy: boolean;\n setBusy: (busy: boolean) => void;\n capabilityId: string;\n onResolvedItem: (item: CapabilityCatalogItem) => void;\n onConfigured?: (() => Promise<void>) | undefined;\n workspaceId: string;\n sessionId: string;\n onClose: () => void;\n onComplete: () => void;\n}) {\n const page = usePage();\n const context = useAppContext();\n const catalog = useCapabilitiesCatalog(workspaceId);\n const canReadConnections =\n context.accessContext === null\n ? null\n : hasWorkspacePermission(context.accessContext, workspaceId, \"connections:read\");\n const [error, setError] = useState<string | null>(null);\n const subjectId = context.accessContext?.subjectId ?? null;\n const [parentAccessReview, setParentAccessReview] = useState<{\n plan: SessionCapabilityAccessPlan;\n invocation: object;\n } | null>(null);\n const [authInspection, setAuthInspection] = useState<{\n id: string;\n url: string;\n kind: \"oauth2\" | \"none\" | \"unknown\";\n message?: string | undefined;\n } | null>(null);\n const [authInspectionRevision, setAuthInspectionRevision] = useState(0);\n const inFlight = useRef<object | null>(null);\n const scope = useRef({\n client: context.client,\n workspaceId,\n sessionId,\n canReadConnections,\n subjectId,\n authorityKey: catalog.authorityKey,\n alive: true,\n });\n if (\n scope.current.client !== context.client ||\n scope.current.workspaceId !== workspaceId ||\n scope.current.sessionId !== sessionId ||\n scope.current.canReadConnections !== canReadConnections ||\n scope.current.subjectId !== subjectId ||\n scope.current.authorityKey !== catalog.authorityKey\n ) {\n scope.current = {\n client: context.client,\n workspaceId,\n sessionId,\n canReadConnections,\n subjectId,\n authorityKey: catalog.authorityKey,\n alive: true,\n };\n }\n const parentAccessPlan =\n parentAccessReview?.invocation === scope.current ? parentAccessReview.plan : null;\n useEffect(() => {\n // StrictMode replays setup after cleanup. Give the replay a new owner:\n // reusing the retired object would either keep it dead or revive old work.\n if (!scope.current.alive) scope.current = { ...scope.current, alive: true };\n const activeScope = scope.current;\n setParentAccessReview(null);\n setBusy(false);\n void catalog.refresh();\n return () => {\n activeScope.alive = false;\n };\n // Refetch on a live read-grant change; the hook masks prior rows during render.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n context.client,\n workspaceId,\n sessionId,\n canReadConnections,\n subjectId,\n catalog.authorityKey,\n setBusy,\n ]);\n const rawItem = catalog.items.find((entry) => entry.id === capabilityId);\n const rawItemId = rawItem?.id;\n const inspectUrl = rawItem?.mcpUrl ?? rawItem?.endpointUrl;\n const needsAuthInspection =\n rawItem?.kind === \"mcp\" &&\n !rawItem.enabled &&\n capabilityConnectPlan(rawItem).mode === \"setup_required\" &&\n Boolean(inspectUrl);\n useEffect(() => {\n if (!needsAuthInspection || !rawItemId || !inspectUrl) return;\n let active = true;\n setAuthInspection(null);\n void context.client.inspectMcpAuthentication(workspaceId, inspectUrl).then(\n (result) => {\n if (active) setAuthInspection({ id: rawItemId, url: inspectUrl, ...result });\n },\n () => {\n if (active) setAuthInspection({ id: rawItemId, url: inspectUrl, kind: \"unknown\" });\n },\n );\n return () => {\n active = false;\n };\n }, [\n context.client,\n workspaceId,\n rawItemId,\n inspectUrl,\n needsAuthInspection,\n authInspectionRevision,\n ]);\n const item = useMemo(() => {\n if (!rawItem || !needsAuthInspection) return rawItem;\n const inspection =\n authInspection?.id === rawItem.id && authInspection.url === inspectUrl\n ? authInspection.kind\n : \"checking\";\n return {\n ...rawItem,\n authKind:\n inspection === \"oauth2\"\n ? (\"oauth2\" as const)\n : inspection === \"none\"\n ? (\"none\" as const)\n : null,\n metadata: {\n ...rawItem.metadata,\n authDiscovery: inspection,\n authDiscoveryMessage: inspection === \"unknown\" ? authInspection?.message : undefined,\n },\n };\n }, [rawItem, needsAuthInspection, inspectUrl, authInspection]);\n useEffect(() => {\n if (item) onResolvedItem(item);\n }, [item, onResolvedItem]);\n const refreshRuntime = useCallback(() => {\n void context.refreshWorkspaceMcpServers(workspaceId);\n }, [context, workspaceId]);\n async function act(action: ConnectAction) {\n if (!item) return;\n const invocation = scope.current;\n if (inFlight.current === invocation) return;\n inFlight.current = invocation;\n setBusy(true);\n setError(null);\n setParentAccessReview(null);\n const current = () => scope.current === invocation && invocation.alive;\n try {\n await performCapabilityAction(\n {\n client: context.client,\n workspaceId,\n item,\n connections: catalog.connectionsLoadFailed ? null : catalog.connections,\n canManageSkills: hasWorkspacePermission(\n context.accessContext,\n workspaceId,\n \"capabilities:manage\",\n ),\n refresh: catalog.refresh,\n onRuntimeChanged: () => {\n if (current()) refreshRuntime();\n },\n onComplete: async () => {\n if (!current()) return;\n const updated = (await context.client.listCapabilities(workspaceId)).items.find(\n (entry) => entry.id === item.id,\n );\n if (!current()) return;\n if (!updated?.enabled)\n throw new Error(\"Setup could not be verified. Refresh and try again.\");\n const plan = await prepareSessionCapabilityAccess(\n t,\n context.client,\n workspaceId,\n sessionId,\n updated,\n current,\n );\n if (!current()) return;\n if (plan.sessions.some((chat) => chat.id !== sessionId && chat.request)) {\n setParentAccessReview({ plan, invocation });\n return;\n }\n await applySessionCapabilityAccess(t, context.client, plan, current);\n await onConfigured?.();\n if (current()) onComplete();\n },\n onSkillRemoval: () => {\n throw new Error(\n \"Use the workspace Skill controls to review removal and its other owners.\",\n );\n },\n returnPathFor: (id) =>\n `/workspaces/${encodeURIComponent(workspaceId)}/sessions/${encodeURIComponent(sessionId)}?capability_auth=${encodeURIComponent(id)}`,\n redirect: (url) => {\n if (current()) page.assign(url);\n },\n },\n action,\n );\n } catch (failure) {\n // A credential may have committed before enabling failed. Reconcile before\n // offering Retry so it reuses that row instead of minting a duplicate.\n if (current()) await catalog.refresh();\n if (current()) setError(capabilityErrorToast(failure, \"Couldn't complete setup\").description);\n } finally {\n if (inFlight.current === invocation) inFlight.current = null;\n if (current()) setBusy(false);\n }\n }\n async function useConnected() {\n if (!item) return;\n const invocation = scope.current;\n if (inFlight.current === invocation) return;\n inFlight.current = invocation;\n setBusy(true);\n setError(null);\n const current = () => scope.current === invocation && invocation.alive;\n try {\n const plan =\n parentAccessPlan ??\n (await prepareSessionCapabilityAccess(\n t,\n context.client,\n workspaceId,\n sessionId,\n item,\n current,\n ));\n if (!current()) return;\n if (\n !parentAccessPlan &&\n plan.sessions.some((chat) => chat.id !== sessionId && chat.request)\n ) {\n setParentAccessReview({ plan, invocation });\n return;\n }\n await applySessionCapabilityAccess(t, context.client, plan, current);\n if (current()) setParentAccessReview(null);\n if (current()) await onConfigured?.();\n if (current()) onComplete();\n } catch (failure) {\n if (current()) {\n setParentAccessReview(null);\n setError(`Couldn't add this connection. ${userErrorText(failure, \"Try again.\")}`);\n }\n } finally {\n if (inFlight.current === invocation) inFlight.current = null;\n if (current()) setBusy(false);\n }\n }\n const ownsActionRow =\n !catalog.loadError && item && !item.enabled && (item.kind === \"skill\" || item.kind === \"mcp\");\n const health = item\n ? connectionHealth(item, catalog.connections ?? [], catalog.connections !== null)\n : null;\n return (\n <div className=\"p-6 sm:p-8\">\n {catalog.loading && !item ? (\n <p role=\"status\" className=\"flex items-center gap-2 text-sm text-fg-muted\">\n <Loader2Icon className=\"size-4 animate-spin\" />\n Loading connection details…\n </p>\n ) : catalog.loadError || !item ? (\n <Notice\n tone=\"failed\"\n action={\n <Button size=\"sm\" onClick={() => void catalog.refresh()}>\n Retry\n </Button>\n }\n >\n {catalog.loadError\n ? \"Couldn't load the integration catalog.\"\n : \"This recommendation is no longer in the current catalog.\"}\n </Notice>\n ) : (\n <DetailBody\n workspaceId={workspaceId}\n setupOnly\n showIdentity={false}\n onCancel={ownsActionRow ? onClose : undefined}\n item={item}\n health={connectionHealth(item, catalog.connections ?? [], catalog.connections !== null)}\n logoSrc={capabilityLogoSource(item, (path) => context.client.catalogAssetUrl(path))}\n busy={busy}\n errorMessage={error}\n socialConnections={catalog.socialConnections}\n canManageSocial={hasWorkspacePermission(\n context.accessContext,\n workspaceId,\n \"connections:write\",\n )}\n canManageSkills={hasWorkspacePermission(\n context.accessContext,\n workspaceId,\n \"capabilities:manage\",\n )}\n onAction={(action) => void act(action)}\n onRetryAuthInspection={\n needsAuthInspection\n ? () => {\n setAuthInspection(null);\n setAuthInspectionRevision((revision) => revision + 1);\n }\n : undefined\n }\n />\n )}\n {parentAccessPlan && item ? (\n <Notice tone=\"waiting\" live=\"polite\">\n <p>\n This chat inherits its tool access from its parent. To add {item.name}, enable its tools\n in these parent chats first:\n </p>\n <ul className=\"mt-2 list-disc pl-5\">\n {parentAccessPlan.sessions\n .filter((chat) => chat.id !== sessionId && chat.request)\n .map((chat) => (\n <li key={chat.id}>\n <a\n className=\"underline\"\n href={`/workspaces/${encodeURIComponent(workspaceId)}/sessions/${encodeURIComponent(chat.id)}`}\n >\n {chat.title || \"Parent chat\"}\n </a>\n </li>\n ))}\n </ul>\n <p className=\"mt-2\">\n Confirming adds {item.name}'s tools to these chats and this chat. Parent chats and\n future children can then use them. Existing tool choices are preserved; workspace\n defaults become chat-specific selections where needed. Current turns keep their accepted\n access.\n </p>\n <p className=\"mt-2\">\n Updates are saved separately. If a later update fails, approved parent changes may\n already be saved.\n </p>\n </Notice>\n ) : null}\n <div className=\"mt-2 flex justify-end gap-2\">\n {!ownsActionRow ? (\n <Button size=\"sm\" variant=\"ghost\" disabled={busy} onClick={onClose}>\n Cancel\n </Button>\n ) : null}\n {item?.enabled && health?.state !== \"attention\" && health?.state !== \"unverified\" ? (\n <Button size=\"sm\" disabled={busy} onClick={() => void useConnected()}>\n {busy ? <Loader2Icon className=\"animate-spin\" /> : <CheckIcon />}\n {parentAccessPlan ? \"Enable in parents and add tools\" : \"Add tools\"}\n </Button>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction SessionCodexAppsSetup({\n busy,\n setBusy,\n workspaceId,\n sessionId,\n onClose,\n onComplete,\n}: {\n busy: boolean;\n setBusy: (busy: boolean) => void;\n workspaceId: string;\n sessionId: string;\n onClose: () => void;\n onComplete: () => void;\n}) {\n const context = useAppContext();\n const [error, setError] = useState<string | null>(null);\n const inFlight = useRef(false);\n const active = useRef(true);\n useEffect(\n () => () => {\n active.current = false;\n },\n [],\n );\n async function useApps() {\n if (inFlight.current) return;\n inFlight.current = true;\n setBusy(true);\n setError(null);\n try {\n const catalog = await context.client.listCapabilities(workspaceId);\n const item = catalog.items.find((entry) => entry.id === \"mcp:codex_apps\");\n if (!active.current) return;\n if (!item?.enabled || !item.runtime.available)\n throw new Error(\"Choose an active subscription for Codex Apps before continuing.\");\n await attachSessionCapability(\n t,\n context.client,\n workspaceId,\n sessionId,\n item,\n () => active.current,\n );\n await context.refreshWorkspaceMcpServers(workspaceId);\n if (active.current) onComplete();\n } catch (failure) {\n if (active.current)\n setError(\n `Couldn't enable Apps in this conversation. ${userErrorText(failure, \"Try again.\")}`,\n );\n } finally {\n inFlight.current = false;\n if (active.current) setBusy(false);\n }\n }\n return (\n <div className=\"p-6 sm:p-8\">\n <Suspense fallback={<p role=\"status\">Loading connection controls…</p>}>\n <CodexSubscriptionsSurface\n workspaceId={workspaceId}\n canManage={hasWorkspacePermission(\n context.accessContext,\n workspaceId,\n \"connections:write\",\n )}\n />\n </Suspense>\n {error ? <Notice tone=\"failed\">{error}</Notice> : null}\n <div className=\"mt-2 flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" disabled={busy} onClick={onClose}>\n Cancel\n </Button>\n <Button size=\"sm\" disabled={busy} onClick={() => void useApps()}>\n {busy ? <Loader2Icon className=\"animate-spin\" /> : <CheckIcon />}Use in this conversation\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
|