@opengeni/react 4.4.1 → 4.5.1-canary.39832248373001
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 +15 -15
- package/dist/app/components/Composer.js +19 -19
- package/dist/app/components/artifacts/artifact-browse-controls.js +3 -3
- package/dist/app/components/artifacts/artifact-library.js +9 -9
- package/dist/app/components/artifacts/artifact-page-chrome.js +2 -2
- package/dist/app/components/artifacts/chat-interactive-block.js +14 -14
- package/dist/app/components/artifacts/inline-chat-image.js +22 -21
- package/dist/app/components/artifacts/retained-file-preview.js +24 -23
- package/dist/app/components/artifacts/retained-text-preview.js +2 -2
- package/dist/app/components/artifacts/site-audience.js +2 -2
- package/dist/app/components/artifacts/site-conversations.js +14 -13
- package/dist/app/components/artifacts/site-data.js +4 -4
- package/dist/app/components/artifacts/site-publishing.js +20 -20
- package/dist/app/components/artifacts/site-settings.js +25 -25
- package/dist/app/components/billing-class-mark.js +3 -3
- package/dist/app/components/capabilities/capability-detail-sheet.js +6 -6
- package/dist/app/components/capabilities/capability-logo-source.js +8 -8
- package/dist/app/components/capabilities/connector-tool-permissions.js +3 -3
- package/dist/app/components/capabilities/native-connect-setup.js +8 -8
- package/dist/app/components/capabilities/prepared-mcp-setup-card.js +10 -10
- package/dist/app/components/capabilities/session-capability-card.js +43 -41
- package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
- package/dist/app/components/capabilities/session-chrome-card.js +20 -18
- package/dist/app/components/capabilities/session-custom-mcp-card.js +11 -11
- package/dist/app/components/capabilities/session-github-card.js +13 -13
- package/dist/app/components/capabilities/session-machine-card.js +19 -17
- package/dist/app/components/command-menu/chat-status.js +16 -15
- 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 +29 -107
- package/dist/app/components/command-menu/command-menu.js.map +1 -1
- package/dist/app/components/command-menu/shortcut-sheet.js +9 -9
- package/dist/app/components/composer-mobile-plus-panel.js +9 -9
- 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 +5 -5
- 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 +3 -3
- package/dist/app/components/follow-up-repository-menu-body.js +2 -2
- 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/machines/connect-machine-dialog.js +3 -3
- package/dist/app/components/markdown.js +5 -5
- package/dist/app/components/models/models-ui.js +3 -3
- package/dist/app/components/new-session-starters.js +2 -2
- package/dist/app/components/pickers.js +6 -6
- package/dist/app/components/rail/rail-context.js +3 -3
- package/dist/app/components/rail/rail-sections.js +51 -48
- package/dist/app/components/rail/session-header.js +29 -28
- package/dist/app/components/rail/session-list.js +50 -47
- 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 +17 -16
- package/dist/app/components/rail/session-shell.js +78 -75
- 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 +2 -2
- package/dist/app/components/session/agent-configuration-panel.js +18 -18
- package/dist/app/components/session/artifact-link-boundary.js +2 -2
- package/dist/app/components/session/artifact-session-page.js +5 -5
- package/dist/app/components/session/banners.js +7 -7
- package/dist/app/components/session/codex-account-indicator.js +10 -10
- package/dist/app/components/session/editable-artifacts-workspace.js +24 -24
- package/dist/app/components/session/failed-session-banner.js +6 -6
- package/dist/app/components/session/human-input.js +41 -37
- package/dist/app/components/session/inspector.js +61 -57
- package/dist/app/components/session/inspector.js.map +1 -1
- package/dist/app/components/session/message-actions.js +3 -3
- package/dist/app/components/session/message-resource-attachments.js +12 -11
- package/dist/app/components/session/message-resource-attachments.js.map +1 -1
- package/dist/app/components/session/model-account-indicator.js +9 -9
- package/dist/app/components/session/model-recovery-notice.js +3 -3
- package/dist/app/components/session/new-session-settings-menu.js +8 -8
- package/dist/app/components/session/sandbox-switcher.js +12 -12
- package/dist/app/components/session/sandbox-workspace.js +58 -54
- package/dist/app/components/session/search-markdown-highlight.js +6 -6
- package/dist/app/components/session/search-results-view.js +7 -7
- package/dist/app/components/session/session-admin-access.js +3 -3
- package/dist/app/components/session/session-admission-notice.js +5 -5
- package/dist/app/components/session/session-machine-access-notice.js +5 -5
- package/dist/app/components/session/session-search-dialog.js +8 -8
- package/dist/app/components/session/session-tenancy-control.d.ts +2 -0
- package/dist/app/components/session/session-tenancy-control.js +26 -11
- package/dist/app/components/session/session-tenancy-control.js.map +1 -1
- package/dist/app/components/session/session-usage-limit-section.js +4 -4
- package/dist/app/components/session/session-wait-status.js +8 -7
- 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 +13 -12
- package/dist/app/components/settings/row-select.js +3 -3
- package/dist/app/components/transcription-settings.js +4 -4
- package/dist/app/components/usage/usage-entry.js +5 -5
- package/dist/app/components/workspace-composer-plus.js +12 -12
- package/dist/app/embed/memory-navigation.js +2 -2
- package/dist/app/embed/session-app.js +196 -190
- package/dist/app/lib/actions/actions-provider.js +9 -9
- 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 +9 -9
- 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 +13 -12
- 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 +12 -11
- 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 +12 -11
- package/dist/app/lib/session-hover-facts.js +12 -11
- package/dist/app/lib/session-model.js +2 -2
- package/dist/app/lib/session-rail.js +8 -7
- package/dist/app/lib/session-rename.js +2 -2
- 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 +19 -12
- 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 +2 -2
- package/dist/app/lib/use-follow-up-repositories.js +2 -2
- 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 +5 -5
- package/dist/app/lib/use-workspace-model-catalog.js +7 -7
- package/dist/app/lib/use-workspace-rigs.js +7 -7
- package/dist/app/lib/workspace-navigation-preference.js +4 -4
- package/dist/app/lib/workspace-scope-context.js +3 -3
- package/dist/app/routes/artifacts.js +70 -87
- package/dist/app/routes/artifacts.js.map +1 -1
- package/dist/app/routes/retained-artifact.js +36 -35
- package/dist/app/routes/retained-artifact.js.map +1 -1
- package/dist/app/routes/session-unavailable.js +6 -4
- package/dist/app/routes/session.js +127 -123
- package/dist/app/routes/sessions-index-hydration.js +3 -3
- package/dist/app/routes/sessions-index.js +96 -94
- 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 +13 -13
- package/dist/{browser-viewer-RYYQSRTC.js → browser-viewer-VPK3CV2H.js} +7 -5
- package/dist/{chat-interactive-block-ABCRKXJ4.js → chat-interactive-block-AMDSW656.js} +5 -5
- package/dist/chunk-22GTC4MZ.js +15 -0
- package/dist/chunk-22GTC4MZ.js.map +1 -0
- package/dist/{chunk-RQDFYQHA.js → chunk-25LWDG5D.js} +6 -6
- package/dist/{chunk-U3HSFCON.js → chunk-2CKVVAGP.js} +15 -15
- package/dist/{chunk-F6LBGYS6.js → chunk-2DL6NJP5.js} +15 -15
- 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-TWXIFWBD.js → chunk-34EU25RL.js} +2 -2
- package/dist/{chunk-PTGRFAMH.js → chunk-3ABPIUCK.js} +2 -2
- package/dist/{chunk-722UO6YQ.js → chunk-3PEXVG4D.js} +2 -2
- package/dist/{chunk-N3ZP4IDU.js → chunk-45WYYFP6.js} +2 -2
- package/dist/{chunk-HOJGAJAB.js → chunk-4MQLGMV2.js} +5 -5
- package/dist/{chunk-L7YURQI2.js → chunk-4U4GXWXS.js} +3 -3
- package/dist/{chunk-63VGE4OH.js → chunk-5HIOVXOX.js} +3 -3
- package/dist/{chunk-GFUUFM2O.js → chunk-5M23GZA2.js} +3 -3
- 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-6W3LF3DB.js → chunk-5YFY4SFC.js} +2 -12
- package/dist/chunk-5YFY4SFC.js.map +1 -0
- package/dist/{chunk-I6VUUEXH.js → chunk-6AFSZKZA.js} +3 -3
- package/dist/{chunk-FBMU3VK5.js → chunk-6DCEDIF6.js} +2 -2
- package/dist/{chunk-5MZTJMZ3.js → chunk-6MRY2RUZ.js} +13 -7
- package/dist/chunk-6MRY2RUZ.js.map +1 -0
- package/dist/{chunk-4EONHNJU.js → chunk-6O4VWKSO.js} +2 -2
- package/dist/chunk-756MKA2J.js +45 -0
- package/dist/chunk-756MKA2J.js.map +1 -0
- package/dist/{chunk-BSX2R4CW.js → chunk-767WCGAX.js} +6 -6
- package/dist/{chunk-7KGKDWWR.js → chunk-7HFLYNWN.js} +2 -2
- package/dist/{chunk-OSVHU2WU.js → chunk-7IYAHFPE.js} +2 -2
- package/dist/{chunk-4EAF3HSD.js → chunk-7J7PZB4S.js} +2 -2
- package/dist/{chunk-ADJJQSYC.js → chunk-7PUFAH4I.js} +34 -32
- package/dist/chunk-7PUFAH4I.js.map +1 -0
- package/dist/{chunk-OR37STQZ.js → chunk-7R2JQHBX.js} +3 -3
- package/dist/{chunk-QM5H4FPT.js → chunk-7VN6VC3D.js} +3 -3
- package/dist/{chunk-HWDGJFM4.js → chunk-A2E3ZF6N.js} +4 -4
- package/dist/{chunk-RGW24ZZM.js → chunk-A6CK4ENG.js} +19 -17
- package/dist/chunk-A6CK4ENG.js.map +1 -0
- package/dist/{chunk-4432A3HQ.js → chunk-A6T4FGE7.js} +4 -4
- package/dist/{chunk-73SOCVLS.js → chunk-AIEXYO2X.js} +3 -3
- package/dist/{chunk-U7TC2XJQ.js → chunk-AJPW3SV4.js} +3 -3
- package/dist/{chunk-46VBQG2D.js → chunk-AOUCHCSB.js} +5 -5
- package/dist/{chunk-HDHK3SXK.js → chunk-AT4K4F6S.js} +2 -2
- package/dist/{chunk-TQGJN5UZ.js → chunk-AW3QEFOF.js} +140 -522
- package/dist/chunk-AW3QEFOF.js.map +1 -0
- package/dist/{chunk-HRJQAFKR.js → chunk-AX6YJA5U.js} +2 -2
- package/dist/{chunk-HO5Y2OOX.js → chunk-BLPXOHG6.js} +6 -6
- package/dist/{chunk-DT7BORXG.js → chunk-BMJTNPWK.js} +2 -2
- package/dist/{chunk-HIHO2QE7.js → chunk-BT2MVGHT.js} +2 -2
- package/dist/{chunk-AOLE4IRZ.js → chunk-C535KSTY.js} +2 -2
- package/dist/{chunk-IVOA3DXA.js → chunk-CB574ERL.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-NYZQ7LO7.js → chunk-CDUDKETD.js} +2 -2
- package/dist/{chunk-JTN3T4QN.js → chunk-D3RK3NGM.js} +4 -4
- package/dist/{chunk-IOKSNX74.js → chunk-D5OWJZQR.js} +2 -2
- package/dist/{chunk-BJIZ7PL7.js → chunk-D64Z4V26.js} +145 -29
- package/dist/chunk-D64Z4V26.js.map +1 -0
- package/dist/{chunk-XWWXIZFP.js → chunk-DFXZYNTX.js} +7 -7
- package/dist/{chunk-SQGXMHJO.js → chunk-DGLRZMXL.js} +3 -3
- package/dist/{chunk-GNEHAPKV.js → chunk-DJFTH2DI.js} +3 -3
- package/dist/{chunk-KWKGBGAF.js → chunk-DKCX643S.js} +11 -11
- package/dist/{chunk-HQG4SLTE.js → chunk-DYJGYGPB.js} +2 -2
- package/dist/{chunk-GTQ3SNEI.js → chunk-E36IC3LU.js} +2 -2
- package/dist/{chunk-CVG4FILQ.js → chunk-ECHYJP63.js} +253 -1008
- package/dist/chunk-ECHYJP63.js.map +1 -0
- package/dist/{chunk-Q35DT6I6.js → chunk-EH7TTYE6.js} +179 -170
- package/dist/chunk-EH7TTYE6.js.map +1 -0
- package/dist/{chunk-72J6C2AJ.js → chunk-EMCB6XKU.js} +2 -2
- package/dist/{chunk-3AA6RNGE.js → chunk-ENS6E4RZ.js} +2 -2
- package/dist/{chunk-AG7VGUIW.js → chunk-ERG355NM.js} +3 -3
- package/dist/{chunk-TSBE4KOQ.js → chunk-EWL6NDOO.js} +3 -3
- package/dist/{chunk-Z5WMLJKI.js → chunk-F2RMKGDQ.js} +89 -1
- package/dist/chunk-F2RMKGDQ.js.map +1 -0
- package/dist/{chunk-X7L4H4VG.js → chunk-F33EDYS7.js} +524 -426
- package/dist/chunk-F33EDYS7.js.map +1 -0
- package/dist/{chunk-HTT3FB7T.js → chunk-F3FN6DO6.js} +2 -2
- package/dist/{chunk-ST22GONV.js → chunk-FB3B45FP.js} +11 -11
- package/dist/{chunk-P5T36BA3.js → chunk-FRP64DEK.js} +2 -2
- package/dist/{chunk-KBF3SE7G.js → chunk-FSP334UU.js} +2 -2
- package/dist/{chunk-4VKA5O7T.js → chunk-FVL4B552.js} +9 -9
- package/dist/{chunk-VP62LPLW.js → chunk-G2BX56CN.js} +5 -5
- package/dist/{chunk-CSHBR2IZ.js → chunk-GDLDBR6B.js} +2 -2
- package/dist/{chunk-PN66T6JA.js → chunk-GFSOXB2K.js} +2 -2
- package/dist/{chunk-S4EZ3JUB.js → chunk-GZGQHQI7.js} +29 -29
- package/dist/chunk-H4IE2PYF.js +792 -0
- package/dist/chunk-H4IE2PYF.js.map +1 -0
- package/dist/{chunk-XFNLU7EW.js → chunk-H5M33DAL.js} +15 -6
- package/dist/chunk-H5M33DAL.js.map +1 -0
- package/dist/{chunk-BXRIQZAH.js → chunk-HNNM2GDN.js} +3 -3
- package/dist/{chunk-EU6XSQFM.js → chunk-HPB4KSV3.js} +2 -2
- package/dist/{chunk-QCD5Y7K5.js → chunk-HSQRYJ4P.js} +5 -5
- package/dist/{chunk-YXOKAG66.js → chunk-HUXDGWAN.js} +2 -2
- package/dist/{chunk-VUHPA3XQ.js → chunk-I66ZB6KD.js} +3 -3
- package/dist/{chunk-7CZTKBTI.js → chunk-IC7KNOBB.js} +5 -5
- package/dist/{chunk-KF3MF6FP.js → chunk-IECRGM6K.js} +3 -2
- package/dist/chunk-IECRGM6K.js.map +1 -0
- package/dist/{chunk-HGMWMK5K.js → chunk-IIO2MR3B.js} +2 -2
- 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-O756O2I7.js → chunk-IPPVX5GF.js} +1 -1
- package/dist/{chunk-X7ASQHR6.js → chunk-IUK5QGP5.js} +2 -2
- package/dist/{chunk-5JZYPZ72.js → chunk-JFK7NTEA.js} +4 -4
- package/dist/chunk-JFK7NTEA.js.map +1 -0
- package/dist/{chunk-PIVGX42P.js → chunk-JNY5MT3I.js} +2 -2
- package/dist/chunk-JRSNCSZN.js +37 -0
- package/dist/chunk-JRSNCSZN.js.map +1 -0
- package/dist/{chunk-DDK4WFJ3.js → chunk-JWN7SLTO.js} +9 -9
- package/dist/{chunk-Q35YZVDZ.js → chunk-KFWVBTUH.js} +3 -3
- package/dist/{chunk-JXT5QDJC.js → chunk-KNFDWNCH.js} +5 -5
- 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-RSNYGEVZ.js → chunk-LKJ2C7PH.js} +8 -8
- package/dist/{chunk-RIMKJBCD.js → chunk-LMPTC4CX.js} +2 -2
- package/dist/{chunk-3KVWXKD6.js → chunk-LQ47YL6E.js} +2 -2
- package/dist/{chunk-GAIM5RNE.js → chunk-MJQBC7C5.js} +3 -3
- package/dist/{chunk-NWZW2WHN.js → chunk-MM7OKOTE.js} +6 -6
- 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-XRRSFQEV.js → chunk-NAZZLAWX.js} +2 -2
- package/dist/{chunk-XOFUXMPP.js → chunk-ND2WCWXI.js} +4 -4
- package/dist/{chunk-6L7U46Y2.js → chunk-NKNVIO66.js} +2 -2
- package/dist/{chunk-JKUICTLM.js → chunk-NLAFNMPK.js} +2 -2
- package/dist/{chunk-OO2T63BY.js → chunk-NML44AW2.js} +2 -2
- package/dist/chunk-NQQKOJDI.js +89 -0
- package/dist/chunk-NQQKOJDI.js.map +1 -0
- package/dist/{chunk-4LKNIGHB.js → chunk-O2SBHS2N.js} +2 -2
- package/dist/{chunk-RA3FNMWF.js → chunk-O4DYOSOL.js} +5 -5
- package/dist/{chunk-ZKYYZH6L.js → chunk-OFB6TUDC.js} +4 -4
- package/dist/{chunk-DWPOQ3S5.js → chunk-OTMWHZBY.js} +2 -2
- package/dist/{chunk-VVCDB2T7.js → chunk-PCJLH45G.js} +3 -3
- package/dist/{chunk-WSMYOLHG.js → chunk-PEKPWK5M.js} +2 -2
- package/dist/{chunk-PZ24CYDO.js → chunk-PFAUGEV5.js} +2 -2
- package/dist/{chunk-KTRKZRID.js → chunk-PKEKZ2VA.js} +5 -5
- package/dist/{chunk-6JKZILLF.js → chunk-PMD7V4N7.js} +3 -3
- package/dist/{chunk-B74GSYR6.js → chunk-PUTS4DYW.js} +2 -2
- package/dist/{chunk-ZRJCGBVV.js → chunk-PVR5EELP.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-FLGUVRR7.js → chunk-QBADR2FO.js} +6 -6
- package/dist/{chunk-TGVVEGZG.js → chunk-QLIDZGPV.js} +6 -6
- 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-6PQNLL4E.js → chunk-R7XCJWCD.js} +11 -11
- package/dist/{chunk-4R3JCVID.js → chunk-RAMZTZOB.js} +360 -103
- package/dist/chunk-RAMZTZOB.js.map +1 -0
- package/dist/{chunk-QRVNI5V6.js → chunk-SCNEQFIW.js} +3 -3
- package/dist/{chunk-BNUPYHHZ.js → chunk-SD4PPZFB.js} +4 -4
- package/dist/{chunk-ROQOVH4N.js → chunk-SFAU5R5S.js} +3 -3
- package/dist/{chunk-R63QEVPK.js → chunk-SJORXXLV.js} +6 -6
- package/dist/{chunk-FBE6AIIW.js → chunk-SOKNCW5U.js} +2 -2
- package/dist/{chunk-JRXHSVD5.js → chunk-SOXZ4LGS.js} +68 -11
- package/dist/chunk-SOXZ4LGS.js.map +1 -0
- package/dist/{chunk-EF5SYXAY.js → chunk-SQDPHCK2.js} +22 -14
- package/dist/chunk-SQDPHCK2.js.map +1 -0
- package/dist/{chunk-NDF3SH3X.js → chunk-TDIOBPLA.js} +5 -5
- package/dist/{chunk-EHCUFCXM.js → chunk-TEPPPAJI.js} +17 -7
- package/dist/chunk-TEPPPAJI.js.map +1 -0
- package/dist/{chunk-33TPANCR.js → chunk-TFK4KFKA.js} +4 -4
- package/dist/{chunk-6NIB2KGJ.js → chunk-THVIT3PW.js} +22 -22
- package/dist/{chunk-HPPKLBTJ.js → chunk-TJQDL3JH.js} +2 -2
- package/dist/{chunk-FD4Q5KFL.js → chunk-TLL22FFO.js} +2 -2
- package/dist/{chunk-7DU35P5J.js → chunk-TN5T5HRZ.js} +7 -7
- package/dist/{chunk-JK7C5A4I.js → chunk-TR4HIKJ2.js} +8 -8
- package/dist/{chunk-HNYJEAES.js → chunk-UGEWCWVV.js} +3 -3
- 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-AD22P5X3.js → chunk-UUSAOIJR.js} +3 -3
- package/dist/{chunk-Z6DKXQG7.js → chunk-UXXFMF4X.js} +2 -2
- package/dist/{chunk-RGPYMHKI.js → chunk-V3K4RQO7.js} +9 -3
- package/dist/chunk-V3K4RQO7.js.map +1 -0
- package/dist/{chunk-UP4BE32Y.js → chunk-VO6RVVP7.js} +5 -5
- package/dist/{chunk-S4SC5SSV.js → chunk-VPNXQUUS.js} +11 -11
- package/dist/{chunk-7BST7BA6.js → chunk-VW3BBTMA.js} +1 -1
- package/dist/{chunk-CBY5CXBD.js → chunk-VWSFA4LJ.js} +2 -2
- 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-5JEIDFPD.js → chunk-WBPQ7OPC.js} +1 -1
- package/dist/{chunk-GZLLDA6P.js → chunk-WEFN327U.js} +2 -2
- package/dist/{chunk-ANHUMDJX.js → chunk-WNDTLK44.js} +2 -2
- package/dist/{chunk-DLOYMWUQ.js → chunk-WSLPZ43N.js} +7 -7
- package/dist/{chunk-2DS4UOYQ.js → chunk-WSZQNTVN.js} +2 -2
- package/dist/{chunk-LE2EDBXU.js → chunk-WUHB422G.js} +5 -5
- package/dist/{chunk-BJW7G6EF.js → chunk-WVX5AQXS.js} +3 -3
- package/dist/{chunk-5POTDNQT.js → chunk-WWOHORRO.js} +3 -3
- package/dist/{chunk-4W7VISE7.js → chunk-WYDZP5F2.js} +93 -94
- package/dist/chunk-WYDZP5F2.js.map +1 -0
- package/dist/{chunk-KZHW27BV.js → chunk-WYEPUXGL.js} +2 -2
- package/dist/{chunk-GALB2G3W.js → chunk-X2AH4DRF.js} +2 -2
- package/dist/{chunk-NCX5SAQY.js → chunk-XN6CALYY.js} +9 -9
- package/dist/{chunk-SUVEDKE2.js → chunk-XNACICAB.js} +3 -3
- package/dist/{chunk-FDNJVZRE.js → chunk-XU4I47IP.js} +4 -4
- package/dist/chunk-XV6ZYRHK.js +59 -0
- package/dist/chunk-XV6ZYRHK.js.map +1 -0
- 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-U36PO27Q.js → chunk-YG3IJCM2.js} +3 -3
- package/dist/{chunk-UWJ5P5CU.js → chunk-YGSJWWT3.js} +3 -3
- package/dist/{chunk-APU42QDI.js → chunk-YO64YVYL.js} +105 -101
- package/dist/chunk-YO64YVYL.js.map +1 -0
- package/dist/{chunk-P5WABK2H.js → chunk-Z4GJB24B.js} +2 -2
- package/dist/{chunk-NLMTNEWW.js → chunk-Z6E6TUAE.js} +2 -2
- package/dist/{chunk-OBQVTCTW.js → chunk-ZX5H7LWD.js} +2 -2
- package/dist/components/browser-viewer.d.ts +1 -1
- package/dist/composer.js +8 -8
- package/dist/{computer-viewer-KEDVLD42.js → computer-viewer-VA5JONUH.js} +6 -6
- package/dist/connect.js +7 -7
- package/dist/desktop.js +2 -2
- package/dist/editor.js +2 -2
- package/dist/{embedded-new-voice-LFHWWYD2.js → embedded-new-voice-6BILAOUG.js} +6 -6
- package/dist/{embedded-voice-6QS4ANNX.js → embedded-voice-UDE4JRKB.js} +6 -6
- 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 +86 -80
- package/dist/interaction.js +8 -6
- package/dist/interaction.js.map +1 -1
- package/dist/{latest-question-AW3PPDUM.js → latest-question-4WDBECXB.js} +4 -3
- package/dist/{latest-question-AW3PPDUM.js.map → latest-question-4WDBECXB.js.map} +1 -1
- package/dist/machines.js +4 -4
- 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-NRTO6FRP.js} +4 -4
- package/dist/{platform-activity-row-BMXXNZKX.js → platform-activity-row-ENQVIFTL.js} +2 -2
- package/dist/{queue-surface-implementation-2X5AXB6I.js → queue-surface-implementation-H4XSNHZE.js} +8 -6
- package/dist/{queue-surface-implementation-2X5AXB6I.js.map → queue-surface-implementation-H4XSNHZE.js.map} +1 -1
- package/dist/realtime.js +5 -5
- package/dist/{sandbox-files-4FBG3GS2.js → sandbox-files-IEHODU35.js} +9 -9
- package/dist/sandbox-files-IEHODU35.js.map +1 -0
- package/dist/session-app.js +198 -192
- package/dist/session-list-model.d.ts +1 -0
- package/dist/session-list-model.js +7 -1
- 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 +48 -43
- package/dist/session.js +20 -18
- 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-annotation-markers-X4K2IEOO.js → timeline-annotation-markers-ZSOFW7PG.js} +2 -2
- package/dist/{timeline-annotation-selection-MEHBW676.js → timeline-annotation-selection-YWV2UC34.js} +2 -2
- package/dist/{timeline-annotations-dialog-U2FPQ3UY.js → timeline-annotations-dialog-ZWQVX2HI.js} +3 -3
- package/dist/timeline-model.js +16 -14
- package/dist/ui/access-list.js +7 -7
- package/dist/ui/cadence-picker.js +2 -2
- package/dist/ui/list-row.js +3 -3
- package/dist/ui/revision-history.js +2 -2
- package/dist/ui/role-select.js +3 -3
- package/dist/ui/select-menu.js +2 -2
- package/dist/usage.js +3 -3
- package/dist/workbench.js +4 -4
- package/package.json +4 -4
- package/src/app/app-state.tsx +3 -1
- package/src/app/components/capabilities/session-machine-card.tsx +9 -2
- 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 +11 -6
- 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/styles/compiled.css +38 -0
- package/dist/chunk-22ZBT6CN.js +0 -50
- package/dist/chunk-22ZBT6CN.js.map +0 -1
- package/dist/chunk-4R3JCVID.js.map +0 -1
- package/dist/chunk-4W7VISE7.js.map +0 -1
- package/dist/chunk-5JZYPZ72.js.map +0 -1
- package/dist/chunk-5MZTJMZ3.js.map +0 -1
- package/dist/chunk-6W3LF3DB.js.map +0 -1
- package/dist/chunk-ADJJQSYC.js.map +0 -1
- package/dist/chunk-APU42QDI.js.map +0 -1
- package/dist/chunk-BJIZ7PL7.js.map +0 -1
- package/dist/chunk-CVG4FILQ.js.map +0 -1
- package/dist/chunk-EF5SYXAY.js.map +0 -1
- package/dist/chunk-EHCUFCXM.js.map +0 -1
- package/dist/chunk-GZ64CASI.js.map +0 -1
- package/dist/chunk-JRXHSVD5.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-PM3OSANE.js.map +0 -1
- package/dist/chunk-Q35DT6I6.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-RGW24ZZM.js.map +0 -1
- package/dist/chunk-TQGJN5UZ.js.map +0 -1
- package/dist/chunk-X7L4H4VG.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/lib/console-site.js.map} +0 -0
- /package/dist/{chat-interactive-block-ABCRKXJ4.js.map → app/lib/site-opened.js.map} +0 -0
- /package/dist/{computer-viewer-KEDVLD42.js.map → browser-viewer-VPK3CV2H.js.map} +0 -0
- /package/dist/{embedded-new-voice-LFHWWYD2.js.map → chat-interactive-block-AMDSW656.js.map} +0 -0
- /package/dist/{chunk-RQDFYQHA.js.map → chunk-25LWDG5D.js.map} +0 -0
- /package/dist/{chunk-U3HSFCON.js.map → chunk-2CKVVAGP.js.map} +0 -0
- /package/dist/{chunk-F6LBGYS6.js.map → chunk-2DL6NJP5.js.map} +0 -0
- /package/dist/{chunk-UHFWF6ZU.js.map → chunk-2FPS5H2D.js.map} +0 -0
- /package/dist/{chunk-TWXIFWBD.js.map → chunk-34EU25RL.js.map} +0 -0
- /package/dist/{chunk-PTGRFAMH.js.map → chunk-3ABPIUCK.js.map} +0 -0
- /package/dist/{chunk-722UO6YQ.js.map → chunk-3PEXVG4D.js.map} +0 -0
- /package/dist/{chunk-N3ZP4IDU.js.map → chunk-45WYYFP6.js.map} +0 -0
- /package/dist/{chunk-HOJGAJAB.js.map → chunk-4MQLGMV2.js.map} +0 -0
- /package/dist/{chunk-L7YURQI2.js.map → chunk-4U4GXWXS.js.map} +0 -0
- /package/dist/{chunk-63VGE4OH.js.map → chunk-5HIOVXOX.js.map} +0 -0
- /package/dist/{chunk-GFUUFM2O.js.map → chunk-5M23GZA2.js.map} +0 -0
- /package/dist/{chunk-RKB2Z457.js.map → chunk-5VGJXWQ2.js.map} +0 -0
- /package/dist/{chunk-I6VUUEXH.js.map → chunk-6AFSZKZA.js.map} +0 -0
- /package/dist/{chunk-FBMU3VK5.js.map → chunk-6DCEDIF6.js.map} +0 -0
- /package/dist/{chunk-4EONHNJU.js.map → chunk-6O4VWKSO.js.map} +0 -0
- /package/dist/{chunk-BSX2R4CW.js.map → chunk-767WCGAX.js.map} +0 -0
- /package/dist/{chunk-7KGKDWWR.js.map → chunk-7HFLYNWN.js.map} +0 -0
- /package/dist/{chunk-OSVHU2WU.js.map → chunk-7IYAHFPE.js.map} +0 -0
- /package/dist/{chunk-4EAF3HSD.js.map → chunk-7J7PZB4S.js.map} +0 -0
- /package/dist/{chunk-OR37STQZ.js.map → chunk-7R2JQHBX.js.map} +0 -0
- /package/dist/{chunk-QM5H4FPT.js.map → chunk-7VN6VC3D.js.map} +0 -0
- /package/dist/{chunk-HWDGJFM4.js.map → chunk-A2E3ZF6N.js.map} +0 -0
- /package/dist/{chunk-4432A3HQ.js.map → chunk-A6T4FGE7.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-46VBQG2D.js.map → chunk-AOUCHCSB.js.map} +0 -0
- /package/dist/{chunk-HDHK3SXK.js.map → chunk-AT4K4F6S.js.map} +0 -0
- /package/dist/{chunk-HRJQAFKR.js.map → chunk-AX6YJA5U.js.map} +0 -0
- /package/dist/{chunk-HO5Y2OOX.js.map → chunk-BLPXOHG6.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-AOLE4IRZ.js.map → chunk-C535KSTY.js.map} +0 -0
- /package/dist/{chunk-IVOA3DXA.js.map → chunk-CB574ERL.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-NYZQ7LO7.js.map → chunk-CDUDKETD.js.map} +0 -0
- /package/dist/{chunk-JTN3T4QN.js.map → chunk-D3RK3NGM.js.map} +0 -0
- /package/dist/{chunk-IOKSNX74.js.map → chunk-D5OWJZQR.js.map} +0 -0
- /package/dist/{chunk-XWWXIZFP.js.map → chunk-DFXZYNTX.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-KWKGBGAF.js.map → chunk-DKCX643S.js.map} +0 -0
- /package/dist/{chunk-HQG4SLTE.js.map → chunk-DYJGYGPB.js.map} +0 -0
- /package/dist/{chunk-GTQ3SNEI.js.map → chunk-E36IC3LU.js.map} +0 -0
- /package/dist/{chunk-72J6C2AJ.js.map → chunk-EMCB6XKU.js.map} +0 -0
- /package/dist/{chunk-3AA6RNGE.js.map → chunk-ENS6E4RZ.js.map} +0 -0
- /package/dist/{chunk-AG7VGUIW.js.map → chunk-ERG355NM.js.map} +0 -0
- /package/dist/{chunk-TSBE4KOQ.js.map → chunk-EWL6NDOO.js.map} +0 -0
- /package/dist/{chunk-HTT3FB7T.js.map → chunk-F3FN6DO6.js.map} +0 -0
- /package/dist/{chunk-ST22GONV.js.map → chunk-FB3B45FP.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-4VKA5O7T.js.map → chunk-FVL4B552.js.map} +0 -0
- /package/dist/{chunk-VP62LPLW.js.map → chunk-G2BX56CN.js.map} +0 -0
- /package/dist/{chunk-CSHBR2IZ.js.map → chunk-GDLDBR6B.js.map} +0 -0
- /package/dist/{chunk-PN66T6JA.js.map → chunk-GFSOXB2K.js.map} +0 -0
- /package/dist/{chunk-S4EZ3JUB.js.map → chunk-GZGQHQI7.js.map} +0 -0
- /package/dist/{chunk-BXRIQZAH.js.map → chunk-HNNM2GDN.js.map} +0 -0
- /package/dist/{chunk-EU6XSQFM.js.map → chunk-HPB4KSV3.js.map} +0 -0
- /package/dist/{chunk-QCD5Y7K5.js.map → chunk-HSQRYJ4P.js.map} +0 -0
- /package/dist/{chunk-YXOKAG66.js.map → chunk-HUXDGWAN.js.map} +0 -0
- /package/dist/{chunk-VUHPA3XQ.js.map → chunk-I66ZB6KD.js.map} +0 -0
- /package/dist/{chunk-7CZTKBTI.js.map → chunk-IC7KNOBB.js.map} +0 -0
- /package/dist/{chunk-HGMWMK5K.js.map → chunk-IIO2MR3B.js.map} +0 -0
- /package/dist/{chunk-L6RXRRN3.js.map → chunk-ILDOW2IQ.js.map} +0 -0
- /package/dist/{chunk-O756O2I7.js.map → chunk-IPPVX5GF.js.map} +0 -0
- /package/dist/{chunk-X7ASQHR6.js.map → chunk-IUK5QGP5.js.map} +0 -0
- /package/dist/{chunk-PIVGX42P.js.map → chunk-JNY5MT3I.js.map} +0 -0
- /package/dist/{chunk-DDK4WFJ3.js.map → chunk-JWN7SLTO.js.map} +0 -0
- /package/dist/{chunk-Q35YZVDZ.js.map → chunk-KFWVBTUH.js.map} +0 -0
- /package/dist/{chunk-JXT5QDJC.js.map → chunk-KNFDWNCH.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-RSNYGEVZ.js.map → chunk-LKJ2C7PH.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-GAIM5RNE.js.map → chunk-MJQBC7C5.js.map} +0 -0
- /package/dist/{chunk-NWZW2WHN.js.map → chunk-MM7OKOTE.js.map} +0 -0
- /package/dist/{chunk-FM4OUCC2.js.map → chunk-MOKYT3X3.js.map} +0 -0
- /package/dist/{chunk-XRRSFQEV.js.map → chunk-NAZZLAWX.js.map} +0 -0
- /package/dist/{chunk-XOFUXMPP.js.map → chunk-ND2WCWXI.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-OO2T63BY.js.map → chunk-NML44AW2.js.map} +0 -0
- /package/dist/{chunk-4LKNIGHB.js.map → chunk-O2SBHS2N.js.map} +0 -0
- /package/dist/{chunk-RA3FNMWF.js.map → chunk-O4DYOSOL.js.map} +0 -0
- /package/dist/{chunk-ZKYYZH6L.js.map → chunk-OFB6TUDC.js.map} +0 -0
- /package/dist/{chunk-DWPOQ3S5.js.map → chunk-OTMWHZBY.js.map} +0 -0
- /package/dist/{chunk-VVCDB2T7.js.map → chunk-PCJLH45G.js.map} +0 -0
- /package/dist/{chunk-WSMYOLHG.js.map → chunk-PEKPWK5M.js.map} +0 -0
- /package/dist/{chunk-PZ24CYDO.js.map → chunk-PFAUGEV5.js.map} +0 -0
- /package/dist/{chunk-KTRKZRID.js.map → chunk-PKEKZ2VA.js.map} +0 -0
- /package/dist/{chunk-6JKZILLF.js.map → chunk-PMD7V4N7.js.map} +0 -0
- /package/dist/{chunk-B74GSYR6.js.map → chunk-PUTS4DYW.js.map} +0 -0
- /package/dist/{chunk-ZRJCGBVV.js.map → chunk-PVR5EELP.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-FLGUVRR7.js.map → chunk-QBADR2FO.js.map} +0 -0
- /package/dist/{chunk-TGVVEGZG.js.map → chunk-QLIDZGPV.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-6PQNLL4E.js.map → chunk-R7XCJWCD.js.map} +0 -0
- /package/dist/{chunk-QRVNI5V6.js.map → chunk-SCNEQFIW.js.map} +0 -0
- /package/dist/{chunk-BNUPYHHZ.js.map → chunk-SD4PPZFB.js.map} +0 -0
- /package/dist/{chunk-ROQOVH4N.js.map → chunk-SFAU5R5S.js.map} +0 -0
- /package/dist/{chunk-R63QEVPK.js.map → chunk-SJORXXLV.js.map} +0 -0
- /package/dist/{chunk-FBE6AIIW.js.map → chunk-SOKNCW5U.js.map} +0 -0
- /package/dist/{chunk-NDF3SH3X.js.map → chunk-TDIOBPLA.js.map} +0 -0
- /package/dist/{chunk-33TPANCR.js.map → chunk-TFK4KFKA.js.map} +0 -0
- /package/dist/{chunk-6NIB2KGJ.js.map → chunk-THVIT3PW.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-7DU35P5J.js.map → chunk-TN5T5HRZ.js.map} +0 -0
- /package/dist/{chunk-JK7C5A4I.js.map → chunk-TR4HIKJ2.js.map} +0 -0
- /package/dist/{chunk-HNYJEAES.js.map → chunk-UGEWCWVV.js.map} +0 -0
- /package/dist/{chunk-H5EVWF6L.js.map → chunk-UNNJUJVD.js.map} +0 -0
- /package/dist/{chunk-AD22P5X3.js.map → chunk-UUSAOIJR.js.map} +0 -0
- /package/dist/{chunk-Z6DKXQG7.js.map → chunk-UXXFMF4X.js.map} +0 -0
- /package/dist/{chunk-UP4BE32Y.js.map → chunk-VO6RVVP7.js.map} +0 -0
- /package/dist/{chunk-S4SC5SSV.js.map → chunk-VPNXQUUS.js.map} +0 -0
- /package/dist/{chunk-7BST7BA6.js.map → chunk-VW3BBTMA.js.map} +0 -0
- /package/dist/{chunk-CBY5CXBD.js.map → chunk-VWSFA4LJ.js.map} +0 -0
- /package/dist/{chunk-QEJTQTF5.js.map → chunk-W6T5HR3Z.js.map} +0 -0
- /package/dist/{chunk-5JEIDFPD.js.map → chunk-WBPQ7OPC.js.map} +0 -0
- /package/dist/{chunk-GZLLDA6P.js.map → chunk-WEFN327U.js.map} +0 -0
- /package/dist/{chunk-ANHUMDJX.js.map → chunk-WNDTLK44.js.map} +0 -0
- /package/dist/{chunk-DLOYMWUQ.js.map → chunk-WSLPZ43N.js.map} +0 -0
- /package/dist/{chunk-2DS4UOYQ.js.map → chunk-WSZQNTVN.js.map} +0 -0
- /package/dist/{chunk-LE2EDBXU.js.map → chunk-WUHB422G.js.map} +0 -0
- /package/dist/{chunk-BJW7G6EF.js.map → chunk-WVX5AQXS.js.map} +0 -0
- /package/dist/{chunk-5POTDNQT.js.map → chunk-WWOHORRO.js.map} +0 -0
- /package/dist/{chunk-KZHW27BV.js.map → chunk-WYEPUXGL.js.map} +0 -0
- /package/dist/{chunk-GALB2G3W.js.map → chunk-X2AH4DRF.js.map} +0 -0
- /package/dist/{chunk-NCX5SAQY.js.map → chunk-XN6CALYY.js.map} +0 -0
- /package/dist/{chunk-SUVEDKE2.js.map → chunk-XNACICAB.js.map} +0 -0
- /package/dist/{chunk-FDNJVZRE.js.map → chunk-XU4I47IP.js.map} +0 -0
- /package/dist/{chunk-U36PO27Q.js.map → chunk-YG3IJCM2.js.map} +0 -0
- /package/dist/{chunk-UWJ5P5CU.js.map → chunk-YGSJWWT3.js.map} +0 -0
- /package/dist/{chunk-P5WABK2H.js.map → chunk-Z4GJB24B.js.map} +0 -0
- /package/dist/{chunk-NLMTNEWW.js.map → chunk-Z6E6TUAE.js.map} +0 -0
- /package/dist/{chunk-OBQVTCTW.js.map → chunk-ZX5H7LWD.js.map} +0 -0
- /package/dist/{embedded-voice-6QS4ANNX.js.map → computer-viewer-VA5JONUH.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-CURJ247L.js.map → embedded-new-voice-6BILAOUG.js.map} +0 -0
- /package/dist/{sandbox-files-4FBG3GS2.js.map → embedded-voice-UDE4JRKB.js.map} +0 -0
- /package/dist/{fleet-decision-row-QNSTP3VX.js.map → fleet-decision-row-NN2HXDX3.js.map} +0 -0
- /package/dist/{session-realtime-2XIB254N.js.map → model-policy-picker-menu-NRTO6FRP.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-ZSOFW7PG.js.map} +0 -0
- /package/dist/{timeline-annotation-selection-MEHBW676.js.map → timeline-annotation-selection-YWV2UC34.js.map} +0 -0
- /package/dist/{timeline-annotations-dialog-U2FPQ3UY.js.map → timeline-annotations-dialog-ZWQVX2HI.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/queue-surface.tsx","../src/components/session-list.tsx","../src/components/open-geni-chat.tsx","../src/components/session-commands-panel.tsx","../src/hooks/use-session-background-commands.ts","../src/components/session-commands.tsx","../src/timeline/startup-timings.tsx"],"sourcesContent":["import { Loader2Icon } from \"lucide-react\";\nimport { lazy, Suspense, type ComponentType } from \"react\";\n\nimport type { QueueSurfaceProps } from \"./queue-surface-implementation\";\nexport { requestQueueDraftEdit } from \"./queue-draft-policy\";\nimport { EmptyQueueStateSurface } from \"./queue-surface-state\";\nimport { useOpenGeniText } from \"../messages/runtime\";\n\nexport type { QueueSurfaceProps } from \"./queue-surface-implementation\";\n\nconst loadQueueSurface = () => import(\"./queue-surface-implementation\");\ntype QueueSurfaceModule = { QueueSurface: ComponentType<QueueSurfaceProps> };\ntype QueueSurfaceLoader = () => Promise<QueueSurfaceModule>;\n\n/** The sole pending-input surface: compact above Goal, Agents, and composer. */\nexport const QueueSurface = createQueueSurface(loadQueueSurface);\n\n/** @internal Deterministic Suspense seam for the QueueSurface regression suite. */\nexport function createQueueSurfaceForTest(loadImplementation: QueueSurfaceLoader) {\n return createQueueSurface(loadImplementation);\n}\n\nfunction createQueueSurface(loadImplementation: QueueSurfaceLoader) {\n const LazyQueueSurface = lazy(async () => ({\n default: (await loadImplementation()).QueueSurface,\n }));\n\n return function QueueSurfaceBoundary(props: QueueSurfaceProps) {\n const { queue } = props;\n if (queue.queue.length + queue.pendingInputs.length === 0) {\n if (!queue.stoppingPreviousAttempt && !queue.error && !queue.mutationError) return null;\n return <EmptyQueueStateSurface queue={queue} />;\n }\n\n return (\n <Suspense fallback={<QueueSurfaceFallback />}>\n <LazyQueueSurface {...props} />\n </Suspense>\n );\n };\n}\n\nfunction QueueSurfaceFallback() {\n const t = useOpenGeniText();\n return (\n <div\n aria-live=\"polite\"\n className=\"og-root mx-auto mb-2 w-full max-w-3xl shrink-0 px-4 sm:px-6\"\n data-testid=\"queue-surface-loading\"\n role=\"status\"\n >\n <div className=\"overflow-hidden rounded-lg border border-border bg-surface/80 shadow-sm\">\n <div className=\"flex items-center gap-2 px-3 py-2 text-og-control text-fg-muted pointer-coarse:min-h-[44px]\">\n <Loader2Icon\n aria-hidden=\"true\"\n className=\"size-3.5 shrink-0 animate-spin motion-reduce:animate-none\"\n />\n {t(\"queueSurface.loadingInputs\")}\n </div>\n </div>\n </div>\n );\n}\n","import { deriveSessionDisplayTitle, type OpenGeniClient, type Session } from \"@opengeni/sdk\";\nimport { ArchiveIcon, PencilIcon, PlusIcon } from \"lucide-react\";\nimport { useEffect, useRef, useState, type FormEvent } from \"react\";\nimport { useClientConfigFlags } from \"../hooks/use-client-config-flags\";\nimport { useWorkspaceSessions } from \"../hooks/use-workspace-sessions\";\nimport { cn } from \"../lib/cn\";\nimport { formatRelativeTime } from \"../lib/format\";\nimport { useErrorMessage } from \"../lib/error-message\";\nimport { useOpenGeni, type ClientOverride } from \"../session-context\";\nimport { useOpenGeniText, type OpenGeniText } from \"../messages/runtime\";\n\nexport type SessionListLabels = {\n heading: string;\n newChat: string;\n empty: string;\n loading: string;\n loadMore: string;\n rename: string;\n archive: string;\n save: string;\n cancel: string;\n};\n\nconst DEFAULT_LABELS = (t: OpenGeniText): SessionListLabels => ({\n heading: t(\"sessionList.chats\"),\n newChat: t(\"sessionList.newChat\"),\n empty: t(\"sessionList.noChatsYet\"),\n loading: t(\"sessionList.loadingChats\"),\n loadMore: t(\"sessionList.showMore\"),\n rename: t(\"sessionList.rename\"),\n archive: t(\"sessionList.archive\"),\n save: t(\"sessionList.save\"),\n cancel: t(\"sessionList.cancel\"),\n});\n\nexport type SessionListProps = ClientOverride & {\n selectedSessionId?: string | null | undefined;\n onSelect: (sessionId: string) => void;\n /** Shown as a \"New chat\" button when provided. */\n onNewChat?: (() => void) | undefined;\n /** Allow inline rename (`updateSession`). Defaults to true. */\n rename?: boolean | undefined;\n /**\n * Allow archiving (`updateSessionArchive`). Defaults to true; hidden when the\n * session proxy reports archive disabled (`archive: false`).\n */\n archive?: boolean | undefined;\n /** Called after the selected chat was archived, so the host can move on. */\n onArchived?: ((sessionId: string) => void) | undefined;\n pageSize?: number | undefined;\n /** Change the reference to force a refetch (for example after creating a chat). */\n refreshKey?: unknown;\n labels?: Partial<SessionListLabels> | undefined;\n className?: string | undefined;\n};\n\ntype ArchiveClient = Partial<Pick<OpenGeniClient, \"updateSessionArchive\">>;\n\n/**\n * The workspace's root chats for the current user, newest activity first.\n * Through `createSessionProxyHandler` the list is limited to the chats the\n * resolved user created (or everything they may read, with `sessionList:\n * \"visible\"`); Opengeni enforces visibility either way.\n */\nexport function SessionList({\n client,\n workspaceId,\n selectedSessionId,\n onSelect,\n onNewChat,\n rename = true,\n archive = true,\n onArchived,\n pageSize = 30,\n refreshKey,\n labels: labelOverrides,\n className,\n}: SessionListProps) {\n const t = useOpenGeniText();\n const labels = { ...DEFAULT_LABELS(t), ...labelOverrides };\n const scope = { client, workspaceId };\n const context = useOpenGeni(scope);\n const [limit, setLimit] = useState(pageSize);\n const list = useWorkspaceSessions({\n ...scope,\n parentSessionId: null,\n archiveStatus: \"active\",\n sortBy: \"updatedAt\",\n limit,\n });\n const refresh = list.refresh;\n const firstRefreshKey = useRef(refreshKey);\n useEffect(() => {\n if (Object.is(refreshKey, firstRefreshKey.current)) return;\n firstRefreshKey.current = refreshKey;\n void refresh();\n }, [refresh, refreshKey]);\n const [editing, setEditing] = useState<{ id: string; title: string } | null>(null);\n const [busy, setBusy] = useState<string | null>(null);\n const [error, setError] = useState<{ cause: unknown } | null>(null);\n const formatError = useErrorMessage();\n const archiveClient = context.client as unknown as ArchiveClient;\n // A session proxy with `archive: false` reports it; hide what would fail.\n const config = useClientConfigFlags(context.client as never);\n const canArchive =\n archive && config.archive && typeof archiveClient.updateSessionArchive === \"function\";\n\n const run = async (id: string, action: () => Promise<unknown>) => {\n setBusy(id);\n setError(null);\n try {\n await action();\n await list.refresh();\n } catch (cause) {\n setError({ cause });\n } finally {\n setBusy(null);\n }\n };\n\n const saveTitle = (event: FormEvent) => {\n event.preventDefault();\n const current = editing;\n if (!current) return;\n const title = current.title.trim();\n setEditing(null);\n if (!title) return;\n void run(current.id, () =>\n context.client.updateSession(context.workspaceId, current.id, { title }),\n );\n };\n\n const archiveSession = (session: Session) =>\n void run(session.id, async () => {\n await archiveClient.updateSessionArchive!(context.workspaceId, session.id, {\n archived: true,\n });\n onArchived?.(session.id);\n });\n\n const sessions = list.sessions;\n return (\n <nav\n className={cn(\"flex min-h-0 min-w-0 flex-col gap-1 text-og-fg\", className)}\n aria-label={labels.heading}\n data-og-session-list=\"\"\n >\n <div className=\"flex items-center justify-between gap-2 px-2 pb-1 pt-2\">\n <h2 className=\"text-og-sm font-semibold text-og-fg-muted\">{labels.heading}</h2>\n {onNewChat ? (\n <button\n type=\"button\"\n onClick={onNewChat}\n className=\"inline-flex items-center gap-1 rounded-md px-2 py-1 text-og-control text-og-fg hover:bg-og-surface-2\"\n data-og-new-chat=\"\"\n >\n <PlusIcon className=\"size-3.5\" aria-hidden />\n {labels.newChat}\n </button>\n ) : null}\n </div>\n {error || list.error ? (\n <p role=\"alert\" className=\"px-2 text-og-xs text-og-status-failed\">\n {formatError(error ? error.cause : list.error)}\n </p>\n ) : null}\n <ul className=\"flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto px-1 pb-2\">\n {list.loading && sessions.length === 0 ? (\n <li className=\"px-2 py-2 text-og-xs text-og-fg-subtle\">{labels.loading}</li>\n ) : null}\n {!list.loading && !list.error && sessions.length === 0 ? (\n <li className=\"px-2 py-2 text-og-xs text-og-fg-subtle\">{labels.empty}</li>\n ) : null}\n {sessions.map((session) => {\n const selected = session.id === selectedSessionId;\n const title = deriveSessionDisplayTitle(session);\n if (editing?.id === session.id) {\n return (\n <li key={session.id}>\n <form onSubmit={saveTitle} className=\"flex items-center gap-1 px-1 py-1\">\n <input\n aria-label={labels.rename}\n value={editing.title}\n maxLength={200}\n autoFocus\n onChange={(event) => setEditing({ id: session.id, title: event.target.value })}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") setEditing(null);\n }}\n className=\"min-w-0 flex-1 rounded-md border border-og-border bg-og-bg px-2 py-1 text-og-sm text-og-fg\"\n />\n <button\n type=\"submit\"\n className=\"rounded-md px-2 py-1 text-og-xs text-og-fg hover:bg-og-surface-2\"\n >\n {labels.save}\n </button>\n </form>\n </li>\n );\n }\n return (\n <li key={session.id} className=\"group relative\">\n <button\n type=\"button\"\n onClick={() => onSelect(session.id)}\n aria-current={selected ? \"true\" : undefined}\n disabled={busy === session.id}\n className={cn(\n \"flex w-full min-w-0 flex-col items-start rounded-md px-2 py-1.5 text-left\",\n selected ? \"bg-og-surface-2\" : \"hover:bg-og-surface-1\",\n )}\n data-og-session-row=\"\"\n >\n <span className=\"w-full truncate pr-12 text-og-sm text-og-fg\">{title}</span>\n <span className=\"text-og-xs text-og-fg-subtle\">\n {formatRelativeTime(t, session.updatedAt)}\n </span>\n </button>\n <span className=\"absolute right-1 top-1.5 hidden gap-0.5 group-focus-within:flex group-hover:flex pointer-coarse:flex\">\n {rename ? (\n <button\n type=\"button\"\n aria-label={`${labels.rename}: ${title}`}\n onClick={() => setEditing({ id: session.id, title: session.title ?? title })}\n className=\"rounded p-1 text-og-fg-subtle hover:bg-og-surface-3 hover:text-og-fg\"\n >\n <PencilIcon className=\"size-3.5\" aria-hidden />\n </button>\n ) : null}\n {canArchive ? (\n <button\n type=\"button\"\n aria-label={`${labels.archive}: ${title}`}\n onClick={() => archiveSession(session)}\n className=\"rounded p-1 text-og-fg-subtle hover:bg-og-surface-3 hover:text-og-fg\"\n >\n <ArchiveIcon className=\"size-3.5\" aria-hidden />\n </button>\n ) : null}\n </span>\n </li>\n );\n })}\n {list.nextCursor ? (\n <li>\n <button\n type=\"button\"\n onClick={() => setLimit((current) => current + pageSize)}\n className=\"w-full rounded-md px-2 py-1.5 text-left text-og-xs text-og-fg-muted hover:bg-og-surface-1\"\n >\n {labels.loadMore}\n </button>\n </li>\n ) : null}\n </ul>\n </nav>\n );\n}\n","import { MenuIcon, XIcon } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState, type CSSProperties } from \"react\";\nimport type {\n CreatedConversation,\n NewConversationCreateOptions,\n} from \"../hooks/use-new-conversation\";\nimport { cn } from \"../lib/cn\";\nimport { notifyObserver } from \"../lib/notify-observer\";\nimport {\n useHostTheme,\n type HostSurfacePreference,\n type HostThemePreference,\n} from \"../lib/host-theme\";\nimport { useOpenGeni, type ClientOverride } from \"../session-context\";\nimport { NewConversation } from \"./new-conversation\";\nimport { useClientConfigFlags } from \"../hooks/use-client-config-flags\";\nimport { SessionConversation, type SessionConversationProps } from \"./session-conversation\";\nimport { SessionList, type SessionListLabels, type SessionListProps } from \"./session-list\";\nimport { SessionProxyScope, type SessionProxyBaseUrl } from \"./session-proxy-scope\";\nimport { useOpenGeniText, type OpenGeniText } from \"../messages/runtime\";\n\nexport type OpenGeniChatLabels = SessionListLabels & {\n openChats: string;\n closeChats: string;\n newChatPlaceholder: string;\n /** Heading above the new-chat composer; empty hides it. */\n newChatTitle: string;\n send: string;\n newChatUnavailable: string;\n newChatRetry?: string | undefined;\n newChatPending?: string | undefined;\n newChatFinishingUploads?: string | undefined;\n};\n\nconst DEFAULT_LABELS = (t: OpenGeniText): Omit<OpenGeniChatLabels, keyof SessionListLabels> => ({\n openChats: t(\"openGeniChat.openChats\"),\n closeChats: t(\"openGeniChat.closeChats\"),\n newChatPlaceholder: t(\"openGeniChat.askAnything\"),\n newChatTitle: t(\"openGeniChat.howCanIHelp\"),\n send: t(\"openGeniChat.send\"),\n newChatUnavailable: t(\"openGeniChat.newChatsAreNotEnabled\"),\n});\n\n/** What the first message carries besides its text. */\nexport type OpenGeniChatCreateOptions = NewConversationCreateOptions;\n\nexport type OpenGeniChatProps = ClientOverride &\n SessionProxyBaseUrl & {\n /** Controlled selection. `null` shows the new-chat composer. */\n sessionId?: string | null | undefined;\n /** Initial selection when uncontrolled. Defaults to a new chat. */\n defaultSessionId?: string | null | undefined;\n onSessionChange?: ((sessionId: string | null) => void) | undefined;\n /**\n * Create a chat from its first message. Defaults to `client.createSession`\n * with `{ initialMessage, idempotencyKey }` plus the attached files and any\n * model choice, which `createSessionProxyHandler` accepts when the server\n * supplies a `createSession` hook. Return the new id.\n */\n createSession?:\n | ((\n initialMessage: string,\n idempotencyKey: string,\n options: OpenGeniChatCreateOptions,\n ) => Promise<string>)\n | undefined;\n /**\n * Hide the \"New chat\" entry point. It is also hidden when the session proxy\n * reports chat creation unavailable (no `createSession` hook) and no\n * `createSession` prop is given.\n */\n newChat?: boolean | undefined;\n /**\n * Forwarded to the conversation (message rendering, tool renderers,\n * composer...). `attachments`, `modelPicker`, `modelPickerProps`, and\n * `composerProps` also apply to the new-chat composer.\n */\n conversationProps?: Omit<\n SessionConversationProps,\n \"sessionId\" | \"client\" | \"workspaceId\" | \"baseUrl\" | \"headers\" | \"fetch\"\n >;\n /** Forwarded to the list (rename/archive toggles, page size). */\n listProps?: Pick<SessionListProps, \"rename\" | \"archive\" | \"pageSize\"> | undefined;\n labels?: Partial<OpenGeniChatLabels> | undefined;\n className?: string | undefined;\n /** Defaults to filling the host. */\n height?: CSSProperties[\"height\"];\n /**\n * Light or dark. Defaults to `auto`: follow the host page (an enclosing\n * `data-og-theme`, `class=\"dark\"`/`data-theme` on <html> or <body>, the\n * host's `color-scheme`, then its background), not the OS setting alone.\n */\n theme?: HostThemePreference | undefined;\n /**\n * `host` (default) derives backgrounds and cards from the host background so\n * the chat blends in; `theme` uses the `--og-color-*` surface tokens as they\n * are. Customized surface tokens are always kept.\n */\n surface?: HostSurfacePreference | undefined;\n };\n\n/**\n * A complete chat experience: the user's chat list plus the conversation.\n * The list is a sidebar when the component is wide and a drawer when narrow\n * (container-based, so it adapts inside panels as well as full pages).\n * `<OpenGeniChat baseUrl=\"/api/opengeni\" />` needs no provider: it talks to\n * your session proxy and uses the workspace the proxy resolves.\n */\nexport function OpenGeniChat({ baseUrl, headers, fetch, ...props }: OpenGeniChatProps) {\n if (baseUrl === undefined) return <Chat {...props} />;\n const { client, workspaceId, ...rest } = props;\n return (\n <SessionProxyScope\n baseUrl={baseUrl}\n workspaceId={workspaceId}\n client={client}\n headers={headers}\n fetch={fetch}\n >\n <Chat {...rest} />\n </SessionProxyScope>\n );\n}\n\nfunction Chat({\n client,\n workspaceId,\n sessionId: controlledSessionId,\n defaultSessionId = null,\n onSessionChange,\n createSession,\n newChat = true,\n conversationProps,\n listProps,\n labels: labelOverrides,\n className,\n height = \"100%\",\n theme,\n surface,\n}: Omit<OpenGeniChatProps, \"baseUrl\" | \"headers\" | \"fetch\">) {\n const t = useOpenGeniText();\n const labels = { ...DEFAULT_LABELS(t), ...labelOverrides } as OpenGeniChatLabels;\n const scope = { client, workspaceId };\n const context = useOpenGeni(scope);\n const [uncontrolled, setUncontrolled] = useState<string | null>(defaultSessionId);\n const selected = controlledSessionId !== undefined ? controlledSessionId : uncontrolled;\n const [drawerOpen, setDrawerOpen] = useState(false);\n const [listRevision, setListRevision] = useState(0);\n const [handoff, setHandoff] = useState<CreatedConversation | null>(null);\n const root = useRef<HTMLDivElement>(null);\n const hostTheme = useHostTheme(root, { theme, surface });\n const config = useClientConfigFlags(context.client);\n // A host creator replaces the proxy route; otherwise trust the proxy's report.\n const canCreate = createSession !== undefined || config.sessionCreation;\n\n const select = useCallback(\n (next: string | null) => {\n setHandoff(null);\n if (controlledSessionId === undefined) setUncontrolled(next);\n notifyObserver(onSessionChange, next);\n setDrawerOpen(false);\n },\n [controlledSessionId, onSessionChange],\n );\n\n useEffect(() => {\n if (!handoff) return;\n // The child's native composer captures its seed on mount. Do not seed it\n // again after later navigation; voice keeps its separate one-shot handoff\n // until the lazy control reports consumption.\n if (selected === handoff.sessionId && !handoff.realtimeModel) setHandoff(null);\n else if (selected !== null && selected !== handoff.sessionId) setHandoff(null);\n }, [handoff, selected]);\n\n const list = (\n <SessionList\n {...scope}\n {...listProps}\n labels={labels}\n selectedSessionId={selected}\n onSelect={select}\n onNewChat={newChat && canCreate ? () => select(null) : undefined}\n onArchived={(archivedId) => {\n if (archivedId === selected) select(null);\n }}\n refreshKey={listRevision}\n className=\"h-full\"\n />\n );\n\n return (\n <div\n ref={root}\n className={cn(\n \"og-root og-chat relative flex min-h-0 min-w-0 bg-og-bg text-og-base text-og-fg\",\n className,\n )}\n style={{ ...hostTheme.style, height }}\n data-og-theme={hostTheme.attribute}\n data-og-host-theme=\"\"\n data-og-chat=\"\"\n >\n <aside\n className=\"og-chat-sidebar min-h-0 w-64 shrink-0 flex-col border-r border-og-border\"\n data-og-chat-sidebar=\"\"\n >\n {list}\n </aside>\n {drawerOpen ? (\n <div className=\"og-chat-drawer absolute inset-0 z-30 flex\" data-og-chat-drawer=\"\">\n <div className=\"flex h-full w-[min(20rem,85%)] flex-col border-r border-og-border bg-og-bg shadow-og-lg\">\n <div className=\"flex justify-end p-1\">\n <button\n type=\"button\"\n aria-label={labels.closeChats}\n onClick={() => setDrawerOpen(false)}\n className=\"rounded p-1.5 text-og-fg-muted hover:bg-og-surface-2\"\n >\n <XIcon className=\"size-4\" aria-hidden />\n </button>\n </div>\n <div className=\"min-h-0 flex-1\">{list}</div>\n </div>\n <button\n type=\"button\"\n aria-label={labels.closeChats}\n className=\"flex-1 bg-black/25\"\n onClick={() => setDrawerOpen(false)}\n />\n </div>\n ) : null}\n <main className=\"flex min-h-0 min-w-0 flex-1 flex-col\">\n <div className=\"og-chat-menu flex items-center gap-2 px-2 py-1\">\n <button\n type=\"button\"\n aria-label={labels.openChats}\n aria-expanded={drawerOpen}\n onClick={() => setDrawerOpen(true)}\n className=\"rounded p-1.5 text-og-fg-muted hover:bg-og-surface-2\"\n data-og-chat-menu=\"\"\n >\n <MenuIcon className=\"size-4\" aria-hidden />\n </button>\n <span className=\"text-og-sm font-semibold text-og-fg-muted\">{labels.heading}</span>\n </div>\n <div className=\"og-chat-main min-h-0 flex-1 px-3 pb-3 pt-1\">\n {selected ? (\n <SessionConversation\n {...conversationProps}\n // The first prompt and its startup row show from the first frame.\n {...(handoff?.sessionId === selected && handoff.initialMessage\n ? { pendingPrompt: { text: handoff.initialMessage, sentAt: handoff.sentAt } }\n : {})}\n composerOptions={{\n ...conversationProps?.composerOptions,\n ...(handoff?.sessionId === selected ? { initialDraft: handoff.draft } : {}),\n }}\n realtimeVoiceProps={{\n ...conversationProps?.realtimeVoiceProps,\n ...(handoff?.sessionId === selected && handoff.realtimeModel\n ? {\n realtimeAutostartModel: handoff.realtimeModel,\n onRealtimeAutostartConsumed: () => {\n setHandoff(null);\n notifyObserver(\n conversationProps?.realtimeVoiceProps?.onRealtimeAutostartConsumed,\n );\n },\n }\n : {}),\n }}\n // Sub-agent chats open in place, like a chat from the list.\n onOpenSession={conversationProps?.onOpenSession ?? select}\n {...scope}\n sessionId={selected}\n height=\"100%\"\n />\n ) : (\n <NewConversation\n {...scope}\n attachments={conversationProps?.attachments}\n modelPicker={conversationProps?.modelPicker}\n modelPickerProps={conversationProps?.modelPickerProps}\n composerProps={conversationProps?.composerProps}\n voiceInput={conversationProps?.voiceInput}\n realtimeVoice={conversationProps?.realtimeVoice}\n realtimeVoiceProps={conversationProps?.realtimeVoiceProps}\n labels={{\n ...(labels.newChatRetry ? { retry: labels.newChatRetry } : {}),\n ...(labels.newChatPending ? { pending: labels.newChatPending } : {}),\n ...(labels.newChatFinishingUploads\n ? { finishingUploads: labels.newChatFinishingUploads }\n : {}),\n title: labels.newChatTitle,\n send: labels.send,\n unavailable: labels.newChatUnavailable,\n placeholder:\n labelOverrides?.newChatPlaceholder ??\n conversationProps?.composerProps?.placeholder ??\n labels.newChatPlaceholder,\n }}\n enabled={canCreate}\n createSession={createSession}\n onCreated={(created) => {\n setListRevision((revision) => revision + 1);\n select(created.sessionId);\n setHandoff(created);\n }}\n />\n )}\n </div>\n </main>\n </div>\n );\n}\n","import { ChevronRightIcon, Loader2Icon, SquareIcon } from \"lucide-react\";\nimport { useState, type ReactNode } from \"react\";\nimport type { SessionBackgroundCommand } from \"@opengeni/sdk\";\nimport type { UseSessionBackgroundCommandsResult } from \"../hooks/use-session-background-commands\";\nimport { formatClockTime } from \"../lib/format\";\nimport { useErrorMessage } from \"../lib/error-message\";\nimport { useOpenGeniText } from \"../messages/runtime\";\n\n/** The current session's live commands. Settled commands belong to the timeline. */\nexport function SessionCommandsPanel({\n commands: state,\n readOnly = false,\n renderMetadata,\n compact = true,\n}: {\n commands: UseSessionBackgroundCommandsResult;\n readOnly?: boolean;\n renderMetadata?: (command: SessionBackgroundCommand) => ReactNode;\n compact?: boolean;\n}) {\n const t = useOpenGeniText();\n const formatError = useErrorMessage();\n const [pending, setPending] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const active = state.commands.filter(\n (command) => command.state === \"running\" || command.state === \"stopping\",\n );\n const stop = async (id: string) => {\n setPending(id);\n setError(null);\n try {\n await state.cancel(id);\n } catch (cause) {\n setError(formatError(cause));\n } finally {\n setPending(null);\n }\n };\n return (\n <div\n className={`space-y-2 ${compact ? \"text-og-xs\" : \"text-og-sm\"}`}\n data-og-session-commands=\"\"\n >\n {state.loading && active.length === 0 ? (\n <p role=\"status\" className=\"text-og-fg-muted\">\n {t(\"sessionCommandsPanel.loadingCommands\")}\n </p>\n ) : null}\n {state.error ? (\n <div role=\"alert\" className=\"flex items-center justify-between gap-2 text-og-danger\">\n <span>{t(\"sessionCommandsPanel.commandsUnavailable\")}</span>\n <button\n type=\"button\"\n className=\"underline outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent/40\"\n onClick={() => void state.refresh()}\n >\n {t(\"sessionCommandsPanel.retry\")}\n </button>\n </div>\n ) : null}\n {!state.loading && !state.error && active.length === 0 ? (\n <p role=\"status\" className=\"text-og-fg-muted\">\n {t(\"sessionCommandsPanel.noBackgroundCommandsRunning\")}\n </p>\n ) : null}\n {active.length > 0 ? (\n <ul\n className={`${compact ? \"max-h-64 overflow-y-auto overscroll-contain\" : \"\"} divide-y divide-og-border/40`}\n >\n {active.map((command) => (\n <li key={command.id} className=\"flex items-start gap-3 py-2 first:pt-0 last:pb-0\">\n <div className=\"min-w-0 flex-1\">\n {renderMetadata?.(command)}\n <details className=\"group/command\">\n <summary\n className=\"flex cursor-pointer list-none items-center gap-1.5 rounded-og-sm font-mono text-og-fg outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent/40\"\n title={t(\"sessionCommandsPanel.expandCommand\")}\n >\n <ChevronRightIcon className=\"size-3 shrink-0 text-og-fg-subtle transition-transform group-open/command:rotate-90\" />\n <span\n className=\"min-w-0 truncate\"\n title={\n command.commandText ??\n (command.commandPreview || t(\"sessionCommandsPanel.backgroundCommand\"))\n }\n >\n {command.commandText ??\n (command.commandPreview || t(\"sessionCommandsPanel.backgroundCommand\"))}\n </span>\n </summary>\n <div className=\"mt-2 space-y-1\">\n <p className=\"whitespace-pre-wrap break-all font-mono text-og-fg-muted\">\n {command.commandText ??\n (command.commandPreview || t(\"sessionCommandsPanel.backgroundCommand\"))}\n </p>\n <time\n className=\"block text-og-fg-subtle\"\n dateTime={command.startedAt}\n title={new Date(command.startedAt).toLocaleString(t.locale)}\n >\n {t(\"sessionCommandsPanel.startedClocktime\", {\n clockTime: formatClockTime(t, command.startedAt),\n })}\n </time>\n </div>\n </details>\n <p className=\"mt-1 text-og-fg-subtle\">\n {command.observationStatus === \"unavailable\"\n ? command.state === \"stopping\"\n ? t(\"sessionCommandsPanel.stopRequestedStatusUnavailable\")\n : t(\"sessionCommandsPanel.commandStatusUnavailable\")\n : command.state === \"stopping\"\n ? t(\"sessionCommandsPanel.stopping\")\n : t(\"sessionCommandsPanel.running\")}\n </p>\n </div>\n {!readOnly ? (\n <button\n type=\"button\"\n aria-label={t(\"sessionCommandsPanel.stopCommandpreview\", {\n commandPreview:\n command.commandPreview || t(\"sessionCommandsPanel.backgroundCommand2\"),\n })}\n disabled={pending !== null || command.state === \"stopping\"}\n onClick={() => void stop(command.id)}\n className=\"inline-flex min-h-7 shrink-0 items-center gap-1 rounded-og-sm px-2 text-og-fg-muted outline-hidden hover:bg-og-surface-3/70 hover:text-og-fg focus-visible:ring-2 focus-visible:ring-og-accent/40 disabled:opacity-50 pointer-coarse:min-h-11\"\n >\n {pending === command.id || command.state === \"stopping\" ? (\n <Loader2Icon className=\"size-3 animate-og-spin motion-reduce:animate-none\" />\n ) : (\n <SquareIcon className=\"size-3\" />\n )}\n {t(\"sessionCommandsPanel.stop\")}\n </button>\n ) : null}\n </li>\n ))}\n </ul>\n ) : null}\n {error ? (\n <p role=\"alert\" className=\"text-og-danger\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n","import type { SessionBackgroundCommand } from \"@opengeni/sdk\";\nimport { useCallback, useEffect, useRef } from \"react\";\n\nimport { useOpenGeni, type ClientOverride } from \"../provider\";\nimport { usePolledValue } from \"./internal\";\n\nexport type UseSessionBackgroundCommandsOptions = ClientOverride & {\n pollIntervalMs?: number | undefined;\n enabled?: boolean | undefined;\n};\n\nexport type UseSessionBackgroundCommandsResult = {\n commands: SessionBackgroundCommand[];\n loading: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n cancel: (commandId: string) => Promise<void>;\n};\n\nexport function useSessionBackgroundCommands(\n sessionId: string | null | undefined,\n options: UseSessionBackgroundCommandsOptions = {},\n): UseSessionBackgroundCommandsResult {\n const { client, workspaceId } = useOpenGeni(options);\n const enabled = (options.enabled ?? true) && Boolean(sessionId);\n const load = useCallback(\n async (signal?: AbortSignal) => {\n if (!sessionId) return { commands: [] };\n if (!client.listSessionBackgroundCommands) {\n throw new Error(\"The configured Opengeni client does not support background commands\");\n }\n return await client.listSessionBackgroundCommands(workspaceId, sessionId, { signal });\n },\n [client, workspaceId, sessionId],\n );\n const state = usePolledValue(load, {\n enabled,\n pollIntervalMs: options.pollIntervalMs,\n });\n const refresh = state.refresh;\n const generation = useRef(0);\n useEffect(() => {\n generation.current += 1;\n return () => {\n generation.current += 1;\n };\n }, [client, workspaceId, sessionId, enabled]);\n const cancel = useCallback(\n async (commandId: string): Promise<void> => {\n if (!sessionId) return;\n if (!client.cancelSessionBackgroundCommand) {\n throw new Error(\"The configured Opengeni client does not support background commands\");\n }\n const ticket = generation.current;\n await client.cancelSessionBackgroundCommand(workspaceId, sessionId, commandId);\n if (enabled && ticket === generation.current) await refresh();\n },\n [client, workspaceId, sessionId, refresh, enabled],\n );\n return {\n commands: state.data?.commands ?? [],\n loading: state.loading,\n error: state.error,\n refresh,\n cancel,\n };\n}\n","import {\n useSessionBackgroundCommands,\n type UseSessionBackgroundCommandsOptions,\n} from \"../hooks/use-session-background-commands\";\nimport { SessionCommandsPanel } from \"./session-commands-panel\";\n\n/** Mount in the open activity panel so closed chrome never polls commands. */\nexport function SessionCommands({\n sessionId,\n readOnly = false,\n ...options\n}: UseSessionBackgroundCommandsOptions & { sessionId: string; readOnly?: boolean }) {\n const commands = useSessionBackgroundCommands(sessionId, {\n pollIntervalMs: 3_000,\n ...options,\n });\n return <SessionCommandsPanel commands={commands} readOnly={readOnly} />;\n}\n","import type { StartupPhaseItem } from \"./types\";\nimport { useOpenGeniText, type OpenGeniText } from \"../messages/runtime\";\n\nconst LABELS = (t: OpenGeniText): Record<StartupPhaseItem[\"phase\"], string> => ({\n queue: t(\"timeline.startupTimings.workerQueue\"),\n sandbox: t(\"timeline.startupTimings.sandbox\"),\n rig: t(\"timeline.startupTimings.sandboxEnvironment\"),\n repository: t(\"timeline.startupTimings.repository\"),\n files: t(\"timeline.startupTimings.files\"),\n tools: t(\"timeline.startupTimings.tools\"),\n model_preparation: t(\"timeline.startupTimings.runtimeModelRequest\"),\n provider_first_byte: t(\"timeline.startupTimings.firstModelResponse\"),\n});\n\nexport function StartupTimings({ phases }: { phases: StartupPhaseItem[] }) {\n const t = useOpenGeniText();\n if (!phases.length)\n return (\n <p className=\"text-og-sm text-og-fg-subtle\">\n {t(\"timeline.startupTimings.noStartupTimingsRecordedYet\")}\n </p>\n );\n const byTurn = new Map<string | null, StartupPhaseItem[]>();\n for (const phase of phases) {\n const group = byTurn.get(phase.turnId) ?? [];\n group.push(phase);\n byTurn.set(phase.turnId, group);\n }\n const turns = [...byTurn.entries()]\n .map(([turnId, turnPhases]) => ({\n turnId,\n phases: turnPhases,\n startedAt: turnPhases.reduce(\n (earliest, phase) => (phase.startedAt < earliest ? phase.startedAt : earliest),\n turnPhases[0]!.startedAt,\n ),\n }))\n .sort((a, b) => b.startedAt.localeCompare(a.startedAt));\n return (\n <div className=\"space-y-3\">\n <p className=\"text-og-xs text-og-fg-subtle\">\n {t(\"timeline.startupTimings.eachTurnHasItsOwn\")}\n </p>\n {turns.map((turn, index) => (\n <StartupTurn\n key={turn.turnId ?? \"unassigned\"}\n {...turn}\n latest={index === 0 && turn.turnId !== null}\n />\n ))}\n </div>\n );\n}\n\nfunction StartupTurn({\n turnId,\n phases,\n startedAt,\n latest,\n}: {\n turnId: string | null;\n phases: StartupPhaseItem[];\n startedAt: string;\n latest: boolean;\n}) {\n const t = useOpenGeniText();\n const failed = phases.some((phase) => phase.status === \"failed\");\n const status = failed\n ? t(\"timeline.startupTimings.failed\")\n : phases.some((phase) => phase.status === \"running\")\n ? t(\"timeline.startupTimings.inProgress\")\n : phases.some((phase) => phase.status === \"cancelled\")\n ? t(\"timeline.startupTimings.interrupted\")\n : t(\"timeline.startupTimings.ready\");\n return (\n <details open={latest} className=\"group border-b border-og-border pb-3\">\n <summary className=\"cursor-pointer rounded py-3 text-og-sm text-og-fg-muted focus-visible:outline-2 focus-visible:outline-og-accent\">\n <span className=\"font-medium\">\n {turnId === null\n ? t(\"timeline.startupTimings.unassignedEvents\")\n : latest\n ? t(\"timeline.startupTimings.latestTurn\")\n : t(\"timeline.startupTimings.earlierTurn\")}\n </span>\n <span className=\"ml-2 text-og-xs text-og-fg-subtle\">\n {new Date(startedAt).toLocaleTimeString(t.locale, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n })}\n </span>\n <span\n className={\n failed ? \"ml-2 text-og-xs text-og-status-failed\" : \"ml-2 text-og-xs text-og-fg-subtle\"\n }\n >\n {status}\n </span>\n <span className=\"mt-1 block break-all pl-4 font-og-mono text-og-xs text-og-fg-subtle\">\n {turnId ?? t(\"timeline.startupTimings.noTurnIdRecorded\")}\n </span>\n </summary>\n <div className=\"pb-2\">\n <p className=\"text-og-xs text-og-fg-subtle\">\n {t(\"timeline.startupTimings.started\")}{\" \"}\n <time dateTime={startedAt}>{new Date(startedAt).toLocaleString(t.locale)}</time>\n </p>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-left text-og-xs\">\n <caption className=\"sr-only\">\n {t(\"timeline.startupTimings.startupPhasesFor\")}{\" \"}\n {turnId ?? t(\"timeline.startupTimings.unassignedEvents2\")}\n </caption>\n <thead>\n <tr className=\"border-b border-og-border text-og-fg-subtle\">\n <th scope=\"col\" className=\"py-2 font-medium\">\n {t(\"timeline.startupTimings.phase\")}\n </th>\n <th scope=\"col\" className=\"px-3 py-2 font-medium\">\n {t(\"timeline.startupTimings.status\")}\n </th>\n <th scope=\"col\" className=\"py-2 text-right font-medium\">\n {t(\"timeline.startupTimings.duration\")}\n </th>\n </tr>\n </thead>\n <tbody>\n {phases.map((phase) => (\n <tr\n key={phase.id}\n className=\"border-b border-og-border/40\"\n title={t(\"timeline.startupTimings.turnTurnidStartedStartedat\", {\n turnId: phase.turnId ?? t(\"timeline.startupTimings.unknownTurn\"),\n startedAt: phase.startedAt,\n })}\n >\n <th scope=\"row\" className=\"py-2.5 font-normal text-og-fg-muted\">\n {LABELS(t)[phase.phase]}\n </th>\n <td\n className={`px-3 py-2.5 ${phase.status === \"failed\" ? \"text-og-status-failed\" : \"text-og-fg-subtle\"}`}\n >\n {phase.status === \"running\"\n ? t(\"timeline.startupTimings.inProgress\")\n : phase.status}\n </td>\n <td className=\"py-2.5 text-right font-og-mono tabular-nums text-og-fg-muted\">\n {phase.durationMs === null\n ? \"—\"\n : phase.durationMs < 1000\n ? t(\"timeline.startupTimings.roundMs\", {\n round: Math.round(phase.durationMs),\n })\n : `${(phase.durationMs / 1000).toFixed(1)} s`}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </details>\n );\n}\n"],"mappings":"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","names":["jsx","jsxs","useEffect","useRef","useState","jsx","jsxs","DEFAULT_LABELS","useState","useRef","useEffect","Loader2Icon","useState","jsx","jsxs","useState","Loader2Icon","useCallback","useEffect","useRef","useCallback","useRef","useEffect","jsx","jsx","jsxs"]}
|
|
@@ -5,7 +5,14 @@ import { createContext, useContext, useMemo } from "react";
|
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
var SESSION_UI_PRESETS = {
|
|
7
7
|
/** The web app and the desktop app. */
|
|
8
|
-
app: {
|
|
8
|
+
app: {
|
|
9
|
+
chatList: true,
|
|
10
|
+
dock: true,
|
|
11
|
+
adminAccess: true,
|
|
12
|
+
keyboardShortcuts: true,
|
|
13
|
+
brand: true,
|
|
14
|
+
starters: true
|
|
15
|
+
},
|
|
9
16
|
/**
|
|
10
17
|
* First-party side panes (the Excel add-in): everything but admin access and
|
|
11
18
|
* page-wide keyboard shortcuts.
|
|
@@ -15,19 +22,21 @@ var SESSION_UI_PRESETS = {
|
|
|
15
22
|
dock: true,
|
|
16
23
|
adminAccess: false,
|
|
17
24
|
keyboardShortcuts: false,
|
|
18
|
-
brand: true
|
|
25
|
+
brand: true,
|
|
26
|
+
starters: true
|
|
19
27
|
},
|
|
20
28
|
/**
|
|
21
29
|
* A customer product page (the default): the chat list, chats and composer,
|
|
22
|
-
* without Opengeni's brand, the session panel, admin
|
|
23
|
-
* shortcuts until the host turns them on.
|
|
30
|
+
* without Opengeni's brand and suggested tasks, the session panel, admin
|
|
31
|
+
* access or page-wide shortcuts until the host turns them on.
|
|
24
32
|
*/
|
|
25
33
|
embed: {
|
|
26
34
|
chatList: true,
|
|
27
35
|
dock: false,
|
|
28
36
|
adminAccess: false,
|
|
29
37
|
keyboardShortcuts: false,
|
|
30
|
-
brand: false
|
|
38
|
+
brand: false,
|
|
39
|
+
starters: false
|
|
31
40
|
}
|
|
32
41
|
};
|
|
33
42
|
var SessionUiFeaturesContext = createContext(SESSION_UI_PRESETS.app);
|
|
@@ -52,4 +61,4 @@ export {
|
|
|
52
61
|
SessionUiFeaturesProvider,
|
|
53
62
|
useSessionUiFeature
|
|
54
63
|
};
|
|
55
|
-
//# sourceMappingURL=chunk-
|
|
64
|
+
//# sourceMappingURL=chunk-H5M33DAL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/app/lib/session-ui-features.tsx"],"sourcesContent":["// Which parts of the session UI a surface shows. The web app shows everything;\n// an embed picks a preset and switches single features on or off. A feature\n// also needs the server and the person's permissions to allow it, which the\n// components check themselves; a switch can only hide, never grant.\nimport { createContext, useContext, useMemo, type ReactNode } from \"react\";\n\nexport type SessionUiFeatures = Readonly<{\n /** The chat list: search, filters, projects, pins, archive, subagent rows. */\n chatList: boolean;\n /**\n * The session panel beside the chat: files, terminal, desktop, browser and\n * computer viewers, artifacts, the agent inspector. Loaded on demand.\n */\n dock: boolean;\n /** The workspace-admin access indicator and grant dialog in the header. */\n adminAccess: boolean;\n /**\n * Page-wide keyboard shortcuts and the ⌘K command menu (⌘/Ctrl+⇧O for a new\n * chat, ⌘/Ctrl+K, next and previous chat, the shortcut sheet).\n */\n keyboardShortcuts: boolean;\n /** The Opengeni logo and wordmark at the top of the chat list and the mobile header. */\n brand: boolean;\n /**\n * Opengeni's suggested first tasks under the new-chat composer (connect\n * Slack, GitHub or Linear, schedule a brief, and so on).\n */\n starters: boolean;\n}>;\n\nexport type SessionUiPreset = \"app\" | \"companion\" | \"embed\";\n\nexport const SESSION_UI_PRESETS: Readonly<Record<SessionUiPreset, SessionUiFeatures>> = {\n /** The web app and the desktop app. */\n app: {\n chatList: true,\n dock: true,\n adminAccess: true,\n keyboardShortcuts: true,\n brand: true,\n starters: true,\n },\n /**\n * First-party side panes (the Excel add-in): everything but admin access and\n * page-wide keyboard shortcuts.\n */\n companion: {\n chatList: true,\n dock: true,\n adminAccess: false,\n keyboardShortcuts: false,\n brand: true,\n starters: true,\n },\n /**\n * A customer product page (the default): the chat list, chats and composer,\n * without Opengeni's brand and suggested tasks, the session panel, admin\n * access or page-wide shortcuts until the host turns them on.\n */\n embed: {\n chatList: true,\n dock: false,\n adminAccess: false,\n keyboardShortcuts: false,\n brand: false,\n starters: false,\n },\n};\n\nconst SessionUiFeaturesContext = createContext<SessionUiFeatures>(SESSION_UI_PRESETS.app);\n\n/** Feature switches a host may pass, including names from earlier releases. */\nexport type SessionUiFeatureOverrides = Partial<SessionUiFeatures> & {\n /** @deprecated Use `keyboardShortcuts`. */\n newChatShortcut?: boolean | undefined;\n};\n\nexport function SessionUiFeaturesProvider(props: {\n preset?: SessionUiPreset | undefined;\n features?: SessionUiFeatureOverrides | undefined;\n children?: ReactNode;\n}) {\n const preset = props.preset ?? \"app\";\n const { newChatShortcut, ...current } = props.features ?? {};\n const overrides: Partial<SessionUiFeatures> =\n newChatShortcut === undefined || current.keyboardShortcuts !== undefined\n ? current\n : { ...current, keyboardShortcuts: newChatShortcut };\n const value = useMemo(\n () => ({ ...SESSION_UI_PRESETS[preset], ...overrides }),\n // Hosts often pass an inline object; compare by content.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [preset, JSON.stringify(overrides)],\n );\n return (\n <SessionUiFeaturesContext.Provider value={value}>\n {props.children}\n </SessionUiFeaturesContext.Provider>\n );\n}\n\n/** Whether this surface shows a feature. Without a provider: the web app's full UI. */\nexport function useSessionUiFeature(feature: keyof SessionUiFeatures): boolean {\n return useContext(SessionUiFeaturesContext)[feature];\n}\n"],"mappings":";;;AAIA,SAAS,eAAe,YAAY,eAA+B;AA2F/D;AA/DG,IAAM,qBAA2E;AAAA;AAAA,EAEtF,KAAK;AAAA,IACH,UAAU;AAAA,IACV,MAAM;AAAA,IACN,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,MAAM;AAAA,IACN,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AACF;AAEA,IAAM,2BAA2B,cAAiC,mBAAmB,GAAG;AAQjF,SAAS,0BAA0B,OAIvC;AACD,QAAM,SAAS,MAAM,UAAU;AAC/B,QAAM,EAAE,iBAAiB,GAAG,QAAQ,IAAI,MAAM,YAAY,CAAC;AAC3D,QAAM,YACJ,oBAAoB,UAAa,QAAQ,sBAAsB,SAC3D,UACA,EAAE,GAAG,SAAS,mBAAmB,gBAAgB;AACvD,QAAM,QAAQ;AAAA,IACZ,OAAO,EAAE,GAAG,mBAAmB,MAAM,GAAG,GAAG,UAAU;AAAA;AAAA;AAAA,IAGrD,CAAC,QAAQ,KAAK,UAAU,SAAS,CAAC;AAAA,EACpC;AACA,SACE,oBAAC,yBAAyB,UAAzB,EAAkC,OAChC,gBAAM,UACT;AAEJ;AAGO,SAAS,oBAAoB,SAA2C;AAC7E,SAAO,WAAW,wBAAwB,EAAE,OAAO;AACrD;","names":[]}
|
|
@@ -22,10 +22,10 @@ import {
|
|
|
22
22
|
import {
|
|
23
23
|
rememberedMachineFolder,
|
|
24
24
|
workspaceDefaultRigOptionLabel
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-KNFDWNCH.js";
|
|
26
26
|
import {
|
|
27
27
|
t
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-TJQDL3JH.js";
|
|
29
29
|
import {
|
|
30
30
|
DropdownMenuItem
|
|
31
31
|
} from "./chunk-TREHTIBD.js";
|
|
@@ -493,4 +493,4 @@ export {
|
|
|
493
493
|
VisibilityMenuBody,
|
|
494
494
|
UsageLimitMenuBody
|
|
495
495
|
};
|
|
496
|
-
//# sourceMappingURL=chunk-
|
|
496
|
+
//# sourceMappingURL=chunk-HNNM2GDN.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
mergeSessionForRail
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-D64Z4V26.js";
|
|
5
5
|
|
|
6
6
|
// src/app/lib/session-branch-cache.tsx
|
|
7
7
|
function sessionBranchSummaryKey(session, readRevision = 0) {
|
|
@@ -183,4 +183,4 @@ export {
|
|
|
183
183
|
sessionBranchNeedsHydration,
|
|
184
184
|
sessionBranchSummaryDecision
|
|
185
185
|
};
|
|
186
|
-
//# sourceMappingURL=chunk-
|
|
186
|
+
//# sourceMappingURL=chunk-HPB4KSV3.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
ListRow,
|
|
4
4
|
ListRowSkeleton,
|
|
5
5
|
RowList
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-MM7OKOTE.js";
|
|
7
7
|
import {
|
|
8
8
|
Toolbar,
|
|
9
9
|
ToolbarGroup,
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
} from "./chunk-BBWKPNJB.js";
|
|
12
12
|
import {
|
|
13
13
|
sessionStateLabel
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-E36IC3LU.js";
|
|
15
15
|
import {
|
|
16
16
|
EmptyState
|
|
17
17
|
} from "./chunk-5CIUQX6D.js";
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
} from "./chunk-YG6NARQY.js";
|
|
27
27
|
import {
|
|
28
28
|
useNavigate
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-VYKW6TB2.js";
|
|
30
30
|
import {
|
|
31
31
|
userErrorText
|
|
32
32
|
} from "./chunk-L4OF77LE.js";
|
|
@@ -41,7 +41,7 @@ import {
|
|
|
41
41
|
} from "./chunk-HMU5IELG.js";
|
|
42
42
|
import {
|
|
43
43
|
sessionDisplayTitle
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-F2RMKGDQ.js";
|
|
45
45
|
|
|
46
46
|
// src/app/components/artifacts/site-conversations.tsx
|
|
47
47
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
@@ -248,4 +248,4 @@ export {
|
|
|
248
248
|
SiteConversations,
|
|
249
249
|
SiteConversationsPanel
|
|
250
250
|
};
|
|
251
|
-
//# sourceMappingURL=chunk-
|
|
251
|
+
//# sourceMappingURL=chunk-HSQRYJ4P.js.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from "./chunk-A3MTTRCX.js";
|
|
8
8
|
import {
|
|
9
9
|
Markdown
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-SJORXXLV.js";
|
|
11
11
|
|
|
12
12
|
// src/app/components/markdown.tsx
|
|
13
13
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -44,4 +44,4 @@ function MarkdownText({
|
|
|
44
44
|
export {
|
|
45
45
|
MarkdownText
|
|
46
46
|
};
|
|
47
|
-
//# sourceMappingURL=chunk-
|
|
47
|
+
//# sourceMappingURL=chunk-HUXDGWAN.js.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from "./chunk-HMU5IELG.js";
|
|
8
8
|
import {
|
|
9
9
|
useSessionStart
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-MOKYT3X3.js";
|
|
11
11
|
import {
|
|
12
12
|
personalMachineCopy,
|
|
13
13
|
sessionAdmissionCopy,
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
} from "./chunk-BOG2FED3.js";
|
|
21
21
|
import {
|
|
22
22
|
useOpenGeniText
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-JFK7NTEA.js";
|
|
24
24
|
|
|
25
25
|
// src/components/session-admission-notice.tsx
|
|
26
26
|
import { useEffect, useId, useRef, useState } from "react";
|
|
@@ -249,4 +249,4 @@ export {
|
|
|
249
249
|
SessionMachineChoices,
|
|
250
250
|
SessionStartNotice
|
|
251
251
|
};
|
|
252
|
-
//# sourceMappingURL=chunk-
|
|
252
|
+
//# sourceMappingURL=chunk-I66ZB6KD.js.map
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
InlineDisabledReason
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-TFK4KFKA.js";
|
|
5
5
|
import {
|
|
6
6
|
FormDialog
|
|
7
7
|
} from "./chunk-S7PVL7XH.js";
|
|
8
|
+
import {
|
|
9
|
+
ReasonTooltip
|
|
10
|
+
} from "./chunk-KS57MLGE.js";
|
|
8
11
|
import {
|
|
9
12
|
MENU_CHECK_CLASS,
|
|
10
13
|
MENU_SEPARATOR_CLASS,
|
|
11
14
|
MENU_SURFACE_CLASS
|
|
12
15
|
} from "./chunk-5OTQA7CM.js";
|
|
13
|
-
import {
|
|
14
|
-
ReasonTooltip
|
|
15
|
-
} from "./chunk-KS57MLGE.js";
|
|
16
16
|
import {
|
|
17
17
|
containedPortal
|
|
18
18
|
} from "./chunk-J3BHDXQQ.js";
|
|
@@ -387,4 +387,4 @@ export {
|
|
|
387
387
|
needsEscalationConfirm,
|
|
388
388
|
RoleSelect
|
|
389
389
|
};
|
|
390
|
-
//# sourceMappingURL=chunk-
|
|
390
|
+
//# sourceMappingURL=chunk-IC7KNOBB.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
openBlankTab
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-VYKW6TB2.js";
|
|
5
5
|
|
|
6
6
|
// src/app/embed/memory-navigation.tsx
|
|
7
7
|
import { createElement, useMemo, useState, useSyncExternalStore } from "react";
|
|
@@ -123,6 +123,7 @@ function createMemoryNavigation(options) {
|
|
|
123
123
|
reloadDocument: _reloadDocument,
|
|
124
124
|
href: hrefOption,
|
|
125
125
|
preload: _preload,
|
|
126
|
+
activeOptions: _activeOptions,
|
|
126
127
|
disabled,
|
|
127
128
|
children,
|
|
128
129
|
onClick,
|
|
@@ -226,4 +227,4 @@ export {
|
|
|
226
227
|
stringifyMemorySearch,
|
|
227
228
|
useMemoryNavigation
|
|
228
229
|
};
|
|
229
|
-
//# sourceMappingURL=chunk-
|
|
230
|
+
//# sourceMappingURL=chunk-IECRGM6K.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/app/embed/memory-navigation.tsx"],"sourcesContent":["// Navigation for an embedded session app: the location lives in memory, so the\n// host page's URL and history stay untouched. Session routes render in place;\n// app-only pages (settings, billing, schedules) open the full web app beside\n// the host page.\nimport { createElement, useMemo, useState, useSyncExternalStore, type MouseEvent } from \"react\";\n\nimport type {\n LinkProps,\n NavigateOptions,\n NavigationHistoryState,\n NavigationHost,\n NavigationLocation,\n NavigationParams,\n NavigationSearch,\n NavigationState,\n NavigationUpdater,\n PageHost,\n} from \"../lib/navigation\";\nimport { openBlankTab } from \"../lib/navigation\";\n\nexport type MemoryNavigationOptions = Readonly<{\n /** The first location, such as `/workspaces/<id>/sessions`. */\n initialPath: string;\n /** The web app origin that app paths open against when they leave the embed. */\n consoleOrigin: string;\n /** Whether a path renders inside the embed; anything else leaves through `openUrl`. */\n handles: (pathname: string) => boolean;\n /** Opens a URL outside the embed. Defaults to a new browser tab. */\n openUrl?: ((url: string) => void) | undefined;\n /** An empty tab opened inside a click, or null to leave through `openUrl`. */\n openTab?: (() => Window | null) | undefined;\n /** Called after every in-embed location change. */\n onLocationChange?: ((location: NavigationLocation) => void) | undefined;\n}>;\n\ntype Listener = () => void;\n\nfunction resolveUpdater<T>(update: NavigationUpdater<T> | undefined, current: T, empty: T): T {\n if (update === undefined) return empty;\n if (update === true) return current;\n if (typeof update === \"function\") return (update as (previous: T) => T)(current);\n return update;\n}\n\n/** TanStack's search encoding: strings stay bare unless they would parse as JSON. */\nexport function stringifyMemorySearch(search: NavigationSearch): string {\n const query = new URLSearchParams();\n for (const [key, value] of Object.entries(search)) {\n if (value === undefined) continue;\n if (typeof value === \"string\") {\n let json = false;\n try {\n JSON.parse(value);\n json = true;\n } catch {\n json = false;\n }\n query.set(key, json ? JSON.stringify(value) : value);\n } else {\n query.set(key, JSON.stringify(value));\n }\n }\n const text = query.toString();\n return text ? `?${text}` : \"\";\n}\n\nfunction parseMemorySearch(searchStr: string): NavigationSearch {\n const search: NavigationSearch = {};\n for (const [key, value] of new URLSearchParams(searchStr)) {\n try {\n search[key] = JSON.parse(value);\n } catch {\n search[key] = value;\n }\n }\n return search;\n}\n\nconst ROUTE_PARAMS = /^\\/workspaces\\/([^/]+)(?:\\/sessions(?:\\/([^/]+))?)?/u;\n\nfunction paramsOf(pathname: string): NavigationParams {\n const match = ROUTE_PARAMS.exec(pathname);\n if (!match) return {};\n return {\n workspaceId: decodeURIComponent(match[1]!),\n ...(match[2] ? { sessionId: decodeURIComponent(match[2]) } : {}),\n };\n}\n\nfunction fillPath(to: string, params: NavigationParams): string {\n return to.replace(/\\$([A-Za-z_][A-Za-z0-9_]*)/gu, (_, name: string) =>\n encodeURIComponent(params[name] ?? \"\"),\n );\n}\n\nfunction locationFor(\n pathname: string,\n search: NavigationSearch,\n hash: string,\n state: NavigationHistoryState,\n): NavigationLocation {\n const searchStr = stringifyMemorySearch(search);\n return {\n pathname,\n search,\n searchStr,\n hash,\n href: `${pathname}${searchStr}${hash ? `#${hash}` : \"\"}`,\n state,\n };\n}\n\nfunction initialLocation(path: string): NavigationLocation {\n const url = new URL(path, \"http://embed.invalid\");\n return locationFor(url.pathname, parseMemorySearch(url.search), url.hash.slice(1), {});\n}\n\nfunction isPlainClick(event: MouseEvent<HTMLAnchorElement>): boolean {\n return event.button === 0 && !event.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey;\n}\n\nfunction createMemoryNavigation(options: MemoryNavigationOptions): NavigationHost {\n let location = initialLocation(options.initialPath);\n const listeners = new Set<Listener>();\n const subscribe = (listener: Listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const snapshot = () => location;\n const openUrl =\n options.openUrl ??\n ((url: string) => {\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n });\n const absolute = (path: string) => new URL(path, options.consoleOrigin).toString();\n\n const target = (navigation: NavigateOptions): NavigationLocation => {\n if (navigation.href !== undefined) return initialLocation(navigation.href);\n const currentParams = paramsOf(location.pathname);\n const params = resolveUpdater(navigation.params, currentParams, currentParams);\n const pathname =\n navigation.to === undefined || navigation.to === \".\"\n ? location.pathname\n : fillPath(navigation.to, params);\n return locationFor(\n pathname,\n resolveUpdater(navigation.search, location.search, {}),\n resolveUpdater(navigation.hash, location.hash, \"\"),\n resolveUpdater(navigation.state, location.state, {}),\n );\n };\n\n const commit = (next: NavigationLocation) => {\n if (!options.handles(next.pathname)) {\n openUrl(absolute(next.href));\n return;\n }\n location = next;\n for (const listener of listeners) listener();\n options.onLocationChange?.(next);\n };\n\n const navigate = async (navigation: NavigateOptions) => commit(target(navigation));\n\n const useLocation = () => useSyncExternalStore(subscribe, snapshot, snapshot);\n\n const Link = ({\n to,\n from: _from,\n params,\n search,\n hash,\n state,\n replace: _replace,\n resetScroll: _resetScroll,\n ignoreBlocker: _ignoreBlocker,\n reloadDocument: _reloadDocument,\n href: hrefOption,\n preload: _preload,\n activeOptions: _activeOptions,\n disabled,\n children,\n onClick,\n ref,\n target: linkTarget,\n ...anchor\n }: LinkProps) => {\n const current = useLocation();\n const next = target({ to, params, search, hash, state, href: hrefOption });\n const internal = options.handles(next.pathname);\n const isActive = next.pathname === current.pathname;\n return createElement(\n \"a\",\n {\n ...anchor,\n ref,\n href: internal ? next.href : absolute(next.href),\n target: internal ? linkTarget : \"_blank\",\n rel: internal ? anchor.rel : \"noopener noreferrer\",\n \"aria-disabled\": disabled || undefined,\n \"data-status\": isActive ? \"active\" : undefined,\n onClick: (event: MouseEvent<HTMLAnchorElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || disabled) {\n if (disabled) event.preventDefault();\n return;\n }\n if (!isPlainClick(event)) return;\n if (!internal) {\n // Leaves through the host (the Office pane opens its own browser window).\n event.preventDefault();\n openUrl(absolute(next.href));\n return;\n }\n if (linkTarget === \"_blank\") return;\n event.preventDefault();\n commit(next);\n },\n },\n typeof children === \"function\" ? children({ isActive, isTransitioning: false }) : children,\n );\n };\n\n const page: PageHost = {\n href: () => absolute(location.href),\n origin: () => new URL(options.consoleOrigin).origin,\n readQuery: () => new URLSearchParams(location.searchStr),\n replaceQuery: (query, replaceOptions) => {\n location = locationFor(\n location.pathname,\n parseMemorySearch(query.toString()),\n location.hash,\n replaceOptions?.keepHistoryState ? location.state : {},\n );\n for (const listener of listeners) listener();\n },\n assign: (url) => {\n const resolved = new URL(url, options.consoleOrigin);\n const consoleOrigin = new URL(options.consoleOrigin).origin;\n if (resolved.origin === consoleOrigin && options.handles(resolved.pathname)) {\n commit(initialLocation(`${resolved.pathname}${resolved.search}${resolved.hash}`));\n return;\n }\n openUrl(resolved.toString());\n },\n opensBeside: true,\n open: (url) => openUrl(new URL(url, options.consoleOrigin).toString()),\n openTab: () => (options.openTab ?? openBlankTab)(),\n };\n\n return {\n useNavigate: () => navigate,\n useLocation,\n useRouterState: <T,>({ select }: { select: (state: NavigationState) => T }) =>\n select({ location: useLocation() }),\n useRouter: () => ({\n get state() {\n return { location };\n },\n }),\n useSearch: () => useLocation().search,\n Link,\n stringifySearch: stringifyMemorySearch,\n page,\n };\n}\n\n/**\n * A navigation host whose location lives in memory. Created once per mount;\n * later option changes keep the first location.\n */\nexport function useMemoryNavigation(options: MemoryNavigationOptions): NavigationHost {\n const [latest] = useState(() => ({ current: options }));\n latest.current = options;\n return useMemo(\n () =>\n createMemoryNavigation({\n initialPath: options.initialPath,\n consoleOrigin: options.consoleOrigin,\n handles: (pathname) => latest.current.handles(pathname),\n openUrl: (url) =>\n latest.current.openUrl\n ? latest.current.openUrl(url)\n : void window.open(url, \"_blank\", \"noopener,noreferrer\"),\n openTab: () => (latest.current.openTab ?? openBlankTab)(),\n onLocationChange: (location) => latest.current.onLocationChange?.(location),\n }),\n // oxlint-disable-next-line react-hooks/exhaustive-deps -- one history per mount\n [],\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-Z63GB7JI.js";
|
|
5
5
|
import {
|
|
6
6
|
BillingClassMark
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-ERG355NM.js";
|
|
8
8
|
|
|
9
9
|
// src/app/components/billing-class-mark.tsx
|
|
10
10
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -30,4 +30,4 @@ export {
|
|
|
30
30
|
openGeniGroupPresentation,
|
|
31
31
|
BillingClassMark2 as BillingClassMark
|
|
32
32
|
};
|
|
33
|
-
//# sourceMappingURL=chunk-
|
|
33
|
+
//# sourceMappingURL=chunk-IIO2MR3B.js.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
useOpenGeni
|
|
4
|
+
} from "./chunk-TVQCDDSZ.js";
|
|
5
|
+
|
|
6
|
+
// src/app/lib/use-session-list-hint-refresh.tsx
|
|
7
|
+
import { useEffect, useRef } from "react";
|
|
8
|
+
function hintChangesOrdinaryLists(hint) {
|
|
9
|
+
return hint.sessionIds === null || hint.sessionIds.length > 0;
|
|
10
|
+
}
|
|
11
|
+
function hintChangesSiteConversationLists(hint) {
|
|
12
|
+
return hint.sessionIds === null || (hint.siteSessionIds?.length ?? 0) > 0;
|
|
13
|
+
}
|
|
14
|
+
function useSessionListHintRefresh(refresh, error, options = {}) {
|
|
15
|
+
const { workspaceId, workspaceSessionListEvent: hint, workspaceControlEvent } = useOpenGeni();
|
|
16
|
+
const available = hint?.workspaceId === workspaceId && hint.available;
|
|
17
|
+
const seen = useRef({ hint, workspaceControlEvent });
|
|
18
|
+
const siteConversations = options.siteConversations === true;
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
const previous = seen.current;
|
|
21
|
+
seen.current = { hint, workspaceControlEvent };
|
|
22
|
+
const irrelevant = hint !== previous.hint && workspaceControlEvent === previous.workspaceControlEvent && hint !== null && hint !== void 0 && !(siteConversations ? hintChangesSiteConversationLists(hint) : hintChangesOrdinaryLists(hint));
|
|
23
|
+
if (irrelevant) return;
|
|
24
|
+
if (available && document.visibilityState !== "hidden") void refresh();
|
|
25
|
+
}, [available, hint, workspaceControlEvent, refresh, siteConversations]);
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
if (!available || !error || document.visibilityState === "hidden") return;
|
|
28
|
+
const timer = window.setTimeout(() => void refresh(), 15e3);
|
|
29
|
+
return () => window.clearTimeout(timer);
|
|
30
|
+
}, [available, error, refresh]);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export {
|
|
34
|
+
hintChangesOrdinaryLists,
|
|
35
|
+
hintChangesSiteConversationLists,
|
|
36
|
+
useSessionListHintRefresh
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=chunk-IJYL5BZM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/app/lib/use-session-list-hint-refresh.tsx"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport type { WorkspaceSessionListEvent } from \"@opengeni/sdk\";\nimport { useOpenGeni } from \"../../session-context\";\n\n/**\n * Whether a hint can change an ordinary (non-Site-row) list. A hint with an\n * empty `sessionIds` only carries Site conversations, which those lists omit.\n */\nexport function hintChangesOrdinaryLists(hint: WorkspaceSessionListEvent): boolean {\n return hint.sessionIds === null || hint.sessionIds.length > 0;\n}\n\n/**\n * Whether a hint can change a list of Site conversations: a workspace-wide\n * hint, or one naming Site conversations (`siteSessionIds`).\n */\nexport function hintChangesSiteConversationLists(hint: WorkspaceSessionListEvent): boolean {\n return hint.sessionIds === null || (hint.siteSessionIds?.length ?? 0) > 0;\n}\n\n/**\n * Small unpaged lists reconcile on any authorized hint; the rail scopes its own\n * pages. A list of ordinary sessions skips hints that only name Site\n * conversations; a list of Site conversations (`siteConversations`) skips\n * hints that name none.\n */\nexport function useSessionListHintRefresh(\n refresh: () => Promise<void>,\n error: Error | null,\n options: { siteConversations?: boolean | undefined } = {},\n) {\n const { workspaceId, workspaceSessionListEvent: hint, workspaceControlEvent } = useOpenGeni();\n const available = hint?.workspaceId === workspaceId && hint.available;\n const seen = useRef({ hint, workspaceControlEvent });\n const siteConversations = options.siteConversations === true;\n useEffect(() => {\n const previous = seen.current;\n seen.current = { hint, workspaceControlEvent };\n // A new hint that names nothing this list shows changes nothing here.\n const irrelevant =\n hint !== previous.hint &&\n workspaceControlEvent === previous.workspaceControlEvent &&\n hint !== null &&\n hint !== undefined &&\n !(siteConversations\n ? hintChangesSiteConversationLists(hint)\n : hintChangesOrdinaryLists(hint));\n if (irrelevant) return;\n if (available && document.visibilityState !== \"hidden\") void refresh();\n }, [available, hint, workspaceControlEvent, refresh, siteConversations]);\n useEffect(() => {\n if (!available || !error || document.visibilityState === \"hidden\") return;\n const timer = window.setTimeout(() => void refresh(), 15_000);\n return () => window.clearTimeout(timer);\n }, [available, error, refresh]);\n}\n"],"mappings":";;;;;;AAAA,SAAS,WAAW,cAAc;AAQ3B,SAAS,yBAAyB,MAA0C;AACjF,SAAO,KAAK,eAAe,QAAQ,KAAK,WAAW,SAAS;AAC9D;AAMO,SAAS,iCAAiC,MAA0C;AACzF,SAAO,KAAK,eAAe,SAAS,KAAK,gBAAgB,UAAU,KAAK;AAC1E;AAQO,SAAS,0BACd,SACA,OACA,UAAuD,CAAC,GACxD;AACA,QAAM,EAAE,aAAa,2BAA2B,MAAM,sBAAsB,IAAI,YAAY;AAC5F,QAAM,YAAY,MAAM,gBAAgB,eAAe,KAAK;AAC5D,QAAM,OAAO,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACnD,QAAM,oBAAoB,QAAQ,sBAAsB;AACxD,YAAU,MAAM;AACd,UAAM,WAAW,KAAK;AACtB,SAAK,UAAU,EAAE,MAAM,sBAAsB;AAE7C,UAAM,aACJ,SAAS,SAAS,QAClB,0BAA0B,SAAS,yBACnC,SAAS,QACT,SAAS,UACT,EAAE,oBACE,iCAAiC,IAAI,IACrC,yBAAyB,IAAI;AACnC,QAAI,WAAY;AAChB,QAAI,aAAa,SAAS,oBAAoB,SAAU,MAAK,QAAQ;AAAA,EACvE,GAAG,CAAC,WAAW,MAAM,uBAAuB,SAAS,iBAAiB,CAAC;AACvE,YAAU,MAAM;AACd,QAAI,CAAC,aAAa,CAAC,SAAS,SAAS,oBAAoB,SAAU;AACnE,UAAM,QAAQ,OAAO,WAAW,MAAM,KAAK,QAAQ,GAAG,IAAM;AAC5D,WAAO,MAAM,OAAO,aAAa,KAAK;AAAA,EACxC,GAAG,CAAC,WAAW,OAAO,OAAO,CAAC;AAChC;","names":[]}
|
|
@@ -5,10 +5,10 @@ import {
|
|
|
5
5
|
} from "./chunk-CUUJROYT.js";
|
|
6
6
|
import {
|
|
7
7
|
SessionCapabilityFrame
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-AX6YJA5U.js";
|
|
9
9
|
import {
|
|
10
10
|
useOpenGeniText
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-JFK7NTEA.js";
|
|
12
12
|
|
|
13
13
|
// src/hooks/use-connect.ts
|
|
14
14
|
import { useMemo, useSyncExternalStore } from "react";
|
|
@@ -549,4 +549,4 @@ export {
|
|
|
549
549
|
SessionMcpCapabilityCard,
|
|
550
550
|
McpConnectionCard
|
|
551
551
|
};
|
|
552
|
-
//# sourceMappingURL=chunk-
|
|
552
|
+
//# sourceMappingURL=chunk-ILDOW2IQ.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
capabilityLogoSource
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-PVR5EELP.js";
|
|
5
5
|
import {
|
|
6
6
|
connectionHealth
|
|
7
7
|
} from "./chunk-22NENBA3.js";
|
|
@@ -96,4 +96,4 @@ export {
|
|
|
96
96
|
followWorkspaceConnectorPolicy,
|
|
97
97
|
newSessionConnectorCustomizeState
|
|
98
98
|
};
|
|
99
|
-
//# sourceMappingURL=chunk-
|
|
99
|
+
//# sourceMappingURL=chunk-IUK5QGP5.js.map
|
|
@@ -341,7 +341,7 @@ var englishMessages = {
|
|
|
341
341
|
"browserViewer.inputFailed": "Input failed",
|
|
342
342
|
"browserViewer.inputResultUnknown": "Input result unknown",
|
|
343
343
|
"browserViewer.inspectThePageBeforeContinuing": "Inspect the page before continuing.",
|
|
344
|
-
"browserViewer.installTheOpengeniBrowserExtension": "Install the
|
|
344
|
+
"browserViewer.installTheOpengeniBrowserExtension": "Install the {extensionName} extension in the profile you want to use.",
|
|
345
345
|
"browserViewer.interactiveBrowserPage": "Interactive browser page",
|
|
346
346
|
"browserViewer.itsPrivateStateIsSaved": "Its private state is saved. Opening it creates a fresh, isolated browser process.",
|
|
347
347
|
"browserViewer.itStoppedAfterItWent": "It stopped after it went unused.",
|
|
@@ -3470,8 +3470,8 @@ var englishMessages = {
|
|
|
3470
3470
|
"timeline.toolStep.shareFile.running": "Sharing a file",
|
|
3471
3471
|
"timeline.toolStep.signIn.done": "Signed in",
|
|
3472
3472
|
"timeline.toolStep.signIn.running": "Signing in",
|
|
3473
|
-
"timeline.toolStep.startHelper.done": "
|
|
3474
|
-
"timeline.toolStep.startHelper.running": "
|
|
3473
|
+
"timeline.toolStep.startHelper.done": "Started a worker",
|
|
3474
|
+
"timeline.toolStep.startHelper.running": "Starting a worker",
|
|
3475
3475
|
"timeline.toolStep.switchComputer.done": "Switched computers",
|
|
3476
3476
|
"timeline.toolStep.switchComputer.running": "Switching computers",
|
|
3477
3477
|
"timeline.toolStep.syncPosts.done": "Synced posts",
|
|
@@ -3864,4 +3864,4 @@ export {
|
|
|
3864
3864
|
SingleSendWording,
|
|
3865
3865
|
useOpenGeniLocale
|
|
3866
3866
|
};
|
|
3867
|
-
//# sourceMappingURL=chunk-
|
|
3867
|
+
//# sourceMappingURL=chunk-JFK7NTEA.js.map
|