@opengeni/react 4.3.3-canary.39786771332001 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/app-state.js +29 -29
- package/dist/app/components/Composer.js +27 -27
- package/dist/app/components/agent/agent-capability-picker.js +4 -4
- package/dist/app/components/artifacts/artifact-browse-controls.js +2 -2
- package/dist/app/components/artifacts/artifact-library.js +19 -19
- package/dist/app/components/artifacts/artifact-page-chrome.js +2 -2
- package/dist/app/components/artifacts/chat-interactive-block.js +16 -16
- package/dist/app/components/artifacts/inline-chat-image.js +31 -30
- package/dist/app/components/artifacts/retained-file-preview.js +35 -34
- package/dist/app/components/artifacts/retained-text-preview.js +5 -5
- package/dist/app/components/artifacts/site-audience.js +4 -4
- package/dist/app/components/artifacts/site-conversations.js +22 -21
- package/dist/app/components/artifacts/site-data.js +19 -19
- package/dist/app/components/artifacts/site-publishing.js +41 -41
- package/dist/app/components/artifacts/site-settings.js +50 -50
- package/dist/app/components/billing-class-mark.js +5 -5
- package/dist/app/components/capabilities/capability-detail-sheet.js +9 -9
- package/dist/app/components/capabilities/capability-logo-source.js +12 -12
- package/dist/app/components/capabilities/connector-tool-permissions.js +3 -3
- package/dist/app/components/capabilities/native-connect-setup.js +14 -14
- package/dist/app/components/capabilities/perform-capability-action.js +1 -1
- package/dist/app/components/capabilities/prepared-mcp-setup-card.js +16 -16
- package/dist/app/components/capabilities/session-capability-card.js +94 -76
- package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
- package/dist/app/components/capabilities/session-chrome-card.css +1023 -0
- package/dist/app/components/capabilities/session-chrome-card.css.map +1 -0
- package/dist/app/components/capabilities/session-chrome-card.d.ts +18 -0
- package/dist/app/components/capabilities/session-chrome-card.js +72 -0
- package/dist/app/components/capabilities/session-custom-mcp-card.js +20 -20
- package/dist/app/components/capabilities/session-github-card.js +24 -24
- package/dist/app/components/capabilities/session-machine-card.d.ts +27 -1
- package/dist/app/components/capabilities/session-machine-card.js +40 -36
- package/dist/app/components/capabilities/use-capabilities-catalog.js +3 -3
- package/dist/app/components/capabilities/use-connection-accounts.js +1 -1
- package/dist/app/components/command-menu/chat-status.js +18 -17
- package/dist/app/components/command-menu/chat-switcher.js +19 -18
- package/dist/app/components/command-menu/chat-switcher.js.map +1 -1
- package/dist/app/components/command-menu/command-menu.js +36 -114
- package/dist/app/components/command-menu/command-menu.js.map +1 -1
- package/dist/app/components/command-menu/shortcut-sheet.js +17 -17
- package/dist/app/components/composer-capabilities-menu-body.js +3 -3
- package/dist/app/components/composer-mobile-plus-panel.js +20 -20
- package/dist/app/components/composer-mobile-plus.js +1 -1
- package/dist/app/components/credit-required-gate.js +1 -1
- package/dist/app/components/credit-required-prompt.js +12 -12
- package/dist/app/components/credits/coupon-redeem.js +2 -2
- package/dist/app/components/credits/credit-refusal-notice.js +2 -2
- package/dist/app/components/desktop/app-shots.js +7 -7
- package/dist/app/components/desktop/this-computer.js +4 -4
- package/dist/app/components/feedback.js +4 -4
- package/dist/app/components/follow-up-repository-menu-body.js +5 -5
- package/dist/app/components/follow-up-repository-picker.js +1 -1
- package/dist/app/components/github-app-connect-launcher.js +2 -2
- package/dist/app/components/in-app-help-link.js +2 -2
- package/dist/app/components/knowledge/agent-learning-settings.js +3 -3
- package/dist/app/components/machines/connect-machine-dialog.js +18 -18
- package/dist/app/components/markdown.js +9 -9
- package/dist/app/components/message-context-pills.js +2 -2
- package/dist/app/components/models/models-ui.js +8 -8
- package/dist/app/components/new-session-starters.js +2 -2
- package/dist/app/components/pickers.js +9 -9
- package/dist/app/components/rail/rail-context.js +2 -2
- package/dist/app/components/rail/rail-sections.js +69 -66
- package/dist/app/components/rail/session-header.js +49 -48
- package/dist/app/components/rail/session-list.js +68 -65
- package/dist/app/components/rail/session-row-content.d.ts +6 -2
- package/dist/app/components/rail/session-row-content.js +1 -1
- package/dist/app/components/rail/session-row-hover-details.js +24 -23
- package/dist/app/components/rail/session-shell.js +107 -104
- package/dist/app/components/rail/site-session-group-heading.d.ts +7 -1
- package/dist/app/components/rail/site-session-group-heading.js +20 -3
- package/dist/app/components/repository-picker.js +5 -5
- package/dist/app/components/secrets/session-secrets-panel.js +3 -3
- package/dist/app/components/session/agent-configuration-panel.js +38 -38
- package/dist/app/components/session/artifact-link-boundary.js +2 -2
- package/dist/app/components/session/artifact-session-page.js +4 -4
- package/dist/app/components/session/banners.js +11 -11
- package/dist/app/components/session/codex-account-indicator.js +12 -12
- package/dist/app/components/session/editable-artifacts-workspace.js +45 -45
- package/dist/app/components/session/failed-session-banner.js +11 -11
- package/dist/app/components/session/human-input.js +59 -55
- package/dist/app/components/session/inspector.js +91 -87
- package/dist/app/components/session/inspector.js.map +1 -1
- package/dist/app/components/session/message-actions.js +4 -4
- package/dist/app/components/session/message-resource-attachments.js +21 -20
- package/dist/app/components/session/message-resource-attachments.js.map +1 -1
- package/dist/app/components/session/model-account-indicator.js +11 -11
- package/dist/app/components/session/model-context-inspector.js +2 -2
- package/dist/app/components/session/model-recovery-notice.js +3 -3
- package/dist/app/components/session/new-session-settings-menu.js +12 -12
- package/dist/app/components/session/sandbox-switcher.js +16 -16
- package/dist/app/components/session/sandbox-workspace.js +83 -79
- package/dist/app/components/session/search-markdown-highlight.js +10 -10
- package/dist/app/components/session/search-results-view.js +11 -11
- package/dist/app/components/session/session-admin-access.js +9 -9
- package/dist/app/components/session/session-admission-notice.js +6 -6
- package/dist/app/components/session/session-machine-access-notice.js +6 -6
- package/dist/app/components/session/session-retention.js +4 -4
- package/dist/app/components/session/session-search-dialog.js +12 -12
- package/dist/app/components/session/session-skill-reviews.js +1 -1
- package/dist/app/components/session/session-tenancy-control.d.ts +2 -0
- package/dist/app/components/session/session-tenancy-control.js +41 -26
- package/dist/app/components/session/session-tenancy-control.js.map +1 -1
- package/dist/app/components/session/session-usage-limit-section.js +11 -11
- package/dist/app/components/session/session-wait-status.js +10 -9
- package/dist/app/components/session/session-wait-status.js.map +1 -1
- package/dist/app/components/session/site-origin-link.d.ts +1 -0
- package/dist/app/components/session/site-origin-link.js +2 -2
- package/dist/app/components/session/subagents.js +17 -16
- package/dist/app/components/session-connectors-menu-body.js +5 -5
- package/dist/app/components/settings/row-select.js +1 -1
- package/dist/app/components/transcription-settings.js +2 -2
- package/dist/app/components/ui/destructive-confirm.js +6 -6
- package/dist/app/components/usage/usage-entry.js +8 -8
- package/dist/app/components/workspace-composer-plus.js +22 -22
- package/dist/app/embed/memory-navigation.js +2 -2
- package/dist/app/embed/session-app.js +275 -269
- package/dist/app/lib/actions/actions-provider.js +14 -14
- package/dist/app/lib/actions/held-modifier.d.ts +11 -0
- package/dist/app/lib/app-surfaces.js +2 -2
- package/dist/app/lib/codex-usage-query.js +6 -6
- package/dist/app/lib/composer-connectors.js +13 -13
- package/dist/app/lib/console-site.d.ts +6 -0
- package/dist/app/lib/console-site.js +14 -0
- package/dist/app/lib/console-text.js +2 -2
- package/dist/app/lib/events.js +18 -17
- package/dist/app/lib/failed-session-copy.js +3 -3
- package/dist/app/lib/model-access-onboarding.js +3 -3
- package/dist/app/lib/move-chat-to-machine.js +3 -3
- package/dist/app/lib/navigation.d.ts +5 -0
- package/dist/app/lib/navigation.js +1 -1
- package/dist/app/lib/routes.d.ts +17 -0
- package/dist/app/lib/routes.js +9 -3
- package/dist/app/lib/session-branch-cache.js +14 -13
- package/dist/app/lib/session-create.js +2 -2
- package/dist/app/lib/session-deep-link.js +2 -2
- package/dist/app/lib/session-failure-toasts.d.ts +8 -0
- package/dist/app/lib/session-group-pagination.js +14 -13
- package/dist/app/lib/session-hover-facts.js +15 -14
- package/dist/app/lib/session-model.js +3 -3
- package/dist/app/lib/session-rail.js +10 -9
- package/dist/app/lib/session-rename.js +3 -3
- package/dist/app/lib/session-ui-features.d.ts +6 -1
- package/dist/app/lib/session-ui-features.js +1 -1
- package/dist/app/lib/sessions-group.d.ts +43 -3
- package/dist/app/lib/sessions-group.js +22 -15
- package/dist/app/lib/shared-query.js +3 -3
- package/dist/app/lib/site-opened.d.ts +6 -0
- package/dist/app/lib/site-opened.js +10 -0
- package/dist/app/lib/turn-failure-analytics.js +5 -5
- package/dist/app/lib/use-duplicate-site.js +3 -3
- package/dist/app/lib/use-follow-up-repositories.js +4 -4
- package/dist/app/lib/use-session-list-hint-refresh.d.ts +20 -2
- package/dist/app/lib/use-session-list-hint-refresh.js +5 -1
- package/dist/app/lib/use-workspace-machines.js +6 -6
- package/dist/app/lib/use-workspace-model-catalog.js +8 -8
- package/dist/app/lib/use-workspace-rigs.js +8 -8
- package/dist/app/lib/workspace-navigation-preference.js +5 -5
- package/dist/app/lib/workspace-scope-context.js +4 -4
- package/dist/app/routes/artifacts.js +136 -153
- package/dist/app/routes/artifacts.js.map +1 -1
- package/dist/app/routes/retained-artifact.js +63 -62
- package/dist/app/routes/retained-artifact.js.map +1 -1
- package/dist/app/routes/session-unavailable.js +7 -5
- package/dist/app/routes/session.js +177 -173
- package/dist/app/routes/sessions-index-hydration.js +3 -3
- package/dist/app/routes/sessions-index.js +123 -121
- package/dist/app/routes/site-view.d.ts +11 -0
- package/dist/app/routes/site-view.js +597 -0
- package/dist/app/routes/site-view.js.map +1 -0
- package/dist/artifacts-document.js +4 -4
- package/dist/artifacts-presentation.js +4 -4
- package/dist/artifacts-spreadsheet.js +4 -4
- package/dist/artifacts.js +39 -39
- package/dist/{browser-viewer-RYYQSRTC.js → browser-viewer-QMCNV4RI.js} +9 -7
- package/dist/{chat-interactive-block-ABCRKXJ4.js → chat-interactive-block-PMIAUXSO.js} +6 -6
- package/dist/{chunk-GIZGNFIX.js → chunk-22FFOHPT.js} +11 -11
- package/dist/chunk-22GTC4MZ.js +15 -0
- package/dist/chunk-22GTC4MZ.js.map +1 -0
- package/dist/{chunk-Z5WMLJKI.js → chunk-22JFMNMF.js} +92 -4
- package/dist/chunk-22JFMNMF.js.map +1 -0
- package/dist/{chunk-UHFWF6ZU.js → chunk-2FPS5H2D.js} +2 -2
- package/dist/{chunk-NAWXARTY.js → chunk-2KO2G3RI.js} +72 -6
- package/dist/chunk-2KO2G3RI.js.map +1 -0
- package/dist/{chunk-5POTDNQT.js → chunk-2NC7NZCE.js} +6 -6
- package/dist/{chunk-ZKYYZH6L.js → chunk-2QBYDGWO.js} +9 -9
- package/dist/{chunk-TWXIFWBD.js → chunk-34EU25RL.js} +2 -2
- package/dist/{chunk-LQKKSUCR.js → chunk-35BC2FU2.js} +19 -19
- package/dist/{chunk-PTGRFAMH.js → chunk-3ABPIUCK.js} +2 -2
- package/dist/{chunk-S4SC5SSV.js → chunk-3GU7AWG7.js} +18 -18
- package/dist/{chunk-722UO6YQ.js → chunk-3PEXVG4D.js} +2 -2
- package/dist/{chunk-OQAAI33Y.js → chunk-3RMKPHBL.js} +3 -3
- package/dist/{chunk-6JKZILLF.js → chunk-3RQUWFZT.js} +67 -67
- package/dist/{chunk-6JKZILLF.js.map → chunk-3RQUWFZT.js.map} +1 -1
- package/dist/{chunk-GCGTYXJJ.js → chunk-3STBLX4O.js} +9 -9
- package/dist/{chunk-YXIW7H4N.js → chunk-3X5FKDYQ.js} +28 -28
- package/dist/{chunk-KTRKZRID.js → chunk-4GLLWX33.js} +11 -11
- package/dist/{chunk-ROQOVH4N.js → chunk-4HEXNAFI.js} +20 -20
- package/dist/chunk-4HEXNAFI.js.map +1 -0
- package/dist/{chunk-SD2K5ZN5.js → chunk-4LPA25NQ.js} +4 -4
- package/dist/{chunk-DKCX643S.js → chunk-4RMN4E2Y.js} +13 -13
- package/dist/{chunk-E5FCEDMU.js → chunk-4SAGYEVB.js} +2 -2
- package/dist/{chunk-HTT3FB7T.js → chunk-4VK2R5QC.js} +3 -3
- package/dist/{chunk-CKG2EG62.js → chunk-4XQC7VLT.js} +14 -14
- package/dist/{chunk-IVOA3DXA.js → chunk-4YXAQMTD.js} +12 -12
- package/dist/{chunk-HOJGAJAB.js → chunk-52WK2GGK.js} +8 -8
- package/dist/{chunk-NYZQ7LO7.js → chunk-552UYIQ7.js} +20 -20
- package/dist/{chunk-LEXPBQ56.js → chunk-5DSKMG2I.js} +4 -4
- package/dist/{chunk-WNG757ID.js → chunk-5FA455GR.js} +4 -4
- package/dist/{chunk-MNWQAYY3.js → chunk-5FEN3KYH.js} +11 -11
- package/dist/{chunk-OSVHU2WU.js → chunk-5JHRMUAZ.js} +12 -12
- package/dist/{chunk-PM3OSANE.js → chunk-5MJHH72T.js} +14 -3
- package/dist/chunk-5MJHH72T.js.map +1 -0
- package/dist/{chunk-RKB2Z457.js → chunk-5VGJXWQ2.js} +2 -2
- package/dist/{chunk-GFUUFM2O.js → chunk-5W6ZDKRR.js} +6 -6
- package/dist/{chunk-NDETTZQA.js → chunk-5W7KJ5NQ.js} +37 -37
- package/dist/{chunk-Q35YZVDZ.js → chunk-5Y2FPLZE.js} +9 -9
- package/dist/{chunk-6W3LF3DB.js → chunk-5YFY4SFC.js} +2 -12
- package/dist/chunk-5YFY4SFC.js.map +1 -0
- package/dist/{chunk-F3NERYBQ.js → chunk-62VER7O4.js} +6 -6
- package/dist/{chunk-FBMU3VK5.js → chunk-6DCEDIF6.js} +2 -2
- package/dist/{chunk-WUHB422G.js → chunk-73WI7FL2.js} +18 -18
- package/dist/chunk-756MKA2J.js +45 -0
- package/dist/chunk-756MKA2J.js.map +1 -0
- package/dist/{chunk-QECZVL7S.js → chunk-7FJMRJDG.js} +2 -2
- package/dist/{chunk-7KGKDWWR.js → chunk-7HFLYNWN.js} +2 -2
- package/dist/{chunk-XVM566II.js → chunk-7KIENXRE.js} +2 -2
- package/dist/{chunk-CBY5CXBD.js → chunk-7NPCEBZE.js} +5 -5
- package/dist/{chunk-46VBQG2D.js → chunk-7P4AQMGA.js} +13 -13
- package/dist/{chunk-CKZW7A5S.js → chunk-7TCT7KPQ.js} +742 -644
- package/dist/chunk-7TCT7KPQ.js.map +1 -0
- package/dist/{chunk-O77Q4NG2.js → chunk-7XO7YKPC.js} +283 -1038
- package/dist/chunk-7XO7YKPC.js.map +1 -0
- package/dist/{chunk-S7PVL7XH.js → chunk-A4BD4ZVB.js} +4 -4
- package/dist/{chunk-VSQHDBHU.js → chunk-ACL2V2KE.js} +68 -35
- package/dist/chunk-ACL2V2KE.js.map +1 -0
- package/dist/{chunk-73SOCVLS.js → chunk-AIEXYO2X.js} +3 -3
- package/dist/{chunk-U7TC2XJQ.js → chunk-AJPW3SV4.js} +3 -3
- package/dist/{chunk-HRJQAFKR.js → chunk-AX6YJA5U.js} +2 -2
- package/dist/{chunk-P5WABK2H.js → chunk-BCM7C3MJ.js} +9 -9
- package/dist/{chunk-DT7BORXG.js → chunk-BMJTNPWK.js} +2 -2
- package/dist/{chunk-HIHO2QE7.js → chunk-BT2MVGHT.js} +2 -2
- package/dist/{chunk-3XOISKZC.js → chunk-BXQYAAVE.js} +4 -4
- package/dist/{chunk-IBTXYLBW.js → chunk-CCFWY4GF.js} +2 -2
- package/dist/{chunk-ZOC3OP6F.js → chunk-CCR33J7L.js} +2 -2
- package/dist/{chunk-GTQ3SNEI.js → chunk-CD3MO3IC.js} +2 -2
- package/dist/{chunk-WSMYOLHG.js → chunk-CDEXRJB6.js} +5 -5
- package/dist/{chunk-3GLAPCVI.js → chunk-CFFNT2OY.js} +8 -8
- package/dist/{chunk-FUSFVUIJ.js → chunk-CMLJSF2F.js} +12 -12
- package/dist/{chunk-O4DYOSOL.js → chunk-CP7ZQHBW.js} +13 -13
- package/dist/{chunk-IOKSNX74.js → chunk-D5OWJZQR.js} +2 -2
- package/dist/{chunk-SQGXMHJO.js → chunk-DGLRZMXL.js} +3 -3
- package/dist/{chunk-GNEHAPKV.js → chunk-DJFTH2DI.js} +3 -3
- package/dist/{chunk-HQG4SLTE.js → chunk-DYJGYGPB.js} +2 -2
- package/dist/{chunk-4EAF3HSD.js → chunk-EJ7WARW7.js} +2 -2
- package/dist/{chunk-3AA6RNGE.js → chunk-ENS6E4RZ.js} +2 -2
- package/dist/{chunk-OOEO4MKY.js → chunk-EPWD4KRA.js} +2 -2
- package/dist/{chunk-V5RJAWRP.js → chunk-EQE3MNQN.js} +5 -5
- package/dist/{chunk-TSBE4KOQ.js → chunk-EWL6NDOO.js} +3 -3
- package/dist/{chunk-OO2T63BY.js → chunk-EYS4ZOF5.js} +2 -2
- package/dist/{chunk-IC7KNOBB.js → chunk-FDAV72IX.js} +7 -7
- package/dist/{chunk-AG7VGUIW.js → chunk-FFNPUSVO.js} +7 -7
- package/dist/{chunk-P5T36BA3.js → chunk-FRP64DEK.js} +2 -2
- package/dist/{chunk-KBF3SE7G.js → chunk-FSP334UU.js} +2 -2
- package/dist/{chunk-ZHFKMMOT.js → chunk-FTX5CNHA.js} +6 -6
- package/dist/{chunk-KYBALSWW.js → chunk-FWOBNL2A.js} +1 -1
- package/dist/{chunk-HJ5XWW62.js → chunk-FWYEZ3LE.js} +34 -34
- package/dist/{chunk-WSLPZ43N.js → chunk-G4HQUBO4.js} +12 -12
- package/dist/{chunk-CSHBR2IZ.js → chunk-GDLDBR6B.js} +2 -2
- package/dist/chunk-GGV4NSG3.js +792 -0
- package/dist/chunk-GGV4NSG3.js.map +1 -0
- package/dist/{chunk-G3S2F35T.js → chunk-GHHM6WN4.js} +3 -3
- package/dist/{chunk-OANSIX34.js → chunk-GRSODLVO.js} +4 -4
- package/dist/{chunk-DDIBZA4X.js → chunk-GT7JFQ4E.js} +405 -148
- package/dist/chunk-GT7JFQ4E.js.map +1 -0
- package/dist/{chunk-EU6XSQFM.js → chunk-GXW2I2M2.js} +2 -2
- package/dist/{chunk-4246UYVG.js → chunk-GZS37O3G.js} +1 -1
- package/dist/{chunk-XFNLU7EW.js → chunk-H5M33DAL.js} +15 -6
- package/dist/chunk-H5M33DAL.js.map +1 -0
- package/dist/{chunk-Y7WMW74G.js → chunk-HQWVDQXW.js} +7 -7
- package/dist/{chunk-YTZQV2DD.js → chunk-HU6JTNWF.js} +2 -2
- package/dist/{chunk-QRVNI5V6.js → chunk-I6KIQKU6.js} +3 -3
- package/dist/{chunk-Q262Y2YX.js → chunk-IBA5FMRE.js} +141 -137
- package/dist/chunk-IBA5FMRE.js.map +1 -0
- package/dist/{chunk-BNUPYHHZ.js → chunk-IDXTASGN.js} +4 -4
- package/dist/{chunk-KF3MF6FP.js → chunk-IECRGM6K.js} +3 -2
- package/dist/chunk-IECRGM6K.js.map +1 -0
- package/dist/chunk-IJYL5BZM.js +38 -0
- package/dist/chunk-IJYL5BZM.js.map +1 -0
- package/dist/{chunk-L6RXRRN3.js → chunk-ILDOW2IQ.js} +3 -3
- package/dist/{chunk-VUHPA3XQ.js → chunk-ITX2TB4K.js} +6 -6
- package/dist/{chunk-ETCB6SUJ.js → chunk-J22HD2PB.js} +6 -6
- package/dist/{chunk-U47YDYLQ.js → chunk-J5MEDX7C.js} +8 -8
- package/dist/{chunk-6VQTHC4W.js → chunk-J7FBBLHF.js} +36 -36
- package/dist/{chunk-5JZYPZ72.js → chunk-JFK7NTEA.js} +4 -4
- package/dist/chunk-JFK7NTEA.js.map +1 -0
- package/dist/{chunk-QZRDCFHI.js → chunk-JM4HQPAI.js} +5 -5
- package/dist/{chunk-PIVGX42P.js → chunk-JNY5MT3I.js} +2 -2
- package/dist/{chunk-XWWXIZFP.js → chunk-JO6R5EXF.js} +7 -7
- package/dist/{chunk-MM7OKOTE.js → chunk-JQCGPTZ6.js} +9 -9
- package/dist/chunk-JRSNCSZN.js +37 -0
- package/dist/chunk-JRSNCSZN.js.map +1 -0
- package/dist/{chunk-KNFDWNCH.js → chunk-JXT5QDJC.js} +5 -5
- package/dist/{chunk-OR37STQZ.js → chunk-KEXYBG7Q.js} +3 -3
- package/dist/{chunk-AZVANYMB.js → chunk-KUNFUSZ7.js} +2 -2
- package/dist/{chunk-DXZNDKQD.js → chunk-LEEJBZ5B.js} +2 -2
- package/dist/{chunk-STUCI6QA.js → chunk-LEKBNKLD.js} +1 -1
- package/dist/{chunk-STUCI6QA.js.map → chunk-LEKBNKLD.js.map} +1 -1
- package/dist/{chunk-C535KSTY.js → chunk-LF5CBAOS.js} +4 -4
- package/dist/{chunk-BJIZ7PL7.js → chunk-LHLK7FUA.js} +145 -29
- package/dist/chunk-LHLK7FUA.js.map +1 -0
- package/dist/{chunk-RIMKJBCD.js → chunk-LMPTC4CX.js} +2 -2
- package/dist/{chunk-3KVWXKD6.js → chunk-LQ47YL6E.js} +2 -2
- package/dist/{chunk-H5WGWAYX.js → chunk-LT4J7RHI.js} +13 -13
- package/dist/{chunk-DSGMYES6.js → chunk-MCTTONOW.js} +28 -28
- package/dist/{chunk-IGHELZI7.js → chunk-MIECLOQC.js} +9 -9
- package/dist/{chunk-FM4OUCC2.js → chunk-MOKYT3X3.js} +3 -3
- package/dist/{chunk-GZ64CASI.js → chunk-MVZYNZXE.js} +5 -4
- package/dist/chunk-MVZYNZXE.js.map +1 -0
- package/dist/{chunk-RKILMLA7.js → chunk-MXLKI7BI.js} +3 -3
- package/dist/{chunk-45WYYFP6.js → chunk-N3ZP4IDU.js} +2 -2
- package/dist/{chunk-XRRSFQEV.js → chunk-NAZZLAWX.js} +2 -2
- package/dist/{chunk-UWJ5P5CU.js → chunk-NEK4WB5P.js} +3 -3
- package/dist/{chunk-6L7U46Y2.js → chunk-NKNVIO66.js} +2 -2
- package/dist/{chunk-JKUICTLM.js → chunk-NLAFNMPK.js} +2 -2
- package/dist/{chunk-4LKNIGHB.js → chunk-O2SBHS2N.js} +2 -2
- package/dist/{chunk-D3RK3NGM.js → chunk-PCFK7HKD.js} +17 -17
- package/dist/{chunk-VVCDB2T7.js → chunk-PCJLH45G.js} +3 -3
- package/dist/{chunk-PZ24CYDO.js → chunk-PFAUGEV5.js} +2 -2
- package/dist/{chunk-HGMWMK5K.js → chunk-PO3BH3KQ.js} +2 -2
- package/dist/{chunk-B74GSYR6.js → chunk-PUTS4DYW.js} +2 -2
- package/dist/{chunk-JSIDLTTG.js → chunk-PZ2V2XIK.js} +2 -2
- package/dist/{chunk-TMEQPODK.js → chunk-PZ37VDB5.js} +2 -2
- package/dist/{chunk-QIYBOFUV.js → chunk-QFMLAT7L.js} +246 -237
- package/dist/chunk-QFMLAT7L.js.map +1 -0
- package/dist/{chunk-LVONK3YQ.js → chunk-QRKTESVE.js} +2 -2
- package/dist/{chunk-HT5WSUC7.js → chunk-QXEDIDBZ.js} +3 -3
- package/dist/{chunk-WURSS6MP.js → chunk-R66YMYJU.js} +2 -2
- package/dist/{chunk-HDHK3SXK.js → chunk-RFLYID6H.js} +5 -5
- package/dist/{chunk-V77JK73U.js → chunk-RIYZFKIM.js} +37 -35
- package/dist/chunk-RIYZFKIM.js.map +1 -0
- package/dist/{chunk-VMFID36H.js → chunk-RQNZDTKT.js} +19 -19
- package/dist/{chunk-EHCUFCXM.js → chunk-RYSRFAHN.js} +32 -22
- package/dist/chunk-RYSRFAHN.js.map +1 -0
- package/dist/{chunk-I6VUUEXH.js → chunk-S2U4CDAC.js} +150 -150
- package/dist/chunk-S2U4CDAC.js.map +1 -0
- package/dist/chunk-S37GP7LX.js +204 -0
- package/dist/chunk-S37GP7LX.js.map +1 -0
- package/dist/{chunk-A2EWJQXX.js → chunk-SM5QX6UK.js} +4 -4
- package/dist/{chunk-FBE6AIIW.js → chunk-SOKNCW5U.js} +2 -2
- package/dist/{chunk-Q4NM77K7.js → chunk-SSOO4GWN.js} +193 -194
- package/dist/chunk-SSOO4GWN.js.map +1 -0
- package/dist/{chunk-PFKTGZKE.js → chunk-SY2AAZNB.js} +2 -2
- package/dist/{chunk-DFZMKCVP.js → chunk-TIQPKOFW.js} +4 -4
- package/dist/{chunk-HPPKLBTJ.js → chunk-TJQDL3JH.js} +2 -2
- package/dist/chunk-TL7BOFFL.js +89 -0
- package/dist/chunk-TL7BOFFL.js.map +1 -0
- package/dist/{chunk-FD4Q5KFL.js → chunk-TLL22FFO.js} +2 -2
- package/dist/{chunk-QM5H4FPT.js → chunk-TV6BWONY.js} +3 -3
- package/dist/{chunk-EDFJBX3V.js → chunk-U6MPB3K6.js} +9 -9
- package/dist/{chunk-TZD3U2S5.js → chunk-ULJAOMJA.js} +4 -4
- package/dist/chunk-ULYQEFNH.js +529 -0
- package/dist/chunk-ULYQEFNH.js.map +1 -0
- package/dist/{chunk-H5EVWF6L.js → chunk-UNNJUJVD.js} +2 -2
- package/dist/{chunk-324X6T6G.js → chunk-UP7I3W6O.js} +57 -55
- package/dist/chunk-UP7I3W6O.js.map +1 -0
- package/dist/{chunk-VU2EWALC.js → chunk-UUGR3X5I.js} +19 -12
- package/dist/chunk-UUGR3X5I.js.map +1 -0
- package/dist/{chunk-Z6DKXQG7.js → chunk-UXXFMF4X.js} +2 -2
- package/dist/{chunk-OBQVTCTW.js → chunk-UYNCMZX5.js} +4 -4
- package/dist/{chunk-RGPYMHKI.js → chunk-V3K4RQO7.js} +9 -3
- package/dist/chunk-V3K4RQO7.js.map +1 -0
- package/dist/{chunk-KZHW27BV.js → chunk-V4QZ7UBK.js} +2 -2
- package/dist/{chunk-NEVRLD77.js → chunk-VH5EGTH2.js} +3 -3
- package/dist/{chunk-MYNUBDU7.js → chunk-VYKW6TB2.js} +1 -1
- package/dist/chunk-VYKW6TB2.js.map +1 -0
- package/dist/{chunk-QEJTQTF5.js → chunk-W6T5HR3Z.js} +3 -3
- package/dist/{chunk-H6WWEKEV.js → chunk-WCMG4HYI.js} +10 -10
- package/dist/{chunk-GZLLDA6P.js → chunk-WEFN327U.js} +2 -2
- package/dist/{chunk-VW3BBTMA.js → chunk-WKHUZIOW.js} +1 -1
- package/dist/{chunk-ANHUMDJX.js → chunk-WNDTLK44.js} +2 -2
- package/dist/{chunk-2DS4UOYQ.js → chunk-WSZQNTVN.js} +2 -2
- package/dist/{chunk-Z2DAWUO3.js → chunk-XMNUZUUA.js} +6 -6
- package/dist/{chunk-GAIM5RNE.js → chunk-XN7NSPE6.js} +3 -3
- package/dist/chunk-XV6ZYRHK.js +59 -0
- package/dist/chunk-XV6ZYRHK.js.map +1 -0
- package/dist/{chunk-FLGUVRR7.js → chunk-Y5BSA3I7.js} +5 -5
- package/dist/{chunk-WRLWLGEF.js → chunk-Y5E3XQ2S.js} +25 -2
- package/dist/{chunk-WRLWLGEF.js.map → chunk-Y5E3XQ2S.js.map} +1 -1
- package/dist/{chunk-QILLL4JE.js → chunk-YEROLKOA.js} +16 -16
- package/dist/{chunk-NDF3SH3X.js → chunk-YJPKDRI2.js} +15 -15
- package/dist/{chunk-TQGJN5UZ.js → chunk-YV56F4UP.js} +318 -700
- package/dist/chunk-YV56F4UP.js.map +1 -0
- package/dist/{chunk-VAIESMPY.js → chunk-YVBHGMKC.js} +4 -4
- package/dist/{chunk-AD22P5X3.js → chunk-YXA2EKV3.js} +3 -3
- package/dist/{chunk-FDNJVZRE.js → chunk-YYCOSTUU.js} +17 -17
- package/dist/{chunk-NLMTNEWW.js → chunk-Z6E6TUAE.js} +2 -2
- package/dist/{chunk-BJW7G6EF.js → chunk-Z7IGO5EA.js} +3 -3
- package/dist/{chunk-N7JKT4ZU.js → chunk-ZEIFJ6PX.js} +7 -7
- package/dist/{chunk-Q4OHNGGB.js → chunk-ZS2UQ3DV.js} +68 -11
- package/dist/chunk-ZS2UQ3DV.js.map +1 -0
- package/dist/{chunk-VRGOOVDB.js → chunk-ZVVT72MT.js} +2 -2
- package/dist/components/browser-viewer.d.ts +1 -1
- package/dist/composer.js +14 -14
- package/dist/{computer-viewer-KEDVLD42.js → computer-viewer-25AJIDYA.js} +9 -9
- package/dist/connect.js +11 -11
- package/dist/desktop.js +2 -2
- package/dist/editor.js +2 -2
- package/dist/{embedded-new-voice-5PYRDZ6T.js → embedded-new-voice-RZZEJT6M.js} +8 -8
- package/dist/{embedded-voice-PABC5NBD.js → embedded-voice-6OKSSPLW.js} +8 -8
- package/dist/{fleet-decision-row-QNSTP3VX.js → fleet-decision-row-NN2HXDX3.js} +2 -2
- package/dist/hooks/internal.d.ts +38 -0
- package/dist/hooks/use-client-config-flags.d.ts +12 -0
- package/dist/hooks/use-workspace-sessions.d.ts +10 -1
- package/dist/index.js +233 -227
- package/dist/interaction.js +11 -9
- package/dist/interaction.js.map +1 -1
- package/dist/{latest-question-5LIRVG4G.js → latest-question-2PFWQSSG.js} +4 -3
- package/dist/{latest-question-5LIRVG4G.js.map → latest-question-2PFWQSSG.js.map} +1 -1
- package/dist/machines.js +5 -5
- package/dist/messages/en.d.ts +3 -3
- package/dist/messages.js +1 -1
- package/dist/{model-policy-picker-menu-CURJ247L.js → model-policy-picker-menu-VVFGGAI6.js} +6 -6
- package/dist/model-policy-picker-menu-VVFGGAI6.js.map +1 -0
- package/dist/native-previews.js +3 -3
- package/dist/{platform-activity-row-BMXXNZKX.js → platform-activity-row-ENQVIFTL.js} +2 -2
- package/dist/{queue-surface-implementation-2X5AXB6I.js → queue-surface-implementation-4SHOQPQQ.js} +10 -8
- package/dist/{queue-surface-implementation-2X5AXB6I.js.map → queue-surface-implementation-4SHOQPQQ.js.map} +1 -1
- package/dist/realtime.js +7 -7
- package/dist/{sandbox-files-4FBG3GS2.js → sandbox-files-CCOTGXXA.js} +11 -11
- package/dist/sandbox-files-CCOTGXXA.js.map +1 -0
- package/dist/session-app.js +277 -271
- package/dist/session-list-model.d.ts +1 -0
- package/dist/session-list-model.js +8 -2
- package/dist/{session-realtime-2XIB254N.js → session-realtime-JNKDSGH7.js} +3 -3
- package/dist/session-realtime-JNKDSGH7.js.map +1 -0
- package/dist/session-realtime.js +2 -2
- package/dist/session-ui.js +77 -72
- package/dist/session.js +27 -25
- package/dist/sites.js +2 -2
- package/dist/terminal.js +2 -2
- package/dist/this-computer.js +3 -3
- package/dist/timeline/invoked-tool.d.ts +5 -0
- package/dist/timeline/tool-display-name.d.ts +2 -2
- package/dist/timeline/tool-icon.d.ts +14 -0
- package/dist/timeline/tool-presentation.d.ts +8 -3
- package/dist/timeline/types.d.ts +2 -0
- package/dist/{timeline-annotation-markers-X4K2IEOO.js → timeline-annotation-markers-KHNYNY2J.js} +5 -5
- package/dist/{timeline-annotation-selection-MEHBW676.js → timeline-annotation-selection-AXEDJHBP.js} +7 -7
- package/dist/{timeline-annotations-dialog-U2FPQ3UY.js → timeline-annotations-dialog-AV4ZBXRC.js} +9 -9
- package/dist/timeline-model.js +28 -26
- package/dist/ui/access-list.js +20 -20
- package/dist/ui/choice-cards.js +2 -2
- package/dist/ui/detail-page.js +2 -2
- package/dist/ui/detail-sheet.js +2 -2
- package/dist/ui/diff-view.js +2 -2
- package/dist/ui/disclosure.js +4 -4
- package/dist/ui/flush-form-page.js +3 -3
- package/dist/ui/form-dialog.js +2 -2
- package/dist/ui/list-row.js +5 -5
- package/dist/ui/revision-history.js +11 -11
- package/dist/ui/role-select.js +6 -6
- package/dist/ui/settings-nav.js +3 -3
- package/dist/usage.js +3 -3
- package/dist/workbench.js +11 -11
- package/package.json +4 -4
- package/src/app/app-state.tsx +3 -1
- package/src/app/components/capabilities/session-capability-card.tsx +14 -1
- package/src/app/components/capabilities/session-chrome-card.dom-fixture.tsx +377 -0
- package/src/app/components/capabilities/session-chrome-card.test.tsx +18 -0
- package/src/app/components/capabilities/session-chrome-card.tsx +243 -0
- package/src/app/components/capabilities/session-machine-card.dom-fixture.tsx +2 -0
- package/src/app/components/capabilities/session-machine-card.tsx +74 -16
- package/src/app/components/rail/session-list.tsx +254 -44
- package/src/app/components/rail/session-row-content.tsx +24 -2
- package/src/app/components/rail/session-shell.tsx +14 -9
- package/src/app/components/rail/site-session-group-heading.tsx +59 -20
- package/src/app/components/session/session-tenancy-control.tsx +18 -0
- package/src/app/components/session/site-origin-link.test.tsx +73 -0
- package/src/app/components/session/site-origin-link.tsx +4 -2
- package/src/app/embed/memory-navigation.tsx +1 -0
- package/src/app/lib/actions/held-modifier.test.ts +101 -0
- package/src/app/lib/actions/held-modifier.ts +108 -0
- package/src/app/lib/console-site.tsx +38 -0
- package/src/app/lib/navigation.tsx +4 -0
- package/src/app/lib/routes.tsx +42 -0
- package/src/app/lib/session-failure-toasts.ts +26 -0
- package/src/app/lib/session-ui-features.tsx +18 -4
- package/src/app/lib/sessions-group.tsx +219 -30
- package/src/app/lib/site-opened.tsx +48 -0
- package/src/app/lib/site-session-groups.test.ts +173 -6
- package/src/app/lib/site-view-routes.test.ts +55 -0
- package/src/app/lib/use-session-list-hint-refresh.tsx +44 -4
- package/src/app/routes/artifacts.tsx +2 -29
- package/src/app/routes/session-transient-failures.test.tsx +343 -0
- package/src/app/routes/session-unavailable.tsx +74 -3
- package/src/app/routes/session.tsx +4 -13
- package/src/app/routes/sessions-index.tsx +13 -9
- package/src/app/routes/site-view.test.tsx +476 -0
- package/src/app/routes/site-view.tsx +583 -0
- package/src/components/browser-viewer.tsx +16 -2
- package/src/hooks/internal.ts +129 -6
- package/src/hooks/use-client-config-flags.ts +8 -0
- package/src/hooks/use-session-events.ts +83 -9
- package/src/hooks/use-workspace-sessions.ts +21 -1
- package/src/messages/en.ts +3 -3
- package/src/session-list-model.ts +4 -0
- package/src/timeline/activity-rail.tsx +3 -2
- package/src/timeline/invoked-tool.ts +14 -4
- package/src/timeline/projection.ts +15 -8
- package/src/timeline/rolling-activity.tsx +6 -2
- package/src/timeline/tool-display-name.ts +2 -2
- package/src/timeline/tool-icon.tsx +165 -0
- package/src/timeline/tool-presentation.ts +207 -48
- package/src/timeline/tool-renderers.tsx +1 -70
- package/src/timeline/types.ts +2 -0
- package/styles/compiled.css +38 -0
- package/dist/chunk-22ZBT6CN.js +0 -50
- package/dist/chunk-22ZBT6CN.js.map +0 -1
- package/dist/chunk-324X6T6G.js.map +0 -1
- package/dist/chunk-5JZYPZ72.js.map +0 -1
- package/dist/chunk-6W3LF3DB.js.map +0 -1
- package/dist/chunk-BJIZ7PL7.js.map +0 -1
- package/dist/chunk-CKZW7A5S.js.map +0 -1
- package/dist/chunk-DDIBZA4X.js.map +0 -1
- package/dist/chunk-EHCUFCXM.js.map +0 -1
- package/dist/chunk-GZ64CASI.js.map +0 -1
- package/dist/chunk-I6VUUEXH.js.map +0 -1
- package/dist/chunk-KF3MF6FP.js.map +0 -1
- package/dist/chunk-MYNUBDU7.js.map +0 -1
- package/dist/chunk-NAWXARTY.js.map +0 -1
- package/dist/chunk-O77Q4NG2.js.map +0 -1
- package/dist/chunk-PM3OSANE.js.map +0 -1
- package/dist/chunk-Q262Y2YX.js.map +0 -1
- package/dist/chunk-Q4NM77K7.js.map +0 -1
- package/dist/chunk-Q4OHNGGB.js.map +0 -1
- package/dist/chunk-QIYBOFUV.js.map +0 -1
- package/dist/chunk-R25ZKOZR.js +0 -24
- package/dist/chunk-R25ZKOZR.js.map +0 -1
- package/dist/chunk-RGPYMHKI.js.map +0 -1
- package/dist/chunk-ROQOVH4N.js.map +0 -1
- package/dist/chunk-TQGJN5UZ.js.map +0 -1
- package/dist/chunk-V77JK73U.js.map +0 -1
- package/dist/chunk-VSQHDBHU.js.map +0 -1
- package/dist/chunk-VU2EWALC.js.map +0 -1
- package/dist/chunk-XFNLU7EW.js.map +0 -1
- package/dist/chunk-Z5WMLJKI.js.map +0 -1
- /package/dist/{browser-viewer-RYYQSRTC.js.map → app/components/capabilities/session-chrome-card.js.map} +0 -0
- /package/dist/{chat-interactive-block-ABCRKXJ4.js.map → app/lib/console-site.js.map} +0 -0
- /package/dist/{computer-viewer-KEDVLD42.js.map → app/lib/site-opened.js.map} +0 -0
- /package/dist/{embedded-new-voice-5PYRDZ6T.js.map → browser-viewer-QMCNV4RI.js.map} +0 -0
- /package/dist/{embedded-voice-PABC5NBD.js.map → chat-interactive-block-PMIAUXSO.js.map} +0 -0
- /package/dist/{chunk-GIZGNFIX.js.map → chunk-22FFOHPT.js.map} +0 -0
- /package/dist/{chunk-UHFWF6ZU.js.map → chunk-2FPS5H2D.js.map} +0 -0
- /package/dist/{chunk-5POTDNQT.js.map → chunk-2NC7NZCE.js.map} +0 -0
- /package/dist/{chunk-ZKYYZH6L.js.map → chunk-2QBYDGWO.js.map} +0 -0
- /package/dist/{chunk-TWXIFWBD.js.map → chunk-34EU25RL.js.map} +0 -0
- /package/dist/{chunk-LQKKSUCR.js.map → chunk-35BC2FU2.js.map} +0 -0
- /package/dist/{chunk-PTGRFAMH.js.map → chunk-3ABPIUCK.js.map} +0 -0
- /package/dist/{chunk-S4SC5SSV.js.map → chunk-3GU7AWG7.js.map} +0 -0
- /package/dist/{chunk-722UO6YQ.js.map → chunk-3PEXVG4D.js.map} +0 -0
- /package/dist/{chunk-OQAAI33Y.js.map → chunk-3RMKPHBL.js.map} +0 -0
- /package/dist/{chunk-GCGTYXJJ.js.map → chunk-3STBLX4O.js.map} +0 -0
- /package/dist/{chunk-YXIW7H4N.js.map → chunk-3X5FKDYQ.js.map} +0 -0
- /package/dist/{chunk-KTRKZRID.js.map → chunk-4GLLWX33.js.map} +0 -0
- /package/dist/{chunk-SD2K5ZN5.js.map → chunk-4LPA25NQ.js.map} +0 -0
- /package/dist/{chunk-DKCX643S.js.map → chunk-4RMN4E2Y.js.map} +0 -0
- /package/dist/{chunk-E5FCEDMU.js.map → chunk-4SAGYEVB.js.map} +0 -0
- /package/dist/{chunk-HTT3FB7T.js.map → chunk-4VK2R5QC.js.map} +0 -0
- /package/dist/{chunk-CKG2EG62.js.map → chunk-4XQC7VLT.js.map} +0 -0
- /package/dist/{chunk-IVOA3DXA.js.map → chunk-4YXAQMTD.js.map} +0 -0
- /package/dist/{chunk-HOJGAJAB.js.map → chunk-52WK2GGK.js.map} +0 -0
- /package/dist/{chunk-NYZQ7LO7.js.map → chunk-552UYIQ7.js.map} +0 -0
- /package/dist/{chunk-LEXPBQ56.js.map → chunk-5DSKMG2I.js.map} +0 -0
- /package/dist/{chunk-WNG757ID.js.map → chunk-5FA455GR.js.map} +0 -0
- /package/dist/{chunk-MNWQAYY3.js.map → chunk-5FEN3KYH.js.map} +0 -0
- /package/dist/{chunk-OSVHU2WU.js.map → chunk-5JHRMUAZ.js.map} +0 -0
- /package/dist/{chunk-RKB2Z457.js.map → chunk-5VGJXWQ2.js.map} +0 -0
- /package/dist/{chunk-GFUUFM2O.js.map → chunk-5W6ZDKRR.js.map} +0 -0
- /package/dist/{chunk-NDETTZQA.js.map → chunk-5W7KJ5NQ.js.map} +0 -0
- /package/dist/{chunk-Q35YZVDZ.js.map → chunk-5Y2FPLZE.js.map} +0 -0
- /package/dist/{chunk-F3NERYBQ.js.map → chunk-62VER7O4.js.map} +0 -0
- /package/dist/{chunk-FBMU3VK5.js.map → chunk-6DCEDIF6.js.map} +0 -0
- /package/dist/{chunk-WUHB422G.js.map → chunk-73WI7FL2.js.map} +0 -0
- /package/dist/{chunk-QECZVL7S.js.map → chunk-7FJMRJDG.js.map} +0 -0
- /package/dist/{chunk-7KGKDWWR.js.map → chunk-7HFLYNWN.js.map} +0 -0
- /package/dist/{chunk-XVM566II.js.map → chunk-7KIENXRE.js.map} +0 -0
- /package/dist/{chunk-CBY5CXBD.js.map → chunk-7NPCEBZE.js.map} +0 -0
- /package/dist/{chunk-46VBQG2D.js.map → chunk-7P4AQMGA.js.map} +0 -0
- /package/dist/{chunk-S7PVL7XH.js.map → chunk-A4BD4ZVB.js.map} +0 -0
- /package/dist/{chunk-73SOCVLS.js.map → chunk-AIEXYO2X.js.map} +0 -0
- /package/dist/{chunk-U7TC2XJQ.js.map → chunk-AJPW3SV4.js.map} +0 -0
- /package/dist/{chunk-HRJQAFKR.js.map → chunk-AX6YJA5U.js.map} +0 -0
- /package/dist/{chunk-P5WABK2H.js.map → chunk-BCM7C3MJ.js.map} +0 -0
- /package/dist/{chunk-DT7BORXG.js.map → chunk-BMJTNPWK.js.map} +0 -0
- /package/dist/{chunk-HIHO2QE7.js.map → chunk-BT2MVGHT.js.map} +0 -0
- /package/dist/{chunk-3XOISKZC.js.map → chunk-BXQYAAVE.js.map} +0 -0
- /package/dist/{chunk-IBTXYLBW.js.map → chunk-CCFWY4GF.js.map} +0 -0
- /package/dist/{chunk-ZOC3OP6F.js.map → chunk-CCR33J7L.js.map} +0 -0
- /package/dist/{chunk-GTQ3SNEI.js.map → chunk-CD3MO3IC.js.map} +0 -0
- /package/dist/{chunk-WSMYOLHG.js.map → chunk-CDEXRJB6.js.map} +0 -0
- /package/dist/{chunk-3GLAPCVI.js.map → chunk-CFFNT2OY.js.map} +0 -0
- /package/dist/{chunk-FUSFVUIJ.js.map → chunk-CMLJSF2F.js.map} +0 -0
- /package/dist/{chunk-O4DYOSOL.js.map → chunk-CP7ZQHBW.js.map} +0 -0
- /package/dist/{chunk-IOKSNX74.js.map → chunk-D5OWJZQR.js.map} +0 -0
- /package/dist/{chunk-SQGXMHJO.js.map → chunk-DGLRZMXL.js.map} +0 -0
- /package/dist/{chunk-GNEHAPKV.js.map → chunk-DJFTH2DI.js.map} +0 -0
- /package/dist/{chunk-HQG4SLTE.js.map → chunk-DYJGYGPB.js.map} +0 -0
- /package/dist/{chunk-4EAF3HSD.js.map → chunk-EJ7WARW7.js.map} +0 -0
- /package/dist/{chunk-3AA6RNGE.js.map → chunk-ENS6E4RZ.js.map} +0 -0
- /package/dist/{chunk-OOEO4MKY.js.map → chunk-EPWD4KRA.js.map} +0 -0
- /package/dist/{chunk-V5RJAWRP.js.map → chunk-EQE3MNQN.js.map} +0 -0
- /package/dist/{chunk-TSBE4KOQ.js.map → chunk-EWL6NDOO.js.map} +0 -0
- /package/dist/{chunk-OO2T63BY.js.map → chunk-EYS4ZOF5.js.map} +0 -0
- /package/dist/{chunk-IC7KNOBB.js.map → chunk-FDAV72IX.js.map} +0 -0
- /package/dist/{chunk-AG7VGUIW.js.map → chunk-FFNPUSVO.js.map} +0 -0
- /package/dist/{chunk-P5T36BA3.js.map → chunk-FRP64DEK.js.map} +0 -0
- /package/dist/{chunk-KBF3SE7G.js.map → chunk-FSP334UU.js.map} +0 -0
- /package/dist/{chunk-ZHFKMMOT.js.map → chunk-FTX5CNHA.js.map} +0 -0
- /package/dist/{chunk-KYBALSWW.js.map → chunk-FWOBNL2A.js.map} +0 -0
- /package/dist/{chunk-HJ5XWW62.js.map → chunk-FWYEZ3LE.js.map} +0 -0
- /package/dist/{chunk-WSLPZ43N.js.map → chunk-G4HQUBO4.js.map} +0 -0
- /package/dist/{chunk-CSHBR2IZ.js.map → chunk-GDLDBR6B.js.map} +0 -0
- /package/dist/{chunk-G3S2F35T.js.map → chunk-GHHM6WN4.js.map} +0 -0
- /package/dist/{chunk-OANSIX34.js.map → chunk-GRSODLVO.js.map} +0 -0
- /package/dist/{chunk-EU6XSQFM.js.map → chunk-GXW2I2M2.js.map} +0 -0
- /package/dist/{chunk-4246UYVG.js.map → chunk-GZS37O3G.js.map} +0 -0
- /package/dist/{chunk-Y7WMW74G.js.map → chunk-HQWVDQXW.js.map} +0 -0
- /package/dist/{chunk-YTZQV2DD.js.map → chunk-HU6JTNWF.js.map} +0 -0
- /package/dist/{chunk-QRVNI5V6.js.map → chunk-I6KIQKU6.js.map} +0 -0
- /package/dist/{chunk-BNUPYHHZ.js.map → chunk-IDXTASGN.js.map} +0 -0
- /package/dist/{chunk-L6RXRRN3.js.map → chunk-ILDOW2IQ.js.map} +0 -0
- /package/dist/{chunk-VUHPA3XQ.js.map → chunk-ITX2TB4K.js.map} +0 -0
- /package/dist/{chunk-ETCB6SUJ.js.map → chunk-J22HD2PB.js.map} +0 -0
- /package/dist/{chunk-U47YDYLQ.js.map → chunk-J5MEDX7C.js.map} +0 -0
- /package/dist/{chunk-6VQTHC4W.js.map → chunk-J7FBBLHF.js.map} +0 -0
- /package/dist/{chunk-QZRDCFHI.js.map → chunk-JM4HQPAI.js.map} +0 -0
- /package/dist/{chunk-PIVGX42P.js.map → chunk-JNY5MT3I.js.map} +0 -0
- /package/dist/{chunk-XWWXIZFP.js.map → chunk-JO6R5EXF.js.map} +0 -0
- /package/dist/{chunk-MM7OKOTE.js.map → chunk-JQCGPTZ6.js.map} +0 -0
- /package/dist/{chunk-KNFDWNCH.js.map → chunk-JXT5QDJC.js.map} +0 -0
- /package/dist/{chunk-OR37STQZ.js.map → chunk-KEXYBG7Q.js.map} +0 -0
- /package/dist/{chunk-AZVANYMB.js.map → chunk-KUNFUSZ7.js.map} +0 -0
- /package/dist/{chunk-DXZNDKQD.js.map → chunk-LEEJBZ5B.js.map} +0 -0
- /package/dist/{chunk-C535KSTY.js.map → chunk-LF5CBAOS.js.map} +0 -0
- /package/dist/{chunk-RIMKJBCD.js.map → chunk-LMPTC4CX.js.map} +0 -0
- /package/dist/{chunk-3KVWXKD6.js.map → chunk-LQ47YL6E.js.map} +0 -0
- /package/dist/{chunk-H5WGWAYX.js.map → chunk-LT4J7RHI.js.map} +0 -0
- /package/dist/{chunk-DSGMYES6.js.map → chunk-MCTTONOW.js.map} +0 -0
- /package/dist/{chunk-IGHELZI7.js.map → chunk-MIECLOQC.js.map} +0 -0
- /package/dist/{chunk-FM4OUCC2.js.map → chunk-MOKYT3X3.js.map} +0 -0
- /package/dist/{chunk-RKILMLA7.js.map → chunk-MXLKI7BI.js.map} +0 -0
- /package/dist/{chunk-45WYYFP6.js.map → chunk-N3ZP4IDU.js.map} +0 -0
- /package/dist/{chunk-XRRSFQEV.js.map → chunk-NAZZLAWX.js.map} +0 -0
- /package/dist/{chunk-UWJ5P5CU.js.map → chunk-NEK4WB5P.js.map} +0 -0
- /package/dist/{chunk-6L7U46Y2.js.map → chunk-NKNVIO66.js.map} +0 -0
- /package/dist/{chunk-JKUICTLM.js.map → chunk-NLAFNMPK.js.map} +0 -0
- /package/dist/{chunk-4LKNIGHB.js.map → chunk-O2SBHS2N.js.map} +0 -0
- /package/dist/{chunk-D3RK3NGM.js.map → chunk-PCFK7HKD.js.map} +0 -0
- /package/dist/{chunk-VVCDB2T7.js.map → chunk-PCJLH45G.js.map} +0 -0
- /package/dist/{chunk-PZ24CYDO.js.map → chunk-PFAUGEV5.js.map} +0 -0
- /package/dist/{chunk-HGMWMK5K.js.map → chunk-PO3BH3KQ.js.map} +0 -0
- /package/dist/{chunk-B74GSYR6.js.map → chunk-PUTS4DYW.js.map} +0 -0
- /package/dist/{chunk-JSIDLTTG.js.map → chunk-PZ2V2XIK.js.map} +0 -0
- /package/dist/{chunk-TMEQPODK.js.map → chunk-PZ37VDB5.js.map} +0 -0
- /package/dist/{chunk-LVONK3YQ.js.map → chunk-QRKTESVE.js.map} +0 -0
- /package/dist/{chunk-HT5WSUC7.js.map → chunk-QXEDIDBZ.js.map} +0 -0
- /package/dist/{chunk-WURSS6MP.js.map → chunk-R66YMYJU.js.map} +0 -0
- /package/dist/{chunk-HDHK3SXK.js.map → chunk-RFLYID6H.js.map} +0 -0
- /package/dist/{chunk-VMFID36H.js.map → chunk-RQNZDTKT.js.map} +0 -0
- /package/dist/{chunk-A2EWJQXX.js.map → chunk-SM5QX6UK.js.map} +0 -0
- /package/dist/{chunk-FBE6AIIW.js.map → chunk-SOKNCW5U.js.map} +0 -0
- /package/dist/{chunk-PFKTGZKE.js.map → chunk-SY2AAZNB.js.map} +0 -0
- /package/dist/{chunk-DFZMKCVP.js.map → chunk-TIQPKOFW.js.map} +0 -0
- /package/dist/{chunk-HPPKLBTJ.js.map → chunk-TJQDL3JH.js.map} +0 -0
- /package/dist/{chunk-FD4Q5KFL.js.map → chunk-TLL22FFO.js.map} +0 -0
- /package/dist/{chunk-QM5H4FPT.js.map → chunk-TV6BWONY.js.map} +0 -0
- /package/dist/{chunk-EDFJBX3V.js.map → chunk-U6MPB3K6.js.map} +0 -0
- /package/dist/{chunk-TZD3U2S5.js.map → chunk-ULJAOMJA.js.map} +0 -0
- /package/dist/{chunk-H5EVWF6L.js.map → chunk-UNNJUJVD.js.map} +0 -0
- /package/dist/{chunk-Z6DKXQG7.js.map → chunk-UXXFMF4X.js.map} +0 -0
- /package/dist/{chunk-OBQVTCTW.js.map → chunk-UYNCMZX5.js.map} +0 -0
- /package/dist/{chunk-KZHW27BV.js.map → chunk-V4QZ7UBK.js.map} +0 -0
- /package/dist/{chunk-NEVRLD77.js.map → chunk-VH5EGTH2.js.map} +0 -0
- /package/dist/{chunk-QEJTQTF5.js.map → chunk-W6T5HR3Z.js.map} +0 -0
- /package/dist/{chunk-H6WWEKEV.js.map → chunk-WCMG4HYI.js.map} +0 -0
- /package/dist/{chunk-GZLLDA6P.js.map → chunk-WEFN327U.js.map} +0 -0
- /package/dist/{chunk-VW3BBTMA.js.map → chunk-WKHUZIOW.js.map} +0 -0
- /package/dist/{chunk-ANHUMDJX.js.map → chunk-WNDTLK44.js.map} +0 -0
- /package/dist/{chunk-2DS4UOYQ.js.map → chunk-WSZQNTVN.js.map} +0 -0
- /package/dist/{chunk-Z2DAWUO3.js.map → chunk-XMNUZUUA.js.map} +0 -0
- /package/dist/{chunk-GAIM5RNE.js.map → chunk-XN7NSPE6.js.map} +0 -0
- /package/dist/{chunk-FLGUVRR7.js.map → chunk-Y5BSA3I7.js.map} +0 -0
- /package/dist/{chunk-QILLL4JE.js.map → chunk-YEROLKOA.js.map} +0 -0
- /package/dist/{chunk-NDF3SH3X.js.map → chunk-YJPKDRI2.js.map} +0 -0
- /package/dist/{chunk-VAIESMPY.js.map → chunk-YVBHGMKC.js.map} +0 -0
- /package/dist/{chunk-AD22P5X3.js.map → chunk-YXA2EKV3.js.map} +0 -0
- /package/dist/{chunk-FDNJVZRE.js.map → chunk-YYCOSTUU.js.map} +0 -0
- /package/dist/{chunk-NLMTNEWW.js.map → chunk-Z6E6TUAE.js.map} +0 -0
- /package/dist/{chunk-BJW7G6EF.js.map → chunk-Z7IGO5EA.js.map} +0 -0
- /package/dist/{chunk-N7JKT4ZU.js.map → chunk-ZEIFJ6PX.js.map} +0 -0
- /package/dist/{chunk-VRGOOVDB.js.map → chunk-ZVVT72MT.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-CURJ247L.js.map → computer-viewer-25AJIDYA.js.map} +0 -0
- /package/dist/{sandbox-files-4FBG3GS2.js.map → embedded-new-voice-RZZEJT6M.js.map} +0 -0
- /package/dist/{session-realtime-2XIB254N.js.map → embedded-voice-6OKSSPLW.js.map} +0 -0
- /package/dist/{fleet-decision-row-QNSTP3VX.js.map → fleet-decision-row-NN2HXDX3.js.map} +0 -0
- /package/dist/{platform-activity-row-BMXXNZKX.js.map → platform-activity-row-ENQVIFTL.js.map} +0 -0
- /package/dist/{timeline-annotation-markers-X4K2IEOO.js.map → timeline-annotation-markers-KHNYNY2J.js.map} +0 -0
- /package/dist/{timeline-annotation-selection-MEHBW676.js.map → timeline-annotation-selection-AXEDJHBP.js.map} +0 -0
- /package/dist/{timeline-annotations-dialog-U2FPQ3UY.js.map → timeline-annotations-dialog-AV4ZBXRC.js.map} +0 -0
|
@@ -5,12 +5,12 @@ import {
|
|
|
5
5
|
DocumentProjectionArtifactSurface,
|
|
6
6
|
DocumentProjectionEditor,
|
|
7
7
|
EditableDocumentArtifactSurface
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-NEK4WB5P.js";
|
|
9
9
|
import "./chunk-2DDJ6YH6.js";
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-3RQUWFZT.js";
|
|
11
|
+
import "./chunk-CCR33J7L.js";
|
|
12
12
|
import "./chunk-TXS65BB2.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-JFK7NTEA.js";
|
|
14
14
|
export {
|
|
15
15
|
DocumentArtifactSurface,
|
|
16
16
|
DocumentEditor,
|
|
@@ -5,12 +5,12 @@ import {
|
|
|
5
5
|
PresentationEditor,
|
|
6
6
|
PresentationProjectionArtifactSurface,
|
|
7
7
|
PresentationProjectionEditor
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-KEXYBG7Q.js";
|
|
9
9
|
import "./chunk-2DDJ6YH6.js";
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-3RQUWFZT.js";
|
|
11
|
+
import "./chunk-CCR33J7L.js";
|
|
12
12
|
import "./chunk-TXS65BB2.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-JFK7NTEA.js";
|
|
14
14
|
export {
|
|
15
15
|
EditablePresentationArtifactSurface,
|
|
16
16
|
PresentationArtifactSurface,
|
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
SpreadsheetArtifactSurface,
|
|
6
6
|
SpreadsheetGrid,
|
|
7
7
|
SpreadsheetProjectionGrid
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-TV6BWONY.js";
|
|
9
|
+
import "./chunk-3RQUWFZT.js";
|
|
10
|
+
import "./chunk-CCR33J7L.js";
|
|
11
11
|
import "./chunk-TXS65BB2.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-JFK7NTEA.js";
|
|
13
13
|
export {
|
|
14
14
|
EditableSpreadsheetArtifactSurface,
|
|
15
15
|
EditableSpreadsheetGrid,
|
package/dist/artifacts.js
CHANGED
|
@@ -6,43 +6,60 @@ import {
|
|
|
6
6
|
EditableArtifactWorkbenchHost,
|
|
7
7
|
SessionArtifactViewer,
|
|
8
8
|
SiteView
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-3GU7AWG7.js";
|
|
10
10
|
import {
|
|
11
11
|
ArtifactSandbox,
|
|
12
12
|
ChatInteractiveBlock,
|
|
13
13
|
DeferredChatMedia
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-4YXAQMTD.js";
|
|
15
15
|
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
} from "./chunk-
|
|
16
|
+
EditablePresentationArtifactSurface,
|
|
17
|
+
PresentationArtifactSurface,
|
|
18
|
+
PresentationEditor,
|
|
19
|
+
PresentationProjectionArtifactSurface,
|
|
20
|
+
PresentationProjectionEditor
|
|
21
|
+
} from "./chunk-KEXYBG7Q.js";
|
|
22
22
|
import {
|
|
23
23
|
DocumentArtifactSurface,
|
|
24
24
|
DocumentEditor,
|
|
25
25
|
DocumentProjectionArtifactSurface,
|
|
26
26
|
DocumentProjectionEditor,
|
|
27
27
|
EditableDocumentArtifactSurface
|
|
28
|
-
} from "./chunk-
|
|
29
|
-
import {
|
|
30
|
-
EditablePresentationArtifactSurface,
|
|
31
|
-
PresentationArtifactSurface,
|
|
32
|
-
PresentationEditor,
|
|
33
|
-
PresentationProjectionArtifactSurface,
|
|
34
|
-
PresentationProjectionEditor
|
|
35
|
-
} from "./chunk-OR37STQZ.js";
|
|
28
|
+
} from "./chunk-NEK4WB5P.js";
|
|
36
29
|
import "./chunk-2DDJ6YH6.js";
|
|
37
30
|
import {
|
|
38
|
-
|
|
39
|
-
} from "./chunk-
|
|
31
|
+
inlineHtmlDocument
|
|
32
|
+
} from "./chunk-IGFZFLI2.js";
|
|
33
|
+
import {
|
|
34
|
+
PUBLISHED_HTML_ARTIFACT_IFRAME_SANDBOX,
|
|
35
|
+
PublishedHtmlArtifactFrame,
|
|
36
|
+
openGeniSiteBridgePortFromBootstrap,
|
|
37
|
+
publishedHtmlArtifactDocument
|
|
38
|
+
} from "./chunk-FSP334UU.js";
|
|
39
|
+
import "./chunk-IOYHDEP3.js";
|
|
40
40
|
import {
|
|
41
41
|
PatchApplyCommand,
|
|
42
42
|
useRetainedImageObjectUrl
|
|
43
|
-
} from "./chunk-
|
|
44
|
-
import "./chunk-IGVL3ELX.js";
|
|
43
|
+
} from "./chunk-LQ47YL6E.js";
|
|
45
44
|
import "./chunk-VHB3E6PT.js";
|
|
45
|
+
import "./chunk-PEHTX3V7.js";
|
|
46
|
+
import "./chunk-IGVL3ELX.js";
|
|
47
|
+
import "./chunk-TVQCDDSZ.js";
|
|
48
|
+
import {
|
|
49
|
+
isPatchFilename,
|
|
50
|
+
isRetainedImageContentType
|
|
51
|
+
} from "./chunk-WNDTLK44.js";
|
|
52
|
+
import "./chunk-LEKBNKLD.js";
|
|
53
|
+
import {
|
|
54
|
+
EditableSpreadsheetArtifactSurface,
|
|
55
|
+
EditableSpreadsheetGrid,
|
|
56
|
+
SpreadsheetArtifactSurface,
|
|
57
|
+
SpreadsheetGrid,
|
|
58
|
+
SpreadsheetProjectionGrid
|
|
59
|
+
} from "./chunk-TV6BWONY.js";
|
|
60
|
+
import {
|
|
61
|
+
ArtifactSurface
|
|
62
|
+
} from "./chunk-3RQUWFZT.js";
|
|
46
63
|
import {
|
|
47
64
|
ArtifactBadge,
|
|
48
65
|
ArtifactButton,
|
|
@@ -57,26 +74,9 @@ import {
|
|
|
57
74
|
artifactLoadErrorMessage,
|
|
58
75
|
artifactLoadErrorView,
|
|
59
76
|
useArtifactLabels
|
|
60
|
-
} from "./chunk-
|
|
61
|
-
import {
|
|
62
|
-
PUBLISHED_HTML_ARTIFACT_IFRAME_SANDBOX,
|
|
63
|
-
PublishedHtmlArtifactFrame,
|
|
64
|
-
openGeniSiteBridgePortFromBootstrap,
|
|
65
|
-
publishedHtmlArtifactDocument
|
|
66
|
-
} from "./chunk-KBF3SE7G.js";
|
|
67
|
-
import {
|
|
68
|
-
isPatchFilename,
|
|
69
|
-
isRetainedImageContentType
|
|
70
|
-
} from "./chunk-ANHUMDJX.js";
|
|
71
|
-
import "./chunk-STUCI6QA.js";
|
|
72
|
-
import {
|
|
73
|
-
inlineHtmlDocument
|
|
74
|
-
} from "./chunk-IGFZFLI2.js";
|
|
75
|
-
import "./chunk-IOYHDEP3.js";
|
|
76
|
-
import "./chunk-PEHTX3V7.js";
|
|
77
|
-
import "./chunk-TVQCDDSZ.js";
|
|
77
|
+
} from "./chunk-CCR33J7L.js";
|
|
78
78
|
import "./chunk-TXS65BB2.js";
|
|
79
|
-
import "./chunk-
|
|
79
|
+
import "./chunk-JFK7NTEA.js";
|
|
80
80
|
export {
|
|
81
81
|
ArtifactBadge,
|
|
82
82
|
ArtifactButton,
|
|
@@ -2,20 +2,22 @@
|
|
|
2
2
|
import {
|
|
3
3
|
BrowserViewer,
|
|
4
4
|
staleBrowserEndRetryDelayMs
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-PEHTX3V7.js";
|
|
5
|
+
} from "./chunk-RYSRFAHN.js";
|
|
6
|
+
import "./chunk-4HEXNAFI.js";
|
|
8
7
|
import "./chunk-ZUWF4NF7.js";
|
|
9
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-TNEZNMSN.js";
|
|
9
|
+
import "./chunk-PEHTX3V7.js";
|
|
10
|
+
import "./chunk-XV6ZYRHK.js";
|
|
11
|
+
import "./chunk-IGVL3ELX.js";
|
|
12
|
+
import "./chunk-2KO2G3RI.js";
|
|
10
13
|
import "./chunk-CM7LVUKC.js";
|
|
11
14
|
import "./chunk-TVQCDDSZ.js";
|
|
12
15
|
import "./chunk-SJGAHTY5.js";
|
|
13
16
|
import "./chunk-4NHJ6EXL.js";
|
|
14
|
-
import "./chunk-TNEZNMSN.js";
|
|
15
17
|
import "./chunk-TXS65BB2.js";
|
|
16
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-JFK7NTEA.js";
|
|
17
19
|
export {
|
|
18
20
|
BrowserViewer,
|
|
19
21
|
staleBrowserEndRetryDelayMs
|
|
20
22
|
};
|
|
21
|
-
//# sourceMappingURL=browser-viewer-
|
|
23
|
+
//# sourceMappingURL=browser-viewer-QMCNV4RI.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
ChatInteractiveBlock
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-VHB3E6PT.js";
|
|
6
|
-
import "./chunk-ZOC3OP6F.js";
|
|
7
|
-
import "./chunk-KBF3SE7G.js";
|
|
4
|
+
} from "./chunk-4YXAQMTD.js";
|
|
8
5
|
import "./chunk-IGFZFLI2.js";
|
|
6
|
+
import "./chunk-FSP334UU.js";
|
|
9
7
|
import "./chunk-IOYHDEP3.js";
|
|
8
|
+
import "./chunk-VHB3E6PT.js";
|
|
9
|
+
import "./chunk-CCR33J7L.js";
|
|
10
10
|
import "./chunk-TXS65BB2.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-JFK7NTEA.js";
|
|
12
12
|
export {
|
|
13
13
|
ChatInteractiveBlock
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=chat-interactive-block-
|
|
15
|
+
//# sourceMappingURL=chat-interactive-block-PMIAUXSO.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import {
|
|
3
|
+
openGeniGroupPresentation
|
|
4
|
+
} from "./chunk-PO3BH3KQ.js";
|
|
2
5
|
import {
|
|
3
6
|
capabilityGroupSelection,
|
|
4
7
|
sessionCapabilityGroupsFor
|
|
5
8
|
} from "./chunk-4NTPH5M6.js";
|
|
6
|
-
import {
|
|
7
|
-
openGeniGroupPresentation
|
|
8
|
-
} from "./chunk-HGMWMK5K.js";
|
|
9
9
|
import {
|
|
10
10
|
cn
|
|
11
11
|
} from "./chunk-A3MTTRCX.js";
|
|
@@ -15,23 +15,23 @@ import {
|
|
|
15
15
|
ComposerMenuRowsSkeleton,
|
|
16
16
|
lazyComposerPanel
|
|
17
17
|
} from "./chunk-O2LGEYG4.js";
|
|
18
|
-
import {
|
|
19
|
-
isComposerConnector
|
|
20
|
-
} from "./chunk-L6Y4ALSM.js";
|
|
21
18
|
import {
|
|
22
19
|
DropdownMenu,
|
|
23
20
|
DropdownMenuContent,
|
|
24
21
|
DropdownMenuTrigger
|
|
25
22
|
} from "./chunk-TREHTIBD.js";
|
|
26
23
|
import {
|
|
27
|
-
|
|
28
|
-
} from "./chunk-
|
|
24
|
+
isComposerConnector
|
|
25
|
+
} from "./chunk-L6Y4ALSM.js";
|
|
29
26
|
import {
|
|
30
27
|
ModelPolicyPickerMenu
|
|
31
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-2NC7NZCE.js";
|
|
29
|
+
import {
|
|
30
|
+
Button
|
|
31
|
+
} from "./chunk-HMU5IELG.js";
|
|
32
32
|
import {
|
|
33
33
|
ModelPolicyPicker
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-FFNPUSVO.js";
|
|
35
35
|
|
|
36
36
|
// src/app/components/pickers.tsx
|
|
37
37
|
import { ChevronDownIcon, PlugIcon } from "lucide-react";
|
|
@@ -175,4 +175,4 @@ export {
|
|
|
175
175
|
sessionToolSelectionSummary,
|
|
176
176
|
SessionToolPicker
|
|
177
177
|
};
|
|
178
|
-
//# sourceMappingURL=chunk-
|
|
178
|
+
//# sourceMappingURL=chunk-22FFOHPT.js.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// src/components/queue-draft-policy.ts
|
|
4
|
+
function requestQueueDraftEdit(composer, confirmReplacement, editImmediately) {
|
|
5
|
+
if (composer.hasDraftContent()) {
|
|
6
|
+
confirmReplacement();
|
|
7
|
+
} else {
|
|
8
|
+
editImmediately();
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
requestQueueDraftEdit
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=chunk-22GTC4MZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/queue-draft-policy.ts"],"sourcesContent":["import type { ComposerState } from \"../hooks/use-composer\";\n\n/**\n * Decide whether checking out a queued prompt would replace current composer\n * content. `hasDraftContent` reads the synchronous draft refs, so this stays\n * correct even when a controlled input update has not rendered yet.\n */\nexport function requestQueueDraftEdit(\n composer: Pick<ComposerState, \"hasDraftContent\">,\n confirmReplacement: () => void,\n editImmediately: () => void,\n): void {\n if (composer.hasDraftContent()) {\n confirmReplacement();\n } else {\n editImmediately();\n }\n}\n"],"mappings":";;;AAOO,SAAS,sBACd,UACA,oBACA,iBACM;AACN,MAAI,SAAS,gBAAgB,GAAG;AAC9B,uBAAmB;AAAA,EACrB,OAAO;AACL,oBAAgB;AAAA,EAClB;AACF;","names":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
sessionDisplayStatus
|
|
4
|
-
} from "./chunk-DHXKEJBH.js";
|
|
5
2
|
import {
|
|
6
3
|
findPickerRow
|
|
7
4
|
} from "./chunk-CFEFYPNR.js";
|
|
5
|
+
import {
|
|
6
|
+
sessionDisplayStatus
|
|
7
|
+
} from "./chunk-DHXKEJBH.js";
|
|
8
8
|
|
|
9
9
|
// src/session-list-model.ts
|
|
10
10
|
import {
|
|
@@ -13,6 +13,90 @@ import {
|
|
|
13
13
|
sessionTitleIsPending
|
|
14
14
|
} from "@opengeni/sdk";
|
|
15
15
|
import { modelDisplayName } from "@opengeni/sdk/model-display";
|
|
16
|
+
|
|
17
|
+
// src/app/lib/actions/rank.ts
|
|
18
|
+
var COMBINING_MARKS = /[\u0300-\u036f]/g;
|
|
19
|
+
var LOOSE_MATCH_BELOW = 400;
|
|
20
|
+
function foldForSearch(value) {
|
|
21
|
+
return value.normalize("NFD").replace(COMBINING_MARKS, "").toLowerCase().replace(/\s+/g, " ").trim();
|
|
22
|
+
}
|
|
23
|
+
function wordStarts(label) {
|
|
24
|
+
const starts = [];
|
|
25
|
+
for (let index = 0; index < label.length; index++) {
|
|
26
|
+
const previous = index === 0 ? " " : label[index - 1];
|
|
27
|
+
const current = label[index];
|
|
28
|
+
if (/[\p{L}\p{N}]/u.test(current) && !/[\p{L}\p{N}]/u.test(previous)) starts.push(index);
|
|
29
|
+
}
|
|
30
|
+
return starts;
|
|
31
|
+
}
|
|
32
|
+
function subsequenceScore(label, query) {
|
|
33
|
+
const startList = wordStarts(label);
|
|
34
|
+
const starts = new Set(startList);
|
|
35
|
+
const wordOf = (index) => {
|
|
36
|
+
let word = -1;
|
|
37
|
+
for (const start of startList) {
|
|
38
|
+
if (start > index) break;
|
|
39
|
+
word++;
|
|
40
|
+
}
|
|
41
|
+
return word;
|
|
42
|
+
};
|
|
43
|
+
let position = 0;
|
|
44
|
+
let score = 0;
|
|
45
|
+
let previous = -2;
|
|
46
|
+
const fits = (found) => found === previous + 1 || starts.has(found) || previous >= 0 && wordOf(found) === wordOf(previous);
|
|
47
|
+
for (const character of query) {
|
|
48
|
+
if (character === " ") continue;
|
|
49
|
+
let found = label.indexOf(character, position);
|
|
50
|
+
while (found >= 0 && !fits(found)) found = label.indexOf(character, found + 1);
|
|
51
|
+
if (found < 0) return null;
|
|
52
|
+
score += found === previous + 1 ? 3 : starts.has(found) ? 2 : 0;
|
|
53
|
+
previous = found;
|
|
54
|
+
position = found + 1;
|
|
55
|
+
}
|
|
56
|
+
return score;
|
|
57
|
+
}
|
|
58
|
+
function rankLabel(rawLabel, rawQuery) {
|
|
59
|
+
const query = foldForSearch(rawQuery);
|
|
60
|
+
if (!query) return 0;
|
|
61
|
+
const label = foldForSearch(rawLabel);
|
|
62
|
+
if (!label) return null;
|
|
63
|
+
const lengthPenalty = Math.min(label.length, 200) / 1e3;
|
|
64
|
+
if (label === query) return 1e3;
|
|
65
|
+
if (label.startsWith(query)) return 900 - lengthPenalty;
|
|
66
|
+
const at = label.indexOf(query);
|
|
67
|
+
if (at >= 0) {
|
|
68
|
+
const starts = wordStarts(label);
|
|
69
|
+
if (starts.includes(at)) return 800 - at / 100 - lengthPenalty;
|
|
70
|
+
return 600 - at / 100 - lengthPenalty;
|
|
71
|
+
}
|
|
72
|
+
const words = query.split(" ").filter(Boolean);
|
|
73
|
+
if (words.length > 1 && words.every((word) => label.includes(word))) {
|
|
74
|
+
const starts = wordStarts(label);
|
|
75
|
+
const wordStartHits = words.filter(
|
|
76
|
+
(word) => starts.some((start) => label.startsWith(word, start))
|
|
77
|
+
).length;
|
|
78
|
+
return 500 + wordStartHits / words.length * 50 - lengthPenalty;
|
|
79
|
+
}
|
|
80
|
+
if (query.replace(/ /g, "").length < 2) return null;
|
|
81
|
+
const subsequence = subsequenceScore(label, query);
|
|
82
|
+
if (subsequence === null) return null;
|
|
83
|
+
const letters = query.replace(/ /g, "").length;
|
|
84
|
+
if (subsequence < letters) return null;
|
|
85
|
+
return 100 + Math.min(subsequence, 200) - lengthPenalty * 10;
|
|
86
|
+
}
|
|
87
|
+
function rankWithKeywords(label, keywords, query) {
|
|
88
|
+
let best = rankLabel(label, query);
|
|
89
|
+
for (const keyword of keywords ?? []) {
|
|
90
|
+
const rank = rankLabel(keyword, query);
|
|
91
|
+
if (rank !== null) {
|
|
92
|
+
const discounted = rank - 150;
|
|
93
|
+
if (best === null || discounted > best) best = discounted;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return best;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// src/session-list-model.ts
|
|
16
100
|
function sessionDisplayTitle(session) {
|
|
17
101
|
return "displayTitle" in session ? session.displayTitle : deriveSessionDisplayTitle(session);
|
|
18
102
|
}
|
|
@@ -261,6 +345,10 @@ function groupSessionsByProject(sessions, projects, options = {}) {
|
|
|
261
345
|
}
|
|
262
346
|
|
|
263
347
|
export {
|
|
348
|
+
LOOSE_MATCH_BELOW,
|
|
349
|
+
foldForSearch,
|
|
350
|
+
rankLabel,
|
|
351
|
+
rankWithKeywords,
|
|
264
352
|
sessionDisplayTitle,
|
|
265
353
|
SESSION_TITLE_MAX_LENGTH,
|
|
266
354
|
sessionRenameSeed,
|
|
@@ -289,4 +377,4 @@ export {
|
|
|
289
377
|
homeSessionSections,
|
|
290
378
|
groupSessionsByProject
|
|
291
379
|
};
|
|
292
|
-
//# sourceMappingURL=chunk-
|
|
380
|
+
//# sourceMappingURL=chunk-22JFMNMF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/session-list-model.ts","../src/app/lib/actions/rank.ts"],"sourcesContent":["// Pure session-list presentation shared by the web app (rail and recent\n// sessions) and native renderers: relative-time labels, recency bucketing\n// (Today / Yesterday / Previous 7 days / Older), the running-first ordering\n// rule, status tones and the compact row metadata. No DOM, no React.\nimport {\n deriveAutomaticSessionTitlePreview,\n deriveSessionDisplayTitle,\n sessionTitleIsPending,\n type ClientModel,\n type Session,\n type SessionListEntry,\n type SessionStatus,\n} from \"@opengeni/sdk\";\nimport { modelDisplayName } from \"@opengeni/sdk/model-display\";\nimport { findPickerRow, type PickerModelRow } from \"./model-policy\";\nimport { sessionDisplayStatus, type SessionDisplayStatus } from \"./session-status-model\";\nimport { type OpenGeniText } from \"./messages/runtime\";\n\n// Title ranking shared with the web command menu, so chat search on every\n// surface orders matches the same way.\nexport { foldForSearch, LOOSE_MATCH_BELOW, rankLabel } from \"./app/lib/actions/rank\";\n\n/** A list row may be a compact page entry or a complete session response. */\nexport type SessionListRow = Session | SessionListEntry;\n\n/**\n * The title shown for a session: durable agent/user metadata once available,\n * otherwise a bounded opening-prompt preview while automatic naming is still\n * pending. Every list, header and row reads identically.\n */\nexport function sessionDisplayTitle(session: SessionListRow): string {\n return \"displayTitle\" in session ? session.displayTitle : deriveSessionDisplayTitle(session);\n}\n\n/** The maximum length a session title may be renamed to. */\nexport const SESSION_TITLE_MAX_LENGTH = 200;\n\n/**\n * The value a rename editor seeds from. A safe provisional prompt preview is\n * editable because it is also what the user sees; the UUID-derived reference\n * remains an empty draft rather than becoming an accidental rename.\n */\nexport function sessionRenameSeed(session: SessionListRow): string {\n if (\"renameSeed\" in session) return session.renameSeed;\n if (!sessionTitleIsPending(session)) {\n return session.title?.trim() || \"\";\n }\n return deriveAutomaticSessionTitlePreview(session.initialMessage) ?? \"\";\n}\n\n/**\n * Resolve a submitted draft against the current display title. Returns the\n * trimmed title to persist, or `null` when the edit is a no-op (empty,\n * unchanged from what is already shown, or still equal to the value that\n * seeded this edit) and should simply cancel.\n */\nexport function resolveRenameSubmission(\n draft: string,\n display: string,\n editSeed?: string,\n): string | null {\n const next = draft.trim();\n if (!next || next === display || (editSeed !== undefined && next === editSeed.trim())) {\n return null;\n }\n return next;\n}\n\nexport type SessionRecencyGroup = \"today\" | \"yesterday\" | \"previous7\" | \"older\";\n\nexport const SESSION_GROUP_LABELS = (t: OpenGeniText): Record<SessionRecencyGroup, string> => ({\n today: t(\"sessionListModel.today\"),\n yesterday: t(\"sessionListModel.yesterday\"),\n previous7: t(\"sessionListModel.previous7Days\"),\n older: t(\"sessionListModel.older\"),\n});\n\n/** The render order of recency groups, top → bottom. */\nexport const SESSION_GROUP_ORDER: SessionRecencyGroup[] = [\n \"today\",\n \"yesterday\",\n \"previous7\",\n \"older\",\n];\n\n/** Live states that earn the pinned-to-top, breathing-dot treatment. */\nconst RUNNING_STATUSES = new Set<SessionStatus>([\n \"running\",\n \"queued\",\n \"waiting_capacity\",\n \"recovering\",\n \"requires_action\",\n]);\n\nexport function isRunningStatus(status: SessionStatus): boolean {\n return RUNNING_STATUSES.has(status);\n}\n\n/** An idle session waiting on its own timer, while its control is active. */\nexport function sessionInputWait(\n session: Pick<SessionListRow, \"status\" | \"effectiveControl\" | \"inputWait\">,\n) {\n return session.status === \"idle\" && session.effectiveControl?.state === \"active\"\n ? (session.inputWait ?? null)\n : null;\n}\n\n/**\n * A schedule targeting this session can still start a run. Paused schedules\n * and one-time schedules whose time has passed are not upcoming. Servers\n * without the field keep the earlier any-schedule meaning.\n */\nexport function sessionHasUpcomingSchedule(\n session: Pick<SessionListRow, \"hasSchedules\" | \"hasUpcomingSchedules\">,\n): boolean {\n return session.hasUpcomingSchedules ?? session.hasSchedules === true;\n}\n\nexport function hasActiveEffectiveControl(session: SessionListRow): boolean {\n return (session.effectiveControl?.state ?? \"active\") === \"active\";\n}\n\nexport function isEffectivelyRunning(session: SessionListRow): boolean {\n // Background commands have their own chat indicator, not agent working status.\n return (\n hasActiveEffectiveControl(session) &&\n (isRunningStatus(session.status) || Boolean(sessionInputWait(session)))\n );\n}\n\n/** Most-recent activity timestamp for a session (updatedAt, then createdAt). */\nexport function sessionActivityTime(session: SessionListRow): number {\n const updated = Date.parse(session.updatedAt);\n if (!Number.isNaN(updated)) {\n return updated;\n }\n const created = Date.parse(session.createdAt);\n return Number.isNaN(created) ? 0 : created;\n}\n\n/** Deterministic newest-first ordering for every flat or forest session list. */\nexport function compareSessionActivity(left: SessionListRow, right: SessionListRow): number {\n return sessionActivityTime(right) - sessionActivityTime(left) || right.id.localeCompare(left.id);\n}\n\n/** Deterministic personal-pin order: newest pin first, then descending id. */\nexport function compareSessionPins(left: SessionListRow, right: SessionListRow): number {\n const leftPinnedAt = Date.parse(left.pinnedAt ?? \"\");\n const rightPinnedAt = Date.parse(right.pinnedAt ?? \"\");\n const leftTime = Number.isNaN(leftPinnedAt) ? 0 : leftPinnedAt;\n const rightTime = Number.isNaN(rightPinnedAt) ? 0 : rightPinnedAt;\n return rightTime - leftTime || right.id.localeCompare(left.id);\n}\n\n/** Split explicit personal pins from ordinary rows without changing the input. */\nexport function partitionPinnedSessions<T extends SessionListRow>(\n sessions: T[],\n): {\n pinned: T[];\n ordinary: T[];\n} {\n const pinned: T[] = [];\n const ordinary: T[] = [];\n for (const session of sessions) {\n (session.pinned ? pinned : ordinary).push(session);\n }\n return { pinned: pinned.sort(compareSessionPins), ordinary };\n}\n\n/** A pin-aware list as the session page returns it: the person's pins, then ordinary rows. */\nexport type PinnedSessionLists<T extends SessionListRow> = {\n pinned: T[];\n sessions: T[];\n};\n\n/** The personal pin fields a pin change or a newer read carries. */\nexport type SessionPinProjection = Pick<Session, \"id\"> &\n Partial<Pick<Session, \"pinned\" | \"pinnedAt\" | \"pinVersion\">>;\n\n/**\n * Apply one session's pin state to a pin-aware list: the row moves between the\n * pinned section (newest pin first) and the ordinary rows (newest activity\n * first). Pin revisions are monotonic, so a projection older than the row\n * already shown (a slow response after a newer change) leaves the lists as\n * they are, unless it is `authoritative` (a fresh read after a failed change,\n * which replaces an optimistic revision). A session in neither list is left out.\n */\nexport function applySessionPinToLists<T extends SessionListRow>(\n lists: PinnedSessionLists<T>,\n projection: SessionPinProjection,\n options: { authoritative?: boolean } = {},\n): PinnedSessionLists<T> {\n const current =\n lists.pinned.find((row) => row.id === projection.id) ??\n lists.sessions.find((row) => row.id === projection.id);\n if (!current) return lists;\n const pinVersion = projection.pinVersion ?? current.pinVersion ?? 0;\n if (!options.authoritative && pinVersion < (current.pinVersion ?? 0)) return lists;\n const pinned = Boolean(projection.pinned);\n const next = {\n ...current,\n pinned,\n pinnedAt: pinned ? (projection.pinnedAt ?? current.pinnedAt ?? null) : null,\n pinVersion,\n } as T;\n const others = (rows: T[]) => rows.filter((row) => row.id !== projection.id);\n return pinned\n ? {\n pinned: [...others(lists.pinned), next].sort(compareSessionPins),\n sessions: others(lists.sessions),\n }\n : {\n pinned: others(lists.pinned),\n sessions: [...others(lists.sessions), next].sort(compareSessionActivity),\n };\n}\n\n/**\n * Which recency bucket a timestamp falls into, relative to `now`. \"Today\" and\n * \"Yesterday\" are calendar-local; \"Previous 7 days\" is the rest of the trailing\n * week; everything earlier is \"Older\".\n */\nexport function recencyGroupFor(timestampMs: number, now: Date = new Date()): SessionRecencyGroup {\n const startOfToday = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime();\n const startOfYesterday = startOfToday - 24 * 60 * 60 * 1000;\n const startOfWeekWindow = startOfToday - 7 * 24 * 60 * 60 * 1000;\n if (timestampMs >= startOfToday) {\n return \"today\";\n }\n if (timestampMs >= startOfYesterday) {\n return \"yesterday\";\n }\n if (timestampMs >= startOfWeekWindow) {\n return \"previous7\";\n }\n return \"older\";\n}\n\nexport type SessionRecencyBucket<T extends SessionListRow = SessionListRow> = {\n group: SessionRecencyGroup;\n label: string;\n sessions: T[];\n};\n\nexport type GroupedSessions<T extends SessionListRow = SessionListRow> = {\n /** Running sessions, pinned above every recency group, most-recent first. */\n running: T[];\n /** Non-running sessions bucketed by recency (empty buckets dropped). */\n grouped: SessionRecencyBucket<T>[];\n};\n\n/**\n * Order + bucket the sessions for the rail. Running sessions are lifted into a\n * synthetic, always-first position regardless of recency (rendered with a\n * \"running\" marker); the remainder are bucketed by recency, most-recent first\n * within each bucket. Empty groups are dropped.\n */\nexport function groupSessionsForRail<T extends SessionListRow>(\n t: OpenGeniText,\n sessions: T[],\n now: Date = new Date(),\n): GroupedSessions<T> {\n const running = sessions.filter(isEffectivelyRunning).sort(compareSessionActivity);\n const rest = sessions\n .filter((session) => !isEffectivelyRunning(session))\n .sort(compareSessionActivity);\n\n const buckets = new Map<SessionRecencyGroup, T[]>();\n for (const session of rest) {\n const group = recencyGroupFor(sessionActivityTime(session), now);\n const list = buckets.get(group) ?? [];\n list.push(session);\n buckets.set(group, list);\n }\n\n const grouped: SessionRecencyBucket<T>[] = [];\n for (const group of SESSION_GROUP_ORDER) {\n const list = buckets.get(group);\n if (list && list.length > 0) {\n grouped.push({\n group,\n label: SESSION_GROUP_LABELS(t)[group],\n sessions: list,\n });\n }\n }\n return { running, grouped };\n}\n\nexport function relativeTimeLabel(t: OpenGeniText, value: string, now: Date = new Date()): string {\n const timestamp = Date.parse(value);\n if (Number.isNaN(timestamp)) {\n return \"\";\n }\n const diffSeconds = Math.max(0, Math.floor((now.getTime() - timestamp) / 1000));\n if (diffSeconds < 45) {\n return \"now\";\n }\n // 45 to 59 seconds reads as a minute, never \"0m\".\n const minutes = Math.max(1, Math.floor(diffSeconds / 60));\n if (minutes < 60) {\n return `${minutes}m`;\n }\n const hours = Math.floor(minutes / 60);\n if (hours < 24) {\n return `${hours}h`;\n }\n // Past a day, count calendar days in the viewer's time zone, like the long\n // form (\"4 days ago\"), so both read the same for the same chat.\n const days = Math.max(1, localCalendarDaysBetween(new Date(timestamp), now));\n if (days < 7) {\n return `${days}d`;\n }\n return new Date(timestamp).toLocaleDateString(t.locale, {\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nfunction localCalendarDaysBetween(from: Date, to: Date): number {\n const start = Date.UTC(from.getFullYear(), from.getMonth(), from.getDate());\n const end = Date.UTC(to.getFullYear(), to.getMonth(), to.getDate());\n return Math.round((end - start) / 86_400_000);\n}\n\n/** Codex subscription product ids are prefixed `codex/`. */\nexport function isCodexProductModel(modelId: string): boolean {\n return modelId.startsWith(\"codex/\");\n}\n\nexport type SessionStatusTone = \"queued\" | \"running\" | \"waiting\" | \"idle\" | \"failed\" | \"cancelled\";\n\nexport const SESSION_STATUS_TONE: Record<SessionDisplayStatus, SessionStatusTone> = {\n queued: \"queued\",\n running: \"running\",\n recovering: \"running\",\n waiting_capacity: \"waiting\",\n requires_action: \"waiting\",\n blocked: \"failed\",\n idle: \"idle\",\n failed: \"failed\",\n cancelled: \"cancelled\",\n};\n\n/** The status dot of a recent-session row: a background command reads as running. */\nexport function recentSessionStatus(\n session: Pick<SessionListRow, \"status\" | \"backgroundCommandActivity\" | \"admissionBlock\">,\n): { tone: SessionStatusTone; pulse: boolean } {\n const hasBackgroundCommand = session.backgroundCommandActivity !== undefined;\n return {\n tone: hasBackgroundCommand ? \"running\" : SESSION_STATUS_TONE[sessionDisplayStatus(session)],\n pulse: hasBackgroundCommand || session.status === \"running\",\n };\n}\n\n/** A short `owner/repo` label from the session's first repository resource. */\nexport function sessionRepoLabel(session: Pick<Session, \"resources\">): string | null {\n const repo = session.resources.find((resource) => resource.kind === \"repository\");\n if (!repo || repo.kind !== \"repository\") {\n return null;\n }\n const parts = repo.uri\n .replace(/\\.git$/, \"\")\n .split(\"/\")\n .filter(Boolean);\n return parts.length >= 2 ? parts.slice(-2).join(\"/\") : (parts.at(-1) ?? null);\n}\n\nexport function recentSessionModelPresentation<TCatalog extends ClientModel>(\n modelId: string,\n catalogRows: readonly PickerModelRow<TCatalog>[],\n): {\n label: string;\n billingClass: PickerModelRow[\"billingClass\"];\n logoUrl?: string | undefined;\n} {\n const row = findPickerRow([...catalogRows], modelId);\n return {\n label: row?.label ?? modelDisplayName(modelId),\n logoUrl: row?.catalog.logoUrl,\n billingClass:\n row?.billingClass ??\n (isCodexProductModel(modelId) ? \"codex_subscription\" : \"opengeni_credits\"),\n };\n}\n\n/**\n * The home screen's recent sessions: server pins first, then running, then\n * recency buckets, capped. `sessions` keeps the all-visible-row contract, so\n * its pins are removed before recombining the explicit pinned section.\n */\nexport function recentSessionsForHome<T extends SessionListRow>(\n t: OpenGeniText,\n sessions: T[],\n pinned: T[],\n limit = 6,\n now: Date = new Date(),\n): T[] {\n // Sub-agent sessions are reached from their parent. In a workspace that runs\n // many sub-agents they would otherwise take every slot (they run often) and\n // push the person's own conversations out of the list.\n const ordinary = sessions.filter((session) => !session.pinned && !session.parentSessionId);\n const { running, grouped } = groupSessionsForRail(t, ordinary, now);\n const topLevelPinned = pinned.filter((session) => !session.parentSessionId);\n return [...topLevelPinned, ...running, ...grouped.flatMap((bucket) => bucket.sessions)].slice(\n 0,\n limit,\n );\n}\n\n/**\n * The phone home screen's chats in two sections: every pinned conversation,\n * then the most recently used others (running first, then by recency), so\n * pins never push recent work off the screen. Sub-agent sessions are reached\n * from their parent and are left out of both.\n */\nexport function homeSessionSections<T extends SessionListRow>(\n t: OpenGeniText,\n sessions: T[],\n pinned: T[],\n recentLimit = 15,\n now: Date = new Date(),\n): { pinned: T[]; recent: T[] } {\n const ordinary = sessions.filter((session) => !session.pinned && !session.parentSessionId);\n const { running, grouped } = groupSessionsForRail(t, ordinary, now);\n return {\n pinned: pinned.filter((session) => !session.parentSessionId),\n recent: [...running, ...grouped.flatMap((bucket) => bucket.sessions)].slice(0, recentLimit),\n };\n}\n\n/** One project (workspace channel) and its sessions, as the web rail groups them. */\nexport type SessionProjectSection<T extends SessionListRow = SessionListRow> = {\n /** The channel id, or \"default\" for unfiled sessions. */\n key: string;\n channelId: string | null;\n name: string;\n sessions: T[];\n};\n\n/**\n * Group top-level sessions by project in the server's project order (pinned\n * projects first), then \"Default\" for unfiled ones and those whose project no\n * longer exists. Running sessions lead each project, then the most recent.\n * Sub-agent sessions are reached from their parent, so they are left out.\n * Projects without sessions are kept only when `keepEmpty` is set.\n */\nexport function groupSessionsByProject<T extends SessionListRow & { channelId?: string | null }>(\n sessions: readonly T[],\n projects: readonly { id: string; name: string }[],\n options: { keepEmpty?: boolean } = {},\n): SessionProjectSection<T>[] {\n const known = new Set(projects.map((project) => project.id));\n const byProject = new Map<string | null, T[]>();\n for (const session of sessions) {\n if (\"parentSessionId\" in session && session.parentSessionId) continue;\n const channelId = session.channelId ?? null;\n const key = channelId !== null && known.has(channelId) ? channelId : null;\n byProject.set(key, [...(byProject.get(key) ?? []), session]);\n }\n const order = (list: T[]) =>\n [...list].sort(\n (left, right) =>\n Number(isEffectivelyRunning(right)) - Number(isEffectivelyRunning(left)) ||\n compareSessionActivity(left, right),\n );\n const sections: SessionProjectSection<T>[] = projects\n .map((project) => ({\n key: project.id,\n channelId: project.id,\n name: project.name,\n sessions: order(byProject.get(project.id) ?? []),\n }))\n .filter((section) => options.keepEmpty || section.sessions.length > 0);\n const unfiled = byProject.get(null) ?? [];\n if (unfiled.length > 0) {\n sections.push({ key: \"default\", channelId: null, name: \"Default\", sessions: order(unfiled) });\n }\n return sections;\n}\n\nexport { findPickerRow };\n","/**\n * Ranks short labels (chat titles, action names) against what someone typed.\n *\n * Higher is better; `null` means no match. Tiers, best first:\n * whole label starts with the query, a word starts with it, it appears\n * anywhere, every query word appears in some order, and finally the query's\n * letters appear in order (\"kbsh\" → \"Keyboard shortcuts\"). Within a tier,\n * shorter labels and earlier positions win. Letters-in-order matches rank below\n * `LOOSE_MATCH_BELOW`, so a list can drop them once it has real matches.\n */\n\nconst COMBINING_MARKS = /[\\u0300-\\u036f]/g;\n\n/** Ranks below this are letters-in-order guesses rather than real matches. */\nexport const LOOSE_MATCH_BELOW = 400;\n\n/** Case- and accent-insensitive form used for matching. */\nexport function foldForSearch(value: string): string {\n return value\n .normalize(\"NFD\")\n .replace(COMBINING_MARKS, \"\")\n .toLowerCase()\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nfunction wordStarts(label: string): number[] {\n const starts: number[] = [];\n for (let index = 0; index < label.length; index++) {\n const previous = index === 0 ? \" \" : label[index - 1]!;\n const current = label[index]!;\n if (/[\\p{L}\\p{N}]/u.test(current) && !/[\\p{L}\\p{N}]/u.test(previous)) starts.push(index);\n }\n return starts;\n}\n\nfunction subsequenceScore(label: string, query: string): number | null {\n // Letters in order, read the way people abbreviate: the first letter starts a\n // word, and moving on to a later word means landing on its first letter\n // (\"kbsh\" → Keyboard shortcuts). Consecutive letters are worth more.\n const startList = wordStarts(label);\n const starts = new Set(startList);\n const wordOf = (index: number) => {\n let word = -1;\n for (const start of startList) {\n if (start > index) break;\n word++;\n }\n return word;\n };\n let position = 0;\n let score = 0;\n let previous = -2;\n // Prefer the next letter inside the current word; otherwise only the start\n // of a later word counts.\n const fits = (found: number) =>\n found === previous + 1 ||\n starts.has(found) ||\n (previous >= 0 && wordOf(found) === wordOf(previous));\n for (const character of query) {\n if (character === \" \") continue;\n let found = label.indexOf(character, position);\n while (found >= 0 && !fits(found)) found = label.indexOf(character, found + 1);\n if (found < 0) return null;\n score += found === previous + 1 ? 3 : starts.has(found) ? 2 : 0;\n previous = found;\n position = found + 1;\n }\n return score;\n}\n\nexport function rankLabel(rawLabel: string, rawQuery: string): number | null {\n const query = foldForSearch(rawQuery);\n if (!query) return 0;\n const label = foldForSearch(rawLabel);\n if (!label) return null;\n const lengthPenalty = Math.min(label.length, 200) / 1000;\n if (label === query) return 1000;\n if (label.startsWith(query)) return 900 - lengthPenalty;\n const at = label.indexOf(query);\n if (at >= 0) {\n const starts = wordStarts(label);\n if (starts.includes(at)) return 800 - at / 100 - lengthPenalty;\n return 600 - at / 100 - lengthPenalty;\n }\n const words = query.split(\" \").filter(Boolean);\n if (words.length > 1 && words.every((word) => label.includes(word))) {\n const starts = wordStarts(label);\n const wordStartHits = words.filter((word) =>\n starts.some((start) => label.startsWith(word, start)),\n ).length;\n return 500 + (wordStartHits / words.length) * 50 - lengthPenalty;\n }\n if (query.replace(/ /g, \"\").length < 2) return null;\n const subsequence = subsequenceScore(label, query);\n if (subsequence === null) return null;\n // Only keep loose matches that hit word starts or runs; random letters scattered\n // across a long title are noise.\n const letters = query.replace(/ /g, \"\").length;\n if (subsequence < letters) return null;\n return 100 + Math.min(subsequence, 200) - lengthPenalty * 10;\n}\n\n/** The best rank across a label and extra keywords (a keyword match ranks below the same match on the name). */\nexport function rankWithKeywords(\n label: string,\n keywords: readonly string[] | undefined,\n query: string,\n): number | null {\n let best = rankLabel(label, query);\n for (const keyword of keywords ?? []) {\n const rank = rankLabel(keyword, query);\n if (rank !== null) {\n const discounted = rank - 150;\n if (best === null || discounted > best) best = discounted;\n }\n }\n return best;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
authorizedWorkspaceFromList
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-D5OWJZQR.js";
|
|
5
5
|
|
|
6
6
|
// src/app/lib/workspace-navigation-preference.tsx
|
|
7
7
|
var WORKSPACE_NAVIGATION_PREFERENCE_VERSION = 1;
|
|
@@ -118,4 +118,4 @@ export {
|
|
|
118
118
|
isAuthorizedWorkspaceId,
|
|
119
119
|
resolveLandingWorkspaceId
|
|
120
120
|
};
|
|
121
|
-
//# sourceMappingURL=chunk-
|
|
121
|
+
//# sourceMappingURL=chunk-2FPS5H2D.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-CM7LVUKC.js";
|
|
5
5
|
|
|
6
6
|
// src/hooks/internal.ts
|
|
7
|
-
import { observedSessionSequence } from "@opengeni/sdk";
|
|
7
|
+
import { isTransientRequestError, observedSessionSequence } from "@opengeni/sdk";
|
|
8
8
|
import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
9
9
|
var HIDDEN_STREAM_GRACE_MS = 2e3;
|
|
10
10
|
function usePageLiveActivity(hiddenGraceMs = HIDDEN_STREAM_GRACE_MS) {
|
|
@@ -40,9 +40,31 @@ function usePageLiveActivity(hiddenGraceMs = HIDDEN_STREAM_GRACE_MS) {
|
|
|
40
40
|
}, [hiddenGraceMs]);
|
|
41
41
|
return active;
|
|
42
42
|
}
|
|
43
|
+
var DEFAULT_TRANSIENT_READ_RETRY = Object.freeze({
|
|
44
|
+
quietWindowMs: 2e4,
|
|
45
|
+
initialDelayMs: 1e3,
|
|
46
|
+
maxDelayMs: 4e3,
|
|
47
|
+
backgroundDelayMs: 15e3
|
|
48
|
+
});
|
|
49
|
+
function jittered(delayMs) {
|
|
50
|
+
return Math.round(delayMs * (0.8 + Math.random() * 0.4));
|
|
51
|
+
}
|
|
52
|
+
function transientReadRetryStep(streak, now, policy) {
|
|
53
|
+
streak.attempts += 1;
|
|
54
|
+
const quiet = now - streak.since < policy.quietWindowMs;
|
|
55
|
+
const delayMs = quiet ? Math.min(policy.maxDelayMs, policy.initialDelayMs * 2 ** (streak.attempts - 1)) : policy.backgroundDelayMs;
|
|
56
|
+
return { quiet, delayMs: Math.max(0, jittered(delayMs)) };
|
|
57
|
+
}
|
|
43
58
|
function usePolledValue(load, options = {}) {
|
|
44
59
|
const enabled = options.enabled ?? true;
|
|
45
60
|
const pollIntervalMs = options.pollIntervalMs;
|
|
61
|
+
const transientRetryRef = useRef(null);
|
|
62
|
+
transientRetryRef.current = options.transientRetry === false ? null : {
|
|
63
|
+
quietWindowMs: options.transientRetry?.quietWindowMs ?? DEFAULT_TRANSIENT_READ_RETRY.quietWindowMs,
|
|
64
|
+
initialDelayMs: options.transientRetry?.initialDelayMs ?? DEFAULT_TRANSIENT_READ_RETRY.initialDelayMs,
|
|
65
|
+
maxDelayMs: options.transientRetry?.maxDelayMs ?? DEFAULT_TRANSIENT_READ_RETRY.maxDelayMs,
|
|
66
|
+
backgroundDelayMs: options.transientRetry?.backgroundDelayMs ?? DEFAULT_TRANSIENT_READ_RETRY.backgroundDelayMs
|
|
67
|
+
};
|
|
46
68
|
const pageLive = usePageLiveActivity();
|
|
47
69
|
const [data, setData] = useState(null);
|
|
48
70
|
const [loading, setLoading] = useState(enabled);
|
|
@@ -55,6 +77,15 @@ function usePolledValue(load, options = {}) {
|
|
|
55
77
|
const requestAbortRef = useRef(null);
|
|
56
78
|
const inFlightRef = useRef(null);
|
|
57
79
|
const trailingRefreshRef = useRef(null);
|
|
80
|
+
const transientStreakRef = useRef(null);
|
|
81
|
+
const transientRetryTimerRef = useRef(null);
|
|
82
|
+
const retryLiveRef = useRef(false);
|
|
83
|
+
const cancelTransientRetry = useCallback(() => {
|
|
84
|
+
if (transientRetryTimerRef.current !== null) {
|
|
85
|
+
clearTimeout(transientRetryTimerRef.current);
|
|
86
|
+
transientRetryTimerRef.current = null;
|
|
87
|
+
}
|
|
88
|
+
}, []);
|
|
58
89
|
const [stateIdentity, setStateIdentity] = useState(() => ({ load }));
|
|
59
90
|
useEffect(() => {
|
|
60
91
|
if (stateIdentity.load !== load) {
|
|
@@ -75,14 +106,39 @@ function usePolledValue(load, options = {}) {
|
|
|
75
106
|
try {
|
|
76
107
|
const result = await load(requestAbort.signal);
|
|
77
108
|
if (ticket === generation.current && activeLoadRef.current === load && !requestAbort.signal.aborted) {
|
|
109
|
+
transientStreakRef.current = null;
|
|
110
|
+
cancelTransientRetry();
|
|
78
111
|
setData(result);
|
|
79
112
|
setError(null);
|
|
80
113
|
setLoading(false);
|
|
81
114
|
}
|
|
82
115
|
} catch (cause) {
|
|
83
116
|
if (ticket === generation.current && activeLoadRef.current === load && !requestAbort.signal.aborted) {
|
|
84
|
-
|
|
85
|
-
|
|
117
|
+
const policy = transientRetryRef.current;
|
|
118
|
+
if (policy && retryLiveRef.current && isTransientRequestError(cause)) {
|
|
119
|
+
const now = Date.now();
|
|
120
|
+
const streak = transientStreakRef.current ??= {
|
|
121
|
+
since: now,
|
|
122
|
+
attempts: 0,
|
|
123
|
+
surfaced: false
|
|
124
|
+
};
|
|
125
|
+
const step = transientReadRetryStep(streak, now, policy);
|
|
126
|
+
if (!step.quiet) {
|
|
127
|
+
if (!streak.surfaced) setError(normalizeError(cause));
|
|
128
|
+
streak.surfaced = true;
|
|
129
|
+
setLoading(false);
|
|
130
|
+
}
|
|
131
|
+
cancelTransientRetry();
|
|
132
|
+
transientRetryTimerRef.current = setTimeout(() => {
|
|
133
|
+
transientRetryTimerRef.current = null;
|
|
134
|
+
if (retryLiveRef.current) void run();
|
|
135
|
+
}, step.delayMs);
|
|
136
|
+
} else {
|
|
137
|
+
transientStreakRef.current = null;
|
|
138
|
+
cancelTransientRetry();
|
|
139
|
+
setError(normalizeError(cause));
|
|
140
|
+
setLoading(false);
|
|
141
|
+
}
|
|
86
142
|
}
|
|
87
143
|
} finally {
|
|
88
144
|
if (requestAbortRef.current === requestAbort) requestAbortRef.current = null;
|
|
@@ -91,7 +147,7 @@ function usePolledValue(load, options = {}) {
|
|
|
91
147
|
})();
|
|
92
148
|
inFlightRef.current = { load, promise };
|
|
93
149
|
return promise;
|
|
94
|
-
}, [load]);
|
|
150
|
+
}, [cancelTransientRetry, load]);
|
|
95
151
|
const refresh = useCallback(() => {
|
|
96
152
|
const existing = inFlightRef.current;
|
|
97
153
|
if (existing?.load !== load) return run();
|
|
@@ -108,7 +164,10 @@ function usePolledValue(load, options = {}) {
|
|
|
108
164
|
return promise;
|
|
109
165
|
}, [load, run]);
|
|
110
166
|
useEffect(() => {
|
|
167
|
+
transientStreakRef.current = null;
|
|
168
|
+
cancelTransientRetry();
|
|
111
169
|
if (!enabled || !pageLive) {
|
|
170
|
+
retryLiveRef.current = false;
|
|
112
171
|
setLoading(false);
|
|
113
172
|
generation.current += 1;
|
|
114
173
|
requestAbortRef.current?.abort();
|
|
@@ -116,6 +175,7 @@ function usePolledValue(load, options = {}) {
|
|
|
116
175
|
trailingRefreshRef.current = null;
|
|
117
176
|
return;
|
|
118
177
|
}
|
|
178
|
+
retryLiveRef.current = true;
|
|
119
179
|
setLoading(true);
|
|
120
180
|
let cancelled = false;
|
|
121
181
|
let timer = null;
|
|
@@ -130,6 +190,8 @@ function usePolledValue(load, options = {}) {
|
|
|
130
190
|
if (pollIntervalMs === void 0 || pollIntervalMs <= 0) {
|
|
131
191
|
return () => {
|
|
132
192
|
cancelled = true;
|
|
193
|
+
retryLiveRef.current = false;
|
|
194
|
+
cancelTransientRetry();
|
|
133
195
|
generation.current += 1;
|
|
134
196
|
requestAbortRef.current?.abort();
|
|
135
197
|
inFlightRef.current = null;
|
|
@@ -139,12 +201,14 @@ function usePolledValue(load, options = {}) {
|
|
|
139
201
|
return () => {
|
|
140
202
|
cancelled = true;
|
|
141
203
|
if (timer !== null) clearTimeout(timer);
|
|
204
|
+
retryLiveRef.current = false;
|
|
205
|
+
cancelTransientRetry();
|
|
142
206
|
generation.current += 1;
|
|
143
207
|
requestAbortRef.current?.abort();
|
|
144
208
|
inFlightRef.current = null;
|
|
145
209
|
trailingRefreshRef.current = null;
|
|
146
210
|
};
|
|
147
|
-
}, [run, enabled, pageLive, pollIntervalMs]);
|
|
211
|
+
}, [run, enabled, pageLive, pollIntervalMs, cancelTransientRetry]);
|
|
148
212
|
const identityMatches = stateIdentity.load === load;
|
|
149
213
|
return {
|
|
150
214
|
data: identityMatches ? data : null,
|
|
@@ -378,10 +442,12 @@ function useDebouncedCallback(callback, delayMs = 150) {
|
|
|
378
442
|
|
|
379
443
|
export {
|
|
380
444
|
usePageLiveActivity,
|
|
445
|
+
DEFAULT_TRANSIENT_READ_RETRY,
|
|
446
|
+
transientReadRetryStep,
|
|
381
447
|
usePolledValue,
|
|
382
448
|
useMutationRunner,
|
|
383
449
|
projectionReadThrough,
|
|
384
450
|
useSessionEventTrigger,
|
|
385
451
|
useDebouncedCallback
|
|
386
452
|
};
|
|
387
|
-
//# sourceMappingURL=chunk-
|
|
453
|
+
//# sourceMappingURL=chunk-2KO2G3RI.js.map
|