@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/app/lib/sessions-group.tsx"],"sourcesContent":["// Pure helpers behind the rail's session list: relative-time labels, recency\n// bucketing (Today / Yesterday / Previous 7 days / Older), and the ordering\n// rule — RUNNING sessions pinned to the very top, then most-recent activity\n// first within each recency group.\nimport { t } from \"./console-text\";\nimport { formatWaitingSince } from \"./format\";\nimport { awaitsPerson } from \"./needs-you\";\nimport { sessionInputWait } from \"./session-rail\";\nimport { sessionSiteOrigin, type SessionSiteOrigin } from \"./session-site-origin\";\nimport type { SessionListTotals, SiteConversationGroup } from \"@opengeni/sdk\";\nimport type { RailSession as Session } from \"./session-list-entry\";\n\n// The flat list rules are shared with native renderers through the pure\n// session-list model; the rail-only forest, project and browse logic stays here.\nimport {\n compareSessionActivity,\n hasActiveEffectiveControl,\n isEffectivelyRunning,\n partitionPinnedSessions,\n recencyGroupFor,\n SESSION_GROUP_LABELS,\n SESSION_GROUP_ORDER,\n sessionActivityTime,\n type SessionRecencyGroup,\n} from \"../../session-list-model\";\n\nexport {\n compareSessionActivity,\n compareSessionPins,\n groupSessionsForRail,\n isRunningStatus,\n partitionPinnedSessions,\n recencyGroupFor,\n relativeTimeLabel,\n SESSION_GROUP_LABELS,\n SESSION_GROUP_ORDER,\n sessionActivityTime,\n type GroupedSessions,\n type SessionRecencyBucket,\n type SessionRecencyGroup,\n} from \"../../session-list-model\";\n\n/* ----------------------------------------------------------------------------\n Lineage nesting for the rail\n\n The rail nests spawned worker sessions under the manager that spawned them\n (parentSessionId). A session is a ROOT in the rail when it has no parent OR\n its parent isn't in the loaded page (an orphan child renders at the root, as\n before). Roots are pinned/bucketed exactly like the flat list — but a root\n counts as \"running\" when it OR any descendant is active, so a manager whose\n only activity is a live child still floats to the top.\n -------------------------------------------------------------------------- */\n\nexport type SessionTreeNode = {\n /** Presentation-only group; never persisted or used for session actions. */\n siteGroup?: SessionSiteOrigin | undefined;\n /**\n * A Site row's complete server counts, independent of which conversations\n * are loaded. Absent when the row was built from loaded conversations only.\n */\n siteSummary?: SiteRowSummary | undefined;\n session: Session;\n children: SessionTreeNode[];\n /** A descendant (any depth, not the node itself) is running/queued/awaiting action. */\n hasActiveDescendant: boolean;\n};\n\nexport type RailAggregateStatusKind =\n | \"send_failed\"\n | \"needs_attention\"\n | \"failed\"\n | \"active\"\n | \"queued\"\n | \"waiting\"\n | \"unread\"\n | \"active_work\"\n | \"neutral\";\n\nexport type RailAggregateStatus = {\n kind: RailAggregateStatusKind;\n /** Number of sessions represented by the winning status. */\n count: number;\n /** Total sessions represented by the node or section. */\n total: number;\n label: string;\n /**\n * `needs_attention` only: when the longest-waiting represented session\n * entered `requires_action` (the earliest known `requiresActionSince` /\n * `treeStats.attentionSince`). Absent when no server reported it.\n */\n attentionSince?: string | undefined;\n};\n\nexport type RailStatusCounts = {\n total: number;\n sendFailed: number;\n attention: number;\n /** Earliest known requires_action entry across the counted `attention` sessions. */\n attentionSince: string | null;\n failed: number;\n active: number;\n queued: number;\n /** Idle sessions parked on their own wake-up (input or timer), not executing. */\n waiting: number;\n unread: number;\n activeWork: number;\n};\n\n/** Complete ordinary project counters; absent groups are authoritative zeroes. */\nexport function sessionProjectTotals(\n totals: SessionListTotals,\n channelIds: readonly string[],\n): Map<string | null, RailStatusCounts> {\n const known = new Set(channelIds);\n const zero = (): RailStatusCounts => ({\n total: 0,\n sendFailed: 0,\n attention: 0,\n attentionSince: null,\n failed: 0,\n active: 0,\n queued: 0,\n waiting: 0,\n unread: 0,\n activeWork: 0,\n });\n const result = new Map<string | null, RailStatusCounts>([\n ...channelIds.map((id) => [id, zero()] as const),\n [null, zero()],\n ]);\n for (const group of totals.groups) {\n const id = group.channelId && known.has(group.channelId) ? group.channelId : null;\n // Server `active` includes input waits for older clients; split them out.\n const waiting = Math.min(group.waiting ?? 0, group.active);\n addRailStatusCounts(result.get(id)!, {\n ...group,\n active: group.active - waiting,\n waiting,\n sendFailed: 0,\n });\n }\n return result;\n}\n\nfunction earliestIso(a: string | null | undefined, b: string | null | undefined): string | null {\n if (!a) return b ?? null;\n if (!b) return a;\n return Date.parse(b) < Date.parse(a) ? b : a;\n}\n\nfunction ownRailStatusCounts(\n session: Session,\n localDeliveryAttention: ReadonlyMap<string, number>,\n): RailStatusCounts {\n return {\n total: 1,\n sendFailed: localDeliveryAttention.get(session.id) ?? 0,\n attention: awaitsPerson(session) ? 1 : 0,\n attentionSince: awaitsPerson(session) ? (session.requiresActionSince ?? null) : null,\n // Failed is a review signal in the rail, not a permanent copy of the\n // lifecycle badge. Opening the session (or a parent agent consuming its\n // result) acknowledges the failure together with the unread frontier.\n failed: session.status === \"failed\" && session.unread ? 1 : 0,\n active:\n hasActiveEffectiveControl(session) &&\n (session.status === \"running\" || session.status === \"recovering\")\n ? 1\n : 0,\n queued:\n hasActiveEffectiveControl(session) &&\n (session.status === \"queued\" || session.status === \"waiting_capacity\")\n ? 1\n : 0,\n waiting: sessionInputWait(session) ? 1 : 0,\n unread: session.unread ? 1 : 0,\n activeWork: session.activelyWorking ? 1 : 0,\n };\n}\n\nfunction addRailStatusCounts(target: RailStatusCounts, source: RailStatusCounts): void {\n target.total += source.total;\n target.sendFailed += source.sendFailed;\n target.attention += source.attention;\n target.attentionSince = earliestIso(target.attentionSince, source.attentionSince);\n target.failed += source.failed;\n target.active += source.active;\n target.queued += source.queued;\n target.waiting += source.waiting;\n target.unread += source.unread;\n target.activeWork += source.activeWork;\n}\n\nfunction railStatusCounts(\n node: SessionTreeNode,\n localDeliveryAttention: ReadonlyMap<string, number>,\n): RailStatusCounts {\n if (node.siteGroup && node.siteSummary) {\n // Complete server counts; loaded rows add only browser-local send failures.\n const summary = node.siteSummary;\n const waiting = Math.min(summary.waiting, summary.active);\n return {\n total: summary.total,\n sendFailed: node.children.reduce(\n (total, child) => total + loadedLocalDeliveryFailureCount(child, localDeliveryAttention),\n 0,\n ),\n attention: summary.attention,\n attentionSince: summary.attentionSince,\n failed: summary.failed,\n active: summary.active - waiting,\n queued: summary.queued,\n waiting,\n unread: summary.unread,\n activeWork: summary.activeWork,\n };\n }\n if (node.siteGroup) {\n const counts = ownRailStatusCounts(node.session, localDeliveryAttention);\n for (const key of [\n \"total\",\n \"sendFailed\",\n \"attention\",\n \"failed\",\n \"active\",\n \"queued\",\n \"waiting\",\n \"unread\",\n \"activeWork\",\n ] as const)\n counts[key] = 0;\n counts.attentionSince = null;\n for (const child of node.children)\n addRailStatusCounts(counts, railStatusCounts(child, localDeliveryAttention));\n return counts;\n }\n const counts = ownRailStatusCounts(node.session, localDeliveryAttention);\n const stats = node.session.treeStats;\n if (stats) {\n counts.total += stats.totalDescendants;\n counts.attention += stats.attentionDescendants;\n counts.attentionSince = earliestIso(counts.attentionSince, stats.attentionSince);\n counts.failed += stats.unreadFailedDescendants ?? stats.failedDescendants;\n counts.active += stats.runningDescendants;\n counts.queued += stats.queuedDescendants;\n counts.waiting += stats.waitingDescendants ?? 0;\n counts.unread += stats.unreadDescendants ?? 0;\n counts.activeWork += stats.activelyWorkingDescendants ?? 0;\n\n // Scheduled-task grouping appends older root runs as synthetic children of\n // the newest run. They are not part of that run's server treeStats, unlike\n // ordinary spawned children, so include only those extra roots here.\n for (const child of node.children) {\n if (child.session.parentSessionId !== node.session.id) {\n addRailStatusCounts(counts, railStatusCounts(child, localDeliveryAttention));\n } else {\n counts.sendFailed += loadedLocalDeliveryFailureCount(child, localDeliveryAttention);\n }\n }\n } else {\n for (const child of node.children) {\n addRailStatusCounts(counts, railStatusCounts(child, localDeliveryAttention));\n }\n }\n return counts;\n}\n\n/**\n * Durable treeStats already account for ordinary descendants' lifecycle state,\n * but browser-local delivery failures have no server aggregate. Fold only that\n * local fact through the loaded child tree so collapsed parents stay truthful.\n */\nfunction loadedLocalDeliveryFailureCount(\n node: SessionTreeNode,\n localDeliveryAttention: ReadonlyMap<string, number>,\n): number {\n return (\n (localDeliveryAttention.get(node.session.id) ?? 0) +\n node.children.reduce(\n (total, child) => total + loadedLocalDeliveryFailureCount(child, localDeliveryAttention),\n 0,\n )\n );\n}\n\n/** One status for a collapsed parent or workstream, including all descendants. */\nexport function summarizeRailNodes(\n nodes: readonly SessionTreeNode[],\n localDeliveryAttention: ReadonlyMap<string, number> = new Map(),\n now: Date = new Date(),\n): RailAggregateStatus {\n const counts: RailStatusCounts = {\n total: 0,\n sendFailed: 0,\n attention: 0,\n attentionSince: null,\n failed: 0,\n active: 0,\n queued: 0,\n waiting: 0,\n unread: 0,\n activeWork: 0,\n };\n for (const node of nodes) {\n addRailStatusCounts(counts, railStatusCounts(node, localDeliveryAttention));\n }\n\n return summarizeRailStatusCounts(counts, now);\n}\n\n/** Shared presentation for complete server metadata and loaded node summaries. */\nexport function summarizeRailStatusCounts(\n counts: RailStatusCounts,\n now: Date = new Date(),\n): RailAggregateStatus {\n if (counts.sendFailed > 0) {\n return {\n kind: \"send_failed\",\n count: counts.sendFailed,\n total: counts.total,\n label: `${counts.sendFailed} message${counts.sendFailed === 1 ? \"\" : \"s\"} not sent`,\n };\n }\n\n if (counts.attention > 0) {\n // \"2 need you · 10h\": how long the longest-waiting one has been blocked on\n // a human, so a parked child is never silent in a collapsed parent row.\n const waiting = counts.attentionSince ? formatWaitingSince(counts.attentionSince, now) : \"\";\n return {\n kind: \"needs_attention\",\n count: counts.attention,\n total: counts.total,\n label: `${counts.attention} need${counts.attention === 1 ? \"s\" : \"\"} you${\n waiting ? ` · ${waiting}` : \"\"\n }`,\n ...(counts.attentionSince ? { attentionSince: counts.attentionSince } : {}),\n };\n }\n if (counts.failed > 0) {\n return {\n kind: \"failed\",\n count: counts.failed,\n total: counts.total,\n label: `${counts.failed} failed`,\n };\n }\n if (counts.active > 0) {\n return {\n kind: \"active\",\n count: counts.active,\n total: counts.total,\n label: `${counts.active} working`,\n };\n }\n if (counts.queued > 0) {\n return {\n kind: \"queued\",\n count: counts.queued,\n total: counts.total,\n label: `${counts.queued} waiting to run`,\n };\n }\n if (counts.waiting > 0) {\n return {\n kind: \"waiting\",\n count: counts.waiting,\n total: counts.total,\n label: `${counts.waiting} waiting to resume`,\n };\n }\n if (counts.unread > 0) {\n return {\n kind: \"unread\",\n count: counts.unread,\n total: counts.total,\n label: `${counts.unread} unread`,\n };\n }\n if (counts.activeWork > 0) {\n return {\n kind: \"active_work\",\n count: counts.activeWork,\n total: counts.total,\n label: `${counts.activeWork} actively working`,\n };\n }\n return {\n kind: \"neutral\",\n count: 0,\n total: counts.total,\n label: counts.total > 0 ? \"Read\" : \"Empty\",\n };\n}\n\n/**\n * Merge two projections of the same session for the rail. Detail/SSE data is\n * fresher for lifecycle fields, but detail reads intentionally omit treeStats.\n * An omitted list-only field must not make the selected row forget its loaded\n * hierarchy summary (and therefore lose its disclosure control).\n */\nexport function mergeSessionForRail<T extends Session>(current: Session, incoming: T): T {\n if (incoming.treeStats !== undefined || current.treeStats === undefined) {\n return incoming;\n }\n return { ...incoming, treeStats: current.treeStats };\n}\n\nexport type SessionForest = {\n running: SessionTreeNode[];\n grouped: {\n group: string;\n label: string;\n sessions: SessionTreeNode[];\n }[];\n};\n\nexport type SessionBrowseGroupBy = \"activity\" | \"project\" | \"none\" | \"created\" | \"creator\";\nexport type SessionBrowseSortBy = \"updatedAt\" | \"createdAt\" | \"name\";\n\nconst sessionNameEncoder = new TextEncoder();\nfunction sessionNameSortKey(title: string | null | undefined): Uint8Array {\n return sessionNameEncoder.encode(\n (title ?? \"\").replace(/^ +| +$/g, \"\").replace(/[A-Z]/g, (letter) => letter.toLowerCase()),\n );\n}\n\nfunction sessionSortMicroseconds(value: string): number {\n const fraction = value.match(/\\.(\\d+)(?:Z|[+-]\\d{2}:\\d{2})$/)?.[1] ?? \"\";\n return Number(fraction.padEnd(6, \"0\").slice(3, 6));\n}\n\n/** The same ordering as the server page, reapplied after live projection merges. */\nexport function compareSessionBrowse(\n left: Session,\n right: Session,\n sortBy: SessionBrowseSortBy,\n): number {\n if (sortBy === \"name\") {\n const a = sessionNameSortKey(left.title);\n const b = sessionNameSortKey(right.title);\n for (let index = 0; index < Math.min(a.length, b.length); index += 1) {\n if (a[index] !== b[index]) return a[index]! - b[index]!;\n }\n return a.length - b.length || left.id.localeCompare(right.id);\n }\n return (\n Date.parse(right[sortBy]) - Date.parse(left[sortBy]) ||\n sessionSortMicroseconds(right[sortBy]) - sessionSortMicroseconds(left[sortBy]) ||\n right.id.localeCompare(left.id)\n );\n}\n\nexport function sortSessionForest(\n forest: SessionForest,\n sortBy: SessionBrowseSortBy,\n): SessionForest {\n const sortNodes = (nodes: SessionTreeNode[]): SessionTreeNode[] =>\n nodes\n .map((node) => ({ ...node, children: sortNodes(node.children) }))\n .sort((a, b) => compareSessionBrowse(a.session, b.session, sortBy));\n return {\n running: sortNodes(forest.running),\n grouped: forest.grouped.map((bucket) => ({\n ...bucket,\n sessions: sortNodes(bucket.sessions),\n })),\n };\n}\nexport type SessionBrowseDateField = \"activity\" | \"created\";\nexport type SessionBrowseDateRange = \"any\" | \"today\" | \"week\" | \"month\";\n\nexport function sessionCreatorKey(session: Session): string {\n return `${session.createdBy.kind}:${session.createdBy.subjectId}`;\n}\n\nexport function sessionCreatorLabel(session: Session): string {\n const explicit = session.createdBy.label?.trim();\n if (explicit) return explicit;\n if (session.createdBy.subjectId === \"unattributed-legacy\") return \"Unattributed\";\n if (session.createdBy.kind === \"service\") {\n return `Service · ${session.createdBy.subjectId}`;\n }\n return session.createdBy.subjectId;\n}\n\nexport type SessionCreatorOption = {\n value: string;\n label: string;\n};\n\n/**\n * Loaded creator choices with identity-specific labels only when frozen display\n * labels collide. The subject ID remains opaque; it is displayed, not parsed.\n */\nexport function sessionCreatorLabelMap(sessions: Session[]): ReadonlyMap<string, string> {\n const byKey = new Map<\n string,\n { label: string; kind: Session[\"createdBy\"][\"kind\"]; subjectId: string }\n >();\n for (const session of sessions) {\n byKey.set(sessionCreatorKey(session), {\n label: sessionCreatorLabel(session),\n kind: session.createdBy.kind,\n subjectId: session.createdBy.subjectId,\n });\n }\n\n const labelCounts = new Map<string, number>();\n for (const creator of byKey.values()) {\n labelCounts.set(creator.label, (labelCounts.get(creator.label) ?? 0) + 1);\n }\n\n return new Map(\n [...byKey.entries()]\n .map(([value, creator]) => ({\n value,\n label:\n labelCounts.get(creator.label) === 1\n ? creator.label\n : `${creator.label} · ${creator.kind === \"service\" ? \"Service\" : \"Subject\"} · ${creator.subjectId}`,\n }))\n .sort(\n (left, right) =>\n left.label.localeCompare(right.label) || left.value.localeCompare(right.value),\n )\n .map((creator) => [creator.value, creator.label]),\n );\n}\n\nexport function sessionCreatorOptions(sessions: Session[]): SessionCreatorOption[] {\n return [...sessionCreatorLabelMap(sessions)].map(([value, label]) => ({ value, label }));\n}\n\n/** Drop a flat-search creator selection that is not valid for hierarchical browse roots. */\nexport function normalizeSessionBrowseCreator(\n creator: string | null,\n creatorLabels: ReadonlyMap<string, string>,\n hierarchical: boolean,\n): string | null {\n if (!hierarchical || !creator || creatorLabels.has(creator)) return creator;\n return null;\n}\n\n/** Count matching rows in flat search, or matching workstream roots in hierarchical browse. */\nexport function sessionBrowseResultCount(\n sessions: readonly Session[],\n hierarchical: boolean,\n): number {\n if (!hierarchical) return sessions.length;\n const loadedIds = new Set(sessions.map((session) => session.id));\n return sessions.filter(\n (session) => !session.parentSessionId || !loadedIds.has(session.parentSessionId),\n ).length;\n}\n\nfunction browseTimestamp(session: Session, field: SessionBrowseDateField): number {\n if (field === \"activity\") return sessionActivityTime(session);\n const created = Date.parse(session.createdAt);\n return Number.isNaN(created) ? 0 : created;\n}\n\nexport function filterSessionsForBrowse<T extends Session>(\n sessions: T[],\n options: {\n creator: string | null;\n dateField: SessionBrowseDateField;\n dateRange: SessionBrowseDateRange;\n /** Filter whole loaded workstreams by their root instead of orphaning descendants. */\n hierarchical?: boolean | undefined;\n now?: Date | undefined;\n },\n): T[] {\n const now = options.now ?? new Date();\n const startOfToday = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime();\n const threshold =\n options.dateRange === \"today\"\n ? startOfToday\n : options.dateRange === \"week\"\n ? startOfToday - 6 * 24 * 60 * 60 * 1000\n : options.dateRange === \"month\"\n ? startOfToday - 29 * 24 * 60 * 60 * 1000\n : null;\n const matches = (session: T): boolean =>\n (!options.creator || sessionCreatorKey(session) === options.creator) &&\n (threshold === null || browseTimestamp(session, options.dateField) >= threshold);\n if (!options.hierarchical) return sessions.filter(matches);\n\n const byId = new Map(sessions.map((session) => [session.id, session]));\n const rootById = new Map<string, T>();\n const hierarchyRoot = (session: T): T => {\n const cached = rootById.get(session.id);\n if (cached) return cached;\n\n const path: T[] = [];\n const seen = new Set<string>();\n let current = session;\n while (current.parentSessionId) {\n if (seen.has(current.id)) {\n // A pathological cycle has no meaningful root. Fall back to direct\n // row filtering so every member stays independently reachable.\n return session;\n }\n seen.add(current.id);\n path.push(current);\n const parent = byId.get(current.parentSessionId);\n if (!parent) break;\n current = parent;\n }\n rootById.set(current.id, current);\n for (const member of path) rootById.set(member.id, current);\n return current;\n };\n\n return sessions.filter((session) => matches(hierarchyRoot(session)));\n}\n\n/** Regroup already-built workstream roots without flattening their descendants. */\nexport function groupSessionForestForBrowse(\n forest: SessionForest,\n groupBy: Exclude<SessionBrowseGroupBy, \"activity\">,\n options: {\n now?: Date | undefined;\n creatorLabels?: ReadonlyMap<string, string> | undefined;\n } = {},\n): SessionForest {\n const now = options.now ?? new Date();\n const roots = forestRoots(forest);\n if (groupBy === \"none\" || groupBy === \"project\") {\n return { running: [], grouped: [{ group: \"none\", label: \"Sessions\", sessions: roots }] };\n }\n const running = roots\n .filter(nodeIsActive)\n .sort((left, right) => compareSessionActivity(left.session, right.session));\n const rest = roots.filter((node) => !nodeIsActive(node));\n if (groupBy === \"created\") {\n const buckets = new Map<SessionRecencyGroup, SessionTreeNode[]>();\n for (const node of rest) {\n const group = recencyGroupFor(browseTimestamp(node.session, \"created\"), now);\n const list = buckets.get(group) ?? [];\n list.push(node);\n buckets.set(group, list);\n }\n return {\n running,\n grouped: SESSION_GROUP_ORDER.flatMap((group) => {\n const list = buckets.get(group);\n if (!list?.length) return [];\n const label =\n group === \"today\"\n ? \"Created today\"\n : group === \"yesterday\"\n ? \"Created yesterday\"\n : group === \"previous7\"\n ? \"Created in previous 7 days\"\n : \"Created earlier\";\n return [\n {\n group: `created:${group}`,\n label,\n sessions: list.sort(\n (left, right) =>\n browseTimestamp(right.session, \"created\") -\n browseTimestamp(left.session, \"created\") ||\n right.session.id.localeCompare(left.session.id),\n ),\n },\n ];\n }),\n };\n }\n\n const creatorLabels =\n options.creatorLabels ?? sessionCreatorLabelMap(roots.map((node) => node.session));\n const creators = new Map<string, { label: string; sessions: SessionTreeNode[] }>();\n for (const node of rest) {\n const key = sessionCreatorKey(node.session);\n const bucket = creators.get(key) ?? {\n label: creatorLabels.get(key) ?? sessionCreatorLabel(node.session),\n sessions: [],\n };\n bucket.sessions.push(node);\n creators.set(key, bucket);\n }\n return {\n running,\n grouped: [...creators.entries()]\n .sort(([, left], [, right]) => left.label.localeCompare(right.label))\n .map(([key, bucket]) => ({\n group: `creator:${key}`,\n label: bucket.label,\n sessions: bucket.sessions.sort((left, right) =>\n compareSessionActivity(left.session, right.session),\n ),\n })),\n };\n}\n\n/** Build and regroup a loaded session set while preserving its lineage tree. */\nexport function groupSessionsForBrowse(\n sessions: Session[],\n groupBy: Exclude<SessionBrowseGroupBy, \"activity\">,\n options: {\n now?: Date | undefined;\n creatorLabels?: ReadonlyMap<string, string> | undefined;\n } = {},\n): SessionForest {\n return groupSessionForestForBrowse(buildRailForest(sessions, options.now), groupBy, options);\n}\n\nexport type PinnedRailSections = {\n /** Complete loaded hierarchy, used for expansion and lineage lookups. */\n complete: SessionForest;\n /** Every explicit pin is an independently ordered shortcut root. */\n pinned: SessionTreeNode[];\n /** The ordinary hierarchy with every pin-owned subtree removed. */\n ordinary: SessionForest;\n};\n\n/** Whether the node's own status, or any descendant, is in a live state. */\nexport function nodeIsActive(node: SessionTreeNode): boolean {\n const stats = node.session.treeStats;\n const summarizedActive = Boolean(\n stats &&\n stats.runningDescendants +\n stats.queuedDescendants +\n (stats.waitingDescendants ?? 0) +\n stats.attentionDescendants >\n 0,\n );\n return isEffectivelyRunning(node.session) || node.hasActiveDescendant || summarizedActive;\n}\n\n/** Bucket already-built roots using the rail's activity and recency rules. */\n/**\n * The scheduled task a session was created for, or null. The worker stamps this\n * onto every session it generates for a run; it is deliberately read from\n * metadata rather than a column, because that is where the scheduler writes it.\n * A session a human started never carries the key, so it never groups.\n */\nexport function scheduledTaskIdOf(session: Session): string | null {\n if (\"scheduledTaskId\" in session) return session.scheduledTaskId;\n const value = (session.metadata as Record<string, unknown> | undefined)?.scheduledTaskId;\n return typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\n/**\n * Collapse repeat runs of one scheduled task into a single rail entry.\n *\n * A schedule that fires hourly would otherwise push every other session out of\n * the rail, so runs of the same task fold together. This deliberately does NOT\n * introduce a scheduled-task row type: the newest run IS the entry, and the\n * older runs become its children, so the group renders and behaves exactly like\n * an ordinary session with spawned children. Clicking it opens the latest run,\n * expanding it reveals the rest, and each one stays individually openable.\n *\n * A task with a single run is left completely alone - one session is not a\n * flood, and wrapping it would only add a disclosure with nothing behind it.\n *\n * `roots` arrives running-first-then-recency, not purely newest-first, so the\n * members are re-sorted by activity here: the umbrella must be the latest run,\n * and the runs behind it must read newest to oldest. The group keeps the list\n * position of whichever member ranked highest in the incoming order, so folding\n * never pushes a live run down the rail.\n */\nexport function groupScheduledRuns(roots: SessionTreeNode[]): SessionTreeNode[] {\n const membersByTask = new Map<string, SessionTreeNode[]>();\n for (const node of roots) {\n const taskId = scheduledTaskIdOf(node.session);\n if (!taskId) continue;\n const members = membersByTask.get(taskId) ?? [];\n members.push(node);\n membersByTask.set(taskId, members);\n }\n for (const members of membersByTask.values()) {\n members.sort((left, right) => compareSessionActivity(left.session, right.session));\n }\n const grouped: SessionTreeNode[] = [];\n const emitted = new Set<string>();\n for (const node of roots) {\n const taskId = scheduledTaskIdOf(node.session);\n const members = taskId ? (membersByTask.get(taskId) ?? []) : [];\n if (members.length < 2) {\n grouped.push(node);\n continue;\n }\n if (emitted.has(taskId!)) continue;\n emitted.add(taskId!);\n const [latestRun, ...olderRuns] = members as [SessionTreeNode, ...SessionTreeNode[]];\n grouped.push({\n ...latestRun,\n // The latest run's own spawned children stay first; previous runs follow,\n // so a subagent of the latest run never sorts below an older run.\n children: [...latestRun.children, ...olderRuns],\n hasActiveDescendant:\n latestRun.hasActiveDescendant ||\n olderRuns.some((run) => nodeIsActive(run) || run.hasActiveDescendant),\n });\n }\n return grouped;\n}\n\nexport type SiteRowSummary = Omit<SiteConversationGroup, \"siteId\" | \"channelId\" | \"title\">;\n\n/**\n * A Site row's stable id. Rows are per project when the rail shows projects,\n * so a Site used from two projects appears in each; otherwise one per Site.\n */\nexport function siteRowKey(siteId: string, channelId?: string | null): string {\n return channelId === undefined ? `site:${siteId}` : `site:${siteId}:${channelId ?? \"default\"}`;\n}\n\n/** The Site and project a Site row stands for, or null for an ordinary id. */\nexport function parseSiteRowKey(\n key: string,\n): { siteId: string; channelId?: string | null | undefined } | null {\n const match = /^site:([0-9a-f-]{36})(?::(.+))?$/iu.exec(key);\n if (!match) return null;\n const channel = match[2];\n return channel === undefined\n ? { siteId: match[1]! }\n : { siteId: match[1]!, channelId: channel === \"default\" ? null : channel };\n}\n\nfunction laterIso(a: string, b: string | undefined): string {\n if (!b) return a;\n return Date.parse(b) > Date.parse(a) ? b : a;\n}\n\n/** Merge per-project server groups into one per Site for rails without projects. */\nfunction siteRowSummaries(\n groups: readonly SiteConversationGroup[],\n byProject: boolean,\n): Map<string, { origin: SessionSiteOrigin; channelId: string | null; summary: SiteRowSummary }> {\n const rows = new Map<\n string,\n { origin: SessionSiteOrigin; channelId: string | null; summary: SiteRowSummary }\n >();\n for (const group of groups) {\n const key = siteRowKey(group.siteId, byProject ? group.channelId : undefined);\n const { siteId, channelId, title, ...summary } = group;\n const current = rows.get(key);\n if (!current) {\n // A Site this viewer cannot read and that kept no label still needs a name.\n const origin = { siteId, title: title.trim() || \"Untitled Site\" };\n rows.set(key, { origin, channelId, summary: { ...summary } });\n continue;\n }\n const merged = current.summary;\n for (const field of [\n \"conversations\",\n \"total\",\n \"attention\",\n \"failed\",\n \"active\",\n \"queued\",\n \"waiting\",\n \"unread\",\n \"activeWork\",\n ] as const)\n merged[field] += summary[field];\n merged.attentionSince = earliestIso(merged.attentionSince, summary.attentionSince);\n merged.updatedAt = laterIso(merged.updatedAt, summary.updatedAt);\n merged.createdAt = laterIso(merged.createdAt, summary.createdAt);\n }\n return rows;\n}\n\n/** The presentation-only row a Site's conversations nest under. */\nfunction siteRowSession(\n key: string,\n origin: SessionSiteOrigin,\n channelId: string | null,\n latest: Session | undefined,\n summary: SiteRowSummary | undefined,\n options: { workspaceId?: string | undefined; creator?: Session[\"createdBy\"] | undefined },\n): Session {\n const updatedAt = laterIso(summary?.updatedAt ?? latest?.updatedAt ?? \"\", latest?.updatedAt);\n const createdAt = laterIso(summary?.createdAt ?? latest?.createdAt ?? \"\", latest?.createdAt);\n // Only the fields the rail reads for ordering, grouping and links. It is\n // never sent to the server or used for a session action.\n return {\n id: key,\n workspaceId: latest?.workspaceId ?? options.workspaceId ?? \"\",\n accountId: latest?.accountId ?? \"\",\n rootSessionId: key,\n parentSessionId: null,\n channelId,\n status: \"idle\",\n title: origin.title,\n displayTitle: origin.title,\n renameSeed: origin.title,\n titleSource: \"user\",\n createdBy: latest?.createdBy ?? options.creator ?? { kind: \"subject\", subjectId: \"\" },\n effectiveControl: { state: \"active\" },\n inputWait: null,\n pinned: false,\n pinnedAt: null,\n archived: false,\n archivedAt: null,\n unread: false,\n activelyWorking: false,\n lastSequence: 0,\n treeStats: undefined,\n scheduledTaskId: null,\n siteOrigin: origin,\n metadata: { _opengeniSiteOrigin: origin },\n createdAt,\n updatedAt,\n } as unknown as Session;\n}\n\n/**\n * Fold Site conversations into stable Site rows. `groups` are the complete\n * rows from the server; loaded conversations (an expanded Site, the open\n * session, a legacy labelled chat) join their row, so which session is\n * selected never decides whether a Site or its conversations are listed.\n * Pins have already been split out.\n */\nexport function attachSiteRows(\n roots: SessionTreeNode[],\n options: {\n groups?: readonly SiteConversationGroup[] | undefined;\n /** Rows per project when the rail shows projects. */\n byProject?: boolean | undefined;\n workspaceId?: string | undefined;\n creator?: Session[\"createdBy\"] | undefined;\n } = {},\n): SessionTreeNode[] {\n const byProject = options.byProject ?? false;\n const rows = new Map<\n string,\n {\n origin: SessionSiteOrigin;\n channelId: string | null;\n summary?: SiteRowSummary | undefined;\n members: SessionTreeNode[];\n }\n >();\n for (const [key, row] of siteRowSummaries(options.groups ?? [], byProject))\n rows.set(key, { ...row, members: [] });\n const rest: SessionTreeNode[] = [];\n for (const node of roots) {\n const origin = sessionSiteOrigin(node.session);\n if (!origin || node.session.parentSessionId) {\n rest.push(node);\n continue;\n }\n const channelId = node.session.channelId ?? null;\n const key = siteRowKey(origin.siteId, byProject ? channelId : undefined);\n const row = rows.get(key) ?? { origin, channelId, members: [] };\n row.members.push(node);\n rows.set(key, row);\n }\n const siteRows = [...rows].map(([key, row]): SessionTreeNode => {\n const members = row.members.sort((a, b) => compareSessionActivity(a.session, b.session));\n const summary = row.summary;\n return {\n siteGroup: row.origin,\n ...(summary ? { siteSummary: summary } : {}),\n session: siteRowSession(\n key,\n row.origin,\n row.channelId,\n members[0]?.session,\n summary,\n options,\n ),\n children: members,\n hasActiveDescendant:\n members.some(nodeIsActive) ||\n Boolean(summary && summary.active + summary.queued + summary.attention > 0),\n };\n });\n return [...rest, ...siteRows];\n}\n\n/**\n * How many conversations a Site row stands for, loaded or not. The server\n * counts Site conversations; an older chat that only carries a Site label\n * joins the row when loaded, so the count can grow by those on expansion.\n */\nexport function siteRowConversationCount(node: SessionTreeNode): number {\n return Math.max(node.siteSummary?.conversations ?? 0, node.children.length);\n}\n\nexport function categorizeRailRoots(\n rootNodes: SessionTreeNode[],\n now: Date = new Date(),\n): SessionForest {\n const running = rootNodes\n .filter((node) => nodeIsActive(node))\n .sort((a, b) => compareSessionActivity(a.session, b.session));\n const rest = rootNodes\n .filter((node) => !nodeIsActive(node))\n .sort((a, b) => compareSessionActivity(a.session, b.session));\n\n const buckets = new Map<SessionRecencyGroup, SessionTreeNode[]>();\n for (const node of rest) {\n const group = recencyGroupFor(sessionActivityTime(node.session), now);\n const list = buckets.get(group) ?? [];\n list.push(node);\n buckets.set(group, list);\n }\n const grouped: SessionForest[\"grouped\"] = [];\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\n/**\n * Build the rail forest: roots (parentSessionId null, or parent absent from the\n * page) at the top level, spawned children nested beneath their parent, each\n * subtree ordered most-recent-first. Running roots (self or via a live\n * descendant) are pinned above the recency buckets. A `seen` guard makes a\n * pathological parent cycle in the loaded page terminate rather than recurse\n * forever.\n */\nexport function buildRailForest(sessions: Session[], now: Date = new Date()): SessionForest {\n const byId = new Map(sessions.map((session) => [session.id, session]));\n const childrenOf = new Map<string, Session[]>();\n const roots: Session[] = [];\n for (const session of sessions) {\n const parentId = session.parentSessionId;\n if (parentId && parentId !== session.id && byId.has(parentId)) {\n const list = childrenOf.get(parentId) ?? [];\n list.push(session);\n childrenOf.set(parentId, list);\n } else {\n roots.push(session);\n }\n }\n\n const build = (session: Session, seen: Set<string>): SessionTreeNode => {\n const children = seen.has(session.id)\n ? []\n : (childrenOf.get(session.id) ?? [])\n .sort(compareSessionActivity)\n .map((child) => build(child, new Set(seen).add(session.id)));\n const hasActiveDescendant = children.some((child) => nodeIsActive(child));\n return { session, children, hasActiveDescendant };\n };\n\n const rootNodes = roots.map((session) => build(session, new Set()));\n const reachable = new Set<string>();\n const markReachable = (node: SessionTreeNode): void => {\n if (reachable.has(node.session.id)) {\n return;\n }\n reachable.add(node.session.id);\n for (const child of node.children) {\n markReachable(child);\n }\n };\n for (const node of rootNodes) {\n markReachable(node);\n }\n for (const session of sessions) {\n if (!reachable.has(session.id)) {\n rootNodes.push({ session, children: [], hasActiveDescendant: false });\n reachable.add(session.id);\n }\n }\n return categorizeRailRoots(rootNodes, now);\n}\n\ntype RemovedCounts = {\n total: number;\n running: number;\n queued: number;\n waiting: number;\n attention: number;\n paused: number;\n failed: number;\n unreadFailed: number;\n unread: number;\n activeWork: number;\n};\n\nfunction emptyRemovedCounts(): RemovedCounts {\n return {\n total: 0,\n running: 0,\n queued: 0,\n waiting: 0,\n attention: 0,\n paused: 0,\n failed: 0,\n unreadFailed: 0,\n unread: 0,\n activeWork: 0,\n };\n}\n\nfunction addRemovedCounts(target: RemovedCounts, source: RemovedCounts): void {\n target.total += source.total;\n target.running += source.running;\n target.queued += source.queued;\n target.waiting += source.waiting;\n target.attention += source.attention;\n target.paused += source.paused;\n target.failed += source.failed;\n target.unreadFailed += source.unreadFailed;\n target.unread += source.unread;\n target.activeWork += source.activeWork;\n}\n\nfunction subtreeCounts(node: SessionTreeNode): RemovedCounts {\n const status = node.session.status;\n const active = hasActiveEffectiveControl(node.session);\n const counts: RemovedCounts = {\n total: 1,\n running: active && (status === \"running\" || status === \"recovering\") ? 1 : 0,\n queued: active && (status === \"queued\" || status === \"waiting_capacity\") ? 1 : 0,\n waiting: sessionInputWait(node.session) ? 1 : 0,\n attention: awaitsPerson(node.session) ? 1 : 0,\n paused: node.session.effectiveControl?.state === \"paused\" ? 1 : 0,\n failed: status === \"failed\" ? 1 : 0,\n unreadFailed: status === \"failed\" && node.session.unread ? 1 : 0,\n unread: node.session.unread ? 1 : 0,\n activeWork: node.session.activelyWorking ? 1 : 0,\n };\n const stats = node.session.treeStats;\n if (stats) {\n counts.total += stats.totalDescendants;\n counts.running += stats.runningDescendants;\n counts.queued += stats.queuedDescendants;\n counts.waiting += stats.waitingDescendants ?? 0;\n counts.attention += stats.attentionDescendants;\n counts.paused += stats.pausedDescendants;\n counts.failed += stats.failedDescendants;\n counts.unreadFailed += stats.unreadFailedDescendants ?? stats.failedDescendants;\n counts.unread += stats.unreadDescendants ?? 0;\n counts.activeWork += stats.activelyWorkingDescendants ?? 0;\n } else {\n for (const child of node.children) addRemovedCounts(counts, subtreeCounts(child));\n }\n return counts;\n}\n\nfunction prunePinnedSubtreesWithCounts(\n node: SessionTreeNode,\n keepRoot: boolean,\n): { node: SessionTreeNode | null; removed: RemovedCounts } {\n if (node.session.pinned && !keepRoot) {\n return { node: null, removed: subtreeCounts(node) };\n }\n\n const removed = emptyRemovedCounts();\n let removedDirectChildren = 0;\n const children: SessionTreeNode[] = [];\n for (const child of node.children) {\n const result = prunePinnedSubtreesWithCounts(child, false);\n addRemovedCounts(removed, result.removed);\n if (result.node) children.push(result.node);\n else removedDirectChildren += 1;\n }\n\n const stats = node.session.treeStats;\n const session = stats\n ? {\n ...node.session,\n treeStats: {\n directChildren: Math.max(0, stats.directChildren - removedDirectChildren),\n totalDescendants: Math.max(0, stats.totalDescendants - removed.total),\n runningDescendants: Math.max(0, stats.runningDescendants - removed.running),\n queuedDescendants: Math.max(0, stats.queuedDescendants - removed.queued),\n ...(stats.waitingDescendants !== undefined\n ? { waitingDescendants: Math.max(0, stats.waitingDescendants - removed.waiting) }\n : {}),\n attentionDescendants: Math.max(0, stats.attentionDescendants - removed.attention),\n pausedDescendants: Math.max(0, stats.pausedDescendants - removed.paused),\n failedDescendants: Math.max(0, stats.failedDescendants - removed.failed),\n ...(stats.unreadFailedDescendants !== undefined\n ? {\n unreadFailedDescendants: Math.max(\n 0,\n stats.unreadFailedDescendants - removed.unreadFailed,\n ),\n }\n : {}),\n ...(stats.unreadDescendants !== undefined\n ? { unreadDescendants: Math.max(0, stats.unreadDescendants - removed.unread) }\n : {}),\n ...(stats.activelyWorkingDescendants !== undefined\n ? {\n activelyWorkingDescendants: Math.max(\n 0,\n stats.activelyWorkingDescendants - removed.activeWork,\n ),\n }\n : {}),\n // The pruned subtree may have held the oldest waiter; keep the server\n // timestamp only while some counted attention descendant remains.\n ...(stats.attentionSince !== undefined\n ? {\n attentionSince:\n stats.attentionDescendants - removed.attention > 0 ? stats.attentionSince : null,\n }\n : {}),\n truncated: stats.truncated,\n },\n }\n : node.session;\n return {\n node: {\n session,\n children,\n hasActiveDescendant: children.some((child) => nodeIsActive(child)),\n },\n removed,\n };\n}\n\n/**\n * Remove explicit pinned roots below `node`. `keepRoot` is used to build one\n * pin shortcut: that pin stays, but any nested explicit pin is promoted to its\n * own globally ordered shortcut instead of appearing twice.\n */\nexport function prunePinnedSubtrees(\n node: SessionTreeNode,\n keepRoot = false,\n): SessionTreeNode | null {\n return prunePinnedSubtreesWithCounts(node, keepRoot).node;\n}\n\nfunction forestRoots(forest: SessionForest): SessionTreeNode[] {\n return [...forest.running, ...forest.grouped.flatMap((bucket) => bucket.sessions)];\n}\n\n/**\n * Rows as the rail will actually render them.\n *\n * Hierarchy mode nests spawned sessions under their parent, so lineage stays.\n * Search results are deliberately flat because a partial match set is not a\n * tree, so every result there IS top-level and must say so. A row that renders\n * at the top level while still naming an absent parent is the bug this prevents.\n */\nexport function projectRailSessions<T extends Session>(sessions: T[], hierarchyMode: boolean): T[] {\n return hierarchyMode\n ? sessions\n : sessions.map((session) => ({ ...session, parentSessionId: null }));\n}\n\n/** Build the complete, explicit-pin, and ordinary rail projections together. */\nexport function buildPinnedRailSections(\n sessions: Session[],\n now: Date = new Date(),\n options: {\n groupSites?: boolean | undefined;\n /** Complete Site rows from a grouped root page. */\n siteGroups?: readonly SiteConversationGroup[] | undefined;\n /** Split Site rows by project (the rail's project view). */\n siteRowsByProject?: boolean | undefined;\n workspaceId?: string | undefined;\n creator?: Session[\"createdBy\"] | undefined;\n } = {},\n): PinnedRailSections {\n const complete = buildRailForest(sessions, now);\n const roots = forestRoots(complete);\n const nodesById = new Map<string, SessionTreeNode>();\n const visit = (node: SessionTreeNode): void => {\n if (nodesById.has(node.session.id)) return;\n nodesById.set(node.session.id, node);\n for (const child of node.children) visit(child);\n };\n for (const root of roots) visit(root);\n\n const { pinned: pinnedSessions } = partitionPinnedSessions(sessions);\n const pinned = pinnedSessions.flatMap((session) => {\n const completeNode = nodesById.get(session.id) ?? {\n session,\n children: [],\n hasActiveDescendant: false,\n };\n const pruned = prunePinnedSubtrees(completeNode, true);\n return pruned ? [pruned] : [];\n });\n const ordinaryRoots = roots.flatMap((root) => {\n const pruned = prunePinnedSubtrees(root);\n return pruned ? [pruned] : [];\n });\n\n return {\n complete,\n pinned,\n ordinary: categorizeRailRoots(\n options.groupSites === false\n ? groupScheduledRuns(ordinaryRoots)\n : attachSiteRows(groupScheduledRuns(ordinaryRoots), {\n groups: options.siteGroups,\n byProject: options.siteRowsByProject,\n workspaceId: options.workspaceId,\n creator: options.creator,\n }),\n now,\n ),\n };\n}\n\n/** The selected descendant under a collapsed node, projected one level deeper. */\nexport function selectedDescendantNode(\n node: SessionTreeNode,\n selectedSessionId: string | null,\n): SessionTreeNode | null {\n if (!selectedSessionId || node.session.id === selectedSessionId) return null;\n for (const child of node.children) {\n if (child.session.id === selectedSessionId) return child;\n const selected = selectedDescendantNode(child, selectedSessionId);\n if (selected) return selected;\n }\n return null;\n}\n\n/** Flatten the forest to the rows currently VISIBLE, given the expanded set —\n * a node, then its children only when the node is expanded (depth-first).\n * A collapsed branch keeps its selected descendant visible as one ordinary\n * child row, matching the rail projection. Keyboard navigation walks this. */\nexport function visibleTreeRows(\n roots: SessionTreeNode[],\n expanded: ReadonlySet<string>,\n selectedSessionId: string | null = null,\n): { node: SessionTreeNode; depth: number }[] {\n const rows: { node: SessionTreeNode; depth: number }[] = [];\n const walk = (node: SessionTreeNode, depth: number): void => {\n if (!node.siteGroup) rows.push({ node, depth });\n if (node.children.length > 0 && expanded.has(node.session.id)) {\n for (const child of node.children) {\n walk(child, depth + 1);\n }\n } else {\n const selected = selectedDescendantNode(node, selectedSessionId);\n if (selected) rows.push({ node: selected, depth: depth + 1 });\n }\n };\n for (const node of roots) walk(node, 0);\n return rows;\n}\n\nexport function visibleForestRows(\n forest: SessionForest,\n expanded: ReadonlySet<string>,\n selectedSessionId: string | null = null,\n): { node: SessionTreeNode; depth: number }[] {\n return visibleTreeRows(forestRoots(forest), expanded, selectedSessionId);\n}\n\n/* --------------------------------------------------------------------------\n Workstream sections. The hierarchy rail groups ordinary roots by their ROOT\n session's channel, with unfiled roots in Recents.\n -------------------------------------------------------------------------- */\n\nexport type ChannelRailSection = {\n /** Stable render key: the channel id, or \"recents\" for unfiled roots. */\n key: string;\n channelId: string | null;\n /** User-facing workstream name. */\n name: string;\n sessions: SessionTreeNode[];\n};\n\n/**\n * Group an ordinary rail forest's roots by channel. Channels render in the\n * given (server-defined) order — pinned projects first, then ordinary ones —\n * including empty ones, so a just-created project is immediately visible.\n * The catch-all \"Default\" section for unfiled roots follows them (only when\n * it has members). Within a section, active roots\n * keep floating above recency-ordered idle ones because the incoming forest\n * is flattened in that order. A root whose channel no longer exists folds\n * into Default rather than disappearing.\n */\nexport function channelRailSections(\n forest: SessionForest,\n channels: readonly { id: string; name: string }[],\n): ChannelRailSection[] {\n const roots = [...forest.running, ...forest.grouped.flatMap((bucket) => bucket.sessions)];\n const byChannel = new Map<string | null, SessionTreeNode[]>();\n for (const node of roots) {\n const channelId = node.session.channelId ?? null;\n const known = channelId !== null && channels.some((channel) => channel.id === channelId);\n const key = known ? channelId : null;\n const list = byChannel.get(key) ?? [];\n list.push(node);\n byChannel.set(key, list);\n }\n for (const list of byChannel.values()) {\n list.sort((left, right) => {\n const leftRank = nodeIsActive(left) ? 0 : left.session.activelyWorking ? 1 : 2;\n const rightRank = nodeIsActive(right) ? 0 : right.session.activelyWorking ? 1 : 2;\n return leftRank - rightRank || compareSessionActivity(left.session, right.session);\n });\n }\n const sections: ChannelRailSection[] = [];\n sections.push(\n ...channels.map((channel) => ({\n key: channel.id,\n channelId: channel.id,\n name: channel.name,\n sessions: byChannel.get(channel.id) ?? [],\n })),\n );\n const defaultSessions = byChannel.get(null) ?? [];\n if (defaultSessions.length > 0) {\n sections.push({ key: \"default\", channelId: null, name: \"Default\", sessions: defaultSessions });\n }\n return sections;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA6GO,SAAS,qBACd,QACA,YACsC;AACtC,QAAM,QAAQ,IAAI,IAAI,UAAU;AAChC,QAAM,OAAO,OAAyB;AAAA,IACpC,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,YAAY;AAAA,EACd;AACA,QAAM,SAAS,IAAI,IAAqC;AAAA,IACtD,GAAG,WAAW,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAU;AAAA,IAC/C,CAAC,MAAM,KAAK,CAAC;AAAA,EACf,CAAC;AACD,aAAW,SAAS,OAAO,QAAQ;AACjC,UAAM,KAAK,MAAM,aAAa,MAAM,IAAI,MAAM,SAAS,IAAI,MAAM,YAAY;AAE7E,UAAM,UAAU,KAAK,IAAI,MAAM,WAAW,GAAG,MAAM,MAAM;AACzD,wBAAoB,OAAO,IAAI,EAAE,GAAI;AAAA,MACnC,GAAG;AAAA,MACH,QAAQ,MAAM,SAAS;AAAA,MACvB;AAAA,MACA,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEA,SAAS,YAAY,GAA8B,GAA6C;AAC9F,MAAI,CAAC,EAAG,QAAO,KAAK;AACpB,MAAI,CAAC,EAAG,QAAO;AACf,SAAO,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI;AAC7C;AAEA,SAAS,oBACP,SACA,wBACkB;AAClB,SAAO;AAAA,IACL,OAAO;AAAA,IACP,YAAY,uBAAuB,IAAI,QAAQ,EAAE,KAAK;AAAA,IACtD,WAAW,aAAa,OAAO,IAAI,IAAI;AAAA,IACvC,gBAAgB,aAAa,OAAO,IAAK,QAAQ,uBAAuB,OAAQ;AAAA;AAAA;AAAA;AAAA,IAIhF,QAAQ,QAAQ,WAAW,YAAY,QAAQ,SAAS,IAAI;AAAA,IAC5D,QACE,0BAA0B,OAAO,MAChC,QAAQ,WAAW,aAAa,QAAQ,WAAW,gBAChD,IACA;AAAA,IACN,QACE,0BAA0B,OAAO,MAChC,QAAQ,WAAW,YAAY,QAAQ,WAAW,sBAC/C,IACA;AAAA,IACN,SAAS,iBAAiB,OAAO,IAAI,IAAI;AAAA,IACzC,QAAQ,QAAQ,SAAS,IAAI;AAAA,IAC7B,YAAY,QAAQ,kBAAkB,IAAI;AAAA,EAC5C;AACF;AAEA,SAAS,oBAAoB,QAA0B,QAAgC;AACrF,SAAO,SAAS,OAAO;AACvB,SAAO,cAAc,OAAO;AAC5B,SAAO,aAAa,OAAO;AAC3B,SAAO,iBAAiB,YAAY,OAAO,gBAAgB,OAAO,cAAc;AAChF,SAAO,UAAU,OAAO;AACxB,SAAO,UAAU,OAAO;AACxB,SAAO,UAAU,OAAO;AACxB,SAAO,WAAW,OAAO;AACzB,SAAO,UAAU,OAAO;AACxB,SAAO,cAAc,OAAO;AAC9B;AAEA,SAAS,iBACP,MACA,wBACkB;AAClB,MAAI,KAAK,aAAa,KAAK,aAAa;AAEtC,UAAM,UAAU,KAAK;AACrB,UAAM,UAAU,KAAK,IAAI,QAAQ,SAAS,QAAQ,MAAM;AACxD,WAAO;AAAA,MACL,OAAO,QAAQ;AAAA,MACf,YAAY,KAAK,SAAS;AAAA,QACxB,CAAC,OAAO,UAAU,QAAQ,gCAAgC,OAAO,sBAAsB;AAAA,QACvF;AAAA,MACF;AAAA,MACA,WAAW,QAAQ;AAAA,MACnB,gBAAgB,QAAQ;AAAA,MACxB,QAAQ,QAAQ;AAAA,MAChB,QAAQ,QAAQ,SAAS;AAAA,MACzB,QAAQ,QAAQ;AAAA,MAChB;AAAA,MACA,QAAQ,QAAQ;AAAA,MAChB,YAAY,QAAQ;AAAA,IACtB;AAAA,EACF;AACA,MAAI,KAAK,WAAW;AAClB,UAAMA,UAAS,oBAAoB,KAAK,SAAS,sBAAsB;AACvE,eAAW,OAAO;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACE,MAAAA,QAAO,GAAG,IAAI;AAChB,IAAAA,QAAO,iBAAiB;AACxB,eAAW,SAAS,KAAK;AACvB,0BAAoBA,SAAQ,iBAAiB,OAAO,sBAAsB,CAAC;AAC7E,WAAOA;AAAA,EACT;AACA,QAAM,SAAS,oBAAoB,KAAK,SAAS,sBAAsB;AACvE,QAAM,QAAQ,KAAK,QAAQ;AAC3B,MAAI,OAAO;AACT,WAAO,SAAS,MAAM;AACtB,WAAO,aAAa,MAAM;AAC1B,WAAO,iBAAiB,YAAY,OAAO,gBAAgB,MAAM,cAAc;AAC/E,WAAO,UAAU,MAAM,2BAA2B,MAAM;AACxD,WAAO,UAAU,MAAM;AACvB,WAAO,UAAU,MAAM;AACvB,WAAO,WAAW,MAAM,sBAAsB;AAC9C,WAAO,UAAU,MAAM,qBAAqB;AAC5C,WAAO,cAAc,MAAM,8BAA8B;AAKzD,eAAW,SAAS,KAAK,UAAU;AACjC,UAAI,MAAM,QAAQ,oBAAoB,KAAK,QAAQ,IAAI;AACrD,4BAAoB,QAAQ,iBAAiB,OAAO,sBAAsB,CAAC;AAAA,MAC7E,OAAO;AACL,eAAO,cAAc,gCAAgC,OAAO,sBAAsB;AAAA,MACpF;AAAA,IACF;AAAA,EACF,OAAO;AACL,eAAW,SAAS,KAAK,UAAU;AACjC,0BAAoB,QAAQ,iBAAiB,OAAO,sBAAsB,CAAC;AAAA,IAC7E;AAAA,EACF;AACA,SAAO;AACT;AAOA,SAAS,gCACP,MACA,wBACQ;AACR,UACG,uBAAuB,IAAI,KAAK,QAAQ,EAAE,KAAK,KAChD,KAAK,SAAS;AAAA,IACZ,CAAC,OAAO,UAAU,QAAQ,gCAAgC,OAAO,sBAAsB;AAAA,IACvF;AAAA,EACF;AAEJ;AAGO,SAAS,mBACd,OACA,yBAAsD,oBAAI,IAAI,GAC9D,MAAY,oBAAI,KAAK,GACA;AACrB,QAAM,SAA2B;AAAA,IAC/B,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,YAAY;AAAA,EACd;AACA,aAAW,QAAQ,OAAO;AACxB,wBAAoB,QAAQ,iBAAiB,MAAM,sBAAsB,CAAC;AAAA,EAC5E;AAEA,SAAO,0BAA0B,QAAQ,GAAG;AAC9C;AAGO,SAAS,0BACd,QACA,MAAY,oBAAI,KAAK,GACA;AACrB,MAAI,OAAO,aAAa,GAAG;AACzB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,OAAO,GAAG,OAAO,UAAU,WAAW,OAAO,eAAe,IAAI,KAAK,GAAG;AAAA,IAC1E;AAAA,EACF;AAEA,MAAI,OAAO,YAAY,GAAG;AAGxB,UAAM,UAAU,OAAO,iBAAiB,mBAAmB,OAAO,gBAAgB,GAAG,IAAI;AACzF,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,OAAO,GAAG,OAAO,SAAS,QAAQ,OAAO,cAAc,IAAI,MAAM,EAAE,OACjE,UAAU,SAAM,OAAO,KAAK,EAC9B;AAAA,MACA,GAAI,OAAO,iBAAiB,EAAE,gBAAgB,OAAO,eAAe,IAAI,CAAC;AAAA,IAC3E;AAAA,EACF;AACA,MAAI,OAAO,SAAS,GAAG;AACrB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,OAAO,GAAG,OAAO,MAAM;AAAA,IACzB;AAAA,EACF;AACA,MAAI,OAAO,SAAS,GAAG;AACrB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,OAAO,GAAG,OAAO,MAAM;AAAA,IACzB;AAAA,EACF;AACA,MAAI,OAAO,SAAS,GAAG;AACrB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,OAAO,GAAG,OAAO,MAAM;AAAA,IACzB;AAAA,EACF;AACA,MAAI,OAAO,UAAU,GAAG;AACtB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,OAAO,GAAG,OAAO,OAAO;AAAA,IAC1B;AAAA,EACF;AACA,MAAI,OAAO,SAAS,GAAG;AACrB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,OAAO,GAAG,OAAO,MAAM;AAAA,IACzB;AAAA,EACF;AACA,MAAI,OAAO,aAAa,GAAG;AACzB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,OAAO,GAAG,OAAO,UAAU;AAAA,IAC7B;AAAA,EACF;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO,OAAO;AAAA,IACd,OAAO,OAAO,QAAQ,IAAI,SAAS;AAAA,EACrC;AACF;AAQO,SAAS,oBAAuC,SAAkB,UAAgB;AACvF,MAAI,SAAS,cAAc,UAAa,QAAQ,cAAc,QAAW;AACvE,WAAO;AAAA,EACT;AACA,SAAO,EAAE,GAAG,UAAU,WAAW,QAAQ,UAAU;AACrD;AAcA,IAAM,qBAAqB,IAAI,YAAY;AAC3C,SAAS,mBAAmB,OAA8C;AACxE,SAAO,mBAAmB;AAAA,KACvB,SAAS,IAAI,QAAQ,YAAY,EAAE,EAAE,QAAQ,UAAU,CAAC,WAAW,OAAO,YAAY,CAAC;AAAA,EAC1F;AACF;AAEA,SAAS,wBAAwB,OAAuB;AACtD,QAAM,WAAW,MAAM,MAAM,+BAA+B,IAAI,CAAC,KAAK;AACtE,SAAO,OAAO,SAAS,OAAO,GAAG,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC;AACnD;AAGO,SAAS,qBACd,MACA,OACA,QACQ;AACR,MAAI,WAAW,QAAQ;AACrB,UAAM,IAAI,mBAAmB,KAAK,KAAK;AACvC,UAAM,IAAI,mBAAmB,MAAM,KAAK;AACxC,aAAS,QAAQ,GAAG,QAAQ,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG;AACpE,UAAI,EAAE,KAAK,MAAM,EAAE,KAAK,EAAG,QAAO,EAAE,KAAK,IAAK,EAAE,KAAK;AAAA,IACvD;AACA,WAAO,EAAE,SAAS,EAAE,UAAU,KAAK,GAAG,cAAc,MAAM,EAAE;AAAA,EAC9D;AACA,SACE,KAAK,MAAM,MAAM,MAAM,CAAC,IAAI,KAAK,MAAM,KAAK,MAAM,CAAC,KACnD,wBAAwB,MAAM,MAAM,CAAC,IAAI,wBAAwB,KAAK,MAAM,CAAC,KAC7E,MAAM,GAAG,cAAc,KAAK,EAAE;AAElC;AAEO,SAAS,kBACd,QACA,QACe;AACf,QAAM,YAAY,CAAC,UACjB,MACG,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,UAAU,UAAU,KAAK,QAAQ,EAAE,EAAE,EAC/D,KAAK,CAAC,GAAG,MAAM,qBAAqB,EAAE,SAAS,EAAE,SAAS,MAAM,CAAC;AACtE,SAAO;AAAA,IACL,SAAS,UAAU,OAAO,OAAO;AAAA,IACjC,SAAS,OAAO,QAAQ,IAAI,CAAC,YAAY;AAAA,MACvC,GAAG;AAAA,MACH,UAAU,UAAU,OAAO,QAAQ;AAAA,IACrC,EAAE;AAAA,EACJ;AACF;AAIO,SAAS,kBAAkB,SAA0B;AAC1D,SAAO,GAAG,QAAQ,UAAU,IAAI,IAAI,QAAQ,UAAU,SAAS;AACjE;AAEO,SAAS,oBAAoB,SAA0B;AAC5D,QAAM,WAAW,QAAQ,UAAU,OAAO,KAAK;AAC/C,MAAI,SAAU,QAAO;AACrB,MAAI,QAAQ,UAAU,cAAc,sBAAuB,QAAO;AAClE,MAAI,QAAQ,UAAU,SAAS,WAAW;AACxC,WAAO,gBAAa,QAAQ,UAAU,SAAS;AAAA,EACjD;AACA,SAAO,QAAQ,UAAU;AAC3B;AAWO,SAAS,uBAAuB,UAAkD;AACvF,QAAM,QAAQ,oBAAI,IAGhB;AACF,aAAW,WAAW,UAAU;AAC9B,UAAM,IAAI,kBAAkB,OAAO,GAAG;AAAA,MACpC,OAAO,oBAAoB,OAAO;AAAA,MAClC,MAAM,QAAQ,UAAU;AAAA,MACxB,WAAW,QAAQ,UAAU;AAAA,IAC/B,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,oBAAI,IAAoB;AAC5C,aAAW,WAAW,MAAM,OAAO,GAAG;AACpC,gBAAY,IAAI,QAAQ,QAAQ,YAAY,IAAI,QAAQ,KAAK,KAAK,KAAK,CAAC;AAAA,EAC1E;AAEA,SAAO,IAAI;AAAA,IACT,CAAC,GAAG,MAAM,QAAQ,CAAC,EAChB,IAAI,CAAC,CAAC,OAAO,OAAO,OAAO;AAAA,MAC1B;AAAA,MACA,OACE,YAAY,IAAI,QAAQ,KAAK,MAAM,IAC/B,QAAQ,QACR,GAAG,QAAQ,KAAK,SAAM,QAAQ,SAAS,YAAY,YAAY,SAAS,SAAM,QAAQ,SAAS;AAAA,IACvG,EAAE,EACD;AAAA,MACC,CAAC,MAAM,UACL,KAAK,MAAM,cAAc,MAAM,KAAK,KAAK,KAAK,MAAM,cAAc,MAAM,KAAK;AAAA,IACjF,EACC,IAAI,CAAC,YAAY,CAAC,QAAQ,OAAO,QAAQ,KAAK,CAAC;AAAA,EACpD;AACF;AAEO,SAAS,sBAAsB,UAA6C;AACjF,SAAO,CAAC,GAAG,uBAAuB,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,EAAE,OAAO,MAAM,EAAE;AACzF;AAGO,SAAS,8BACd,SACA,eACA,cACe;AACf,MAAI,CAAC,gBAAgB,CAAC,WAAW,cAAc,IAAI,OAAO,EAAG,QAAO;AACpE,SAAO;AACT;AAGO,SAAS,yBACd,UACA,cACQ;AACR,MAAI,CAAC,aAAc,QAAO,SAAS;AACnC,QAAM,YAAY,IAAI,IAAI,SAAS,IAAI,CAAC,YAAY,QAAQ,EAAE,CAAC;AAC/D,SAAO,SAAS;AAAA,IACd,CAAC,YAAY,CAAC,QAAQ,mBAAmB,CAAC,UAAU,IAAI,QAAQ,eAAe;AAAA,EACjF,EAAE;AACJ;AAEA,SAAS,gBAAgB,SAAkB,OAAuC;AAChF,MAAI,UAAU,WAAY,QAAO,oBAAoB,OAAO;AAC5D,QAAM,UAAU,KAAK,MAAM,QAAQ,SAAS;AAC5C,SAAO,OAAO,MAAM,OAAO,IAAI,IAAI;AACrC;AAEO,SAAS,wBACd,UACA,SAQK;AACL,QAAM,MAAM,QAAQ,OAAO,oBAAI,KAAK;AACpC,QAAM,eAAe,IAAI,KAAK,IAAI,YAAY,GAAG,IAAI,SAAS,GAAG,IAAI,QAAQ,CAAC,EAAE,QAAQ;AACxF,QAAM,YACJ,QAAQ,cAAc,UAClB,eACA,QAAQ,cAAc,SACpB,eAAe,IAAI,KAAK,KAAK,KAAK,MAClC,QAAQ,cAAc,UACpB,eAAe,KAAK,KAAK,KAAK,KAAK,MACnC;AACV,QAAM,UAAU,CAAC,aACd,CAAC,QAAQ,WAAW,kBAAkB,OAAO,MAAM,QAAQ,aAC3D,cAAc,QAAQ,gBAAgB,SAAS,QAAQ,SAAS,KAAK;AACxE,MAAI,CAAC,QAAQ,aAAc,QAAO,SAAS,OAAO,OAAO;AAEzD,QAAM,OAAO,IAAI,IAAI,SAAS,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;AACrE,QAAM,WAAW,oBAAI,IAAe;AACpC,QAAM,gBAAgB,CAAC,YAAkB;AACvC,UAAM,SAAS,SAAS,IAAI,QAAQ,EAAE;AACtC,QAAI,OAAQ,QAAO;AAEnB,UAAM,OAAY,CAAC;AACnB,UAAM,OAAO,oBAAI,IAAY;AAC7B,QAAI,UAAU;AACd,WAAO,QAAQ,iBAAiB;AAC9B,UAAI,KAAK,IAAI,QAAQ,EAAE,GAAG;AAGxB,eAAO;AAAA,MACT;AACA,WAAK,IAAI,QAAQ,EAAE;AACnB,WAAK,KAAK,OAAO;AACjB,YAAM,SAAS,KAAK,IAAI,QAAQ,eAAe;AAC/C,UAAI,CAAC,OAAQ;AACb,gBAAU;AAAA,IACZ;AACA,aAAS,IAAI,QAAQ,IAAI,OAAO;AAChC,eAAW,UAAU,KAAM,UAAS,IAAI,OAAO,IAAI,OAAO;AAC1D,WAAO;AAAA,EACT;AAEA,SAAO,SAAS,OAAO,CAAC,YAAY,QAAQ,cAAc,OAAO,CAAC,CAAC;AACrE;AAGO,SAAS,4BACd,QACA,SACA,UAGI,CAAC,GACU;AACf,QAAM,MAAM,QAAQ,OAAO,oBAAI,KAAK;AACpC,QAAM,QAAQ,YAAY,MAAM;AAChC,MAAI,YAAY,UAAU,YAAY,WAAW;AAC/C,WAAO,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC,EAAE,OAAO,QAAQ,OAAO,YAAY,UAAU,MAAM,CAAC,EAAE;AAAA,EACzF;AACA,QAAM,UAAU,MACb,OAAO,YAAY,EACnB,KAAK,CAAC,MAAM,UAAU,uBAAuB,KAAK,SAAS,MAAM,OAAO,CAAC;AAC5E,QAAM,OAAO,MAAM,OAAO,CAAC,SAAS,CAAC,aAAa,IAAI,CAAC;AACvD,MAAI,YAAY,WAAW;AACzB,UAAM,UAAU,oBAAI,IAA4C;AAChE,eAAW,QAAQ,MAAM;AACvB,YAAM,QAAQ,gBAAgB,gBAAgB,KAAK,SAAS,SAAS,GAAG,GAAG;AAC3E,YAAM,OAAO,QAAQ,IAAI,KAAK,KAAK,CAAC;AACpC,WAAK,KAAK,IAAI;AACd,cAAQ,IAAI,OAAO,IAAI;AAAA,IACzB;AACA,WAAO;AAAA,MACL;AAAA,MACA,SAAS,oBAAoB,QAAQ,CAAC,UAAU;AAC9C,cAAM,OAAO,QAAQ,IAAI,KAAK;AAC9B,YAAI,CAAC,MAAM,OAAQ,QAAO,CAAC;AAC3B,cAAM,QACJ,UAAU,UACN,kBACA,UAAU,cACR,sBACA,UAAU,cACR,+BACA;AACV,eAAO;AAAA,UACL;AAAA,YACE,OAAO,WAAW,KAAK;AAAA,YACvB;AAAA,YACA,UAAU,KAAK;AAAA,cACb,CAAC,MAAM,UACL,gBAAgB,MAAM,SAAS,SAAS,IACtC,gBAAgB,KAAK,SAAS,SAAS,KACzC,MAAM,QAAQ,GAAG,cAAc,KAAK,QAAQ,EAAE;AAAA,YAClD;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,gBACJ,QAAQ,iBAAiB,uBAAuB,MAAM,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC;AACnF,QAAM,WAAW,oBAAI,IAA4D;AACjF,aAAW,QAAQ,MAAM;AACvB,UAAM,MAAM,kBAAkB,KAAK,OAAO;AAC1C,UAAM,SAAS,SAAS,IAAI,GAAG,KAAK;AAAA,MAClC,OAAO,cAAc,IAAI,GAAG,KAAK,oBAAoB,KAAK,OAAO;AAAA,MACjE,UAAU,CAAC;AAAA,IACb;AACA,WAAO,SAAS,KAAK,IAAI;AACzB,aAAS,IAAI,KAAK,MAAM;AAAA,EAC1B;AACA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,CAAC,GAAG,SAAS,QAAQ,CAAC,EAC5B,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,MAAM,KAAK,MAAM,cAAc,MAAM,KAAK,CAAC,EACnE,IAAI,CAAC,CAAC,KAAK,MAAM,OAAO;AAAA,MACvB,OAAO,WAAW,GAAG;AAAA,MACrB,OAAO,OAAO;AAAA,MACd,UAAU,OAAO,SAAS;AAAA,QAAK,CAAC,MAAM,UACpC,uBAAuB,KAAK,SAAS,MAAM,OAAO;AAAA,MACpD;AAAA,IACF,EAAE;AAAA,EACN;AACF;AAGO,SAAS,uBACd,UACA,SACA,UAGI,CAAC,GACU;AACf,SAAO,4BAA4B,gBAAgB,UAAU,QAAQ,GAAG,GAAG,SAAS,OAAO;AAC7F;AAYO,SAAS,aAAa,MAAgC;AAC3D,QAAM,QAAQ,KAAK,QAAQ;AAC3B,QAAM,mBAAmB;AAAA,IACvB,SACA,MAAM,qBACJ,MAAM,qBACL,MAAM,sBAAsB,KAC7B,MAAM,uBACN;AAAA,EACJ;AACA,SAAO,qBAAqB,KAAK,OAAO,KAAK,KAAK,uBAAuB;AAC3E;AASO,SAAS,kBAAkB,SAAiC;AACjE,MAAI,qBAAqB,QAAS,QAAO,QAAQ;AACjD,QAAM,QAAS,QAAQ,UAAkD;AACzE,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AACjE;AAqBO,SAAS,mBAAmB,OAA6C;AAC9E,QAAM,gBAAgB,oBAAI,IAA+B;AACzD,aAAW,QAAQ,OAAO;AACxB,UAAM,SAAS,kBAAkB,KAAK,OAAO;AAC7C,QAAI,CAAC,OAAQ;AACb,UAAM,UAAU,cAAc,IAAI,MAAM,KAAK,CAAC;AAC9C,YAAQ,KAAK,IAAI;AACjB,kBAAc,IAAI,QAAQ,OAAO;AAAA,EACnC;AACA,aAAW,WAAW,cAAc,OAAO,GAAG;AAC5C,YAAQ,KAAK,CAAC,MAAM,UAAU,uBAAuB,KAAK,SAAS,MAAM,OAAO,CAAC;AAAA,EACnF;AACA,QAAM,UAA6B,CAAC;AACpC,QAAM,UAAU,oBAAI,IAAY;AAChC,aAAW,QAAQ,OAAO;AACxB,UAAM,SAAS,kBAAkB,KAAK,OAAO;AAC7C,UAAM,UAAU,SAAU,cAAc,IAAI,MAAM,KAAK,CAAC,IAAK,CAAC;AAC9D,QAAI,QAAQ,SAAS,GAAG;AACtB,cAAQ,KAAK,IAAI;AACjB;AAAA,IACF;AACA,QAAI,QAAQ,IAAI,MAAO,EAAG;AAC1B,YAAQ,IAAI,MAAO;AACnB,UAAM,CAAC,WAAW,GAAG,SAAS,IAAI;AAClC,YAAQ,KAAK;AAAA,MACX,GAAG;AAAA;AAAA;AAAA,MAGH,UAAU,CAAC,GAAG,UAAU,UAAU,GAAG,SAAS;AAAA,MAC9C,qBACE,UAAU,uBACV,UAAU,KAAK,CAAC,QAAQ,aAAa,GAAG,KAAK,IAAI,mBAAmB;AAAA,IACxE,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAQO,SAAS,WAAW,QAAgB,WAAmC;AAC5E,SAAO,cAAc,SAAY,QAAQ,MAAM,KAAK,QAAQ,MAAM,IAAI,aAAa,SAAS;AAC9F;AAGO,SAAS,gBACd,KACkE;AAClE,QAAM,QAAQ,qCAAqC,KAAK,GAAG;AAC3D,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,UAAU,MAAM,CAAC;AACvB,SAAO,YAAY,SACf,EAAE,QAAQ,MAAM,CAAC,EAAG,IACpB,EAAE,QAAQ,MAAM,CAAC,GAAI,WAAW,YAAY,YAAY,OAAO,QAAQ;AAC7E;AAEA,SAAS,SAAS,GAAW,GAA+B;AAC1D,MAAI,CAAC,EAAG,QAAO;AACf,SAAO,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI;AAC7C;AAGA,SAAS,iBACP,QACA,WAC+F;AAC/F,QAAM,OAAO,oBAAI,IAGf;AACF,aAAW,SAAS,QAAQ;AAC1B,UAAM,MAAM,WAAW,MAAM,QAAQ,YAAY,MAAM,YAAY,MAAS;AAC5E,UAAM,EAAE,QAAQ,WAAW,OAAO,GAAG,QAAQ,IAAI;AACjD,UAAM,UAAU,KAAK,IAAI,GAAG;AAC5B,QAAI,CAAC,SAAS;AAEZ,YAAM,SAAS,EAAE,QAAQ,OAAO,MAAM,KAAK,KAAK,gBAAgB;AAChE,WAAK,IAAI,KAAK,EAAE,QAAQ,WAAW,SAAS,EAAE,GAAG,QAAQ,EAAE,CAAC;AAC5D;AAAA,IACF;AACA,UAAM,SAAS,QAAQ;AACvB,eAAW,SAAS;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACE,aAAO,KAAK,KAAK,QAAQ,KAAK;AAChC,WAAO,iBAAiB,YAAY,OAAO,gBAAgB,QAAQ,cAAc;AACjF,WAAO,YAAY,SAAS,OAAO,WAAW,QAAQ,SAAS;AAC/D,WAAO,YAAY,SAAS,OAAO,WAAW,QAAQ,SAAS;AAAA,EACjE;AACA,SAAO;AACT;AAGA,SAAS,eACP,KACA,QACA,WACA,QACA,SACA,SACS;AACT,QAAM,YAAY,SAAS,SAAS,aAAa,QAAQ,aAAa,IAAI,QAAQ,SAAS;AAC3F,QAAM,YAAY,SAAS,SAAS,aAAa,QAAQ,aAAa,IAAI,QAAQ,SAAS;AAG3F,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,aAAa,QAAQ,eAAe,QAAQ,eAAe;AAAA,IAC3D,WAAW,QAAQ,aAAa;AAAA,IAChC,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB;AAAA,IACA,QAAQ;AAAA,IACR,OAAO,OAAO;AAAA,IACd,cAAc,OAAO;AAAA,IACrB,YAAY,OAAO;AAAA,IACnB,aAAa;AAAA,IACb,WAAW,QAAQ,aAAa,QAAQ,WAAW,EAAE,MAAM,WAAW,WAAW,GAAG;AAAA,IACpF,kBAAkB,EAAE,OAAO,SAAS;AAAA,IACpC,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,UAAU,EAAE,qBAAqB,OAAO;AAAA,IACxC;AAAA,IACA;AAAA,EACF;AACF;AASO,SAAS,eACd,OACA,UAMI,CAAC,GACc;AACnB,QAAM,YAAY,QAAQ,aAAa;AACvC,QAAM,OAAO,oBAAI,IAQf;AACF,aAAW,CAAC,KAAK,GAAG,KAAK,iBAAiB,QAAQ,UAAU,CAAC,GAAG,SAAS;AACvE,SAAK,IAAI,KAAK,EAAE,GAAG,KAAK,SAAS,CAAC,EAAE,CAAC;AACvC,QAAM,OAA0B,CAAC;AACjC,aAAW,QAAQ,OAAO;AACxB,UAAM,SAAS,kBAAkB,KAAK,OAAO;AAC7C,QAAI,CAAC,UAAU,KAAK,QAAQ,iBAAiB;AAC3C,WAAK,KAAK,IAAI;AACd;AAAA,IACF;AACA,UAAM,YAAY,KAAK,QAAQ,aAAa;AAC5C,UAAM,MAAM,WAAW,OAAO,QAAQ,YAAY,YAAY,MAAS;AACvE,UAAM,MAAM,KAAK,IAAI,GAAG,KAAK,EAAE,QAAQ,WAAW,SAAS,CAAC,EAAE;AAC9D,QAAI,QAAQ,KAAK,IAAI;AACrB,SAAK,IAAI,KAAK,GAAG;AAAA,EACnB;AACA,QAAM,WAAW,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,GAAG,MAAuB;AAC9D,UAAM,UAAU,IAAI,QAAQ,KAAK,CAAC,GAAG,MAAM,uBAAuB,EAAE,SAAS,EAAE,OAAO,CAAC;AACvF,UAAM,UAAU,IAAI;AACpB,WAAO;AAAA,MACL,WAAW,IAAI;AAAA,MACf,GAAI,UAAU,EAAE,aAAa,QAAQ,IAAI,CAAC;AAAA,MAC1C,SAAS;AAAA,QACP;AAAA,QACA,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,QAAQ,CAAC,GAAG;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,MACA,UAAU;AAAA,MACV,qBACE,QAAQ,KAAK,YAAY,KACzB,QAAQ,WAAW,QAAQ,SAAS,QAAQ,SAAS,QAAQ,YAAY,CAAC;AAAA,IAC9E;AAAA,EACF,CAAC;AACD,SAAO,CAAC,GAAG,MAAM,GAAG,QAAQ;AAC9B;AAOO,SAAS,yBAAyB,MAA+B;AACtE,SAAO,KAAK,IAAI,KAAK,aAAa,iBAAiB,GAAG,KAAK,SAAS,MAAM;AAC5E;AAEO,SAAS,oBACd,WACA,MAAY,oBAAI,KAAK,GACN;AACf,QAAM,UAAU,UACb,OAAO,CAAC,SAAS,aAAa,IAAI,CAAC,EACnC,KAAK,CAAC,GAAG,MAAM,uBAAuB,EAAE,SAAS,EAAE,OAAO,CAAC;AAC9D,QAAM,OAAO,UACV,OAAO,CAAC,SAAS,CAAC,aAAa,IAAI,CAAC,EACpC,KAAK,CAAC,GAAG,MAAM,uBAAuB,EAAE,SAAS,EAAE,OAAO,CAAC;AAE9D,QAAM,UAAU,oBAAI,IAA4C;AAChE,aAAW,QAAQ,MAAM;AACvB,UAAM,QAAQ,gBAAgB,oBAAoB,KAAK,OAAO,GAAG,GAAG;AACpE,UAAM,OAAO,QAAQ,IAAI,KAAK,KAAK,CAAC;AACpC,SAAK,KAAK,IAAI;AACd,YAAQ,IAAI,OAAO,IAAI;AAAA,EACzB;AACA,QAAM,UAAoC,CAAC;AAC3C,aAAW,SAAS,qBAAqB;AACvC,UAAM,OAAO,QAAQ,IAAI,KAAK;AAC9B,QAAI,QAAQ,KAAK,SAAS,GAAG;AAC3B,cAAQ,KAAK;AAAA,QACX;AAAA,QACA,OAAO,qBAAqB,CAAC,EAAE,KAAK;AAAA,QACpC,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO,EAAE,SAAS,QAAQ;AAC5B;AAUO,SAAS,gBAAgB,UAAqB,MAAY,oBAAI,KAAK,GAAkB;AAC1F,QAAM,OAAO,IAAI,IAAI,SAAS,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;AACrE,QAAM,aAAa,oBAAI,IAAuB;AAC9C,QAAM,QAAmB,CAAC;AAC1B,aAAW,WAAW,UAAU;AAC9B,UAAM,WAAW,QAAQ;AACzB,QAAI,YAAY,aAAa,QAAQ,MAAM,KAAK,IAAI,QAAQ,GAAG;AAC7D,YAAM,OAAO,WAAW,IAAI,QAAQ,KAAK,CAAC;AAC1C,WAAK,KAAK,OAAO;AACjB,iBAAW,IAAI,UAAU,IAAI;AAAA,IAC/B,OAAO;AACL,YAAM,KAAK,OAAO;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,QAAQ,CAAC,SAAkB,SAAuC;AACtE,UAAM,WAAW,KAAK,IAAI,QAAQ,EAAE,IAChC,CAAC,KACA,WAAW,IAAI,QAAQ,EAAE,KAAK,CAAC,GAC7B,KAAK,sBAAsB,EAC3B,IAAI,CAAC,UAAU,MAAM,OAAO,IAAI,IAAI,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC,CAAC;AACjE,UAAM,sBAAsB,SAAS,KAAK,CAAC,UAAU,aAAa,KAAK,CAAC;AACxE,WAAO,EAAE,SAAS,UAAU,oBAAoB;AAAA,EAClD;AAEA,QAAM,YAAY,MAAM,IAAI,CAAC,YAAY,MAAM,SAAS,oBAAI,IAAI,CAAC,CAAC;AAClE,QAAM,YAAY,oBAAI,IAAY;AAClC,QAAM,gBAAgB,CAAC,SAAgC;AACrD,QAAI,UAAU,IAAI,KAAK,QAAQ,EAAE,GAAG;AAClC;AAAA,IACF;AACA,cAAU,IAAI,KAAK,QAAQ,EAAE;AAC7B,eAAW,SAAS,KAAK,UAAU;AACjC,oBAAc,KAAK;AAAA,IACrB;AAAA,EACF;AACA,aAAW,QAAQ,WAAW;AAC5B,kBAAc,IAAI;AAAA,EACpB;AACA,aAAW,WAAW,UAAU;AAC9B,QAAI,CAAC,UAAU,IAAI,QAAQ,EAAE,GAAG;AAC9B,gBAAU,KAAK,EAAE,SAAS,UAAU,CAAC,GAAG,qBAAqB,MAAM,CAAC;AACpE,gBAAU,IAAI,QAAQ,EAAE;AAAA,IAC1B;AAAA,EACF;AACA,SAAO,oBAAoB,WAAW,GAAG;AAC3C;AAeA,SAAS,qBAAoC;AAC3C,SAAO;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,YAAY;AAAA,EACd;AACF;AAEA,SAAS,iBAAiB,QAAuB,QAA6B;AAC5E,SAAO,SAAS,OAAO;AACvB,SAAO,WAAW,OAAO;AACzB,SAAO,UAAU,OAAO;AACxB,SAAO,WAAW,OAAO;AACzB,SAAO,aAAa,OAAO;AAC3B,SAAO,UAAU,OAAO;AACxB,SAAO,UAAU,OAAO;AACxB,SAAO,gBAAgB,OAAO;AAC9B,SAAO,UAAU,OAAO;AACxB,SAAO,cAAc,OAAO;AAC9B;AAEA,SAAS,cAAc,MAAsC;AAC3D,QAAM,SAAS,KAAK,QAAQ;AAC5B,QAAM,SAAS,0BAA0B,KAAK,OAAO;AACrD,QAAM,SAAwB;AAAA,IAC5B,OAAO;AAAA,IACP,SAAS,WAAW,WAAW,aAAa,WAAW,gBAAgB,IAAI;AAAA,IAC3E,QAAQ,WAAW,WAAW,YAAY,WAAW,sBAAsB,IAAI;AAAA,IAC/E,SAAS,iBAAiB,KAAK,OAAO,IAAI,IAAI;AAAA,IAC9C,WAAW,aAAa,KAAK,OAAO,IAAI,IAAI;AAAA,IAC5C,QAAQ,KAAK,QAAQ,kBAAkB,UAAU,WAAW,IAAI;AAAA,IAChE,QAAQ,WAAW,WAAW,IAAI;AAAA,IAClC,cAAc,WAAW,YAAY,KAAK,QAAQ,SAAS,IAAI;AAAA,IAC/D,QAAQ,KAAK,QAAQ,SAAS,IAAI;AAAA,IAClC,YAAY,KAAK,QAAQ,kBAAkB,IAAI;AAAA,EACjD;AACA,QAAM,QAAQ,KAAK,QAAQ;AAC3B,MAAI,OAAO;AACT,WAAO,SAAS,MAAM;AACtB,WAAO,WAAW,MAAM;AACxB,WAAO,UAAU,MAAM;AACvB,WAAO,WAAW,MAAM,sBAAsB;AAC9C,WAAO,aAAa,MAAM;AAC1B,WAAO,UAAU,MAAM;AACvB,WAAO,UAAU,MAAM;AACvB,WAAO,gBAAgB,MAAM,2BAA2B,MAAM;AAC9D,WAAO,UAAU,MAAM,qBAAqB;AAC5C,WAAO,cAAc,MAAM,8BAA8B;AAAA,EAC3D,OAAO;AACL,eAAW,SAAS,KAAK,SAAU,kBAAiB,QAAQ,cAAc,KAAK,CAAC;AAAA,EAClF;AACA,SAAO;AACT;AAEA,SAAS,8BACP,MACA,UAC0D;AAC1D,MAAI,KAAK,QAAQ,UAAU,CAAC,UAAU;AACpC,WAAO,EAAE,MAAM,MAAM,SAAS,cAAc,IAAI,EAAE;AAAA,EACpD;AAEA,QAAM,UAAU,mBAAmB;AACnC,MAAI,wBAAwB;AAC5B,QAAM,WAA8B,CAAC;AACrC,aAAW,SAAS,KAAK,UAAU;AACjC,UAAM,SAAS,8BAA8B,OAAO,KAAK;AACzD,qBAAiB,SAAS,OAAO,OAAO;AACxC,QAAI,OAAO,KAAM,UAAS,KAAK,OAAO,IAAI;AAAA,QACrC,0BAAyB;AAAA,EAChC;AAEA,QAAM,QAAQ,KAAK,QAAQ;AAC3B,QAAM,UAAU,QACZ;AAAA,IACE,GAAG,KAAK;AAAA,IACR,WAAW;AAAA,MACT,gBAAgB,KAAK,IAAI,GAAG,MAAM,iBAAiB,qBAAqB;AAAA,MACxE,kBAAkB,KAAK,IAAI,GAAG,MAAM,mBAAmB,QAAQ,KAAK;AAAA,MACpE,oBAAoB,KAAK,IAAI,GAAG,MAAM,qBAAqB,QAAQ,OAAO;AAAA,MAC1E,mBAAmB,KAAK,IAAI,GAAG,MAAM,oBAAoB,QAAQ,MAAM;AAAA,MACvE,GAAI,MAAM,uBAAuB,SAC7B,EAAE,oBAAoB,KAAK,IAAI,GAAG,MAAM,qBAAqB,QAAQ,OAAO,EAAE,IAC9E,CAAC;AAAA,MACL,sBAAsB,KAAK,IAAI,GAAG,MAAM,uBAAuB,QAAQ,SAAS;AAAA,MAChF,mBAAmB,KAAK,IAAI,GAAG,MAAM,oBAAoB,QAAQ,MAAM;AAAA,MACvE,mBAAmB,KAAK,IAAI,GAAG,MAAM,oBAAoB,QAAQ,MAAM;AAAA,MACvE,GAAI,MAAM,4BAA4B,SAClC;AAAA,QACE,yBAAyB,KAAK;AAAA,UAC5B;AAAA,UACA,MAAM,0BAA0B,QAAQ;AAAA,QAC1C;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,MAAM,sBAAsB,SAC5B,EAAE,mBAAmB,KAAK,IAAI,GAAG,MAAM,oBAAoB,QAAQ,MAAM,EAAE,IAC3E,CAAC;AAAA,MACL,GAAI,MAAM,+BAA+B,SACrC;AAAA,QACE,4BAA4B,KAAK;AAAA,UAC/B;AAAA,UACA,MAAM,6BAA6B,QAAQ;AAAA,QAC7C;AAAA,MACF,IACA,CAAC;AAAA;AAAA;AAAA,MAGL,GAAI,MAAM,mBAAmB,SACzB;AAAA,QACE,gBACE,MAAM,uBAAuB,QAAQ,YAAY,IAAI,MAAM,iBAAiB;AAAA,MAChF,IACA,CAAC;AAAA,MACL,WAAW,MAAM;AAAA,IACnB;AAAA,EACF,IACA,KAAK;AACT,SAAO;AAAA,IACL,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,qBAAqB,SAAS,KAAK,CAAC,UAAU,aAAa,KAAK,CAAC;AAAA,IACnE;AAAA,IACA;AAAA,EACF;AACF;AAOO,SAAS,oBACd,MACA,WAAW,OACa;AACxB,SAAO,8BAA8B,MAAM,QAAQ,EAAE;AACvD;AAEA,SAAS,YAAY,QAA0C;AAC7D,SAAO,CAAC,GAAG,OAAO,SAAS,GAAG,OAAO,QAAQ,QAAQ,CAAC,WAAW,OAAO,QAAQ,CAAC;AACnF;AAUO,SAAS,oBAAuC,UAAe,eAA6B;AACjG,SAAO,gBACH,WACA,SAAS,IAAI,CAAC,aAAa,EAAE,GAAG,SAAS,iBAAiB,KAAK,EAAE;AACvE;AAGO,SAAS,wBACd,UACA,MAAY,oBAAI,KAAK,GACrB,UAQI,CAAC,GACe;AACpB,QAAM,WAAW,gBAAgB,UAAU,GAAG;AAC9C,QAAM,QAAQ,YAAY,QAAQ;AAClC,QAAM,YAAY,oBAAI,IAA6B;AACnD,QAAM,QAAQ,CAAC,SAAgC;AAC7C,QAAI,UAAU,IAAI,KAAK,QAAQ,EAAE,EAAG;AACpC,cAAU,IAAI,KAAK,QAAQ,IAAI,IAAI;AACnC,eAAW,SAAS,KAAK,SAAU,OAAM,KAAK;AAAA,EAChD;AACA,aAAW,QAAQ,MAAO,OAAM,IAAI;AAEpC,QAAM,EAAE,QAAQ,eAAe,IAAI,wBAAwB,QAAQ;AACnE,QAAM,SAAS,eAAe,QAAQ,CAAC,YAAY;AACjD,UAAM,eAAe,UAAU,IAAI,QAAQ,EAAE,KAAK;AAAA,MAChD;AAAA,MACA,UAAU,CAAC;AAAA,MACX,qBAAqB;AAAA,IACvB;AACA,UAAM,SAAS,oBAAoB,cAAc,IAAI;AACrD,WAAO,SAAS,CAAC,MAAM,IAAI,CAAC;AAAA,EAC9B,CAAC;AACD,QAAM,gBAAgB,MAAM,QAAQ,CAAC,SAAS;AAC5C,UAAM,SAAS,oBAAoB,IAAI;AACvC,WAAO,SAAS,CAAC,MAAM,IAAI,CAAC;AAAA,EAC9B,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,UAAU;AAAA,MACR,QAAQ,eAAe,QACnB,mBAAmB,aAAa,IAChC,eAAe,mBAAmB,aAAa,GAAG;AAAA,QAChD,QAAQ,QAAQ;AAAA,QAChB,WAAW,QAAQ;AAAA,QACnB,aAAa,QAAQ;AAAA,QACrB,SAAS,QAAQ;AAAA,MACnB,CAAC;AAAA,MACL;AAAA,IACF;AAAA,EACF;AACF;AAGO,SAAS,uBACd,MACA,mBACwB;AACxB,MAAI,CAAC,qBAAqB,KAAK,QAAQ,OAAO,kBAAmB,QAAO;AACxE,aAAW,SAAS,KAAK,UAAU;AACjC,QAAI,MAAM,QAAQ,OAAO,kBAAmB,QAAO;AACnD,UAAM,WAAW,uBAAuB,OAAO,iBAAiB;AAChE,QAAI,SAAU,QAAO;AAAA,EACvB;AACA,SAAO;AACT;AAMO,SAAS,gBACd,OACA,UACA,oBAAmC,MACS;AAC5C,QAAM,OAAmD,CAAC;AAC1D,QAAM,OAAO,CAAC,MAAuB,UAAwB;AAC3D,QAAI,CAAC,KAAK,UAAW,MAAK,KAAK,EAAE,MAAM,MAAM,CAAC;AAC9C,QAAI,KAAK,SAAS,SAAS,KAAK,SAAS,IAAI,KAAK,QAAQ,EAAE,GAAG;AAC7D,iBAAW,SAAS,KAAK,UAAU;AACjC,aAAK,OAAO,QAAQ,CAAC;AAAA,MACvB;AAAA,IACF,OAAO;AACL,YAAM,WAAW,uBAAuB,MAAM,iBAAiB;AAC/D,UAAI,SAAU,MAAK,KAAK,EAAE,MAAM,UAAU,OAAO,QAAQ,EAAE,CAAC;AAAA,IAC9D;AAAA,EACF;AACA,aAAW,QAAQ,MAAO,MAAK,MAAM,CAAC;AACtC,SAAO;AACT;AAEO,SAAS,kBACd,QACA,UACA,oBAAmC,MACS;AAC5C,SAAO,gBAAgB,YAAY,MAAM,GAAG,UAAU,iBAAiB;AACzE;AA0BO,SAAS,oBACd,QACA,UACsB;AACtB,QAAM,QAAQ,CAAC,GAAG,OAAO,SAAS,GAAG,OAAO,QAAQ,QAAQ,CAAC,WAAW,OAAO,QAAQ,CAAC;AACxF,QAAM,YAAY,oBAAI,IAAsC;AAC5D,aAAW,QAAQ,OAAO;AACxB,UAAM,YAAY,KAAK,QAAQ,aAAa;AAC5C,UAAM,QAAQ,cAAc,QAAQ,SAAS,KAAK,CAAC,YAAY,QAAQ,OAAO,SAAS;AACvF,UAAM,MAAM,QAAQ,YAAY;AAChC,UAAM,OAAO,UAAU,IAAI,GAAG,KAAK,CAAC;AACpC,SAAK,KAAK,IAAI;AACd,cAAU,IAAI,KAAK,IAAI;AAAA,EACzB;AACA,aAAW,QAAQ,UAAU,OAAO,GAAG;AACrC,SAAK,KAAK,CAAC,MAAM,UAAU;AACzB,YAAM,WAAW,aAAa,IAAI,IAAI,IAAI,KAAK,QAAQ,kBAAkB,IAAI;AAC7E,YAAM,YAAY,aAAa,KAAK,IAAI,IAAI,MAAM,QAAQ,kBAAkB,IAAI;AAChF,aAAO,WAAW,aAAa,uBAAuB,KAAK,SAAS,MAAM,OAAO;AAAA,IACnF,CAAC;AAAA,EACH;AACA,QAAM,WAAiC,CAAC;AACxC,WAAS;AAAA,IACP,GAAG,SAAS,IAAI,CAAC,aAAa;AAAA,MAC5B,KAAK,QAAQ;AAAA,MACb,WAAW,QAAQ;AAAA,MACnB,MAAM,QAAQ;AAAA,MACd,UAAU,UAAU,IAAI,QAAQ,EAAE,KAAK,CAAC;AAAA,IAC1C,EAAE;AAAA,EACJ;AACA,QAAM,kBAAkB,UAAU,IAAI,IAAI,KAAK,CAAC;AAChD,MAAI,gBAAgB,SAAS,GAAG;AAC9B,aAAS,KAAK,EAAE,KAAK,WAAW,WAAW,MAAM,MAAM,WAAW,UAAU,gBAAgB,CAAC;AAAA,EAC/F;AACA,SAAO;AACT;","names":["counts"]}
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from "./chunk-TXS65BB2.js";
|
|
15
15
|
import {
|
|
16
16
|
useOpenGeniText
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-JFK7NTEA.js";
|
|
18
18
|
|
|
19
19
|
// src/components/timeline-annotation-chrome.tsx
|
|
20
20
|
import { useLayoutEffect, useRef, useState } from "react";
|
|
@@ -194,4 +194,4 @@ export {
|
|
|
194
194
|
AnnotationNotePreview,
|
|
195
195
|
AnnotationNoteField
|
|
196
196
|
};
|
|
197
|
-
//# sourceMappingURL=chunk-
|
|
197
|
+
//# sourceMappingURL=chunk-LMPTC4CX.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-PEHTX3V7.js";
|
|
5
5
|
import {
|
|
6
6
|
useOpenGeniText
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-JFK7NTEA.js";
|
|
8
8
|
|
|
9
9
|
// src/timeline/retained-image.ts
|
|
10
10
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
@@ -169,4 +169,4 @@ export {
|
|
|
169
169
|
useRetainedImageObjectUrl,
|
|
170
170
|
PatchApplyCommand
|
|
171
171
|
};
|
|
172
|
-
//# sourceMappingURL=chunk-
|
|
172
|
+
//# sourceMappingURL=chunk-LQ47YL6E.js.map
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import {
|
|
3
|
+
isRetainedTextPreview
|
|
4
|
+
} from "./chunk-WRB2GNXO.js";
|
|
2
5
|
import {
|
|
3
6
|
InlineChatImage
|
|
4
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-MIECLOQC.js";
|
|
5
8
|
import {
|
|
6
9
|
cachedRetainedArtifactLoader,
|
|
7
10
|
cachedRetainedMetadata,
|
|
8
11
|
retainedImageCache,
|
|
9
12
|
retainedImageScope
|
|
10
13
|
} from "./chunk-6D35DJUK.js";
|
|
11
|
-
import {
|
|
12
|
-
isRetainedTextPreview
|
|
13
|
-
} from "./chunk-WRB2GNXO.js";
|
|
14
14
|
import {
|
|
15
15
|
PdfPreviewSurface
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-SOKNCW5U.js";
|
|
17
17
|
import {
|
|
18
18
|
PRIVATE_FILE_PRESENTATION,
|
|
19
19
|
isPrivateFileLoadError
|
|
20
20
|
} from "./chunk-BVRJK25X.js";
|
|
21
21
|
import {
|
|
22
22
|
DeferredChatMedia
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-4YXAQMTD.js";
|
|
24
24
|
import {
|
|
25
25
|
cn
|
|
26
26
|
} from "./chunk-A3MTTRCX.js";
|
|
27
27
|
import {
|
|
28
28
|
Link
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-VYKW6TB2.js";
|
|
30
30
|
import {
|
|
31
31
|
useAppContext
|
|
32
32
|
} from "./chunk-W6KAUGXO.js";
|
|
@@ -35,13 +35,13 @@ import {
|
|
|
35
35
|
} from "./chunk-HMU5IELG.js";
|
|
36
36
|
import {
|
|
37
37
|
createWorkspaceRetainedArtifactLoader
|
|
38
|
-
} from "./chunk-
|
|
39
|
-
import {
|
|
40
|
-
isRetainedImageContentType
|
|
41
|
-
} from "./chunk-ANHUMDJX.js";
|
|
38
|
+
} from "./chunk-7TCT7KPQ.js";
|
|
42
39
|
import {
|
|
43
40
|
useLightboxGalleryItem
|
|
44
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-UYNCMZX5.js";
|
|
42
|
+
import {
|
|
43
|
+
isRetainedImageContentType
|
|
44
|
+
} from "./chunk-WNDTLK44.js";
|
|
45
45
|
|
|
46
46
|
// src/app/components/artifacts/retained-file-preview.tsx
|
|
47
47
|
import {
|
|
@@ -343,4 +343,4 @@ export {
|
|
|
343
343
|
RetainedFilePreview,
|
|
344
344
|
InlineChatArtifact
|
|
345
345
|
};
|
|
346
|
-
//# sourceMappingURL=chunk-
|
|
346
|
+
//# sourceMappingURL=chunk-LT4J7RHI.js.map
|
|
@@ -2,42 +2,46 @@
|
|
|
2
2
|
import {
|
|
3
3
|
useSandboxFiles,
|
|
4
4
|
useUnicodeFallbackFonts
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2QBYDGWO.js";
|
|
6
|
+
import {
|
|
7
|
+
SessionMcpCapabilityCard
|
|
8
|
+
} from "./chunk-ILDOW2IQ.js";
|
|
6
9
|
import {
|
|
7
10
|
connectionStatusForState
|
|
8
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-WSZQNTVN.js";
|
|
12
|
+
import {
|
|
13
|
+
SandboxTerminal,
|
|
14
|
+
terminalCanAcquirePty,
|
|
15
|
+
xtermThemeFromTokens
|
|
16
|
+
} from "./chunk-4VK2R5QC.js";
|
|
17
|
+
import {
|
|
18
|
+
sandboxAcceptsLiveIo
|
|
19
|
+
} from "./chunk-QV3DJVRZ.js";
|
|
9
20
|
import {
|
|
10
21
|
SessionStatus
|
|
11
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-ENS6E4RZ.js";
|
|
12
23
|
import {
|
|
13
24
|
PierreDiff
|
|
14
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-7TCT7KPQ.js";
|
|
15
26
|
import {
|
|
16
27
|
useThemeType
|
|
17
28
|
} from "./chunk-B27E3V37.js";
|
|
18
29
|
import {
|
|
19
30
|
useTurnlessOutputGap
|
|
20
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-SSOO4GWN.js";
|
|
21
32
|
import {
|
|
22
33
|
invalidateSharedQueries,
|
|
23
34
|
useSharedQuery
|
|
24
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-NLAFNMPK.js";
|
|
25
36
|
import {
|
|
26
37
|
MACHINES_SESSION_POLL_MS,
|
|
27
38
|
useMachines
|
|
28
|
-
} from "./chunk-
|
|
29
|
-
import {
|
|
30
|
-
SessionMcpCapabilityCard
|
|
31
|
-
} from "./chunk-L6RXRRN3.js";
|
|
32
|
-
import {
|
|
33
|
-
sessionAdmissionBlocked,
|
|
34
|
-
sessionDisplayStatus
|
|
35
|
-
} from "./chunk-DHXKEJBH.js";
|
|
39
|
+
} from "./chunk-QXEDIDBZ.js";
|
|
36
40
|
import {
|
|
37
41
|
useMutationRunner,
|
|
38
42
|
usePageLiveActivity,
|
|
39
43
|
usePolledValue
|
|
40
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-2KO2G3RI.js";
|
|
41
45
|
import {
|
|
42
46
|
normalizeError
|
|
43
47
|
} from "./chunk-CM7LVUKC.js";
|
|
@@ -45,23 +49,19 @@ import {
|
|
|
45
49
|
useOpenGeni,
|
|
46
50
|
useOpenGeniClient
|
|
47
51
|
} from "./chunk-TVQCDDSZ.js";
|
|
52
|
+
import {
|
|
53
|
+
sessionAdmissionBlocked,
|
|
54
|
+
sessionDisplayStatus
|
|
55
|
+
} from "./chunk-DHXKEJBH.js";
|
|
48
56
|
import {
|
|
49
57
|
formatRelativeTime
|
|
50
58
|
} from "./chunk-SJGAHTY5.js";
|
|
51
|
-
import {
|
|
52
|
-
SandboxTerminal,
|
|
53
|
-
terminalCanAcquirePty,
|
|
54
|
-
xtermThemeFromTokens
|
|
55
|
-
} from "./chunk-HTT3FB7T.js";
|
|
56
|
-
import {
|
|
57
|
-
sandboxAcceptsLiveIo
|
|
58
|
-
} from "./chunk-QV3DJVRZ.js";
|
|
59
59
|
import {
|
|
60
60
|
cn
|
|
61
61
|
} from "./chunk-TXS65BB2.js";
|
|
62
62
|
import {
|
|
63
63
|
useOpenGeniText
|
|
64
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-JFK7NTEA.js";
|
|
65
65
|
|
|
66
66
|
// src/session-auth-recommendation.ts
|
|
67
67
|
function sessionAuthRecommendation(t, item, catalog) {
|
|
@@ -3220,7 +3220,7 @@ import {
|
|
|
3220
3220
|
} from "lucide-react";
|
|
3221
3221
|
import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
3222
3222
|
var LazySandboxFiles = lazy(
|
|
3223
|
-
() => import("./sandbox-files-
|
|
3223
|
+
() => import("./sandbox-files-CCOTGXXA.js").then(({ SandboxFiles: SandboxFiles2 }) => ({ default: SandboxFiles2 })).catch(() => ({ default: FilesLoadFailed }))
|
|
3224
3224
|
);
|
|
3225
3225
|
function FilesLoadFailed() {
|
|
3226
3226
|
const t = useOpenGeniText();
|
|
@@ -3236,11 +3236,11 @@ function FilesTabBody(props) {
|
|
|
3236
3236
|
return /* @__PURE__ */ jsx6(Suspense, { fallback: /* @__PURE__ */ jsx6(WorkbenchSurfaceLoading, { name: "Files" }), children: /* @__PURE__ */ jsx6(LazySandboxFiles, { ...props }) });
|
|
3237
3237
|
}
|
|
3238
3238
|
var LazyBrowserViewer = lazy(async () => {
|
|
3239
|
-
const { BrowserViewer } = await import("./browser-viewer-
|
|
3239
|
+
const { BrowserViewer } = await import("./browser-viewer-QMCNV4RI.js");
|
|
3240
3240
|
return { default: BrowserViewer };
|
|
3241
3241
|
});
|
|
3242
3242
|
var LazyComputerViewer = lazy(async () => {
|
|
3243
|
-
const { ComputerViewer } = await import("./computer-viewer-
|
|
3243
|
+
const { ComputerViewer } = await import("./computer-viewer-25AJIDYA.js");
|
|
3244
3244
|
return { default: ComputerViewer };
|
|
3245
3245
|
});
|
|
3246
3246
|
var WORKBENCH_TAB_CHANGES = "changes";
|
|
@@ -4289,4 +4289,4 @@ export {
|
|
|
4289
4289
|
modelVendor,
|
|
4290
4290
|
parseOpenGeniLink
|
|
4291
4291
|
};
|
|
4292
|
-
//# sourceMappingURL=chunk-
|
|
4292
|
+
//# sourceMappingURL=chunk-MCTTONOW.js.map
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
} from "./chunk-6D35DJUK.js";
|
|
8
8
|
import {
|
|
9
9
|
DeferredChatMedia
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-4YXAQMTD.js";
|
|
11
11
|
import {
|
|
12
12
|
Link
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-VYKW6TB2.js";
|
|
14
14
|
import {
|
|
15
15
|
useAppContext
|
|
16
16
|
} from "./chunk-W6KAUGXO.js";
|
|
@@ -19,16 +19,16 @@ import {
|
|
|
19
19
|
} from "./chunk-HMU5IELG.js";
|
|
20
20
|
import {
|
|
21
21
|
createWorkspaceRetainedArtifactLoader
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-7TCT7KPQ.js";
|
|
23
23
|
import {
|
|
24
24
|
useRetainedImageObjectUrl
|
|
25
|
-
} from "./chunk-
|
|
26
|
-
import {
|
|
27
|
-
isRetainedImageContentType
|
|
28
|
-
} from "./chunk-ANHUMDJX.js";
|
|
25
|
+
} from "./chunk-LQ47YL6E.js";
|
|
29
26
|
import {
|
|
30
27
|
useLightboxOptional
|
|
31
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-UYNCMZX5.js";
|
|
29
|
+
import {
|
|
30
|
+
isRetainedImageContentType
|
|
31
|
+
} from "./chunk-WNDTLK44.js";
|
|
32
32
|
|
|
33
33
|
// src/app/components/artifacts/inline-chat-image.tsx
|
|
34
34
|
import { useEffect, useMemo, useState } from "react";
|
|
@@ -193,4 +193,4 @@ function LoadedImage({
|
|
|
193
193
|
export {
|
|
194
194
|
InlineChatImage
|
|
195
195
|
};
|
|
196
|
-
//# sourceMappingURL=chunk-
|
|
196
|
+
//# sourceMappingURL=chunk-MIECLOQC.js.map
|
|
@@ -8,13 +8,13 @@ import {
|
|
|
8
8
|
} from "./chunk-CPLCSM6K.js";
|
|
9
9
|
import {
|
|
10
10
|
useMachines
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-QXEDIDBZ.js";
|
|
12
12
|
import {
|
|
13
13
|
useEmbeddedSession
|
|
14
14
|
} from "./chunk-TVQCDDSZ.js";
|
|
15
15
|
import {
|
|
16
16
|
useOpenGeniText
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-JFK7NTEA.js";
|
|
18
18
|
|
|
19
19
|
// src/hooks/use-session-start.ts
|
|
20
20
|
import { useCallback, useMemo } from "react";
|
|
@@ -85,4 +85,4 @@ function useSessionStart({
|
|
|
85
85
|
export {
|
|
86
86
|
useSessionStart
|
|
87
87
|
};
|
|
88
|
-
//# sourceMappingURL=chunk-
|
|
88
|
+
//# sourceMappingURL=chunk-MOKYT3X3.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-K3TJNJSU.js";
|
|
5
5
|
import {
|
|
6
6
|
Link
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-VYKW6TB2.js";
|
|
8
8
|
|
|
9
9
|
// src/app/components/session/site-origin-link.tsx
|
|
10
10
|
import { PanelsTopLeftIcon } from "lucide-react";
|
|
@@ -18,8 +18,9 @@ function SiteOriginLink({
|
|
|
18
18
|
return /* @__PURE__ */ jsxs(
|
|
19
19
|
Link,
|
|
20
20
|
{
|
|
21
|
-
to: "/workspaces/$workspaceId/
|
|
22
|
-
params: { workspaceId: session.workspaceId,
|
|
21
|
+
to: "/workspaces/$workspaceId/sites/$siteId",
|
|
22
|
+
params: { workspaceId: session.workspaceId, siteId: origin.siteId },
|
|
23
|
+
search: session.parentSessionId === null ? { conversation: session.id } : void 0,
|
|
23
24
|
title: `Created through ${origin.title}`,
|
|
24
25
|
"aria-label": `Created through ${origin.title}. Open Site`,
|
|
25
26
|
className: "inline-flex shrink-0 items-center gap-1 rounded px-1 py-1 text-xs text-fg-muted hover:bg-surface-2 hover:text-fg focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent",
|
|
@@ -34,4 +35,4 @@ function SiteOriginLink({
|
|
|
34
35
|
export {
|
|
35
36
|
SiteOriginLink
|
|
36
37
|
};
|
|
37
|
-
//# sourceMappingURL=chunk-
|
|
38
|
+
//# sourceMappingURL=chunk-MVZYNZXE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/app/components/session/site-origin-link.tsx"],"sourcesContent":["import { Link } from \"../../lib/navigation\";\nimport { PanelsTopLeftIcon } from \"lucide-react\";\nimport { sessionSiteOrigin } from \"../../lib/session-site-origin\";\nimport type { RailSession as Session } from \"../../lib/session-list-entry\";\n/** Where a session came from: opens its Site view with this conversation selected. */\nexport function SiteOriginLink({\n session,\n compact = false,\n}: {\n session: Session;\n compact?: boolean | undefined;\n}) {\n const origin = sessionSiteOrigin(session);\n if (!origin) return null;\n return (\n <Link\n to=\"/workspaces/$workspaceId/sites/$siteId\"\n params={{ workspaceId: session.workspaceId, siteId: origin.siteId }}\n search={session.parentSessionId === null ? { conversation: session.id } : undefined}\n title={`Created through ${origin.title}`}\n aria-label={`Created through ${origin.title}. Open Site`}\n className=\"inline-flex shrink-0 items-center gap-1 rounded px-1 py-1 text-xs text-fg-muted hover:bg-surface-2 hover:text-fg focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent\"\n >\n <PanelsTopLeftIcon aria-hidden=\"true\" className=\"size-3.5\" />\n {!compact && <span className=\"max-w-40 truncate\">{origin.title}</span>}\n </Link>\n );\n}\n"],"mappings":";;;;;;;;;AACA,SAAS,yBAAyB;AAc9B,SAQE,KARF;AAVG,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA,UAAU;AACZ,GAGG;AACD,QAAM,SAAS,kBAAkB,OAAO;AACxC,MAAI,CAAC,OAAQ,QAAO;AACpB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,IAAG;AAAA,MACH,QAAQ,EAAE,aAAa,QAAQ,aAAa,QAAQ,OAAO,OAAO;AAAA,MAClE,QAAQ,QAAQ,oBAAoB,OAAO,EAAE,cAAc,QAAQ,GAAG,IAAI;AAAA,MAC1E,OAAO,mBAAmB,OAAO,KAAK;AAAA,MACtC,cAAY,mBAAmB,OAAO,KAAK;AAAA,MAC3C,WAAU;AAAA,MAEV;AAAA,4BAAC,qBAAkB,eAAY,QAAO,WAAU,YAAW;AAAA,QAC1D,CAAC,WAAW,oBAAC,UAAK,WAAU,qBAAqB,iBAAO,OAAM;AAAA;AAAA;AAAA,EACjE;AAEJ;","names":[]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
useTimelineSearchReveal
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-35BC2FU2.js";
|
|
5
5
|
import {
|
|
6
6
|
cn
|
|
7
7
|
} from "./chunk-TXS65BB2.js";
|
|
8
8
|
import {
|
|
9
9
|
useOpenGeniText
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-JFK7NTEA.js";
|
|
11
11
|
|
|
12
12
|
// src/components/user-message-body.tsx
|
|
13
13
|
import {
|
|
@@ -396,4 +396,4 @@ export {
|
|
|
396
396
|
userMessageLikelyNeedsDisclosure,
|
|
397
397
|
UserMessageBody
|
|
398
398
|
};
|
|
399
|
-
//# sourceMappingURL=chunk-
|
|
399
|
+
//# sourceMappingURL=chunk-MXLKI7BI.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
rememberedProjectCompute
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-JXT5QDJC.js";
|
|
5
5
|
|
|
6
6
|
// src/app/routes/sessions-index-hydration.tsx
|
|
7
7
|
function initialNewSessionProjectLaunchIntent(launchChannelId) {
|
|
@@ -53,4 +53,4 @@ export {
|
|
|
53
53
|
resolveHydratedNewSessionProjectSelection,
|
|
54
54
|
hydratedNewSessionProjectProvenancePresent
|
|
55
55
|
};
|
|
56
|
-
//# sourceMappingURL=chunk-
|
|
56
|
+
//# sourceMappingURL=chunk-N3ZP4IDU.js.map
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
useLocation,
|
|
15
15
|
useNavigate,
|
|
16
16
|
useSearch
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-VYKW6TB2.js";
|
|
18
18
|
import {
|
|
19
19
|
useAppContext
|
|
20
20
|
} from "./chunk-W6KAUGXO.js";
|
|
@@ -263,4 +263,4 @@ function BrowseControls({
|
|
|
263
263
|
export {
|
|
264
264
|
ArtifactBrowseControls
|
|
265
265
|
};
|
|
266
|
-
//# sourceMappingURL=chunk-
|
|
266
|
+
//# sourceMappingURL=chunk-NAZZLAWX.js.map
|
|
@@ -14,13 +14,13 @@ import {
|
|
|
14
14
|
editableArtifactStatusLabel,
|
|
15
15
|
useArtifactSubmissions,
|
|
16
16
|
useEditableArtifactView
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-3RQUWFZT.js";
|
|
18
18
|
import {
|
|
19
19
|
cn
|
|
20
20
|
} from "./chunk-TXS65BB2.js";
|
|
21
21
|
import {
|
|
22
22
|
useOpenGeniText
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-JFK7NTEA.js";
|
|
24
24
|
|
|
25
25
|
// src/components/artifacts/document-editor.tsx
|
|
26
26
|
import {
|
|
@@ -2314,4 +2314,4 @@ export {
|
|
|
2314
2314
|
DocumentProjectionArtifactSurface,
|
|
2315
2315
|
EditableDocumentArtifactSurface
|
|
2316
2316
|
};
|
|
2317
|
-
//# sourceMappingURL=chunk-
|
|
2317
|
+
//# sourceMappingURL=chunk-NEK4WB5P.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
invalidateSharedQueries,
|
|
4
4
|
retainSharedQueries
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-NLAFNMPK.js";
|
|
6
6
|
|
|
7
7
|
// src/app/lib/shared-query.tsx
|
|
8
8
|
import { useEffect } from "react";
|
|
@@ -50,4 +50,4 @@ export {
|
|
|
50
50
|
notifyModelConnectionsChanged,
|
|
51
51
|
useConsoleSharedQueries
|
|
52
52
|
};
|
|
53
|
-
//# sourceMappingURL=chunk-
|
|
53
|
+
//# sourceMappingURL=chunk-NKNVIO66.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
usePageLiveActivity
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-2KO2G3RI.js";
|
|
5
5
|
import {
|
|
6
6
|
normalizeError
|
|
7
7
|
} from "./chunk-CM7LVUKC.js";
|
|
@@ -499,4 +499,4 @@ export {
|
|
|
499
499
|
useSharedQueryValue,
|
|
500
500
|
useSharedQueryActivity
|
|
501
501
|
};
|
|
502
|
-
//# sourceMappingURL=chunk-
|
|
502
|
+
//# sourceMappingURL=chunk-NLAFNMPK.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
createOpenGeniText,
|
|
4
4
|
useOpenGeniText
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-JFK7NTEA.js";
|
|
6
6
|
|
|
7
7
|
// src/components/this-computer/labels.ts
|
|
8
8
|
function defaultThisComputerLabels(t = createOpenGeniText()) {
|
|
@@ -541,4 +541,4 @@ export {
|
|
|
541
541
|
ThisComputerPanel,
|
|
542
542
|
ThisComputerCard
|
|
543
543
|
};
|
|
544
|
-
//# sourceMappingURL=chunk-
|
|
544
|
+
//# sourceMappingURL=chunk-O2SBHS2N.js.map
|