@opengeni/react 6.7.0 → 6.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/app-state.js +9 -9
- package/dist/app/components/Composer.js +20 -20
- package/dist/app/components/agent/agent-capability-picker.js +6 -6
- package/dist/app/components/artifacts/artifact-browse-controls.js +2 -2
- package/dist/app/components/artifacts/artifact-library.js +13 -13
- package/dist/app/components/artifacts/artifact-viewer.js +21 -21
- package/dist/app/components/artifacts/chat-interactive-block.js +14 -14
- package/dist/app/components/artifacts/copy-artifact-link.js +2 -2
- package/dist/app/components/artifacts/file-reach-dialog.js +7 -7
- package/dist/app/components/artifacts/inline-chat-image.js +22 -22
- package/dist/app/components/artifacts/retained-file-preview.js +23 -23
- package/dist/app/components/artifacts/retained-text-preview.js +3 -3
- package/dist/app/components/artifacts/site-actions.d.ts +43 -0
- package/dist/app/components/artifacts/site-actions.js +38 -0
- package/dist/app/components/artifacts/site-audience.js +5 -5
- package/dist/app/components/artifacts/site-conversations.js +13 -13
- package/dist/app/components/artifacts/site-data.js +14 -14
- package/dist/app/components/artifacts/site-publishing-page.js +31 -31
- package/dist/app/components/artifacts/site-publishing.js +25 -25
- package/dist/app/components/artifacts/site-settings.js +30 -30
- package/dist/app/components/artifacts/site-version-menu.js +3 -3
- package/dist/app/components/billing-class-mark.js +3 -3
- package/dist/app/components/bots/bot-launch-strip.js +23 -23
- package/dist/app/components/bots/bot-template-dialog.js +30 -30
- package/dist/app/components/bots/bot-template-shortcuts.js +23 -23
- package/dist/app/components/bots/bot-templates-page.js +37 -37
- package/dist/app/components/capabilities/capability-detail-sheet.js +9 -9
- package/dist/app/components/capabilities/capability-logo-source.js +14 -15
- package/dist/app/components/capabilities/connection-ownership-selector.js +4 -4
- package/dist/app/components/capabilities/connector-tool-permissions.js +4 -4
- package/dist/app/components/capabilities/detail-dialog.js +3 -3
- package/dist/app/components/capabilities/native-connect-setup.js +16 -17
- package/dist/app/components/capabilities/native-connect-setup.js.map +1 -1
- package/dist/app/components/capabilities/own-logins-shared-heads-up.js +3 -3
- package/dist/app/components/capabilities/prepared-mcp-setup-card.js +16 -17
- package/dist/app/components/capabilities/session-capability-card.js +49 -50
- package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
- package/dist/app/components/capabilities/session-chrome-card.js +24 -25
- package/dist/app/components/capabilities/session-custom-mcp-card.js +17 -18
- package/dist/app/components/capabilities/session-github-card.js +17 -18
- package/dist/app/components/capabilities/session-machine-card.js +23 -24
- package/dist/app/components/capabilities/session-personal-github-card.js +15 -16
- package/dist/app/components/capabilities/session-plugin-card.js +9 -10
- package/dist/app/components/capabilities/use-connection-accounts.js +2 -2
- package/dist/app/components/command-menu/chat-status.js +19 -19
- package/dist/app/components/command-menu/chat-switcher.js +35 -35
- package/dist/app/components/command-menu/command-menu.js +42 -42
- package/dist/app/components/command-menu/shortcut-sheet.js +11 -11
- package/dist/app/components/composer-capabilities-menu-body.js +4 -4
- package/dist/app/components/composer-mobile-plus-panel.js +10 -10
- package/dist/app/components/composer-mobile-plus.js +3 -3
- package/dist/app/components/credit-required-gate.js +1 -1
- package/dist/app/components/credit-required-prompt.js +4 -4
- package/dist/app/components/credits/checkout-credits-celebration.js +3 -3
- package/dist/app/components/credits/checkout-return.js +3 -3
- package/dist/app/components/credits/credit-refusal-notice.js +2 -2
- package/dist/app/components/desktop/app-shots.js +6 -6
- package/dist/app/components/desktop/computer-use.js +2 -2
- package/dist/app/components/desktop/this-computer.js +5 -5
- package/dist/app/components/feedback.js +5 -5
- package/dist/app/components/github-app-connect-launcher.js +1 -1
- package/dist/app/components/machines/connect-machine-dialog.js +14 -14
- package/dist/app/components/markdown.js +7 -7
- package/dist/app/components/models/models-ui.js +6 -6
- package/dist/app/components/my-things.js +6 -6
- package/dist/app/components/own-where-it-works.js +5 -5
- package/dist/app/components/personal-resource-attachment-surface.js +4 -4
- package/dist/app/components/pickers.js +5 -5
- package/dist/app/components/rail/channel-create-dialog.js +5 -5
- package/dist/app/components/rail/project-glyph.js +23 -23
- package/dist/app/components/rail/project-profile.js +32 -32
- package/dist/app/components/rail/rail-context.js +1 -1
- package/dist/app/components/rail/rail-sections.js +70 -61
- package/dist/app/components/rail/session-header.js +54 -53
- package/dist/app/components/rail/session-list.js +68 -59
- package/dist/app/components/rail/session-row-content.js +4 -4
- package/dist/app/components/rail/session-row-hover-details.js +18 -18
- package/dist/app/components/rail/session-shell.js +89 -80
- package/dist/app/components/rail/site-session-group-heading.js +29 -12
- package/dist/app/components/session/agent-configuration-panel.js +14 -14
- package/dist/app/components/session/artifact-session-page.js +5 -5
- package/dist/app/components/session/banners.js +9 -9
- package/dist/app/components/session/console-new-conversation.js +43 -44
- package/dist/app/components/session/descendant-requests.js +39 -40
- package/dist/app/components/session/descendant-requests.js.map +1 -1
- package/dist/app/components/session/editable-artifacts-workspace.js +27 -27
- package/dist/app/components/session/failed-session-banner.js +9 -9
- package/dist/app/components/session/failure-recovery-boundary.js +3 -3
- package/dist/app/components/session/human-input-delegation-record.js +2 -2
- package/dist/app/components/session/human-input.js +37 -38
- package/dist/app/components/session/inspector.js +47 -48
- package/dist/app/components/session/inspector.js.map +1 -1
- package/dist/app/components/session/message-actions.js +5 -5
- package/dist/app/components/session/message-resource-attachments.js +13 -13
- package/dist/app/components/session/model-recovery-notice.js +3 -3
- package/dist/app/components/session/new-session-settings-menu.js +6 -6
- package/dist/app/components/session/new-session-setup-strip.js +24 -24
- package/dist/app/components/session/sandbox-recovery-actions.js +5 -5
- package/dist/app/components/session/sandbox-switcher.js +8 -8
- package/dist/app/components/session/sandbox-workspace.js +52 -53
- package/dist/app/components/session/search-markdown-highlight.js +8 -8
- package/dist/app/components/session/search-results-view.js +9 -9
- package/dist/app/components/session/session-admin-access.js +5 -5
- package/dist/app/components/session/session-admission-notice.js +4 -4
- package/dist/app/components/session/session-avatar-picker.js +24 -24
- package/dist/app/components/session/session-avatar.js +22 -22
- package/dist/app/components/session/session-machine-access-notice.js +4 -4
- package/dist/app/components/session/session-profile-dialog.js +29 -29
- package/dist/app/components/session/session-profile-editor.js +30 -30
- package/dist/app/components/session/session-retention.js +3 -3
- package/dist/app/components/session/session-search-dialog.js +11 -11
- package/dist/app/components/session/session-tenancy-control.js +4 -4
- package/dist/app/components/session/session-usage-limit-section.js +4 -4
- package/dist/app/components/session/share-chat-dialog.js +7 -7
- package/dist/app/components/session/subagents.js +12 -12
- package/dist/app/components/session/subscription-account-indicator.js +6 -6
- package/dist/app/components/settings/row-select.js +4 -4
- package/dist/app/components/transcription-settings.js +6 -6
- package/dist/app/components/ui/destructive-confirm.js +7 -7
- package/dist/app/components/usage/usage-entry.js +3 -3
- package/dist/app/components/window-bar.d.ts +3 -1
- package/dist/app/components/window-bar.js +13 -11
- package/dist/app/components/workspace-composer-plus.js +19 -20
- package/dist/app/components/workspace-reach.js +4 -4
- package/dist/app/embed/session-app.js +173 -167
- package/dist/app/lib/actions/actions-provider.js +9 -9
- package/dist/app/lib/agent-capabilities.js +3 -3
- package/dist/app/lib/codex-usage-query.js +2 -2
- package/dist/app/lib/composer-connectors.js +15 -16
- package/dist/app/lib/composer-send-blocking.d.ts +135 -1
- package/dist/app/lib/composer-send-blocking.js +30 -3
- package/dist/app/lib/console-site.js +2 -2
- package/dist/app/lib/console-text.js +2 -2
- package/dist/app/lib/copy-link.d.ts +2 -0
- package/dist/app/lib/events.js +15 -15
- package/dist/app/lib/failed-session-copy.js +4 -4
- package/dist/app/lib/model-access-onboarding.js +3 -3
- package/dist/app/lib/model-access.js +2 -2
- package/dist/app/lib/move-chat-to-machine.js +3 -3
- package/dist/app/lib/session-branch-cache.js +12 -12
- package/dist/app/lib/session-composer-readiness.d.ts +2 -2
- package/dist/app/lib/session-create.js +4 -4
- package/dist/app/lib/session-group-pagination.js +12 -12
- package/dist/app/lib/session-hover-facts.js +17 -17
- package/dist/app/lib/session-model.js +2 -2
- package/dist/app/lib/session-rail.js +9 -9
- package/dist/app/lib/session-rename.js +3 -3
- package/dist/app/lib/sessions-group.js +11 -11
- package/dist/app/lib/site-sidebar-bridge.d.ts +24 -0
- package/dist/app/lib/site-tool-consent-dialog.js +9 -10
- package/dist/app/lib/site-tool-consent-dialog.js.map +1 -1
- package/dist/app/lib/site-tool-consent.js +1 -1
- package/dist/app/lib/turn-failure-analytics.js +5 -5
- package/dist/app/lib/use-follow-up-repositories.js +5 -5
- package/dist/app/lib/use-workspace-machines.js +5 -5
- package/dist/app/lib/use-workspace-model-catalog.js +3 -3
- package/dist/app/lib/use-workspace-rigs.js +2 -2
- package/dist/app/lib/workspace-navigation-preference.js +4 -4
- package/dist/app/lib/workspace-scope-context.js +3 -3
- package/dist/app/routes/artifacts.js +69 -69
- package/dist/app/routes/retained-artifact.js +48 -48
- package/dist/app/routes/session.js +100 -101
- package/dist/app/routes/sessions-index-hydration.js +5 -5
- package/dist/app/routes/sessions-index.js +85 -85
- package/dist/app/routes/site-view.js +177 -85
- package/dist/app/routes/site-view.js.map +1 -1
- package/dist/artifacts-document.js +4 -4
- package/dist/artifacts-presentation.js +4 -4
- package/dist/artifacts-spreadsheet.js +4 -4
- package/dist/artifacts.js +13 -13
- package/dist/automations.js +12 -12
- package/dist/{browser-viewer-TC27OCIP.js → browser-viewer-ZHQDVHZ2.js} +5 -5
- package/dist/{chat-interactive-block-RWPQBHVS.js → chat-interactive-block-VSDD6X3M.js} +5 -5
- package/dist/{chunk-5MOJZORA.js → chunk-2EA4IRIP.js} +34 -3
- package/dist/chunk-2EA4IRIP.js.map +1 -0
- package/dist/{chunk-C43KRXGA.js → chunk-2GCHGWNE.js} +3 -3
- package/dist/{chunk-XLH7QY2R.js → chunk-2J77TWGH.js} +3 -3
- package/dist/{chunk-77WAKEAH.js → chunk-2OXSB2OL.js} +2 -2
- package/dist/{chunk-H3T7IWNA.js → chunk-2VJOSU4H.js} +2 -2
- package/dist/{chunk-N6AACDUW.js → chunk-34NV52R3.js} +4 -4
- package/dist/{chunk-L7YTNTIK.js → chunk-3CDJSKDW.js} +3 -3
- package/dist/{chunk-EWSOC6WF.js → chunk-3DRLCX5V.js} +2 -2
- package/dist/{chunk-JEUPAVYY.js → chunk-3L465FBR.js} +6 -6
- package/dist/{chunk-5NWEKLDZ.js → chunk-3NNAC43A.js} +2 -2
- package/dist/{chunk-EDI6SJ2N.js → chunk-3OK7Y6ES.js} +2 -2
- package/dist/{chunk-AWKES45Y.js → chunk-3PM3M2Q6.js} +2 -2
- package/dist/{chunk-I7XIZRFD.js → chunk-3PZ3LRPV.js} +3 -3
- package/dist/{chunk-AW2MQB37.js → chunk-44JWVYJB.js} +2 -2
- package/dist/{chunk-2M3J7ZWQ.js → chunk-467WDSOK.js} +2 -2
- package/dist/{chunk-UTIAXH52.js → chunk-477DTTMH.js} +3 -3
- package/dist/{chunk-J5F5HPPW.js → chunk-4BWMAGJJ.js} +3 -3
- package/dist/{chunk-YSJEAAOL.js → chunk-4F3AEJI6.js} +4 -4
- package/dist/{chunk-LHPNABDH.js → chunk-4JXPLTWV.js} +2 -2
- package/dist/{chunk-RQKLF42C.js → chunk-4K64EKM7.js} +4 -4
- package/dist/{chunk-NUNZS36W.js → chunk-4O2XWOLZ.js} +3 -3
- package/dist/{chunk-QB2KMIDP.js → chunk-4SJAEPM2.js} +2 -2
- package/dist/{chunk-6JHU2UBS.js → chunk-4Z5X7PLC.js} +3 -3
- package/dist/{chunk-2STUPWEL.js → chunk-54U6ZBEX.js} +3 -3
- package/dist/{chunk-XXSOHN35.js → chunk-5FLYHX5R.js} +2 -2
- package/dist/{chunk-MIYFS2XN.js → chunk-5MHMCE2G.js} +3 -3
- package/dist/{chunk-YWVI6ZMK.js → chunk-5MIBQ4P5.js} +2 -2
- package/dist/chunk-6B73WNLR.js +173 -0
- package/dist/chunk-6B73WNLR.js.map +1 -0
- package/dist/{chunk-5O2FCCHZ.js → chunk-6QK65ZWM.js} +3 -3
- package/dist/{chunk-RPVREAU7.js → chunk-736RUNIA.js} +4 -4
- package/dist/{chunk-2KALVELR.js → chunk-74CBR5YE.js} +3 -3
- package/dist/{chunk-5IE76VCY.js → chunk-752WXSDN.js} +2 -2
- package/dist/{chunk-OPJJSKUK.js → chunk-77B6UCNK.js} +6 -6
- package/dist/{chunk-SEO7TICN.js → chunk-77BHKC43.js} +1 -1
- package/dist/{chunk-ZUA3JMI6.js → chunk-77SYIH6O.js} +2 -2
- package/dist/{chunk-ILDXWY37.js → chunk-7AI4E7PV.js} +2 -2
- package/dist/{chunk-C372BFOV.js → chunk-7NLF35YL.js} +4 -4
- package/dist/{chunk-IFB3WJ36.js → chunk-7YTR3UFO.js} +4 -4
- package/dist/{chunk-BMICEQZQ.js → chunk-7Z76QP64.js} +3 -3
- package/dist/{chunk-YWIFM7D7.js → chunk-AAS7OWV6.js} +3 -3
- package/dist/{chunk-5QAY6K77.js → chunk-AB5IW227.js} +3 -3
- package/dist/{chunk-ZBIXBQNI.js → chunk-ABJZDRW2.js} +2 -2
- package/dist/{chunk-4DVJ6ONS.js → chunk-AH3DGOTK.js} +2 -2
- package/dist/{chunk-HGKTHF2U.js → chunk-AJBDAVX3.js} +8 -8
- package/dist/{chunk-5YKW2K6I.js → chunk-AJDGP2N4.js} +20 -20
- package/dist/{chunk-HD5X76TP.js → chunk-AQQT2FIC.js} +5 -5
- package/dist/chunk-AQQT2FIC.js.map +1 -0
- package/dist/{chunk-SC6RRD2D.js → chunk-ARTEEI2E.js} +11 -2
- package/dist/{chunk-SC6RRD2D.js.map → chunk-ARTEEI2E.js.map} +1 -1
- package/dist/{chunk-IXPTECSC.js → chunk-AVXDIRRW.js} +2 -2
- package/dist/{chunk-QK5EFEUT.js → chunk-BASI553K.js} +4 -4
- package/dist/{chunk-CRU35QQH.js → chunk-BFFNINCC.js} +108 -66
- package/dist/chunk-BFFNINCC.js.map +1 -0
- package/dist/{chunk-Z4FMAFNH.js → chunk-BQYRZIZ7.js} +2 -2
- package/dist/{chunk-DZXEDSQI.js → chunk-CEMSIU4Z.js} +5 -5
- package/dist/{chunk-FZC5N55X.js → chunk-CH4UQ4NO.js} +5 -5
- package/dist/{chunk-7X6SDK2C.js → chunk-CHU3RDV4.js} +3 -3
- package/dist/{chunk-Y4OBB2VN.js → chunk-CV4VVLPZ.js} +2 -2
- package/dist/{chunk-JQL7ZH6C.js → chunk-CXAN2FHF.js} +7 -7
- package/dist/{chunk-F2OPHAUN.js → chunk-CYDXCILL.js} +7 -7
- package/dist/{chunk-3PZ7JZI2.js → chunk-D3PTVN2I.js} +2 -2
- package/dist/{chunk-FPXASDG5.js → chunk-D5TIVCXG.js} +2 -2
- package/dist/{chunk-7W37NS3I.js → chunk-D74Z2N4K.js} +2 -2
- package/dist/{chunk-MNZG4OHU.js → chunk-DCEQCGVN.js} +2 -2
- package/dist/{chunk-ND2BXV3P.js → chunk-DEHLWZSI.js} +4 -4
- package/dist/{chunk-2YUOVM3G.js → chunk-DIP7YALH.js} +2 -2
- package/dist/{chunk-6PZ7OBYU.js → chunk-DLVIRJGK.js} +4 -4
- package/dist/{chunk-KLEUWIMZ.js → chunk-DQPIEQGP.js} +2 -2
- package/dist/{chunk-T2QX3FDP.js → chunk-DWJ6J3YW.js} +4 -4
- package/dist/{chunk-3CPWWGNK.js → chunk-E5KOWRDU.js} +2 -2
- package/dist/{chunk-6WGRDRMA.js → chunk-EBIVTDEG.js} +2 -2
- package/dist/{chunk-KUDGXAF7.js → chunk-EBTUPRRQ.js} +10 -10
- package/dist/{chunk-5CPEEAFD.js → chunk-EDDKPIIV.js} +2 -2
- package/dist/{chunk-TX3VECZU.js → chunk-EGKARC53.js} +2 -2
- package/dist/{chunk-JEA3QDX7.js → chunk-EKJHOWTZ.js} +4 -4
- package/dist/{chunk-UVN5TMHU.js → chunk-ESXAECZ3.js} +2 -2
- package/dist/{chunk-3SOIESJM.js → chunk-EWZ2RLNG.js} +2 -2
- package/dist/{chunk-CMKGILJK.js → chunk-FBA2NXYH.js} +4 -4
- package/dist/{chunk-O6N4ABCA.js → chunk-FER6EVIY.js} +2 -2
- package/dist/{chunk-DF5EAHDN.js → chunk-FLWQJDJ5.js} +5 -5
- package/dist/{chunk-PTAG4PDC.js → chunk-FNXCFIPW.js} +2 -2
- package/dist/chunk-FPSS23S4.js +36 -0
- package/dist/chunk-FPSS23S4.js.map +1 -0
- package/dist/{chunk-BJEJFISW.js → chunk-FSDQQQIA.js} +3 -3
- package/dist/{chunk-PTF5B7TJ.js → chunk-G5UQBTXY.js} +2 -2
- package/dist/{chunk-4E3ZJRTZ.js → chunk-G6ICCGJ3.js} +2 -2
- package/dist/{chunk-NRTE7DNV.js → chunk-GIWFLWXG.js} +4 -4
- package/dist/{chunk-MM4FNWI4.js → chunk-GMHIOYB7.js} +4 -4
- package/dist/{chunk-6DK6Z4UN.js → chunk-GOCODNQS.js} +3 -3
- package/dist/{chunk-TPQTRNER.js → chunk-GSCGKJNK.js} +2 -2
- package/dist/{chunk-7VMZGLYI.js → chunk-GTHCHCWW.js} +3 -3
- package/dist/{chunk-SQJIKMN3.js → chunk-GTRAH4FG.js} +2 -2
- package/dist/{chunk-ZYAZUPPV.js → chunk-GU7T2S5N.js} +3 -3
- package/dist/{chunk-JKHKLL5W.js → chunk-H6BX6WOW.js} +3 -3
- package/dist/{chunk-IMZCQBOT.js → chunk-H6MJFMHZ.js} +3 -3
- package/dist/{chunk-HSOXMJOT.js → chunk-HEGV4QMS.js} +2 -2
- package/dist/chunk-HROITVQJ.js +85 -0
- package/dist/chunk-HROITVQJ.js.map +1 -0
- package/dist/{chunk-OF4TIKYC.js → chunk-HTMQGS63.js} +17 -9
- package/dist/chunk-HTMQGS63.js.map +1 -0
- package/dist/{chunk-NC7PVOEK.js → chunk-HWVPLFIW.js} +2 -2
- package/dist/{chunk-IMDQUHBJ.js → chunk-HYEIA25Y.js} +2 -2
- package/dist/{chunk-ECJBYNLJ.js → chunk-ICAMYP5M.js} +2 -2
- package/dist/{chunk-DJAXC5OK.js → chunk-IFSXVU2S.js} +2 -2
- package/dist/{chunk-I4MRDSUF.js → chunk-IJR6VOLU.js} +3 -3
- package/dist/{chunk-YCVD6CI3.js → chunk-IN3VQFKS.js} +2 -2
- package/dist/{chunk-BJFH6JI5.js → chunk-IZXYFWA4.js} +13 -13
- package/dist/{chunk-MFROMEKA.js → chunk-J2BTILRR.js} +3 -3
- package/dist/{chunk-NCYMNCJO.js → chunk-J2WY42FA.js} +2 -2
- package/dist/{chunk-DGMR6JEJ.js → chunk-J4XSTXZP.js} +2 -2
- package/dist/{chunk-ZTPXACWB.js → chunk-JKL5S7UQ.js} +6 -6
- package/dist/{chunk-P77WNZDY.js → chunk-JMHEFZOB.js} +2 -2
- package/dist/{chunk-IDANQPRH.js → chunk-JV3UI7BH.js} +3 -3
- package/dist/{chunk-NW53H5RW.js → chunk-JV5ULONH.js} +166 -65
- package/dist/chunk-JV5ULONH.js.map +1 -0
- package/dist/{chunk-FVXBNBHO.js → chunk-K3D7IQQP.js} +6 -6
- package/dist/{chunk-XEQMZB3C.js → chunk-K4DQS2ML.js} +24 -6
- package/dist/chunk-K4DQS2ML.js.map +1 -0
- package/dist/{chunk-GKVJIDHF.js → chunk-KFNZZ2N6.js} +2 -2
- package/dist/{chunk-I4QEJ62Y.js → chunk-KI46GKMD.js} +7 -7
- package/dist/{chunk-SIRLACNZ.js → chunk-KO3OHHY2.js} +3 -3
- package/dist/{chunk-NULUNM7H.js → chunk-KUE5BOQE.js} +5 -5
- package/dist/{chunk-O3LKCBP5.js → chunk-LIJNVIT3.js} +3 -3
- package/dist/{chunk-JWB44UGJ.js → chunk-LIJPDVYP.js} +2 -2
- package/dist/{chunk-KYS77RPN.js → chunk-LPKJ77EK.js} +2 -2
- package/dist/{chunk-RMFKVOM7.js → chunk-LQKVNREV.js} +4 -4
- package/dist/{chunk-E7XERZWC.js → chunk-LTJFV2JI.js} +2 -2
- package/dist/{chunk-INXGSG3J.js → chunk-LVDNY5RC.js} +2 -2
- package/dist/{chunk-2INLDVK3.js → chunk-LVELUUK6.js} +2 -2
- package/dist/{chunk-TAT5USZN.js → chunk-M3FDGRB4.js} +3 -3
- package/dist/{chunk-5EWSRZ2Y.js → chunk-M3HGBO2Y.js} +1 -1
- package/dist/{chunk-J3DY5HWQ.js → chunk-M5IQVMLR.js} +4 -4
- package/dist/{chunk-53AGXXZM.js → chunk-MKDFYE2E.js} +2 -2
- package/dist/{chunk-4SAWSRAA.js → chunk-MRECRNVU.js} +5 -5
- package/dist/{chunk-2I7HDP53.js → chunk-MT2R57SF.js} +2 -2
- package/dist/{chunk-Z7Y523PS.js → chunk-MV2CLIO6.js} +6 -6
- package/dist/{chunk-JZ4NLCAP.js → chunk-MZY3VKKM.js} +2 -2
- package/dist/{chunk-YENLNISG.js → chunk-N3FM4BNA.js} +2 -2
- package/dist/{chunk-DZWARC4M.js → chunk-NFCS5WYC.js} +3 -3
- package/dist/{chunk-I5QZJODL.js → chunk-NQ2CPQJF.js} +3 -3
- package/dist/{chunk-6DVCC7QS.js → chunk-OBGOLHCP.js} +164 -43
- package/dist/chunk-OBGOLHCP.js.map +1 -0
- package/dist/{chunk-CUIWCGMA.js → chunk-OCXEY7HE.js} +2 -2
- package/dist/{chunk-VTTAJOQ7.js → chunk-OCXTTKVA.js} +2 -2
- package/dist/{chunk-KRDR5RJD.js → chunk-OGU73VUN.js} +2 -2
- package/dist/{chunk-YIRVLKAX.js → chunk-OI6VI6SU.js} +9 -9
- package/dist/{chunk-BHNSJVBC.js → chunk-OJWDNNW3.js} +5 -5
- package/dist/{chunk-X6KAJI3V.js → chunk-OK7BQMCI.js} +9 -9
- package/dist/{chunk-I5B5L6Q4.js → chunk-OOOSGPJL.js} +1 -1
- package/dist/chunk-OP2GD6QW.js +166 -0
- package/dist/chunk-OP2GD6QW.js.map +1 -0
- package/dist/{chunk-TUIN4MB7.js → chunk-ORV7EFSL.js} +4 -4
- package/dist/{chunk-JDTGRRNU.js → chunk-OSJ366KR.js} +49 -31
- package/dist/chunk-OSJ366KR.js.map +1 -0
- package/dist/{chunk-3IK6UYO6.js → chunk-OTW25A6I.js} +3 -3
- package/dist/{chunk-NPGISCU6.js → chunk-OWET7EY2.js} +16 -16
- package/dist/{chunk-CRAOSVHC.js → chunk-OXQ2SXVC.js} +2 -2
- package/dist/{chunk-3ED2U6XE.js → chunk-OYCK4JRS.js} +2 -2
- package/dist/{chunk-YQXTDZSU.js → chunk-OYOFPNLC.js} +4 -4
- package/dist/{chunk-4NQHXYMW.js → chunk-PD7NWM7V.js} +2 -2
- package/dist/{chunk-4YCA2Y73.js → chunk-PF2WU2IL.js} +3 -3
- package/dist/{chunk-Z654FWNU.js → chunk-PLYVGZIN.js} +2 -2
- package/dist/{chunk-MVW6HNPI.js → chunk-PRT4J2DL.js} +2 -2
- package/dist/{chunk-TXLIEOJX.js → chunk-PSM3CU7N.js} +111 -80
- package/dist/chunk-PSM3CU7N.js.map +1 -0
- package/dist/{chunk-OPWCMA4D.js → chunk-PUUEI4W3.js} +6 -6
- package/dist/{chunk-RLBKLAEY.js → chunk-PVB4YVDP.js} +2 -2
- package/dist/{chunk-NXCMHIKI.js → chunk-PWUSSSSL.js} +2 -2
- package/dist/{chunk-MJUCFQMS.js → chunk-PYB4BFEC.js} +3 -3
- package/dist/{chunk-2FSBSCZJ.js → chunk-PZKHST7A.js} +2 -2
- package/dist/{chunk-QZAAUQRN.js → chunk-Q5EZNBPI.js} +3 -3
- package/dist/{chunk-ZHDFQITM.js → chunk-Q5K2J5GG.js} +2 -2
- package/dist/{chunk-7T2ZE3VT.js → chunk-QPQ7R77C.js} +8 -1
- package/dist/chunk-QPQ7R77C.js.map +1 -0
- package/dist/{chunk-6BCXNDEI.js → chunk-QQIZMVAJ.js} +74 -60
- package/dist/chunk-QQIZMVAJ.js.map +1 -0
- package/dist/{chunk-OV6QJRT4.js → chunk-QRECBCJM.js} +2 -2
- package/dist/{chunk-3GZA4BUW.js → chunk-QURYQFDN.js} +2 -2
- package/dist/{chunk-VS7AHPCZ.js → chunk-R33SBMB7.js} +3 -3
- package/dist/{chunk-KCBMFSMS.js → chunk-R4JA5JFI.js} +3 -3
- package/dist/{chunk-HC4JFZVU.js → chunk-R5QAL43H.js} +2 -2
- package/dist/{chunk-QPSGCC5D.js → chunk-RGR57NYY.js} +2 -2
- package/dist/{chunk-XWFAMUZQ.js → chunk-RHXYO4H2.js} +2 -2
- package/dist/{chunk-Y4BB2KS2.js → chunk-RISUROBM.js} +7 -7
- package/dist/{chunk-U3DN4HEY.js → chunk-RMCLFSMX.js} +2 -2
- package/dist/{chunk-YK7756IF.js → chunk-RTZANSSC.js} +3 -3
- package/dist/{chunk-ZEG4VPBL.js → chunk-S27VZ5DO.js} +6 -6
- package/dist/{chunk-54YW6SZZ.js → chunk-SBXSKRFA.js} +3 -3
- package/dist/{chunk-HAX4LCR5.js → chunk-SFIXTOOJ.js} +3 -3
- package/dist/{chunk-QIOQ2NPQ.js → chunk-SGH7I7OY.js} +2 -2
- package/dist/{chunk-K2A5PXQ5.js → chunk-SJYTQLN3.js} +3 -3
- package/dist/{chunk-2Z3NQNTM.js → chunk-SK5S2PCK.js} +15 -15
- package/dist/{chunk-X3MWB2QU.js → chunk-SN2WENRP.js} +3 -3
- package/dist/{chunk-OSY5K7L7.js → chunk-SP44O3OU.js} +2 -2
- package/dist/{chunk-OZCBM3UC.js → chunk-SSR4ZX52.js} +2 -2
- package/dist/{chunk-QCSJ4CWE.js → chunk-SXGJL7UT.js} +14 -14
- package/dist/{chunk-NC55IFN3.js → chunk-T67LTMSW.js} +10 -10
- package/dist/{chunk-AXHZYXUV.js → chunk-TDTD66BK.js} +2 -2
- package/dist/{chunk-NGJJJPZZ.js → chunk-TK5FWVZR.js} +3 -3
- package/dist/{chunk-YPWU5KPE.js → chunk-TKQL7EDB.js} +56 -19
- package/dist/chunk-TKQL7EDB.js.map +1 -0
- package/dist/{chunk-2OP6WLGV.js → chunk-TNSJFZ6Q.js} +4 -4
- package/dist/{chunk-O732GAFC.js → chunk-U4LTPFD2.js} +2 -2
- package/dist/{chunk-4DVNUCRR.js → chunk-U5UGM5XD.js} +6 -6
- package/dist/{chunk-UJK53QFL.js → chunk-UBRQ3PQD.js} +2 -2
- package/dist/{chunk-SODC7T6L.js → chunk-UMX6DZME.js} +2 -2
- package/dist/{chunk-YLS6QE5G.js → chunk-UO35OEOX.js} +4 -4
- package/dist/{chunk-SHHJCL7X.js → chunk-UTRNLNCW.js} +3 -3
- package/dist/{chunk-HEFPPMBQ.js → chunk-UU5FBVRX.js} +2 -2
- package/dist/{chunk-GQXZPKK7.js → chunk-V6UOVHW3.js} +2 -2
- package/dist/{chunk-GVN5SZLX.js → chunk-VATYK3JQ.js} +3 -3
- package/dist/{chunk-7TIX2UAR.js → chunk-VCJQQYRE.js} +4 -4
- package/dist/{chunk-6WD2INST.js → chunk-WDASYY4S.js} +7 -7
- package/dist/{chunk-DXBYWSL5.js → chunk-WIFDNUKD.js} +3 -3
- package/dist/{chunk-RT7CJMER.js → chunk-WIXHUBQN.js} +2 -2
- package/dist/{chunk-57AZS3IE.js → chunk-WRMUXZ7C.js} +3 -3
- package/dist/{chunk-2CLNIEK4.js → chunk-WTSQUCHB.js} +3 -3
- package/dist/{chunk-OVKYVZMW.js → chunk-WXF2RTS4.js} +2 -2
- package/dist/{chunk-MIHN76LX.js → chunk-WYGTAQMX.js} +3 -3
- package/dist/{chunk-2RG7NIAS.js → chunk-X2QJXDE4.js} +10 -10
- package/dist/{chunk-GAVYGBFI.js → chunk-XMBOLFFS.js} +2 -2
- package/dist/{chunk-T7OXJZCX.js → chunk-XOIDUM2H.js} +1 -1
- package/dist/{chunk-ORJPS5VN.js → chunk-XUOYNJPB.js} +97 -37
- package/dist/chunk-XUOYNJPB.js.map +1 -0
- package/dist/{chunk-XHIQ5I6N.js → chunk-XVLEBB4Y.js} +2 -2
- package/dist/{chunk-Q3DPEYX4.js → chunk-XZCCEKPW.js} +7 -7
- package/dist/{chunk-T3OWFVMS.js → chunk-Y3XZEKDQ.js} +2 -2
- package/dist/{chunk-KODELWYT.js → chunk-YJSCLGAW.js} +3 -3
- package/dist/{chunk-ROKQU7WG.js → chunk-YMI27QPF.js} +2 -2
- package/dist/{chunk-U7XM7CB4.js → chunk-YNTLWCF4.js} +4 -4
- package/dist/{chunk-ZQCND77P.js → chunk-YRYF76OE.js} +2 -2
- package/dist/{chunk-2BDT3UZQ.js → chunk-ZAX4XQLN.js} +3 -3
- package/dist/{chunk-DXR5PDFP.js → chunk-ZBHGNE2J.js} +3 -3
- package/dist/{chunk-I7ITSXSJ.js → chunk-ZR5EKJT6.js} +2 -2
- package/dist/{chunk-IZXHMZQ6.js → chunk-ZW5YTIH3.js} +4 -4
- package/dist/components/artifacts/artifact-sandbox.d.ts +6 -1
- package/dist/components/artifacts/site-view.d.ts +4 -2
- package/dist/components/timeline-anchor.d.ts +8 -3
- package/dist/components/timeline-reading-progress.d.ts +1 -1
- package/dist/components/timeline-settlement.d.ts +1 -1
- package/dist/composer-messages.js +2 -2
- package/dist/composer.js +10 -10
- package/dist/{computer-viewer-TDDO25AV.js → computer-viewer-5LKRCEVQ.js} +5 -5
- package/dist/connect.js +13 -14
- package/dist/desktop-dictation.js +7 -7
- package/dist/desktop.js +2 -2
- package/dist/editor.js +2 -2
- package/dist/{embedded-new-voice-2G3VLPVQ.js → embedded-new-voice-GHJRY3YL.js} +5 -5
- package/dist/{embedded-voice-T5IWOWGD.js → embedded-voice-ASQXBSTX.js} +5 -5
- package/dist/{fleet-decision-row-WM64KXP3.js → fleet-decision-row-U7LDVBEM.js} +2 -2
- package/dist/in-chat-connect-model.js +5 -5
- package/dist/index.js +62 -63
- package/dist/interaction.js +6 -6
- package/dist/{latest-question-OX56OVQ5.js → latest-question-RNVF262Q.js} +5 -5
- package/dist/lib/format.d.ts +10 -0
- package/dist/machines.js +4 -4
- package/dist/meetings-recorder.js +1 -1
- package/dist/meetings.js +24 -24
- package/dist/messages/en.d.ts +7 -0
- package/dist/messages.js +1 -1
- package/dist/{model-policy-picker-menu-SMC6J6QN.js → model-policy-picker-menu-E6XKMFTA.js} +4 -4
- package/dist/{payment-page-card-G4U63KUV.js → payment-page-card-DJDKV2LW.js} +6 -5
- package/dist/{payment-page-card-G4U63KUV.js.map → payment-page-card-DJDKV2LW.js.map} +1 -1
- package/dist/{platform-activity-row-BUZGZAKZ.js → platform-activity-row-MSDCSMET.js} +17 -7
- package/dist/platform-activity-row-MSDCSMET.js.map +1 -0
- package/dist/{queue-surface-implementation-4KUZ4PJV.js → queue-surface-implementation-GUAIG6TK.js} +5 -5
- package/dist/realtime.js +4 -4
- package/dist/{recorder-host-WF2RRR56.js → recorder-host-2MYDJPQW.js} +4 -4
- package/dist/recordings.js +3 -3
- package/dist/{sandbox-files-ESDMOFSD.js → sandbox-files-W5W2LW4K.js} +6 -6
- package/dist/session-app.js +173 -167
- package/dist/{session-connect-cards-Q53KMMYY.js → session-connect-cards-HPH7JOZP.js} +9 -10
- package/dist/session-list-model.js +2 -2
- package/dist/{session-realtime-CF3I35WJ.js → session-realtime-SDTKFFIR.js} +3 -3
- package/dist/session-realtime-SDTKFFIR.js.map +1 -0
- package/dist/session-realtime.js +2 -2
- package/dist/session-ui.js +37 -38
- package/dist/session.js +9 -9
- package/dist/sites.js +2 -2
- package/dist/terminal.js +2 -2
- package/dist/this-computer.js +3 -3
- package/dist/timeline/shared.d.ts +2 -0
- package/dist/{timeline-annotation-markers-CJK4RYZ4.js → timeline-annotation-markers-FNILLWNU.js} +2 -2
- package/dist/{timeline-annotation-selection-67GF5H26.js → timeline-annotation-selection-MBCIDO2Q.js} +2 -2
- package/dist/{timeline-annotations-dialog-ONJPQDJQ.js → timeline-annotations-dialog-JPNKLOTE.js} +3 -3
- package/dist/timeline-model.js +6 -6
- package/dist/ui/access-list.js +6 -6
- package/dist/ui/cadence-picker.js +4 -4
- package/dist/ui/choice-cards.js +3 -3
- package/dist/ui/confirm-dialog.js +4 -4
- package/dist/ui/copy-field.js +3 -3
- package/dist/ui/detail-page.js +5 -5
- package/dist/ui/detail-sheet.js +4 -4
- package/dist/ui/dialog.js +2 -2
- package/dist/ui/disclosure.js +5 -5
- package/dist/ui/email-chips-input.js +3 -3
- package/dist/ui/field.js +2 -2
- package/dist/ui/flush-form-page.js +4 -4
- package/dist/ui/form-dialog.js +3 -3
- package/dist/ui/list-row.js +3 -3
- package/dist/ui/page-header.js +2 -2
- package/dist/ui/relative-time.js +2 -2
- package/dist/ui/revision-history.js +4 -4
- package/dist/ui/role-select.js +6 -6
- package/dist/ui/select-menu.js +3 -3
- package/dist/ui/sheet.js +2 -2
- package/dist/ui/usage-meter.js +3 -3
- package/dist/ui/window-bar-title.d.ts +7 -3
- package/dist/ui/window-bar-title.js +1 -1
- package/dist/usage.js +2 -2
- package/dist/workbench.js +4 -4
- package/package.json +4 -4
- package/src/app/components/artifacts/site-actions.tsx +105 -0
- package/src/app/components/rail/session-header-copy.test.tsx +172 -0
- package/src/app/components/rail/session-header.tsx +68 -12
- package/src/app/components/rail/session-list.tsx +20 -0
- package/src/app/components/rail/site-session-group-heading.test.tsx +210 -0
- package/src/app/components/rail/site-session-group-heading.tsx +119 -60
- package/src/app/components/session/failed-session-actions.test.tsx +4 -0
- package/src/app/components/window-bar.tsx +63 -15
- package/src/app/lib/composer-send-blocking.tsx +312 -1
- package/src/app/lib/copy-link.ts +10 -0
- package/src/app/lib/session-composer-readiness.ts +4 -3
- package/src/app/lib/site-sidebar-bridge.test.tsx +67 -0
- package/src/app/lib/site-sidebar-bridge.ts +57 -0
- package/src/app/routes/session.tsx +45 -12
- package/src/app/routes/sessions-index.tsx +164 -105
- package/src/app/routes/site-view.test.tsx +74 -6
- package/src/app/routes/site-view.tsx +135 -14
- package/src/components/approval-surface.tsx +78 -3
- package/src/components/artifacts/artifact-sandbox.tsx +27 -2
- package/src/components/artifacts/site-view.tsx +13 -1
- package/src/components/message-timeline.tsx +25 -52
- package/src/components/session-capability-frame.tsx +2 -30
- package/src/components/timeline-anchor.tsx +19 -14
- package/src/components/timeline-reading-progress.ts +1 -2
- package/src/components/timeline-settlement.ts +3 -3
- package/src/lib/format.ts +46 -1
- package/src/messages/en.ts +11 -0
- package/src/timeline/platform-activity-row.tsx +20 -8
- package/src/timeline/shared.tsx +203 -32
- package/src/ui/window-bar-title.test.tsx +37 -0
- package/src/ui/window-bar-title.tsx +13 -6
- package/styles/compiled.css +5 -0
- package/dist/chunk-5MOJZORA.js.map +0 -1
- package/dist/chunk-6BCXNDEI.js.map +0 -1
- package/dist/chunk-6DVCC7QS.js.map +0 -1
- package/dist/chunk-7T2ZE3VT.js.map +0 -1
- package/dist/chunk-AFRGP2VP.js +0 -17
- package/dist/chunk-AFRGP2VP.js.map +0 -1
- package/dist/chunk-CRU35QQH.js.map +0 -1
- package/dist/chunk-FO4LYKJL.js +0 -197
- package/dist/chunk-FO4LYKJL.js.map +0 -1
- package/dist/chunk-HD5X76TP.js.map +0 -1
- package/dist/chunk-JDTGRRNU.js.map +0 -1
- package/dist/chunk-NW53H5RW.js.map +0 -1
- package/dist/chunk-OF4TIKYC.js.map +0 -1
- package/dist/chunk-ORJPS5VN.js.map +0 -1
- package/dist/chunk-TXLIEOJX.js.map +0 -1
- package/dist/chunk-VBUVBHFJ.js +0 -16
- package/dist/chunk-VBUVBHFJ.js.map +0 -1
- package/dist/chunk-XEQMZB3C.js.map +0 -1
- package/dist/chunk-YPWU5KPE.js.map +0 -1
- package/dist/components/timeline-answer-follow.d.ts +0 -8
- package/dist/platform-activity-row-BUZGZAKZ.js.map +0 -1
- package/src/components/timeline-answer-follow.ts +0 -15
- /package/dist/{browser-viewer-TC27OCIP.js.map → app/components/artifacts/site-actions.js.map} +0 -0
- /package/dist/{chat-interactive-block-RWPQBHVS.js.map → browser-viewer-ZHQDVHZ2.js.map} +0 -0
- /package/dist/{computer-viewer-TDDO25AV.js.map → chat-interactive-block-VSDD6X3M.js.map} +0 -0
- /package/dist/{chunk-C43KRXGA.js.map → chunk-2GCHGWNE.js.map} +0 -0
- /package/dist/{chunk-XLH7QY2R.js.map → chunk-2J77TWGH.js.map} +0 -0
- /package/dist/{chunk-77WAKEAH.js.map → chunk-2OXSB2OL.js.map} +0 -0
- /package/dist/{chunk-H3T7IWNA.js.map → chunk-2VJOSU4H.js.map} +0 -0
- /package/dist/{chunk-N6AACDUW.js.map → chunk-34NV52R3.js.map} +0 -0
- /package/dist/{chunk-L7YTNTIK.js.map → chunk-3CDJSKDW.js.map} +0 -0
- /package/dist/{chunk-EWSOC6WF.js.map → chunk-3DRLCX5V.js.map} +0 -0
- /package/dist/{chunk-JEUPAVYY.js.map → chunk-3L465FBR.js.map} +0 -0
- /package/dist/{chunk-5NWEKLDZ.js.map → chunk-3NNAC43A.js.map} +0 -0
- /package/dist/{chunk-EDI6SJ2N.js.map → chunk-3OK7Y6ES.js.map} +0 -0
- /package/dist/{chunk-AWKES45Y.js.map → chunk-3PM3M2Q6.js.map} +0 -0
- /package/dist/{chunk-I7XIZRFD.js.map → chunk-3PZ3LRPV.js.map} +0 -0
- /package/dist/{chunk-AW2MQB37.js.map → chunk-44JWVYJB.js.map} +0 -0
- /package/dist/{chunk-2M3J7ZWQ.js.map → chunk-467WDSOK.js.map} +0 -0
- /package/dist/{chunk-UTIAXH52.js.map → chunk-477DTTMH.js.map} +0 -0
- /package/dist/{chunk-J5F5HPPW.js.map → chunk-4BWMAGJJ.js.map} +0 -0
- /package/dist/{chunk-YSJEAAOL.js.map → chunk-4F3AEJI6.js.map} +0 -0
- /package/dist/{chunk-LHPNABDH.js.map → chunk-4JXPLTWV.js.map} +0 -0
- /package/dist/{chunk-RQKLF42C.js.map → chunk-4K64EKM7.js.map} +0 -0
- /package/dist/{chunk-NUNZS36W.js.map → chunk-4O2XWOLZ.js.map} +0 -0
- /package/dist/{chunk-QB2KMIDP.js.map → chunk-4SJAEPM2.js.map} +0 -0
- /package/dist/{chunk-6JHU2UBS.js.map → chunk-4Z5X7PLC.js.map} +0 -0
- /package/dist/{chunk-2STUPWEL.js.map → chunk-54U6ZBEX.js.map} +0 -0
- /package/dist/{chunk-XXSOHN35.js.map → chunk-5FLYHX5R.js.map} +0 -0
- /package/dist/{chunk-MIYFS2XN.js.map → chunk-5MHMCE2G.js.map} +0 -0
- /package/dist/{chunk-YWVI6ZMK.js.map → chunk-5MIBQ4P5.js.map} +0 -0
- /package/dist/{chunk-5O2FCCHZ.js.map → chunk-6QK65ZWM.js.map} +0 -0
- /package/dist/{chunk-RPVREAU7.js.map → chunk-736RUNIA.js.map} +0 -0
- /package/dist/{chunk-2KALVELR.js.map → chunk-74CBR5YE.js.map} +0 -0
- /package/dist/{chunk-5IE76VCY.js.map → chunk-752WXSDN.js.map} +0 -0
- /package/dist/{chunk-OPJJSKUK.js.map → chunk-77B6UCNK.js.map} +0 -0
- /package/dist/{chunk-SEO7TICN.js.map → chunk-77BHKC43.js.map} +0 -0
- /package/dist/{chunk-ZUA3JMI6.js.map → chunk-77SYIH6O.js.map} +0 -0
- /package/dist/{chunk-ILDXWY37.js.map → chunk-7AI4E7PV.js.map} +0 -0
- /package/dist/{chunk-C372BFOV.js.map → chunk-7NLF35YL.js.map} +0 -0
- /package/dist/{chunk-IFB3WJ36.js.map → chunk-7YTR3UFO.js.map} +0 -0
- /package/dist/{chunk-BMICEQZQ.js.map → chunk-7Z76QP64.js.map} +0 -0
- /package/dist/{chunk-YWIFM7D7.js.map → chunk-AAS7OWV6.js.map} +0 -0
- /package/dist/{chunk-5QAY6K77.js.map → chunk-AB5IW227.js.map} +0 -0
- /package/dist/{chunk-ZBIXBQNI.js.map → chunk-ABJZDRW2.js.map} +0 -0
- /package/dist/{chunk-4DVJ6ONS.js.map → chunk-AH3DGOTK.js.map} +0 -0
- /package/dist/{chunk-HGKTHF2U.js.map → chunk-AJBDAVX3.js.map} +0 -0
- /package/dist/{chunk-5YKW2K6I.js.map → chunk-AJDGP2N4.js.map} +0 -0
- /package/dist/{chunk-IXPTECSC.js.map → chunk-AVXDIRRW.js.map} +0 -0
- /package/dist/{chunk-QK5EFEUT.js.map → chunk-BASI553K.js.map} +0 -0
- /package/dist/{chunk-Z4FMAFNH.js.map → chunk-BQYRZIZ7.js.map} +0 -0
- /package/dist/{chunk-DZXEDSQI.js.map → chunk-CEMSIU4Z.js.map} +0 -0
- /package/dist/{chunk-FZC5N55X.js.map → chunk-CH4UQ4NO.js.map} +0 -0
- /package/dist/{chunk-7X6SDK2C.js.map → chunk-CHU3RDV4.js.map} +0 -0
- /package/dist/{chunk-Y4OBB2VN.js.map → chunk-CV4VVLPZ.js.map} +0 -0
- /package/dist/{chunk-JQL7ZH6C.js.map → chunk-CXAN2FHF.js.map} +0 -0
- /package/dist/{chunk-F2OPHAUN.js.map → chunk-CYDXCILL.js.map} +0 -0
- /package/dist/{chunk-3PZ7JZI2.js.map → chunk-D3PTVN2I.js.map} +0 -0
- /package/dist/{chunk-FPXASDG5.js.map → chunk-D5TIVCXG.js.map} +0 -0
- /package/dist/{chunk-7W37NS3I.js.map → chunk-D74Z2N4K.js.map} +0 -0
- /package/dist/{chunk-MNZG4OHU.js.map → chunk-DCEQCGVN.js.map} +0 -0
- /package/dist/{chunk-ND2BXV3P.js.map → chunk-DEHLWZSI.js.map} +0 -0
- /package/dist/{chunk-2YUOVM3G.js.map → chunk-DIP7YALH.js.map} +0 -0
- /package/dist/{chunk-6PZ7OBYU.js.map → chunk-DLVIRJGK.js.map} +0 -0
- /package/dist/{chunk-KLEUWIMZ.js.map → chunk-DQPIEQGP.js.map} +0 -0
- /package/dist/{chunk-T2QX3FDP.js.map → chunk-DWJ6J3YW.js.map} +0 -0
- /package/dist/{chunk-3CPWWGNK.js.map → chunk-E5KOWRDU.js.map} +0 -0
- /package/dist/{chunk-6WGRDRMA.js.map → chunk-EBIVTDEG.js.map} +0 -0
- /package/dist/{chunk-KUDGXAF7.js.map → chunk-EBTUPRRQ.js.map} +0 -0
- /package/dist/{chunk-5CPEEAFD.js.map → chunk-EDDKPIIV.js.map} +0 -0
- /package/dist/{chunk-TX3VECZU.js.map → chunk-EGKARC53.js.map} +0 -0
- /package/dist/{chunk-JEA3QDX7.js.map → chunk-EKJHOWTZ.js.map} +0 -0
- /package/dist/{chunk-UVN5TMHU.js.map → chunk-ESXAECZ3.js.map} +0 -0
- /package/dist/{chunk-3SOIESJM.js.map → chunk-EWZ2RLNG.js.map} +0 -0
- /package/dist/{chunk-CMKGILJK.js.map → chunk-FBA2NXYH.js.map} +0 -0
- /package/dist/{chunk-O6N4ABCA.js.map → chunk-FER6EVIY.js.map} +0 -0
- /package/dist/{chunk-DF5EAHDN.js.map → chunk-FLWQJDJ5.js.map} +0 -0
- /package/dist/{chunk-PTAG4PDC.js.map → chunk-FNXCFIPW.js.map} +0 -0
- /package/dist/{chunk-BJEJFISW.js.map → chunk-FSDQQQIA.js.map} +0 -0
- /package/dist/{chunk-PTF5B7TJ.js.map → chunk-G5UQBTXY.js.map} +0 -0
- /package/dist/{chunk-4E3ZJRTZ.js.map → chunk-G6ICCGJ3.js.map} +0 -0
- /package/dist/{chunk-NRTE7DNV.js.map → chunk-GIWFLWXG.js.map} +0 -0
- /package/dist/{chunk-MM4FNWI4.js.map → chunk-GMHIOYB7.js.map} +0 -0
- /package/dist/{chunk-6DK6Z4UN.js.map → chunk-GOCODNQS.js.map} +0 -0
- /package/dist/{chunk-TPQTRNER.js.map → chunk-GSCGKJNK.js.map} +0 -0
- /package/dist/{chunk-7VMZGLYI.js.map → chunk-GTHCHCWW.js.map} +0 -0
- /package/dist/{chunk-SQJIKMN3.js.map → chunk-GTRAH4FG.js.map} +0 -0
- /package/dist/{chunk-ZYAZUPPV.js.map → chunk-GU7T2S5N.js.map} +0 -0
- /package/dist/{chunk-JKHKLL5W.js.map → chunk-H6BX6WOW.js.map} +0 -0
- /package/dist/{chunk-IMZCQBOT.js.map → chunk-H6MJFMHZ.js.map} +0 -0
- /package/dist/{chunk-HSOXMJOT.js.map → chunk-HEGV4QMS.js.map} +0 -0
- /package/dist/{chunk-NC7PVOEK.js.map → chunk-HWVPLFIW.js.map} +0 -0
- /package/dist/{chunk-IMDQUHBJ.js.map → chunk-HYEIA25Y.js.map} +0 -0
- /package/dist/{chunk-ECJBYNLJ.js.map → chunk-ICAMYP5M.js.map} +0 -0
- /package/dist/{chunk-DJAXC5OK.js.map → chunk-IFSXVU2S.js.map} +0 -0
- /package/dist/{chunk-I4MRDSUF.js.map → chunk-IJR6VOLU.js.map} +0 -0
- /package/dist/{chunk-YCVD6CI3.js.map → chunk-IN3VQFKS.js.map} +0 -0
- /package/dist/{chunk-BJFH6JI5.js.map → chunk-IZXYFWA4.js.map} +0 -0
- /package/dist/{chunk-MFROMEKA.js.map → chunk-J2BTILRR.js.map} +0 -0
- /package/dist/{chunk-NCYMNCJO.js.map → chunk-J2WY42FA.js.map} +0 -0
- /package/dist/{chunk-DGMR6JEJ.js.map → chunk-J4XSTXZP.js.map} +0 -0
- /package/dist/{chunk-ZTPXACWB.js.map → chunk-JKL5S7UQ.js.map} +0 -0
- /package/dist/{chunk-P77WNZDY.js.map → chunk-JMHEFZOB.js.map} +0 -0
- /package/dist/{chunk-IDANQPRH.js.map → chunk-JV3UI7BH.js.map} +0 -0
- /package/dist/{chunk-FVXBNBHO.js.map → chunk-K3D7IQQP.js.map} +0 -0
- /package/dist/{chunk-GKVJIDHF.js.map → chunk-KFNZZ2N6.js.map} +0 -0
- /package/dist/{chunk-I4QEJ62Y.js.map → chunk-KI46GKMD.js.map} +0 -0
- /package/dist/{chunk-SIRLACNZ.js.map → chunk-KO3OHHY2.js.map} +0 -0
- /package/dist/{chunk-NULUNM7H.js.map → chunk-KUE5BOQE.js.map} +0 -0
- /package/dist/{chunk-O3LKCBP5.js.map → chunk-LIJNVIT3.js.map} +0 -0
- /package/dist/{chunk-JWB44UGJ.js.map → chunk-LIJPDVYP.js.map} +0 -0
- /package/dist/{chunk-KYS77RPN.js.map → chunk-LPKJ77EK.js.map} +0 -0
- /package/dist/{chunk-RMFKVOM7.js.map → chunk-LQKVNREV.js.map} +0 -0
- /package/dist/{chunk-E7XERZWC.js.map → chunk-LTJFV2JI.js.map} +0 -0
- /package/dist/{chunk-INXGSG3J.js.map → chunk-LVDNY5RC.js.map} +0 -0
- /package/dist/{chunk-2INLDVK3.js.map → chunk-LVELUUK6.js.map} +0 -0
- /package/dist/{chunk-TAT5USZN.js.map → chunk-M3FDGRB4.js.map} +0 -0
- /package/dist/{chunk-5EWSRZ2Y.js.map → chunk-M3HGBO2Y.js.map} +0 -0
- /package/dist/{chunk-J3DY5HWQ.js.map → chunk-M5IQVMLR.js.map} +0 -0
- /package/dist/{chunk-53AGXXZM.js.map → chunk-MKDFYE2E.js.map} +0 -0
- /package/dist/{chunk-4SAWSRAA.js.map → chunk-MRECRNVU.js.map} +0 -0
- /package/dist/{chunk-2I7HDP53.js.map → chunk-MT2R57SF.js.map} +0 -0
- /package/dist/{chunk-Z7Y523PS.js.map → chunk-MV2CLIO6.js.map} +0 -0
- /package/dist/{chunk-JZ4NLCAP.js.map → chunk-MZY3VKKM.js.map} +0 -0
- /package/dist/{chunk-YENLNISG.js.map → chunk-N3FM4BNA.js.map} +0 -0
- /package/dist/{chunk-DZWARC4M.js.map → chunk-NFCS5WYC.js.map} +0 -0
- /package/dist/{chunk-I5QZJODL.js.map → chunk-NQ2CPQJF.js.map} +0 -0
- /package/dist/{chunk-CUIWCGMA.js.map → chunk-OCXEY7HE.js.map} +0 -0
- /package/dist/{chunk-VTTAJOQ7.js.map → chunk-OCXTTKVA.js.map} +0 -0
- /package/dist/{chunk-KRDR5RJD.js.map → chunk-OGU73VUN.js.map} +0 -0
- /package/dist/{chunk-YIRVLKAX.js.map → chunk-OI6VI6SU.js.map} +0 -0
- /package/dist/{chunk-BHNSJVBC.js.map → chunk-OJWDNNW3.js.map} +0 -0
- /package/dist/{chunk-X6KAJI3V.js.map → chunk-OK7BQMCI.js.map} +0 -0
- /package/dist/{chunk-I5B5L6Q4.js.map → chunk-OOOSGPJL.js.map} +0 -0
- /package/dist/{chunk-TUIN4MB7.js.map → chunk-ORV7EFSL.js.map} +0 -0
- /package/dist/{chunk-3IK6UYO6.js.map → chunk-OTW25A6I.js.map} +0 -0
- /package/dist/{chunk-NPGISCU6.js.map → chunk-OWET7EY2.js.map} +0 -0
- /package/dist/{chunk-CRAOSVHC.js.map → chunk-OXQ2SXVC.js.map} +0 -0
- /package/dist/{chunk-3ED2U6XE.js.map → chunk-OYCK4JRS.js.map} +0 -0
- /package/dist/{chunk-YQXTDZSU.js.map → chunk-OYOFPNLC.js.map} +0 -0
- /package/dist/{chunk-4NQHXYMW.js.map → chunk-PD7NWM7V.js.map} +0 -0
- /package/dist/{chunk-4YCA2Y73.js.map → chunk-PF2WU2IL.js.map} +0 -0
- /package/dist/{chunk-Z654FWNU.js.map → chunk-PLYVGZIN.js.map} +0 -0
- /package/dist/{chunk-MVW6HNPI.js.map → chunk-PRT4J2DL.js.map} +0 -0
- /package/dist/{chunk-OPWCMA4D.js.map → chunk-PUUEI4W3.js.map} +0 -0
- /package/dist/{chunk-RLBKLAEY.js.map → chunk-PVB4YVDP.js.map} +0 -0
- /package/dist/{chunk-NXCMHIKI.js.map → chunk-PWUSSSSL.js.map} +0 -0
- /package/dist/{chunk-MJUCFQMS.js.map → chunk-PYB4BFEC.js.map} +0 -0
- /package/dist/{chunk-2FSBSCZJ.js.map → chunk-PZKHST7A.js.map} +0 -0
- /package/dist/{chunk-QZAAUQRN.js.map → chunk-Q5EZNBPI.js.map} +0 -0
- /package/dist/{chunk-ZHDFQITM.js.map → chunk-Q5K2J5GG.js.map} +0 -0
- /package/dist/{chunk-OV6QJRT4.js.map → chunk-QRECBCJM.js.map} +0 -0
- /package/dist/{chunk-3GZA4BUW.js.map → chunk-QURYQFDN.js.map} +0 -0
- /package/dist/{chunk-VS7AHPCZ.js.map → chunk-R33SBMB7.js.map} +0 -0
- /package/dist/{chunk-KCBMFSMS.js.map → chunk-R4JA5JFI.js.map} +0 -0
- /package/dist/{chunk-HC4JFZVU.js.map → chunk-R5QAL43H.js.map} +0 -0
- /package/dist/{chunk-QPSGCC5D.js.map → chunk-RGR57NYY.js.map} +0 -0
- /package/dist/{chunk-XWFAMUZQ.js.map → chunk-RHXYO4H2.js.map} +0 -0
- /package/dist/{chunk-Y4BB2KS2.js.map → chunk-RISUROBM.js.map} +0 -0
- /package/dist/{chunk-U3DN4HEY.js.map → chunk-RMCLFSMX.js.map} +0 -0
- /package/dist/{chunk-YK7756IF.js.map → chunk-RTZANSSC.js.map} +0 -0
- /package/dist/{chunk-ZEG4VPBL.js.map → chunk-S27VZ5DO.js.map} +0 -0
- /package/dist/{chunk-54YW6SZZ.js.map → chunk-SBXSKRFA.js.map} +0 -0
- /package/dist/{chunk-HAX4LCR5.js.map → chunk-SFIXTOOJ.js.map} +0 -0
- /package/dist/{chunk-QIOQ2NPQ.js.map → chunk-SGH7I7OY.js.map} +0 -0
- /package/dist/{chunk-K2A5PXQ5.js.map → chunk-SJYTQLN3.js.map} +0 -0
- /package/dist/{chunk-2Z3NQNTM.js.map → chunk-SK5S2PCK.js.map} +0 -0
- /package/dist/{chunk-X3MWB2QU.js.map → chunk-SN2WENRP.js.map} +0 -0
- /package/dist/{chunk-OSY5K7L7.js.map → chunk-SP44O3OU.js.map} +0 -0
- /package/dist/{chunk-OZCBM3UC.js.map → chunk-SSR4ZX52.js.map} +0 -0
- /package/dist/{chunk-QCSJ4CWE.js.map → chunk-SXGJL7UT.js.map} +0 -0
- /package/dist/{chunk-NC55IFN3.js.map → chunk-T67LTMSW.js.map} +0 -0
- /package/dist/{chunk-AXHZYXUV.js.map → chunk-TDTD66BK.js.map} +0 -0
- /package/dist/{chunk-NGJJJPZZ.js.map → chunk-TK5FWVZR.js.map} +0 -0
- /package/dist/{chunk-2OP6WLGV.js.map → chunk-TNSJFZ6Q.js.map} +0 -0
- /package/dist/{chunk-O732GAFC.js.map → chunk-U4LTPFD2.js.map} +0 -0
- /package/dist/{chunk-4DVNUCRR.js.map → chunk-U5UGM5XD.js.map} +0 -0
- /package/dist/{chunk-UJK53QFL.js.map → chunk-UBRQ3PQD.js.map} +0 -0
- /package/dist/{chunk-SODC7T6L.js.map → chunk-UMX6DZME.js.map} +0 -0
- /package/dist/{chunk-YLS6QE5G.js.map → chunk-UO35OEOX.js.map} +0 -0
- /package/dist/{chunk-SHHJCL7X.js.map → chunk-UTRNLNCW.js.map} +0 -0
- /package/dist/{chunk-HEFPPMBQ.js.map → chunk-UU5FBVRX.js.map} +0 -0
- /package/dist/{chunk-GQXZPKK7.js.map → chunk-V6UOVHW3.js.map} +0 -0
- /package/dist/{chunk-GVN5SZLX.js.map → chunk-VATYK3JQ.js.map} +0 -0
- /package/dist/{chunk-7TIX2UAR.js.map → chunk-VCJQQYRE.js.map} +0 -0
- /package/dist/{chunk-6WD2INST.js.map → chunk-WDASYY4S.js.map} +0 -0
- /package/dist/{chunk-DXBYWSL5.js.map → chunk-WIFDNUKD.js.map} +0 -0
- /package/dist/{chunk-RT7CJMER.js.map → chunk-WIXHUBQN.js.map} +0 -0
- /package/dist/{chunk-57AZS3IE.js.map → chunk-WRMUXZ7C.js.map} +0 -0
- /package/dist/{chunk-2CLNIEK4.js.map → chunk-WTSQUCHB.js.map} +0 -0
- /package/dist/{chunk-OVKYVZMW.js.map → chunk-WXF2RTS4.js.map} +0 -0
- /package/dist/{chunk-MIHN76LX.js.map → chunk-WYGTAQMX.js.map} +0 -0
- /package/dist/{chunk-2RG7NIAS.js.map → chunk-X2QJXDE4.js.map} +0 -0
- /package/dist/{chunk-GAVYGBFI.js.map → chunk-XMBOLFFS.js.map} +0 -0
- /package/dist/{chunk-T7OXJZCX.js.map → chunk-XOIDUM2H.js.map} +0 -0
- /package/dist/{chunk-XHIQ5I6N.js.map → chunk-XVLEBB4Y.js.map} +0 -0
- /package/dist/{chunk-Q3DPEYX4.js.map → chunk-XZCCEKPW.js.map} +0 -0
- /package/dist/{chunk-T3OWFVMS.js.map → chunk-Y3XZEKDQ.js.map} +0 -0
- /package/dist/{chunk-KODELWYT.js.map → chunk-YJSCLGAW.js.map} +0 -0
- /package/dist/{chunk-ROKQU7WG.js.map → chunk-YMI27QPF.js.map} +0 -0
- /package/dist/{chunk-U7XM7CB4.js.map → chunk-YNTLWCF4.js.map} +0 -0
- /package/dist/{chunk-ZQCND77P.js.map → chunk-YRYF76OE.js.map} +0 -0
- /package/dist/{chunk-2BDT3UZQ.js.map → chunk-ZAX4XQLN.js.map} +0 -0
- /package/dist/{chunk-DXR5PDFP.js.map → chunk-ZBHGNE2J.js.map} +0 -0
- /package/dist/{chunk-I7ITSXSJ.js.map → chunk-ZR5EKJT6.js.map} +0 -0
- /package/dist/{chunk-IZXHMZQ6.js.map → chunk-ZW5YTIH3.js.map} +0 -0
- /package/dist/{embedded-new-voice-2G3VLPVQ.js.map → computer-viewer-5LKRCEVQ.js.map} +0 -0
- /package/dist/{embedded-voice-T5IWOWGD.js.map → embedded-new-voice-GHJRY3YL.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-SMC6J6QN.js.map → embedded-voice-ASQXBSTX.js.map} +0 -0
- /package/dist/{fleet-decision-row-WM64KXP3.js.map → fleet-decision-row-U7LDVBEM.js.map} +0 -0
- /package/dist/{latest-question-OX56OVQ5.js.map → latest-question-RNVF262Q.js.map} +0 -0
- /package/dist/{sandbox-files-ESDMOFSD.js.map → model-policy-picker-menu-E6XKMFTA.js.map} +0 -0
- /package/dist/{queue-surface-implementation-4KUZ4PJV.js.map → queue-surface-implementation-GUAIG6TK.js.map} +0 -0
- /package/dist/{recorder-host-WF2RRR56.js.map → recorder-host-2MYDJPQW.js.map} +0 -0
- /package/dist/{session-connect-cards-Q53KMMYY.js.map → sandbox-files-W5W2LW4K.js.map} +0 -0
- /package/dist/{session-realtime-CF3I35WJ.js.map → session-connect-cards-HPH7JOZP.js.map} +0 -0
- /package/dist/{timeline-annotation-markers-CJK4RYZ4.js.map → timeline-annotation-markers-FNILLWNU.js.map} +0 -0
- /package/dist/{timeline-annotation-selection-67GF5H26.js.map → timeline-annotation-selection-MBCIDO2Q.js.map} +0 -0
- /package/dist/{timeline-annotations-dialog-ONJPQDJQ.js.map → timeline-annotations-dialog-JPNKLOTE.js.map} +0 -0
|
@@ -6,8 +6,12 @@ import {
|
|
|
6
6
|
import type { Session, SessionEvent, SessionListResponse } from "@opengeni/sdk";
|
|
7
7
|
import { OpenGeniApiError } from "@opengeni/sdk/browser";
|
|
8
8
|
import {
|
|
9
|
+
ArchiveIcon,
|
|
9
10
|
ArrowLeftIcon,
|
|
11
|
+
CopyIcon,
|
|
12
|
+
CopyPlusIcon,
|
|
10
13
|
InfoIcon,
|
|
14
|
+
LinkIcon,
|
|
11
15
|
Maximize2Icon,
|
|
12
16
|
MoreHorizontalIcon,
|
|
13
17
|
PanelLeftCloseIcon,
|
|
@@ -16,6 +20,7 @@ import {
|
|
|
16
20
|
PanelRightCloseIcon,
|
|
17
21
|
PanelRightIcon,
|
|
18
22
|
PanelRightOpenIcon,
|
|
23
|
+
PinIcon,
|
|
19
24
|
PlusIcon,
|
|
20
25
|
} from "lucide-react";
|
|
21
26
|
import {
|
|
@@ -29,6 +34,7 @@ import {
|
|
|
29
34
|
useRef,
|
|
30
35
|
useState,
|
|
31
36
|
type CSSProperties,
|
|
37
|
+
type ReactNode,
|
|
32
38
|
type RefObject,
|
|
33
39
|
} from "react";
|
|
34
40
|
import { SiteView } from "../../artifacts";
|
|
@@ -40,12 +46,21 @@ import type {
|
|
|
40
46
|
NewConversationCreateOptions,
|
|
41
47
|
} from "../../hooks/use-new-conversation";
|
|
42
48
|
import { Button } from "../../ui/button";
|
|
49
|
+
import {
|
|
50
|
+
ContextMenu,
|
|
51
|
+
ContextMenuContent,
|
|
52
|
+
ContextMenuItem,
|
|
53
|
+
ContextMenuTrigger,
|
|
54
|
+
} from "../../ui/context-menu";
|
|
43
55
|
import {
|
|
44
56
|
DropdownMenu,
|
|
45
57
|
DropdownMenuContent,
|
|
46
58
|
DropdownMenuItem,
|
|
59
|
+
DropdownMenuSeparator,
|
|
47
60
|
DropdownMenuTrigger,
|
|
48
61
|
} from "../../ui/dropdown-menu";
|
|
62
|
+
import { useSiteActions } from "../components/artifacts/site-actions";
|
|
63
|
+
import { useSiteSidebarActions } from "../lib/site-sidebar-bridge";
|
|
49
64
|
import { ResizeHandle } from "../../ui/resize-handle";
|
|
50
65
|
import { Skeleton } from "../../ui/skeleton";
|
|
51
66
|
import { useAppContext, type SessionCreationHandoff } from "../app-context";
|
|
@@ -201,7 +216,9 @@ export function SiteViewRoute({
|
|
|
201
216
|
// the bar's row is hidden). The publish form, opened in front of the Site,
|
|
202
217
|
// names the bar once it has loaded; the Site's claim mounted first, so it
|
|
203
218
|
// yields while the form is open.
|
|
204
|
-
const titleInWindowBar = useWindowBarTitle(artifact?.title ?? null, publishing
|
|
219
|
+
const titleInWindowBar = useWindowBarTitle(artifact?.title ?? null, publishing, {
|
|
220
|
+
copyable: true,
|
|
221
|
+
});
|
|
205
222
|
// Full screen is the route's so opening the form can leave it first.
|
|
206
223
|
const [fullScreen, setFullScreen] = useState(false);
|
|
207
224
|
const openPublishing = useCallback(() => {
|
|
@@ -303,6 +320,18 @@ export function SiteViewRoute({
|
|
|
303
320
|
onSiteLocationChange={onSiteLocationChange}
|
|
304
321
|
toolbarStart={backControl}
|
|
305
322
|
showTitle={!titleInWindowBar || fullScreen}
|
|
323
|
+
renderTitle={
|
|
324
|
+
artifact
|
|
325
|
+
? (title) => (
|
|
326
|
+
<SiteTitleMenu
|
|
327
|
+
workspaceId={workspaceId}
|
|
328
|
+
origin={{ siteId, title: artifact.title }}
|
|
329
|
+
>
|
|
330
|
+
{title}
|
|
331
|
+
</SiteTitleMenu>
|
|
332
|
+
)
|
|
333
|
+
: undefined
|
|
334
|
+
}
|
|
306
335
|
// The one publication control. The Site view never says "Live":
|
|
307
336
|
// it stays current, and says so only while Updating or Reconnecting.
|
|
308
337
|
liveStatus={
|
|
@@ -317,6 +346,13 @@ export function SiteViewRoute({
|
|
|
317
346
|
item={{ kind: "site", id: siteId }}
|
|
318
347
|
className="size-8 rounded-md text-fg-muted hover:text-fg"
|
|
319
348
|
/>
|
|
349
|
+
{artifact ? (
|
|
350
|
+
<SiteActionsMenu
|
|
351
|
+
workspaceId={workspaceId}
|
|
352
|
+
origin={{ siteId, title: artifact.title }}
|
|
353
|
+
hasVersion={Boolean(artifact.currentVersion)}
|
|
354
|
+
/>
|
|
355
|
+
) : null}
|
|
320
356
|
</>
|
|
321
357
|
}
|
|
322
358
|
versionId={artifact ? (artifact.currentVersion?.id ?? null) : undefined}
|
|
@@ -368,6 +404,104 @@ export function SiteViewRoute({
|
|
|
368
404
|
);
|
|
369
405
|
}
|
|
370
406
|
|
|
407
|
+
/** Right-click the Site's title: copy it or the Site's address. */
|
|
408
|
+
function SiteTitleMenu({
|
|
409
|
+
workspaceId,
|
|
410
|
+
origin,
|
|
411
|
+
children,
|
|
412
|
+
}: {
|
|
413
|
+
workspaceId: string;
|
|
414
|
+
origin: { siteId: string; title: string };
|
|
415
|
+
children: ReactNode;
|
|
416
|
+
}) {
|
|
417
|
+
const site = useSiteActions(workspaceId, origin);
|
|
418
|
+
return (
|
|
419
|
+
<ContextMenu>
|
|
420
|
+
<ContextMenuTrigger asChild>{children}</ContextMenuTrigger>
|
|
421
|
+
<ContextMenuContent className="min-w-40" data-site-title-menu="">
|
|
422
|
+
<ContextMenuItem onSelect={site.copyTitle}>
|
|
423
|
+
<CopyIcon className="size-4" />
|
|
424
|
+
Copy title
|
|
425
|
+
</ContextMenuItem>
|
|
426
|
+
<ContextMenuItem onSelect={site.copyLink}>
|
|
427
|
+
<LinkIcon className="size-4" />
|
|
428
|
+
Copy link
|
|
429
|
+
</ContextMenuItem>
|
|
430
|
+
</ContextMenuContent>
|
|
431
|
+
</ContextMenu>
|
|
432
|
+
);
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
/**
|
|
436
|
+
* The Site's "…", as a chat's header has one: Copy title, the sidebar's Pin
|
|
437
|
+
* and Archive (while the sidebar lists Sites), Duplicate and Site details.
|
|
438
|
+
* Copy link and the published address keep their own controls beside it.
|
|
439
|
+
*/
|
|
440
|
+
function SiteActionsMenu({
|
|
441
|
+
workspaceId,
|
|
442
|
+
origin,
|
|
443
|
+
hasVersion,
|
|
444
|
+
}: {
|
|
445
|
+
workspaceId: string;
|
|
446
|
+
origin: { siteId: string; title: string };
|
|
447
|
+
hasVersion: boolean;
|
|
448
|
+
}) {
|
|
449
|
+
const site = useSiteActions(workspaceId, origin, { hasVersion });
|
|
450
|
+
const sidebar = useSiteSidebarActions(workspaceId, origin);
|
|
451
|
+
return (
|
|
452
|
+
<span data-site-actions-root="" className="contents">
|
|
453
|
+
<DropdownMenu>
|
|
454
|
+
<DropdownMenuTrigger asChild>
|
|
455
|
+
<Button
|
|
456
|
+
type="button"
|
|
457
|
+
variant="ghost"
|
|
458
|
+
size="icon-sm"
|
|
459
|
+
aria-label="More Site actions"
|
|
460
|
+
title="More"
|
|
461
|
+
data-site-actions-menu=""
|
|
462
|
+
className="size-8 rounded-md text-fg-muted hover:text-fg pointer-coarse:size-11"
|
|
463
|
+
>
|
|
464
|
+
<MoreHorizontalIcon aria-hidden="true" className="size-4" />
|
|
465
|
+
</Button>
|
|
466
|
+
</DropdownMenuTrigger>
|
|
467
|
+
<DropdownMenuContent align="end" className="w-52">
|
|
468
|
+
<DropdownMenuItem onSelect={site.copyTitle}>
|
|
469
|
+
<CopyIcon aria-hidden="true" />
|
|
470
|
+
Copy title
|
|
471
|
+
</DropdownMenuItem>
|
|
472
|
+
{sidebar ? (
|
|
473
|
+
<DropdownMenuItem onSelect={sidebar.togglePin}>
|
|
474
|
+
<PinIcon aria-hidden="true" className={sidebar.pinned ? "fill-current" : undefined} />
|
|
475
|
+
{sidebar.pinned ? "Unpin" : "Pin"}
|
|
476
|
+
</DropdownMenuItem>
|
|
477
|
+
) : null}
|
|
478
|
+
{site.duplicate ? (
|
|
479
|
+
<DropdownMenuItem disabled={site.duplicate.busy} onSelect={site.duplicate.run}>
|
|
480
|
+
<CopyPlusIcon aria-hidden="true" />
|
|
481
|
+
{site.duplicate.busy ? "Duplicating…" : "Duplicate"}
|
|
482
|
+
</DropdownMenuItem>
|
|
483
|
+
) : null}
|
|
484
|
+
<DropdownMenuItem asChild>
|
|
485
|
+
<Link {...site.details}>
|
|
486
|
+
<InfoIcon aria-hidden="true" />
|
|
487
|
+
Site details
|
|
488
|
+
</Link>
|
|
489
|
+
</DropdownMenuItem>
|
|
490
|
+
{sidebar ? (
|
|
491
|
+
<>
|
|
492
|
+
<DropdownMenuSeparator />
|
|
493
|
+
<DropdownMenuItem onSelect={sidebar.archive}>
|
|
494
|
+
<ArchiveIcon aria-hidden="true" />
|
|
495
|
+
Archive
|
|
496
|
+
</DropdownMenuItem>
|
|
497
|
+
</>
|
|
498
|
+
) : null}
|
|
499
|
+
</DropdownMenuContent>
|
|
500
|
+
</DropdownMenu>
|
|
501
|
+
</span>
|
|
502
|
+
);
|
|
503
|
+
}
|
|
504
|
+
|
|
371
505
|
const PAGE_SIZE = 30;
|
|
372
506
|
|
|
373
507
|
/**
|
|
@@ -842,19 +976,6 @@ function SiteChatPanel({
|
|
|
842
976
|
</Link>
|
|
843
977
|
</DropdownMenuItem>
|
|
844
978
|
) : null}
|
|
845
|
-
<DropdownMenuItem asChild>
|
|
846
|
-
<Link
|
|
847
|
-
to="/workspaces/$workspaceId/artifacts/$artifactId"
|
|
848
|
-
params={{ workspaceId, artifactId: siteId }}
|
|
849
|
-
// Its details are by tab; without one the address opens
|
|
850
|
-
// the Site view again. Settings shows Versions to people
|
|
851
|
-
// who can't manage it.
|
|
852
|
-
search={{ tab: "settings" }}
|
|
853
|
-
>
|
|
854
|
-
<InfoIcon aria-hidden="true" />
|
|
855
|
-
Site details
|
|
856
|
-
</Link>
|
|
857
|
-
</DropdownMenuItem>
|
|
858
979
|
{/* Beside the Site only on wide screens; narrower ones stack the chat below. */}
|
|
859
980
|
<DropdownMenuItem
|
|
860
981
|
className="max-lg:hidden"
|
|
@@ -71,6 +71,17 @@ export type ApprovalSurfaceProps = {
|
|
|
71
71
|
};
|
|
72
72
|
export type ApprovalField = { key: string; label: string; value: string };
|
|
73
73
|
|
|
74
|
+
/** Backoff for re-reading a waiting review that offered no decision. */
|
|
75
|
+
const UNDECIDABLE_RETRY_DELAYS_MS = [1_000, 2_000, 4_000, 8_000, 8_000];
|
|
76
|
+
|
|
77
|
+
function reviewUndecidable(review: ToolActionReview | undefined): review is ToolActionReview {
|
|
78
|
+
return (
|
|
79
|
+
review?.status === "pending" &&
|
|
80
|
+
!review.availableActions.includes("approve") &&
|
|
81
|
+
!review.availableActions.includes("reject")
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
74
85
|
/** Hosts provide decisions; this surface never mutates the approved payload. */
|
|
75
86
|
export function ApprovalSurface({
|
|
76
87
|
approvals,
|
|
@@ -107,7 +118,11 @@ export function ApprovalSurface({
|
|
|
107
118
|
if (pending && !approvals.some((approval) => approval.id === pending.id)) {
|
|
108
119
|
pendingRef.current = null;
|
|
109
120
|
setPending(null);
|
|
110
|
-
|
|
121
|
+
// Hand focus to the next card without moving the view: a reader at the
|
|
122
|
+
// bottom already sees it, and one who scrolled up keeps their place.
|
|
123
|
+
requestAnimationFrame(() =>
|
|
124
|
+
surface.current?.querySelector<HTMLElement>("h3")?.focus({ preventScroll: true }),
|
|
125
|
+
);
|
|
111
126
|
}
|
|
112
127
|
}, [approvals, pending]);
|
|
113
128
|
if (!approvals.length) return null;
|
|
@@ -265,12 +280,26 @@ function ApprovalRequest({
|
|
|
265
280
|
legacy?: boolean;
|
|
266
281
|
denied?: boolean;
|
|
267
282
|
} | null>(null);
|
|
268
|
-
// Hide stale facts during render, before passive effect cleanup can run.
|
|
269
|
-
|
|
283
|
+
// Hide stale facts during render, before passive effect cleanup can run. A
|
|
284
|
+
// re-read of the same undecided action (same facts, same loader) keeps its
|
|
285
|
+
// notice up meanwhile.
|
|
286
|
+
const current =
|
|
287
|
+
result?.request === request ||
|
|
288
|
+
(result !== null &&
|
|
289
|
+
result.request.loadReview === request.loadReview &&
|
|
290
|
+
reviewUndecidable(result.review) &&
|
|
291
|
+
dequal(result.request.approval, request.approval))
|
|
292
|
+
? result
|
|
293
|
+
: null;
|
|
270
294
|
const loaded = current?.review;
|
|
271
295
|
const failed = current?.failed;
|
|
272
296
|
const legacy = current?.legacy;
|
|
273
297
|
const denied = current?.denied;
|
|
298
|
+
// Still waiting, yet the saved review offers no decision: it was read while
|
|
299
|
+
// the chat was between states. Never a silent footer: say so, offer a retry,
|
|
300
|
+
// and re-read it on its own a few times.
|
|
301
|
+
const undecidable = reviewUndecidable(loaded);
|
|
302
|
+
const undecidableRetries = useRef(0);
|
|
274
303
|
const [detailPath, setDetailPath] = useState<string | null>(null);
|
|
275
304
|
useEffect(() => {
|
|
276
305
|
let active = true;
|
|
@@ -302,6 +331,22 @@ function ApprovalRequest({
|
|
|
302
331
|
active = false;
|
|
303
332
|
};
|
|
304
333
|
}, [request]);
|
|
334
|
+
// Each automatic re-read waits from when the previous read answered.
|
|
335
|
+
const readSettled = result?.request === request;
|
|
336
|
+
useEffect(() => {
|
|
337
|
+
if (
|
|
338
|
+
!undecidable ||
|
|
339
|
+
!readSettled ||
|
|
340
|
+
undecidableRetries.current >= UNDECIDABLE_RETRY_DELAYS_MS.length
|
|
341
|
+
)
|
|
342
|
+
return;
|
|
343
|
+
const delay = UNDECIDABLE_RETRY_DELAYS_MS[undecidableRetries.current]!;
|
|
344
|
+
const timer = setTimeout(() => {
|
|
345
|
+
undecidableRetries.current += 1;
|
|
346
|
+
setRetry((value) => value + 1);
|
|
347
|
+
}, delay);
|
|
348
|
+
return () => clearTimeout(timer);
|
|
349
|
+
}, [undecidable, readSettled, request]);
|
|
305
350
|
const stableApproval = request.approval;
|
|
306
351
|
const { formatToolName, approve: approveLabel } = messages;
|
|
307
352
|
const toolName = approvalToolName(stableApproval);
|
|
@@ -382,6 +427,36 @@ function ApprovalRequest({
|
|
|
382
427
|
</p>
|
|
383
428
|
</ToolReviewFrame>
|
|
384
429
|
);
|
|
430
|
+
if (undecidable)
|
|
431
|
+
return (
|
|
432
|
+
<div data-approval-id={approval.id} data-review-origin="pending">
|
|
433
|
+
{custom}
|
|
434
|
+
<ToolReviewFrame
|
|
435
|
+
tone="waiting"
|
|
436
|
+
icon={<ShieldCheckIcon className="size-4" aria-hidden="true" />}
|
|
437
|
+
eyebrow={messages.title}
|
|
438
|
+
title={loaded.title}
|
|
439
|
+
subtitle={loaded.accountLabel}
|
|
440
|
+
data-og-tool-review=""
|
|
441
|
+
data-og-tool-review-undecidable=""
|
|
442
|
+
>
|
|
443
|
+
<p className="m-0 text-og-sm text-og-fg">
|
|
444
|
+
<span role="status">{t("approvalSurface.thisActionCanTBeDecided")}</span>{" "}
|
|
445
|
+
<button
|
|
446
|
+
type="button"
|
|
447
|
+
className="min-h-8 font-medium underline underline-offset-4 [@media(pointer:coarse)]:min-h-11 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent/40"
|
|
448
|
+
onClick={() => {
|
|
449
|
+
// Asking again starts a fresh round of automatic re-reads.
|
|
450
|
+
undecidableRetries.current = 0;
|
|
451
|
+
setRetry((value) => value + 1);
|
|
452
|
+
}}
|
|
453
|
+
>
|
|
454
|
+
{t("approvalSurface.tryAgain")}
|
|
455
|
+
</button>
|
|
456
|
+
</p>
|
|
457
|
+
</ToolReviewFrame>
|
|
458
|
+
</div>
|
|
459
|
+
);
|
|
385
460
|
if (!loaded && stableApproval.arguments === undefined)
|
|
386
461
|
return (
|
|
387
462
|
<div data-approval-id={approval.id} data-review-origin="pending">
|
|
@@ -6,7 +6,14 @@ import {
|
|
|
6
6
|
RefreshCwIcon,
|
|
7
7
|
SparklesIcon,
|
|
8
8
|
} from "lucide-react";
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
useCallback,
|
|
11
|
+
useLayoutEffect,
|
|
12
|
+
useRef,
|
|
13
|
+
useState,
|
|
14
|
+
type ReactElement,
|
|
15
|
+
type ReactNode,
|
|
16
|
+
} from "react";
|
|
10
17
|
import type { SiteViewer } from "@opengeni/sdk";
|
|
11
18
|
|
|
12
19
|
import { cn } from "../../lib/cn";
|
|
@@ -45,6 +52,11 @@ export type ArtifactSandboxProps = {
|
|
|
45
52
|
title: string;
|
|
46
53
|
/** Hide the visible title/icon while retaining the accessible iframe title. */
|
|
47
54
|
showTitle?: boolean | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Wraps the visible title, so a host can attach its own menu to it (the
|
|
57
|
+
* Site view's Copy title). Returns the title itself when absent.
|
|
58
|
+
*/
|
|
59
|
+
renderTitle?: ((title: ReactElement) => ReactNode) | undefined;
|
|
48
60
|
showLiveStatus?: boolean | undefined;
|
|
49
61
|
/**
|
|
50
62
|
* Replaces the "Live" indicator, for example with the host's link to the
|
|
@@ -200,7 +212,20 @@ export function ArtifactSandbox(props: ArtifactSandboxProps) {
|
|
|
200
212
|
<Globe2Icon className="size-3.5" />
|
|
201
213
|
</span>
|
|
202
214
|
) : null}
|
|
203
|
-
{props.showTitle
|
|
215
|
+
{props.showTitle === false ? null : props.renderTitle ? (
|
|
216
|
+
// Its menu opens in front of full screen, as the controls' do; its
|
|
217
|
+
// words leave a full-screen toolbar's drag region so they can be
|
|
218
|
+
// right-clicked.
|
|
219
|
+
<PortalContainerProvider
|
|
220
|
+
container={focused && frameElement ? frameElement : inheritedPortal}
|
|
221
|
+
>
|
|
222
|
+
{props.renderTitle(
|
|
223
|
+
<span className="truncate text-xs font-semibold text-fg [-webkit-app-region:no-drag] [app-region:no-drag]">
|
|
224
|
+
{props.title}
|
|
225
|
+
</span>,
|
|
226
|
+
)}
|
|
227
|
+
</PortalContainerProvider>
|
|
228
|
+
) : (
|
|
204
229
|
<span className="truncate text-xs font-semibold text-fg">{props.title}</span>
|
|
205
230
|
)}
|
|
206
231
|
{props.headerControls ? (
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
useCallback,
|
|
3
|
+
useEffect,
|
|
4
|
+
useMemo,
|
|
5
|
+
useRef,
|
|
6
|
+
useState,
|
|
7
|
+
type ReactElement,
|
|
8
|
+
type ReactNode,
|
|
9
|
+
} from "react";
|
|
2
10
|
import type { SiteViewer } from "@opengeni/sdk";
|
|
3
11
|
|
|
4
12
|
import { loadSiteSnapshot } from "../../sites-ui";
|
|
@@ -36,6 +44,8 @@ export type SiteViewProps = {
|
|
|
36
44
|
archivedMessage?: string | undefined;
|
|
37
45
|
/** Show the Site title in the frame bar; hide it under a host header that already does. */
|
|
38
46
|
showTitle?: boolean | undefined;
|
|
47
|
+
/** Wraps the visible title (a host's menu on it); see ArtifactSandbox. */
|
|
48
|
+
renderTitle?: ((title: ReactElement) => ReactNode) | undefined;
|
|
39
49
|
/** Loading copy; defaults to "Loading Site…". */
|
|
40
50
|
loadingLabel?: string | undefined;
|
|
41
51
|
/** Called with the loaded title, for a host header. */
|
|
@@ -91,6 +101,7 @@ export function SiteView({
|
|
|
91
101
|
theme,
|
|
92
102
|
archivedMessage,
|
|
93
103
|
showTitle = true,
|
|
104
|
+
renderTitle,
|
|
94
105
|
loadingLabel,
|
|
95
106
|
onTitle,
|
|
96
107
|
showToolbar,
|
|
@@ -231,6 +242,7 @@ export function SiteView({
|
|
|
231
242
|
html={content.html}
|
|
232
243
|
title={snapshot.detail.artifact.title}
|
|
233
244
|
showTitle={showTitle}
|
|
245
|
+
{...(renderTitle ? { renderTitle } : {})}
|
|
234
246
|
versionLabel={
|
|
235
247
|
!versionControl && snapshot.detail.artifact.currentVersion
|
|
236
248
|
? t("artifacts.siteView.vRevision", {
|
|
@@ -99,11 +99,10 @@ import {
|
|
|
99
99
|
TimelineBeforeLayout,
|
|
100
100
|
captureTimelineAnchor,
|
|
101
101
|
timelineAnchorCorrection,
|
|
102
|
-
|
|
102
|
+
timelineHasSelection,
|
|
103
103
|
type TimelineAnchor,
|
|
104
104
|
} from "./timeline-anchor";
|
|
105
105
|
import { useReadingProgress } from "./timeline-reading-progress";
|
|
106
|
-
import { TimelineAnswerFollowContext } from "./timeline-answer-follow";
|
|
107
106
|
import {
|
|
108
107
|
animateTimelineSettlement,
|
|
109
108
|
captureTimelineSettlement,
|
|
@@ -402,6 +401,11 @@ export type MessageTimelineProps = {
|
|
|
402
401
|
* - While pinned, tip-debt from growth/collapse must NEVER unpin — only
|
|
403
402
|
* wheel/keys/pointer-armed scroll-up, or a settled scrollend away from the
|
|
404
403
|
* tip while the tip-follow camera is idle (Vimium / unfocused PageUp).
|
|
404
|
+
* Moving the view is the only reader signal for follow: focus and clicks
|
|
405
|
+
* inside the conversation (a card's buttons, Copy, a menu) never unpin, so
|
|
406
|
+
* answering one approval after another keeps the newest card in view. A
|
|
407
|
+
* text selection (content must not move under it) and an in-place
|
|
408
|
+
* disclosure toggle (it keeps its place) are the two non-scroll exceptions.
|
|
405
409
|
* Height shrink compensates scrollTop by Δh (collapse owns motion); tip-ease
|
|
406
410
|
* pauses briefly so the two don't fight. Programmatic camera writes are
|
|
407
411
|
* tagged so their scroll echoes never count as leave.
|
|
@@ -838,8 +842,6 @@ export function MessageTimeline({
|
|
|
838
842
|
return sources;
|
|
839
843
|
}, [resolvedItems]);
|
|
840
844
|
const scrollRef = useRef<HTMLDivElement | null>(null);
|
|
841
|
-
/** The card whose answer handed the view back to the tip (see followAfterAnswer). */
|
|
842
|
-
const answeredCardRef = useRef<HTMLElement | null>(null);
|
|
843
845
|
const topSentinelRef = useRef<HTMLDivElement | null>(null);
|
|
844
846
|
const bottomSentinelRef = useRef<HTMLDivElement | null>(null);
|
|
845
847
|
const previousBulkFirstKeyRef = useRef<string | null | undefined>(undefined);
|
|
@@ -848,7 +850,6 @@ export function MessageTimeline({
|
|
|
848
850
|
projectedGroups,
|
|
849
851
|
autoFollow && pinned && !hasNewer,
|
|
850
852
|
scrollRef.current,
|
|
851
|
-
answeredCardRef.current,
|
|
852
853
|
);
|
|
853
854
|
const [canSkipTipCatchup, setCanSkipTipCatchup] = useState(false);
|
|
854
855
|
const canSkipTipCatchupRef = useRef(false);
|
|
@@ -876,10 +877,10 @@ export function MessageTimeline({
|
|
|
876
877
|
const questionNavMinViewportRef = useRef(questionNavMinViewportHeight);
|
|
877
878
|
questionNavMinViewportRef.current = questionNavMinViewportHeight;
|
|
878
879
|
const scheduleQuestionNavRef = useRef<() => void>(() => {});
|
|
879
|
-
// Unpinned is not the same as away from the tip:
|
|
880
|
-
//
|
|
881
|
-
//
|
|
882
|
-
//
|
|
880
|
+
// Unpinned is not the same as away from the tip: selecting text or opening a
|
|
881
|
+
// disclosure hands the view to the reader while they are still at the
|
|
882
|
+
// bottom. Offer the jump only once there is something below them, or a newer
|
|
883
|
+
// window / catch-up to skip.
|
|
883
884
|
const [awayFromTip, setAwayFromTip] = useState(false);
|
|
884
885
|
const jumpPillShown = autoFollow && ((!pinned && awayFromTip) || hasNewer || canSkipTipCatchup);
|
|
885
886
|
const firstGroupKey = allGroups[0] ? timelineGroupKey(allGroups[0]) : null;
|
|
@@ -1274,8 +1275,6 @@ export function MessageTimeline({
|
|
|
1274
1275
|
|
|
1275
1276
|
/** Reader left the tip — wheel, keyboard, pointer-armed scroll-up, or scrollend. */
|
|
1276
1277
|
const releasePinFromReader = useCallback(() => {
|
|
1277
|
-
// The reader took over again: focus on the answered card counts once more.
|
|
1278
|
-
answeredCardRef.current = null;
|
|
1279
1278
|
if (!autoFollow || !pinnedRef.current || hasNewerRef.current) {
|
|
1280
1279
|
return;
|
|
1281
1280
|
}
|
|
@@ -1488,28 +1487,6 @@ export function MessageTimeline({
|
|
|
1488
1487
|
],
|
|
1489
1488
|
);
|
|
1490
1489
|
|
|
1491
|
-
/**
|
|
1492
|
-
* The person answered a card (finished a connection, say) and the agent
|
|
1493
|
-
* continues from that answer: follow the tip as Jump to latest does, while
|
|
1494
|
-
* focus stays on the card for keyboard and screen reader users. Wheel, keys,
|
|
1495
|
-
* a drag or focus elsewhere hand the view back to the reader as usual.
|
|
1496
|
-
*/
|
|
1497
|
-
const followAfterAnswer = useCallback(
|
|
1498
|
-
(card: HTMLElement) => {
|
|
1499
|
-
const node = scrollRef.current;
|
|
1500
|
-
if (!autoFollow || !node || !node.contains(card) || hasNewerRef.current) {
|
|
1501
|
-
return;
|
|
1502
|
-
}
|
|
1503
|
-
answeredCardRef.current = card;
|
|
1504
|
-
disclosureKeepsUnpinnedRef.current = false;
|
|
1505
|
-
wantPinRef.current = false;
|
|
1506
|
-
clearPendingReaderLeave();
|
|
1507
|
-
applyPinned(true);
|
|
1508
|
-
snapToBottom(node);
|
|
1509
|
-
},
|
|
1510
|
-
[applyPinned, autoFollow, clearPendingReaderLeave, snapToBottom],
|
|
1511
|
-
);
|
|
1512
|
-
|
|
1513
1490
|
const beginUserMessageDisclosureChange = useCallback(
|
|
1514
1491
|
(messageBody: HTMLElement, disclosureControl: HTMLElement) => {
|
|
1515
1492
|
const node = scrollRef.current;
|
|
@@ -2723,7 +2700,10 @@ export function MessageTimeline({
|
|
|
2723
2700
|
event.target instanceof Element
|
|
2724
2701
|
? event.target.closest("button[aria-expanded]")
|
|
2725
2702
|
: null;
|
|
2726
|
-
|
|
2703
|
+
// An in-place disclosure keeps its toggle where the reader
|
|
2704
|
+
// left it. A menu or dialog opener changes nothing here.
|
|
2705
|
+
const popup = target?.getAttribute("aria-haspopup");
|
|
2706
|
+
if (target && (popup === null || popup === "false")) {
|
|
2727
2707
|
if (target.hasAttribute("data-og-work-header")) {
|
|
2728
2708
|
releaseProgress(
|
|
2729
2709
|
target
|
|
@@ -2736,15 +2716,17 @@ export function MessageTimeline({
|
|
|
2736
2716
|
}
|
|
2737
2717
|
}}
|
|
2738
2718
|
onFocusCapture={(event) => {
|
|
2719
|
+
// Focus is not reading position: pressing a card's button
|
|
2720
|
+
// (Chromium focuses it) or a card handing focus to the next
|
|
2721
|
+
// one leaves follow alone. Focus that scrolls the view away
|
|
2722
|
+
// from the tip unpins through the scroll path like any
|
|
2723
|
+
// other navigation. Only a settle ease yields to it.
|
|
2739
2724
|
if (
|
|
2740
2725
|
readableTurns &&
|
|
2741
2726
|
event.target !== event.currentTarget &&
|
|
2742
|
-
eventFromScrollerDom(event)
|
|
2743
|
-
!answeredCardRef.current?.contains(event.target)
|
|
2727
|
+
eventFromScrollerDom(event)
|
|
2744
2728
|
) {
|
|
2745
2729
|
stopSettlement();
|
|
2746
|
-
releasePinFromReader();
|
|
2747
|
-
disclosureKeepsUnpinnedRef.current = true;
|
|
2748
2730
|
}
|
|
2749
2731
|
}}
|
|
2750
2732
|
onPointerDown={onPointerDown}
|
|
@@ -2763,10 +2745,9 @@ export function MessageTimeline({
|
|
|
2763
2745
|
>
|
|
2764
2746
|
<TimelineBeforeLayout
|
|
2765
2747
|
capture={() => {
|
|
2766
|
-
|
|
2767
|
-
|
|
2768
|
-
|
|
2769
|
-
) {
|
|
2748
|
+
// Selectionchange can arrive after this commit: a fresh
|
|
2749
|
+
// selection still owns the view before React moves it.
|
|
2750
|
+
if (readableTurns && timelineHasSelection(scrollRef.current)) {
|
|
2770
2751
|
releasePinFromReader();
|
|
2771
2752
|
}
|
|
2772
2753
|
readingAnchorRef.current =
|
|
@@ -2783,11 +2764,7 @@ export function MessageTimeline({
|
|
|
2783
2764
|
!disclosureKeepsUnpinnedRef.current &&
|
|
2784
2765
|
!prefersReducedMotion() &&
|
|
2785
2766
|
scrollRef.current
|
|
2786
|
-
? captureTimelineSettlement(
|
|
2787
|
-
scrollRef.current,
|
|
2788
|
-
groups,
|
|
2789
|
-
answeredCardRef.current,
|
|
2790
|
-
)
|
|
2767
|
+
? captureTimelineSettlement(scrollRef.current, groups)
|
|
2791
2768
|
: null;
|
|
2792
2769
|
}}
|
|
2793
2770
|
>
|
|
@@ -3128,11 +3105,7 @@ export function MessageTimeline({
|
|
|
3128
3105
|
resolveSessionTitle={resolveSessionTitle}
|
|
3129
3106
|
onOpenSession={onOpenSession}
|
|
3130
3107
|
>
|
|
3131
|
-
<ProviderLogoProvider value={resolveProviderLogo}>
|
|
3132
|
-
<TimelineAnswerFollowContext.Provider value={followAfterAnswer}>
|
|
3133
|
-
{timeline}
|
|
3134
|
-
</TimelineAnswerFollowContext.Provider>
|
|
3135
|
-
</ProviderLogoProvider>
|
|
3108
|
+
<ProviderLogoProvider value={resolveProviderLogo}>{timeline}</ProviderLogoProvider>
|
|
3136
3109
|
</AgentIdentityProvider>
|
|
3137
3110
|
</MessageSenderContext.Provider>
|
|
3138
3111
|
</OpenGeniLinkProvider>
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { CheckIcon, InfoIcon, ShieldCheckIcon, XIcon } from "lucide-react";
|
|
2
2
|
import { Dialog } from "radix-ui";
|
|
3
3
|
import { containedPortal } from "../ui/portal-container";
|
|
4
|
-
import {
|
|
4
|
+
import { useRef, useState, type ReactNode, type RefObject } from "react";
|
|
5
5
|
import { usePortalTokenStyle } from "../lib/use-portal-token-style";
|
|
6
6
|
import { useOpenGeniText } from "../messages/runtime";
|
|
7
|
-
import { useTimelineAnswerFollow } from "./timeline-answer-follow";
|
|
8
7
|
|
|
9
8
|
const DialogContainedPortal = containedPortal(Dialog.Portal);
|
|
10
9
|
|
|
@@ -100,27 +99,7 @@ export function SessionCapabilityFrame({
|
|
|
100
99
|
const localCard = useRef<HTMLElement>(null);
|
|
101
100
|
const buttonRef = opener ?? localOpener;
|
|
102
101
|
const sectionRef = cardRef ?? localCard;
|
|
103
|
-
const rootRef = useRef<HTMLDivElement>(null);
|
|
104
102
|
const portalStyle = usePortalTokenStyle(sectionRef.current);
|
|
105
|
-
// Finishing the card here is the person's answer and the agent continues
|
|
106
|
-
// from it: let the conversation follow that answer. Only a completion the
|
|
107
|
-
// person brought about in this card counts. A card that was already complete
|
|
108
|
-
// when it appeared, or whose saved completion loads after it appears while
|
|
109
|
-
// the person reads elsewhere, asks nothing.
|
|
110
|
-
const followAnswer = useTimelineAnswerFollow();
|
|
111
|
-
const wasComplete = useRef(complete);
|
|
112
|
-
const engaged = useRef(false);
|
|
113
|
-
useLayoutEffect(() => {
|
|
114
|
-
if (expanded || busy) engaged.current = true;
|
|
115
|
-
}, [expanded, busy]);
|
|
116
|
-
const engage = () => {
|
|
117
|
-
engaged.current = true;
|
|
118
|
-
};
|
|
119
|
-
useLayoutEffect(() => {
|
|
120
|
-
if (complete && !wasComplete.current && engaged.current && rootRef.current)
|
|
121
|
-
followAnswer?.(rootRef.current);
|
|
122
|
-
wasComplete.current = complete;
|
|
123
|
-
}, [complete, followAnswer]);
|
|
124
103
|
// A row without a better name is titled by its domain; never say it twice.
|
|
125
104
|
const shownSubtitle = subtitle.trim().toLowerCase() === name.trim().toLowerCase() ? "" : subtitle;
|
|
126
105
|
const identity = (
|
|
@@ -134,14 +113,7 @@ export function SessionCapabilityFrame({
|
|
|
134
113
|
</>
|
|
135
114
|
);
|
|
136
115
|
return (
|
|
137
|
-
|
|
138
|
-
<div
|
|
139
|
-
ref={rootRef}
|
|
140
|
-
className="og-session-capability"
|
|
141
|
-
onPointerDownCapture={engage}
|
|
142
|
-
onClickCapture={engage}
|
|
143
|
-
onKeyDownCapture={engage}
|
|
144
|
-
>
|
|
116
|
+
<div className="og-session-capability">
|
|
145
117
|
<section
|
|
146
118
|
hidden={dialogOnly}
|
|
147
119
|
style={dialogOnly ? { display: "none" } : undefined}
|