@opengeni/react 3.1.0 → 3.1.3-canary.38890816741001
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/README.md +769 -22
- package/dist/accounts.js +89 -11
- package/dist/accounts.js.map +1 -1
- package/dist/approvals.d.ts +2 -1
- package/dist/artifacts-document.js +5 -3
- package/dist/artifacts-presentation.js +5 -3
- package/dist/artifacts-spreadsheet.d.ts +1 -1
- package/dist/artifacts-spreadsheet.js +5 -3
- package/dist/artifacts.d.ts +5 -1
- package/dist/artifacts.js +536 -42
- package/dist/artifacts.js.map +1 -1
- package/dist/browser-viewer-ZWR6MWJ7.js +19 -0
- package/dist/capability-catalog-row.d.ts +20 -0
- package/dist/capability-logo-fallback.d.ts +3 -0
- package/dist/chat-interactive-block-BO2IWXVK.js +14 -0
- package/dist/chunk-2DDJ6YH6.js +41 -0
- package/dist/chunk-2DDJ6YH6.js.map +1 -0
- package/dist/chunk-2HVLQ26H.js +183 -0
- package/dist/chunk-2HVLQ26H.js.map +1 -0
- package/dist/{chunk-RGALCTWO.js → chunk-2I6R3GCZ.js} +4285 -3980
- package/dist/chunk-2I6R3GCZ.js.map +1 -0
- package/dist/{chunk-D3UIAJKY.js → chunk-2SFFYIH3.js} +1179 -166
- package/dist/chunk-2SFFYIH3.js.map +1 -0
- package/dist/chunk-3PVDYTTB.js +24 -0
- package/dist/chunk-3PVDYTTB.js.map +1 -0
- package/dist/chunk-3UZCWK46.js +298 -0
- package/dist/chunk-3UZCWK46.js.map +1 -0
- package/dist/chunk-47CKUXTW.js +293 -0
- package/dist/chunk-47CKUXTW.js.map +1 -0
- package/dist/chunk-4QYP6QUI.js +109 -0
- package/dist/chunk-4QYP6QUI.js.map +1 -0
- package/dist/chunk-5EY26VZ7.js +1053 -0
- package/dist/chunk-5EY26VZ7.js.map +1 -0
- package/dist/chunk-5I4VRWBB.js +56 -0
- package/dist/chunk-5I4VRWBB.js.map +1 -0
- package/dist/chunk-5WOR7UCL.js +191 -0
- package/dist/chunk-5WOR7UCL.js.map +1 -0
- package/dist/chunk-5YJLGOM5.js +51 -0
- package/dist/chunk-5YJLGOM5.js.map +1 -0
- package/dist/chunk-6JFN3OWG.js +386 -0
- package/dist/chunk-6JFN3OWG.js.map +1 -0
- package/dist/chunk-7QJT5O4S.js +35 -0
- package/dist/chunk-7QJT5O4S.js.map +1 -0
- package/dist/chunk-A55KV72M.js +402 -0
- package/dist/chunk-A55KV72M.js.map +1 -0
- package/dist/chunk-ADWCLI4G.js +2028 -0
- package/dist/chunk-ADWCLI4G.js.map +1 -0
- package/dist/chunk-B27E3V37.js +29 -0
- package/dist/chunk-B27E3V37.js.map +1 -0
- package/dist/chunk-B7TC2A33.js +83 -0
- package/dist/chunk-B7TC2A33.js.map +1 -0
- package/dist/chunk-BLL56F7R.js +385 -0
- package/dist/chunk-BLL56F7R.js.map +1 -0
- package/dist/chunk-BOFEQC6K.js +162 -0
- package/dist/chunk-BOFEQC6K.js.map +1 -0
- package/dist/chunk-CM7LVUKC.js +35 -0
- package/dist/chunk-CM7LVUKC.js.map +1 -0
- package/dist/chunk-CORUP6JB.js +122 -0
- package/dist/chunk-CORUP6JB.js.map +1 -0
- package/dist/chunk-CSX5FFKZ.js +35 -0
- package/dist/chunk-CSX5FFKZ.js.map +1 -0
- package/dist/chunk-EGVHJKGJ.js +3125 -0
- package/dist/chunk-EGVHJKGJ.js.map +1 -0
- package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
- package/dist/chunk-G76LSA76.js.map +1 -0
- package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
- package/dist/chunk-GQMRL52F.js.map +1 -0
- package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
- package/dist/chunk-GUUXOISA.js.map +1 -0
- package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
- package/dist/chunk-I7X2P4FU.js.map +1 -0
- package/dist/chunk-IGFZFLI2.js +1390 -0
- package/dist/chunk-IGFZFLI2.js.map +1 -0
- package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
- package/dist/chunk-IMSUVYQB.js.map +1 -0
- package/dist/chunk-IOYHDEP3.js +38 -0
- package/dist/chunk-IOYHDEP3.js.map +1 -0
- package/dist/chunk-IZV5FTJC.js +55 -0
- package/dist/chunk-IZV5FTJC.js.map +1 -0
- package/dist/chunk-KF33GTWN.js +343 -0
- package/dist/chunk-KF33GTWN.js.map +1 -0
- package/dist/chunk-KSGQ5ODA.js +457 -0
- package/dist/chunk-KSGQ5ODA.js.map +1 -0
- package/dist/{chunk-OAM4WAAM.js → chunk-KZC6QRNR.js} +1513 -697
- package/dist/chunk-KZC6QRNR.js.map +1 -0
- package/dist/chunk-LJUMYUBO.js +218 -0
- package/dist/chunk-LJUMYUBO.js.map +1 -0
- package/dist/chunk-LSW2OJVV.js +380 -0
- package/dist/chunk-LSW2OJVV.js.map +1 -0
- package/dist/chunk-M357MHH3.js +2 -0
- package/dist/chunk-M357MHH3.js.map +1 -0
- package/dist/chunk-MK2TQO4Y.js +24 -0
- package/dist/chunk-MK2TQO4Y.js.map +1 -0
- package/dist/chunk-N7S72EXK.js +25 -0
- package/dist/chunk-N7S72EXK.js.map +1 -0
- package/dist/{chunk-XXWH2JLC.js → chunk-NKMYZFHA.js} +616 -621
- package/dist/chunk-NKMYZFHA.js.map +1 -0
- package/dist/chunk-NX4ADH73.js +14 -0
- package/dist/chunk-NX4ADH73.js.map +1 -0
- package/dist/chunk-O7F6UJO4.js +71 -0
- package/dist/chunk-O7F6UJO4.js.map +1 -0
- package/dist/chunk-OVB5WIG5.js +14064 -0
- package/dist/chunk-OVB5WIG5.js.map +1 -0
- package/dist/chunk-OYQQJL3J.js +16 -0
- package/dist/chunk-OYQQJL3J.js.map +1 -0
- package/dist/{chunk-H5YGYNXS.js → chunk-P4BNUO57.js} +60 -17
- package/dist/chunk-P4BNUO57.js.map +1 -0
- package/dist/{chunk-JVYQRRC4.js → chunk-PEHTX3V7.js} +21 -1
- package/dist/chunk-PEHTX3V7.js.map +1 -0
- package/dist/chunk-PMV53IMM.js +26 -0
- package/dist/chunk-PMV53IMM.js.map +1 -0
- package/dist/{chunk-KCGXPP5V.js → chunk-PYEOPA4M.js} +13 -7
- package/dist/chunk-PYEOPA4M.js.map +1 -0
- package/dist/{chunk-KZ73RL76.js → chunk-QHUE7E4N.js} +8 -3
- package/dist/chunk-QHUE7E4N.js.map +1 -0
- package/dist/chunk-QV3DJVRZ.js +11 -0
- package/dist/chunk-QV3DJVRZ.js.map +1 -0
- package/dist/chunk-R5SBNG7S.js +810 -0
- package/dist/chunk-R5SBNG7S.js.map +1 -0
- package/dist/chunk-RI42H5IU.js +326 -0
- package/dist/chunk-RI42H5IU.js.map +1 -0
- package/dist/chunk-S2QH6EZ5.js +211 -0
- package/dist/chunk-S2QH6EZ5.js.map +1 -0
- package/dist/chunk-SHLZMAJN.js +304 -0
- package/dist/chunk-SHLZMAJN.js.map +1 -0
- package/dist/chunk-TGXK4BAZ.js +293 -0
- package/dist/chunk-TGXK4BAZ.js.map +1 -0
- package/dist/{chunk-5YK2ZDIG.js → chunk-TNEZNMSN.js} +4 -10
- package/dist/chunk-TNEZNMSN.js.map +1 -0
- package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
- package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
- package/dist/chunk-UNJPZGNK.js +63 -0
- package/dist/chunk-UNJPZGNK.js.map +1 -0
- package/dist/{chunk-MZ2G2XBA.js → chunk-V5ZUJT2T.js} +205 -45
- package/dist/chunk-V5ZUJT2T.js.map +1 -0
- package/dist/chunk-VIUEOHXY.js +394 -0
- package/dist/chunk-VIUEOHXY.js.map +1 -0
- package/dist/chunk-WIUKB3LD.js +1911 -0
- package/dist/chunk-WIUKB3LD.js.map +1 -0
- package/dist/{chunk-ICA6R6TW.js → chunk-WNN7NO2N.js} +1451 -355
- package/dist/chunk-WNN7NO2N.js.map +1 -0
- package/dist/{chunk-YJFGAFBD.js → chunk-X5UVUIMF.js} +1892 -1223
- package/dist/chunk-X5UVUIMF.js.map +1 -0
- package/dist/chunk-XDA5QJE7.js +402 -0
- package/dist/chunk-XDA5QJE7.js.map +1 -0
- package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
- package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
- package/dist/chunk-XHF7OYAN.js +1150 -0
- package/dist/chunk-XHF7OYAN.js.map +1 -0
- package/dist/chunk-YSRBFJMQ.js +43 -0
- package/dist/chunk-YSRBFJMQ.js.map +1 -0
- package/dist/chunk-ZOZAPAUO.js +174 -0
- package/dist/chunk-ZOZAPAUO.js.map +1 -0
- package/dist/chunk-ZQV5W7YC.js +809 -0
- package/dist/chunk-ZQV5W7YC.js.map +1 -0
- package/dist/chunk-ZUWF4NF7.js +13 -0
- package/dist/chunk-ZUWF4NF7.js.map +1 -0
- package/dist/client.d.ts +16 -7
- package/dist/clipboard.js +3 -1
- package/dist/commands/types.d.ts +2 -0
- package/dist/components/anthropic-mark.d.ts +3 -0
- package/dist/components/approval-surface.d.ts +19 -6
- package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
- package/dist/components/artifacts/artifact-sandbox.d.ts +30 -0
- package/dist/components/artifacts/artifact-surface.d.ts +4 -2
- package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
- package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
- package/dist/components/artifacts/document-editor.d.ts +4 -2
- package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
- package/dist/components/artifacts/editable-artifact-view.d.ts +48 -0
- package/dist/components/artifacts/editable-document.d.ts +1 -1
- package/dist/components/artifacts/editable-presentation.d.ts +2 -2
- package/dist/components/artifacts/editable-spreadsheet.d.ts +8 -3
- package/dist/components/artifacts/index.d.ts +9 -2
- package/dist/components/artifacts/inline-html-document.d.ts +2 -0
- package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
- package/dist/components/artifacts/presentation-editor.d.ts +6 -2
- package/dist/components/artifacts/published-html-artifact-frame.d.ts +23 -3
- package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
- package/dist/components/artifacts/site-view.d.ts +26 -0
- package/dist/components/artifacts/spreadsheet-command-queue.d.ts +20 -0
- package/dist/components/artifacts/spreadsheet-download.d.ts +7 -0
- package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
- package/dist/components/artifacts/spreadsheet-grid.d.ts +10 -3
- package/dist/components/artifacts/spreadsheet-resize.d.ts +50 -0
- package/dist/components/artifacts/spreadsheet-submissions.d.ts +9 -0
- package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
- package/dist/components/browser-select-control.d.ts +16 -0
- package/dist/components/browser-viewer.d.ts +11 -2
- package/dist/components/chat-composer.d.ts +21 -3
- package/dist/components/child-session-link.d.ts +9 -0
- package/dist/components/claude-mark.d.ts +3 -0
- package/dist/components/code-editor.d.ts +1 -4
- package/dist/components/composer-transcription-control.d.ts +7 -0
- package/dist/components/composer.d.ts +34 -67
- package/dist/components/computer-viewer.d.ts +1 -1
- package/dist/components/copy-button.d.ts +3 -1
- package/dist/components/desktop-viewer.d.ts +1 -1
- package/dist/components/fleet-tile.d.ts +2 -2
- package/dist/components/grok-mark.d.ts +26 -0
- package/dist/components/human-input-form.d.ts +28 -32
- package/dist/components/human-input-surface.d.ts +7 -2
- package/dist/components/linkified-text.d.ts +18 -0
- package/dist/components/machine-input-display.d.ts +22 -1
- package/dist/components/machines/agent-status-icon.d.ts +6 -0
- package/dist/components/machines/machine-detail.d.ts +7 -1
- package/dist/components/machines/machine-status.d.ts +48 -0
- package/dist/components/markdown-table-layout.d.ts +18 -0
- package/dist/components/markdown.d.ts +37 -4
- package/dist/components/message-timeline.d.ts +86 -7
- package/dist/components/model-mark.d.ts +29 -0
- package/dist/components/model-policy-picker-menu.d.ts +9 -0
- package/dist/components/model-policy-picker.d.ts +41 -25
- package/dist/components/new-conversation.d.ts +32 -0
- package/dist/components/open-geni-chat.d.ts +73 -0
- package/dist/components/open-geni-links.d.ts +68 -0
- package/dist/components/openrouter-mark.d.ts +6 -0
- package/dist/components/opper-mark.d.ts +7 -0
- package/dist/components/preview-loading.d.ts +2 -0
- package/dist/components/provider-recovery-notice.d.ts +16 -0
- package/dist/components/queue-item-content.d.ts +9 -0
- package/dist/components/rehype-secret-refs.d.ts +23 -0
- package/dist/components/remark-soft-line-breaks.d.ts +38 -0
- package/dist/components/sandbox-files.d.ts +3 -1
- package/dist/components/sandbox-workspace.d.ts +18 -0
- package/dist/components/secret-question-field.d.ts +31 -0
- package/dist/components/secret-ref-chip.d.ts +35 -0
- package/dist/components/session-capability-frame.d.ts +37 -0
- package/dist/components/session-chrome.d.ts +57 -8
- package/dist/components/session-commands-panel.d.ts +6 -0
- package/dist/components/session-commands.d.ts +6 -0
- package/dist/components/session-connection-request.d.ts +8 -0
- package/dist/components/session-conversation.d.ts +157 -0
- package/dist/components/session-list.d.ts +39 -0
- package/dist/components/session-mcp-capability-card.d.ts +41 -0
- package/dist/components/session-proxy-scope.d.ts +35 -0
- package/dist/components/session-status.d.ts +4 -1
- package/dist/components/session-usage-limit-notice.d.ts +39 -0
- package/dist/components/timeline-anchor.d.ts +24 -0
- package/dist/components/timeline-annotation-chrome.d.ts +25 -0
- package/dist/components/timeline-annotation-layout.d.ts +42 -0
- package/dist/components/timeline-annotation-markers.d.ts +8 -0
- package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
- package/dist/components/timeline-annotation-shared.d.ts +31 -0
- package/dist/components/timeline-annotations-dialog.d.ts +3 -2
- package/dist/components/timeline-annotations.d.ts +13 -3
- package/dist/components/timeline-reading-progress.d.ts +11 -0
- package/dist/components/timeline-search.d.ts +34 -0
- package/dist/components/timeline-settlement.d.ts +16 -0
- package/dist/components/tip-follow.d.ts +16 -0
- package/dist/components/tool-action-review.d.ts +47 -0
- package/dist/components/tool-review-history.d.ts +25 -0
- package/dist/components/usage-limit-notice.d.ts +49 -0
- package/dist/components/usage-member-list.d.ts +91 -0
- package/dist/components/usage-meter.d.ts +73 -0
- package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
- package/dist/components/user-message-body.d.ts +10 -1
- package/dist/composer-messages.d.ts +74 -0
- package/dist/composer-messages.js +9 -0
- package/dist/composer-messages.js.map +1 -0
- package/dist/composer-voice-events.d.ts +8 -0
- package/dist/composer.d.ts +5 -4
- package/dist/composer.js +26 -13
- package/dist/computer-viewer-GMLDXPON.js +20 -0
- package/dist/computer-viewer-GMLDXPON.js.map +1 -0
- package/dist/connect-account-identity.d.ts +8 -0
- package/dist/connect-accounts.d.ts +15 -0
- package/dist/connect-chooser.d.ts +18 -0
- package/dist/connect-panel.d.ts +18 -0
- package/dist/connect-setup.d.ts +18 -0
- package/dist/connect.d.ts +21 -0
- package/dist/connect.js +2149 -0
- package/dist/connect.js.map +1 -0
- package/dist/connection-catalog.d.ts +38 -0
- package/dist/connection-discovery.d.ts +12 -0
- package/dist/connection-installed.d.ts +17 -0
- package/dist/connection-logo.d.ts +9 -0
- package/dist/connection-service-logo.d.ts +8 -0
- package/dist/connection-service-presentation.d.ts +13 -0
- package/dist/connection-skeleton.d.ts +5 -0
- package/dist/connection-type-picker.d.ts +6 -0
- package/dist/conversation-timeline.d.ts +5 -0
- package/dist/desktop.d.ts +7 -0
- package/dist/desktop.js +27 -0
- package/dist/desktop.js.map +1 -0
- package/dist/device-authorization.d.ts +23 -0
- package/dist/diffs.d.ts +8 -0
- package/dist/diffs.js +15 -0
- package/dist/diffs.js.map +1 -0
- package/dist/discovery-cache.d.ts +5 -0
- package/dist/editor.d.ts +7 -0
- package/dist/editor.js +22 -0
- package/dist/editor.js.map +1 -0
- package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
- package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
- package/dist/embedded-voice-RPHPYVBT.js +18 -0
- package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
- package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
- package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
- package/dist/hooks/latest-question.d.ts +25 -0
- package/dist/hooks/shared-machines-list.d.ts +4 -0
- package/dist/hooks/shared-query.d.ts +113 -0
- package/dist/hooks/use-attached-browsers.d.ts +1 -1
- package/dist/hooks/use-auth-runs.d.ts +1 -4
- package/dist/hooks/use-available-models.d.ts +1 -1
- package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
- package/dist/hooks/use-browser-session.d.ts +12 -1
- package/dist/hooks/use-client-config-flags.d.ts +49 -0
- package/dist/hooks/use-codex-accounts.d.ts +59 -10
- package/dist/hooks/use-composer.d.ts +24 -2
- package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
- package/dist/hooks/use-computer-input-posture.d.ts +13 -0
- package/dist/hooks/use-computer-session.d.ts +4 -0
- package/dist/hooks/use-connect.d.ts +23 -0
- package/dist/hooks/use-desktop-stream.d.ts +1 -1
- package/dist/hooks/use-file-attachments.d.ts +12 -0
- package/dist/hooks/use-goal.d.ts +2 -1
- package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
- package/dist/hooks/use-new-conversation.d.ts +56 -0
- package/dist/hooks/use-new-session-draft.d.ts +74 -0
- package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
- package/dist/hooks/use-sandbox-files.d.ts +4 -1
- package/dist/hooks/use-session-conversation.d.ts +49 -0
- package/dist/hooks/use-session-events.d.ts +28 -7
- package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
- package/dist/hooks/use-session-model-account.d.ts +48 -0
- package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
- package/dist/hooks/use-terminal-stream.d.ts +11 -5
- package/dist/hooks/use-usage.d.ts +40 -0
- package/dist/hooks/use-vaults.d.ts +53 -0
- package/dist/hooks/use-voice-input.d.ts +8 -1
- package/dist/hooks/use-workspace-edit.d.ts +4 -0
- package/dist/hooks/use-workspace-sessions.d.ts +22 -5
- package/dist/human-input-model.d.ts +122 -0
- package/dist/identity-link-accounts.d.ts +11 -0
- package/dist/identity-link-consent.d.ts +18 -0
- package/dist/index.d.ts +82 -20
- package/dist/index.js +2350 -6605
- package/dist/index.js.map +1 -1
- package/dist/interaction.d.ts +1 -1
- package/dist/interaction.js +14 -24
- package/dist/interaction.js.map +1 -1
- package/dist/latest-question-R77KWSUP.js +118 -0
- package/dist/latest-question-R77KWSUP.js.map +1 -0
- package/dist/lib/clipboard.d.ts +7 -0
- package/dist/lib/error-message.d.ts +7 -0
- package/dist/lib/format.d.ts +58 -4
- package/dist/lib/host-theme.d.ts +77 -0
- package/dist/lib/interaction-errors.d.ts +3 -0
- package/dist/lib/menu-styles.d.ts +22 -0
- package/dist/lib/notify-observer.d.ts +2 -0
- package/dist/lib/pierre-diffs-loader.d.ts +20 -0
- package/dist/lib/provider-recovery.d.ts +55 -0
- package/dist/lib/scrollbars.d.ts +11 -0
- package/dist/lib/terminal-input-readiness.d.ts +11 -0
- package/dist/lib/transient-retry.d.ts +25 -0
- package/dist/lib/workbench-peers.d.ts +36 -0
- package/dist/lib/xterm-theme.d.ts +7 -5
- package/dist/machines.js +9 -5
- package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
- package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
- package/dist/mcp-connection-status.d.ts +14 -0
- package/dist/model-mark-paths.d.ts +34 -0
- package/dist/model-mark-paths.js +16 -0
- package/dist/model-mark-paths.js.map +1 -0
- package/dist/model-picker-model.d.ts +111 -0
- package/dist/model-picker-model.js +25 -0
- package/dist/model-picker-model.js.map +1 -0
- package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
- package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
- package/dist/model-policy.d.ts +30 -3
- package/dist/model-policy.js +14 -1
- package/dist/native-previews.d.ts +28 -0
- package/dist/native-previews.js +82 -0
- package/dist/native-previews.js.map +1 -0
- package/dist/new-session-draft.d.ts +7 -0
- package/dist/new-session-draft.js +639 -0
- package/dist/new-session-draft.js.map +1 -0
- package/dist/notification-text.d.ts +27 -0
- package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
- package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
- package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
- package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
- package/dist/older-history.d.ts +3 -2
- package/dist/organization-model.d.ts +32 -0
- package/dist/organization-model.js +65 -0
- package/dist/organization-model.js.map +1 -0
- package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
- package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
- package/dist/plugin-details.d.ts +14 -0
- package/dist/plugin-discovery.d.ts +25 -0
- package/dist/preview-loading-paint.d.ts +20 -0
- package/dist/provider.d.ts +25 -2
- package/dist/queue-presentation-model.d.ts +72 -0
- package/dist/queue-presentation-model.js +38 -0
- package/dist/queue-presentation-model.js.map +1 -0
- package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
- package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
- package/dist/realtime/embedded-new-voice.d.ts +1 -0
- package/dist/realtime/embedded-voice.d.ts +1 -0
- package/dist/realtime/realtime-control.d.ts +4 -65
- package/dist/realtime/session-realtime.d.ts +78 -0
- package/dist/realtime.js +25 -1294
- package/dist/realtime.js.map +1 -1
- package/dist/sandbox-files-O27IPOZW.js +21 -0
- package/dist/sandbox-files-O27IPOZW.js.map +1 -0
- package/dist/sandbox-label-model.d.ts +30 -0
- package/dist/sandbox-label-model.js +20 -0
- package/dist/sandbox-label-model.js.map +1 -0
- package/dist/scrollbars.d.ts +1 -0
- package/dist/scrollbars.js +10 -0
- package/dist/scrollbars.js.map +1 -0
- package/dist/secret-reference-label.d.ts +14 -0
- package/dist/secrets-ui.d.ts +57 -0
- package/dist/session-agents-model.d.ts +10 -0
- package/dist/session-agents-model.js +25 -0
- package/dist/session-agents-model.js.map +1 -0
- package/dist/session-attention-model.d.ts +8 -0
- package/dist/session-attention-model.js +47 -0
- package/dist/session-attention-model.js.map +1 -0
- package/dist/session-auth-recommendation.d.ts +5 -0
- package/dist/session-capability-policy.d.ts +31 -0
- package/dist/session-feedback-model.d.ts +20 -0
- package/dist/session-feedback-model.js +56 -0
- package/dist/session-feedback-model.js.map +1 -0
- package/dist/session-list-model.d.ts +138 -0
- package/dist/session-list-model.js +274 -0
- package/dist/session-list-model.js.map +1 -0
- package/dist/session-realtime-7DJOIHQW.js +21 -0
- package/dist/session-realtime-7DJOIHQW.js.map +1 -0
- package/dist/session-realtime.d.ts +7 -0
- package/dist/session-realtime.js +19 -0
- package/dist/session-realtime.js.map +1 -0
- package/dist/session-status-model.d.ts +36 -0
- package/dist/session-ui.d.ts +39 -1
- package/dist/session-ui.js +126 -12
- package/dist/session-ui.js.map +1 -1
- package/dist/session.d.ts +8 -2
- package/dist/session.js +35 -20
- package/dist/site-snapshot.d.ts +14 -0
- package/dist/sites-ui.d.ts +24 -0
- package/dist/sites.d.ts +3 -0
- package/dist/sites.js +14 -0
- package/dist/sites.js.map +1 -0
- package/dist/skill-discovery.d.ts +47 -0
- package/dist/terminal.d.ts +8 -0
- package/dist/terminal.js +32 -0
- package/dist/terminal.js.map +1 -0
- package/dist/testing/session-scenarios.d.ts +10 -0
- package/dist/testing/session-scenarios.js +367 -0
- package/dist/testing/session-scenarios.js.map +1 -0
- package/dist/timeline/activity-rail.d.ts +11 -2
- package/dist/timeline/agent-identity.d.ts +30 -0
- package/dist/timeline/agent-row.d.ts +31 -0
- package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
- package/dist/timeline/compaction-copy.d.ts +46 -0
- package/dist/timeline/entrance.d.ts +13 -1
- package/dist/timeline/focus-sequence.d.ts +9 -0
- package/dist/timeline/genie-copy.d.ts +3 -0
- package/dist/timeline/genie-loading.d.ts +47 -0
- package/dist/timeline/index.d.ts +10 -5
- package/dist/timeline/knowledge-receipt.d.ts +17 -0
- package/dist/timeline/message-sender.d.ts +19 -0
- package/dist/timeline/notice-presentation.d.ts +13 -0
- package/dist/timeline/parsers.d.ts +11 -0
- package/dist/timeline/patch-apply-command.d.ts +18 -0
- package/dist/timeline/platform-activity-presentation.d.ts +21 -0
- package/dist/timeline/platform-activity-row.d.ts +1 -2
- package/dist/timeline/presented-image.d.ts +11 -0
- package/dist/timeline/projection.d.ts +31 -2
- package/dist/timeline/provider-logo.d.ts +15 -0
- package/dist/timeline/question-nav-model.d.ts +23 -0
- package/dist/timeline/registry.d.ts +12 -1
- package/dist/timeline/retained-image.d.ts +18 -0
- package/dist/timeline/retained-loaders.d.ts +27 -0
- package/dist/timeline/rolling-activity.d.ts +11 -0
- package/dist/timeline/screenshot-lightbox.d.ts +23 -1
- package/dist/timeline/session-usage-limit-row.d.ts +11 -0
- package/dist/timeline/shared.d.ts +4 -1
- package/dist/timeline/startup-dispatch-details.d.ts +5 -0
- package/dist/timeline/startup-preference.d.ts +3 -0
- package/dist/timeline/startup-timings.d.ts +4 -0
- package/dist/timeline/tool-display-name.d.ts +5 -2
- package/dist/timeline/tool-presentation.d.ts +172 -0
- package/dist/timeline/turn-summary-model.d.ts +95 -0
- package/dist/timeline/turn-summary.d.ts +20 -54
- package/dist/timeline/types.d.ts +179 -7
- package/dist/timeline/work-presentation.d.ts +60 -0
- package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
- package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
- package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
- package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
- package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
- package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
- package/dist/timeline-model.d.ts +29 -0
- package/dist/timeline-model.js +254 -0
- package/dist/timeline-model.js.map +1 -0
- package/dist/usage/allowance-copy.d.ts +25 -0
- package/dist/usage/session-usage-limit.d.ts +88 -0
- package/dist/usage/summary.d.ts +35 -0
- package/dist/usage.d.ts +17 -0
- package/dist/usage.js +1187 -0
- package/dist/usage.js.map +1 -0
- package/dist/voice-recording-owner.d.ts +7 -0
- package/package.json +107 -7
- package/src/accounts.tsx +116 -14
- package/src/approvals.ts +8 -1
- package/src/artifacts-spreadsheet.ts +1 -0
- package/src/artifacts.ts +44 -0
- package/src/assets/README.md +8 -0
- package/src/assets/gmail.ico +0 -0
- package/src/assets/outlook.ico +0 -0
- package/src/capability-catalog-row.tsx +94 -0
- package/src/capability-logo-fallback.ts +22 -0
- package/src/client.ts +20 -31
- package/src/commands/registry.ts +18 -15
- package/src/commands/types.ts +2 -0
- package/src/components/anthropic-mark.tsx +10 -0
- package/src/components/approval-surface.tsx +401 -138
- package/src/components/artifacts/artifact-chrome.tsx +413 -0
- package/src/components/artifacts/artifact-sandbox.tsx +189 -0
- package/src/components/artifacts/artifact-surface.tsx +40 -20
- package/src/components/artifacts/chat-interactive-block.tsx +260 -0
- package/src/components/artifacts/deferred-chat-media.tsx +67 -0
- package/src/components/artifacts/document-editor.tsx +141 -16
- package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
- package/src/components/artifacts/editable-artifact-view.tsx +197 -0
- package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
- package/src/components/artifacts/editable-document.tsx +37 -36
- package/src/components/artifacts/editable-presentation.tsx +36 -18
- package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
- package/src/components/artifacts/index.ts +45 -0
- package/src/components/artifacts/inline-html-document.ts +24 -0
- package/src/components/artifacts/latest-task-runner.ts +49 -0
- package/src/components/artifacts/presentation-editor.tsx +323 -67
- package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
- package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
- package/src/components/artifacts/site-view.tsx +121 -0
- package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
- package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
- package/src/components/artifacts/spreadsheet-download.tsx +109 -0
- package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
- package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
- package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
- package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
- package/src/components/artifacts/visualization-assets/base.css +1015 -0
- package/src/components/artifacts/visualization-assets/helpers.html +349 -0
- package/src/components/artifacts/visualization-assets.gen.ts +3 -0
- package/src/components/browser-select-control.tsx +312 -0
- package/src/components/browser-viewer.tsx +778 -318
- package/src/components/chat-composer.tsx +47 -5
- package/src/components/child-session-link.tsx +36 -0
- package/src/components/claude-mark.tsx +11 -0
- package/src/components/code-editor.tsx +13 -16
- package/src/components/composer-transcription-control.tsx +128 -30
- package/src/components/composer.tsx +404 -195
- package/src/components/computer-viewer.tsx +880 -253
- package/src/components/copy-button.tsx +13 -5
- package/src/components/desktop-viewer.tsx +1 -1
- package/src/components/enrollment-consent.tsx +1 -1
- package/src/components/enrollment-device-flow.tsx +1 -1
- package/src/components/file-browser.tsx +10 -14
- package/src/components/fleet-tile.tsx +9 -18
- package/src/components/generated-video-player.tsx +4 -2
- package/src/components/grok-mark.tsx +34 -0
- package/src/components/human-input-form.tsx +590 -283
- package/src/components/human-input-surface.tsx +11 -0
- package/src/components/interaction-intervention-banner.tsx +2 -2
- package/src/components/linkified-text.tsx +79 -0
- package/src/components/machine-card.tsx +35 -78
- package/src/components/machine-dock-bar.tsx +1 -1
- package/src/components/machine-input-display.ts +197 -3
- package/src/components/machines/agent-status-icon.tsx +31 -0
- package/src/components/machines/machine-detail.tsx +200 -31
- package/src/components/machines/machine-operation-policy.tsx +1 -1
- package/src/components/machines/machine-status.ts +241 -0
- package/src/components/machines-dashboard.tsx +2 -17
- package/src/components/markdown-table-layout.ts +143 -0
- package/src/components/markdown.tsx +466 -129
- package/src/components/message-timeline.tsx +2567 -728
- package/src/components/model-mark.tsx +102 -0
- package/src/components/model-picker.tsx +15 -4
- package/src/components/model-policy-picker-menu.tsx +371 -0
- package/src/components/model-policy-picker.tsx +256 -412
- package/src/components/new-conversation.tsx +221 -0
- package/src/components/open-geni-chat.tsx +309 -0
- package/src/components/open-geni-links.tsx +179 -0
- package/src/components/openrouter-mark.tsx +13 -0
- package/src/components/opper-mark.tsx +18 -0
- package/src/components/pierre-diff.tsx +41 -16
- package/src/components/pierre-file.tsx +35 -10
- package/src/components/preview-loading.tsx +109 -0
- package/src/components/provider-recovery-notice.tsx +49 -0
- package/src/components/queue-item-content.ts +14 -0
- package/src/components/queue-surface-implementation.tsx +51 -356
- package/src/components/queue-surface-state.tsx +3 -1
- package/src/components/rehype-secret-refs.ts +98 -0
- package/src/components/remark-soft-line-breaks.ts +166 -0
- package/src/components/sandbox-files.tsx +91 -15
- package/src/components/sandbox-terminal.tsx +84 -13
- package/src/components/sandbox-workspace.tsx +147 -51
- package/src/components/secret-question-field.tsx +324 -0
- package/src/components/secret-ref-chip.tsx +185 -0
- package/src/components/session-capability-frame.tsx +197 -0
- package/src/components/session-chrome.tsx +842 -251
- package/src/components/session-commands-panel.tsx +126 -0
- package/src/components/session-commands.tsx +18 -0
- package/src/components/session-connection-request.tsx +97 -0
- package/src/components/session-conversation.tsx +876 -0
- package/src/components/session-list.tsx +257 -0
- package/src/components/session-mcp-capability-card.tsx +680 -0
- package/src/components/session-proxy-scope.tsx +153 -0
- package/src/components/session-status.tsx +26 -17
- package/src/components/session-usage-limit-notice.tsx +174 -0
- package/src/components/timeline-anchor.tsx +119 -0
- package/src/components/timeline-annotation-chrome.tsx +196 -0
- package/src/components/timeline-annotation-layout.ts +268 -0
- package/src/components/timeline-annotation-markers.tsx +185 -0
- package/src/components/timeline-annotation-reveal-context.ts +9 -0
- package/src/components/timeline-annotation-selection.tsx +106 -54
- package/src/components/timeline-annotation-shared.ts +245 -0
- package/src/components/timeline-annotations-dialog.tsx +185 -128
- package/src/components/timeline-annotations.tsx +189 -45
- package/src/components/timeline-reading-progress.ts +80 -0
- package/src/components/timeline-search.tsx +168 -0
- package/src/components/timeline-settlement.ts +60 -0
- package/src/components/tip-follow.ts +52 -0
- package/src/components/tool-action-review.tsx +650 -0
- package/src/components/tool-review-history.tsx +88 -0
- package/src/components/tooltip.tsx +38 -5
- package/src/components/usage-limit-notice.tsx +179 -0
- package/src/components/usage-member-list.tsx +792 -0
- package/src/components/usage-meter.tsx +382 -0
- package/src/components/use-viewer-menu-dismiss.ts +33 -0
- package/src/components/user-message-body.tsx +27 -2
- package/src/components/workspace-dock.tsx +18 -1
- package/src/composer-messages.ts +150 -0
- package/src/composer-voice-events.ts +12 -0
- package/src/composer.ts +6 -1
- package/src/connect-account-identity.tsx +34 -0
- package/src/connect-accounts.tsx +233 -0
- package/src/connect-chooser.tsx +336 -0
- package/src/connect-panel.tsx +99 -0
- package/src/connect-setup.tsx +355 -0
- package/src/connect.ts +60 -0
- package/src/connection-assets.d.ts +4 -0
- package/src/connection-catalog.tsx +162 -0
- package/src/connection-discovery.tsx +238 -0
- package/src/connection-installed.tsx +51 -0
- package/src/connection-logo.tsx +37 -0
- package/src/connection-service-logo.tsx +55 -0
- package/src/connection-service-presentation.ts +46 -0
- package/src/connection-skeleton.tsx +16 -0
- package/src/connection-type-picker.tsx +36 -0
- package/src/conversation-timeline.ts +92 -0
- package/src/desktop.ts +24 -0
- package/src/device-authorization.tsx +98 -0
- package/src/diffs.ts +16 -0
- package/src/discovery-cache.ts +42 -0
- package/src/editor.ts +13 -0
- package/src/hooks/internal.ts +3 -2
- package/src/hooks/latest-question.ts +164 -0
- package/src/hooks/shared-machines-list.ts +34 -1
- package/src/hooks/shared-query.ts +721 -0
- package/src/hooks/use-attached-browsers.ts +1 -1
- package/src/hooks/use-auth-runs.ts +0 -27
- package/src/hooks/use-available-models.ts +21 -15
- package/src/hooks/use-browser-frame-stream.ts +19 -2
- package/src/hooks/use-browser-session.ts +680 -205
- package/src/hooks/use-browser-sessions.ts +32 -1
- package/src/hooks/use-client-config-flags.ts +118 -0
- package/src/hooks/use-codex-accounts.ts +247 -47
- package/src/hooks/use-composer.ts +276 -47
- package/src/hooks/use-computer-frame-stream.ts +25 -7
- package/src/hooks/use-computer-input-posture.ts +94 -0
- package/src/hooks/use-computer-session.ts +409 -95
- package/src/hooks/use-connect.ts +23 -0
- package/src/hooks/use-desktop-stream.ts +19 -28
- package/src/hooks/use-file-attachments.ts +80 -4
- package/src/hooks/use-goal.ts +107 -13
- package/src/hooks/use-last-started-turn-policy.ts +46 -14
- package/src/hooks/use-machines.ts +4 -0
- package/src/hooks/use-new-conversation.ts +374 -0
- package/src/hooks/use-new-session-draft.ts +813 -0
- package/src/hooks/use-realtime-voice-models.ts +46 -0
- package/src/hooks/use-sandbox-files.ts +68 -20
- package/src/hooks/use-session-background-commands.ts +22 -11
- package/src/hooks/use-session-capabilities.ts +3 -2
- package/src/hooks/use-session-conversation.ts +150 -0
- package/src/hooks/use-session-events.ts +703 -382
- package/src/hooks/use-session-lineage.ts +20 -16
- package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
- package/src/hooks/use-session-model-account.ts +174 -0
- package/src/hooks/use-session.ts +53 -21
- package/src/hooks/use-slash-commands.ts +6 -11
- package/src/hooks/use-supergrok-accounts.ts +22 -8
- package/src/hooks/use-terminal-stream.ts +153 -27
- package/src/hooks/use-transcription.ts +6 -0
- package/src/hooks/use-turn-queue.ts +2 -1
- package/src/hooks/use-usage.ts +100 -0
- package/src/hooks/use-vaults.ts +153 -0
- package/src/hooks/use-video-artifact-playback.ts +1 -1
- package/src/hooks/use-voice-input.ts +127 -19
- package/src/hooks/use-workspace-capture.ts +3 -2
- package/src/hooks/use-workspace-edit.ts +23 -5
- package/src/hooks/use-workspace-sessions.ts +97 -32
- package/src/human-input-model.ts +359 -0
- package/src/identity-link-accounts.tsx +148 -0
- package/src/identity-link-consent.tsx +192 -0
- package/src/index.ts +262 -16
- package/src/interaction.ts +1 -0
- package/src/lib/clipboard.ts +29 -0
- package/src/lib/error-message.ts +37 -0
- package/src/lib/format.ts +213 -16
- package/src/lib/host-theme.ts +529 -0
- package/src/lib/interaction-errors.ts +15 -0
- package/src/lib/menu-styles.ts +44 -0
- package/src/lib/notify-observer.ts +15 -0
- package/src/lib/pierre-diffs-loader.ts +53 -0
- package/src/lib/provider-recovery.ts +243 -0
- package/src/lib/scrollbars.ts +30 -0
- package/src/lib/terminal-input-readiness.ts +51 -0
- package/src/lib/transient-retry.ts +99 -0
- package/src/lib/workbench-peers.ts +62 -0
- package/src/lib/xterm-theme.ts +23 -21
- package/src/mcp-connection-status.ts +35 -0
- package/src/model-mark-paths.ts +53 -0
- package/src/model-picker-model.ts +330 -0
- package/src/model-policy.ts +299 -74
- package/src/native-previews.ts +100 -0
- package/src/new-session-draft.ts +22 -0
- package/src/notification-text.ts +81 -0
- package/src/older-history.ts +22 -4
- package/src/organization-model.ts +118 -0
- package/src/plugin-details.tsx +185 -0
- package/src/plugin-discovery.tsx +196 -0
- package/src/preview-loading-paint.ts +68 -0
- package/src/provider.tsx +74 -15
- package/src/queue-presentation-model.ts +464 -0
- package/src/realtime/dropdown-menu.tsx +19 -12
- package/src/realtime/embedded-new-voice.tsx +1 -0
- package/src/realtime/embedded-voice.tsx +3 -0
- package/src/realtime/realtime-control.tsx +138 -501
- package/src/realtime/session-realtime.ts +566 -0
- package/src/sandbox-label-model.ts +53 -0
- package/src/scrollbars.ts +3 -0
- package/src/secret-reference-label.ts +43 -0
- package/src/secrets-ui.tsx +59 -0
- package/src/session-agents-model.ts +33 -0
- package/src/session-attention-model.ts +62 -0
- package/src/session-auth-recommendation.ts +48 -0
- package/src/session-capability-policy.ts +196 -0
- package/src/session-context.ts +3 -4
- package/src/session-feedback-model.ts +95 -0
- package/src/session-list-model.ts +434 -0
- package/src/session-realtime.ts +18 -0
- package/src/session-status-model.ts +99 -0
- package/src/session-ui.ts +98 -1
- package/src/session.ts +17 -1
- package/src/site-snapshot.ts +74 -0
- package/src/sites-ui.tsx +348 -0
- package/src/sites.ts +3 -0
- package/src/skill-discovery.tsx +208 -0
- package/src/terminal.ts +26 -0
- package/src/testing/session-scenarios.ts +404 -0
- package/src/timeline/activity-rail.tsx +242 -101
- package/src/timeline/agent-identity.tsx +84 -0
- package/src/timeline/agent-row.tsx +231 -0
- package/src/timeline/allowance-exhausted-row.tsx +86 -0
- package/src/timeline/compaction-copy.ts +115 -0
- package/src/timeline/entrance.tsx +28 -3
- package/src/timeline/fleet-decision-projection.ts +2 -1
- package/src/timeline/fleet-decision-row.tsx +1 -0
- package/src/timeline/focus-sequence.ts +44 -0
- package/src/timeline/genie-copy.ts +19 -0
- package/src/timeline/genie-loading.tsx +143 -0
- package/src/timeline/index.ts +30 -2
- package/src/timeline/knowledge-receipt.tsx +100 -0
- package/src/timeline/message-sender.tsx +71 -0
- package/src/timeline/notice-presentation.ts +48 -0
- package/src/timeline/parsers.ts +42 -2
- package/src/timeline/patch-apply-command.tsx +135 -0
- package/src/timeline/platform-activity-presentation.ts +166 -0
- package/src/timeline/platform-activity-row.tsx +15 -90
- package/src/timeline/presented-image.ts +63 -0
- package/src/timeline/projection.ts +1746 -76
- package/src/timeline/provider-logo.tsx +53 -0
- package/src/timeline/question-nav-model.ts +28 -0
- package/src/timeline/registry.ts +26 -4
- package/src/timeline/retained-image.ts +97 -0
- package/src/timeline/retained-loaders.ts +91 -0
- package/src/timeline/rolling-activity.tsx +80 -0
- package/src/timeline/screenshot-lightbox.tsx +228 -5
- package/src/timeline/session-usage-limit-row.tsx +42 -0
- package/src/timeline/shared.tsx +42 -15
- package/src/timeline/startup-dispatch-details.tsx +36 -0
- package/src/timeline/startup-preference.ts +33 -0
- package/src/timeline/startup-timings.tsx +145 -0
- package/src/timeline/tool-display-name.ts +19 -7
- package/src/timeline/tool-presentation.ts +1316 -0
- package/src/timeline/tool-renderers.tsx +835 -1138
- package/src/timeline/turn-summary-model.ts +343 -0
- package/src/timeline/turn-summary.tsx +272 -365
- package/src/timeline/types.ts +189 -6
- package/src/timeline/work-presentation.ts +189 -0
- package/src/timeline-model.ts +143 -0
- package/src/usage/allowance-copy.ts +64 -0
- package/src/usage/session-usage-limit.ts +266 -0
- package/src/usage/summary.ts +93 -0
- package/src/usage.ts +70 -0
- package/src/voice-recording-owner.ts +22 -0
- package/styles/compiled.css +2319 -748
- package/styles/connect.css +290 -0
- package/styles/connect.d.ts +1 -0
- package/styles/effective-tokens.css +1 -0
- package/styles/index.css +309 -9
- package/styles/responsive.css +99 -7
- package/styles/session-capability.css +44 -0
- package/styles/tokens.css +134 -66
- package/dist/browser-viewer-AEFHUYZK.js +0 -14
- package/dist/chunk-4MDLEHXL.js.map +0 -1
- package/dist/chunk-5YK2ZDIG.js.map +0 -1
- package/dist/chunk-D3UIAJKY.js.map +0 -1
- package/dist/chunk-ELIYWBZR.js.map +0 -1
- package/dist/chunk-H5YGYNXS.js.map +0 -1
- package/dist/chunk-HQVCKCLG.js +0 -9458
- package/dist/chunk-HQVCKCLG.js.map +0 -1
- package/dist/chunk-HUIKIDM5.js.map +0 -1
- package/dist/chunk-ICA6R6TW.js.map +0 -1
- package/dist/chunk-JVYQRRC4.js.map +0 -1
- package/dist/chunk-KCGXPP5V.js.map +0 -1
- package/dist/chunk-KZ73RL76.js.map +0 -1
- package/dist/chunk-LAKLF4PA.js +0 -141
- package/dist/chunk-LAKLF4PA.js.map +0 -1
- package/dist/chunk-MZ2G2XBA.js.map +0 -1
- package/dist/chunk-NEXLLTP4.js.map +0 -1
- package/dist/chunk-OAM4WAAM.js.map +0 -1
- package/dist/chunk-PEI6RANI.js.map +0 -1
- package/dist/chunk-RGALCTWO.js.map +0 -1
- package/dist/chunk-W6NFJXSA.js +0 -454
- package/dist/chunk-W6NFJXSA.js.map +0 -1
- package/dist/chunk-WSK7G5LE.js +0 -170
- package/dist/chunk-WSK7G5LE.js.map +0 -1
- package/dist/chunk-X4A66EWZ.js +0 -223
- package/dist/chunk-X4A66EWZ.js.map +0 -1
- package/dist/chunk-XXWH2JLC.js.map +0 -1
- package/dist/chunk-YFKJ7VZH.js +0 -268
- package/dist/chunk-YFKJ7VZH.js.map +0 -1
- package/dist/chunk-YJFGAFBD.js.map +0 -1
- package/dist/computer-viewer-FWEZISW4.js +0 -16
- package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
- package/dist/hooks/use-environments.d.ts +0 -41
- package/dist/hooks/use-packs.d.ts +0 -32
- package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
- package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
- package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
- package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
- package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
- package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
- package/src/hooks/use-environments.ts +0 -182
- package/src/hooks/use-packs.ts +0 -157
- /package/dist/{browser-viewer-AEFHUYZK.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
- /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-BO2IWXVK.js.map} +0 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ConnectController } from "@opengeni/connect";
|
|
2
|
+
import { useMemo, useSyncExternalStore } from "react";
|
|
3
|
+
|
|
4
|
+
/** Internal consumers import the hook directly so setup surfaces stay lazy. */
|
|
5
|
+
export function useConnect(controller: ConnectController) {
|
|
6
|
+
const snapshot = useSyncExternalStore(
|
|
7
|
+
controller.subscribe,
|
|
8
|
+
controller.getSnapshot,
|
|
9
|
+
controller.getSnapshot,
|
|
10
|
+
);
|
|
11
|
+
const actions = useMemo(
|
|
12
|
+
() => ({
|
|
13
|
+
begin: controller.begin.bind(controller),
|
|
14
|
+
recover: controller.recover.bind(controller),
|
|
15
|
+
refresh: controller.refresh.bind(controller),
|
|
16
|
+
waitForAction: controller.waitForAction.bind(controller),
|
|
17
|
+
advance: controller.advance.bind(controller),
|
|
18
|
+
cancel: controller.cancel.bind(controller),
|
|
19
|
+
}),
|
|
20
|
+
[controller],
|
|
21
|
+
);
|
|
22
|
+
return useMemo(() => ({ ...snapshot, ...actions }), [snapshot, actions]);
|
|
23
|
+
}
|
|
@@ -6,7 +6,15 @@ import {
|
|
|
6
6
|
type DesktopRfbLike,
|
|
7
7
|
type DesktopStreamCapability,
|
|
8
8
|
} from "@opengeni/sdk";
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
type RefObject,
|
|
11
|
+
useCallback,
|
|
12
|
+
useEffect,
|
|
13
|
+
useRef,
|
|
14
|
+
useState,
|
|
15
|
+
useSyncExternalStore,
|
|
16
|
+
} from "react";
|
|
17
|
+
import { desktopViewerPeers } from "../lib/workbench-peers";
|
|
10
18
|
import { type DesktopWebSocketFactory, useRelayFrameStream } from "./use-relay-frame-stream";
|
|
11
19
|
|
|
12
20
|
export type UseDesktopStreamOptions = {
|
|
@@ -17,7 +25,7 @@ export type UseDesktopStreamOptions = {
|
|
|
17
25
|
/** Read-only by default (v1 ruling H). interactive only when cap.mode allows. */
|
|
18
26
|
interactive?: boolean | undefined;
|
|
19
27
|
scaleViewport?: boolean | undefined;
|
|
20
|
-
/** Custom RFB factory
|
|
28
|
+
/** Custom RFB factory. Otherwise call enableDesktopViewer() on the desktop subpath. */
|
|
21
29
|
rfbFactory?: DesktopRfbFactory | undefined;
|
|
22
30
|
/** Additional WebSocket protocols for an authenticated placement proxy. */
|
|
23
31
|
webSocketProtocols?: string[] | undefined;
|
|
@@ -35,29 +43,6 @@ export type UseDesktopStreamResult = {
|
|
|
35
43
|
sendKey?: ((keysym: number, code: string, down?: boolean) => boolean) | undefined;
|
|
36
44
|
};
|
|
37
45
|
|
|
38
|
-
/** Lazy-load @novnc/novnc's RFB as the default factory. Imported inside the
|
|
39
|
-
* connect effect so SSR / non-desktop bundles never pull the DOM-only lib.
|
|
40
|
-
* @novnc/novnc ships no types and a single `export default class RFB`. The
|
|
41
|
-
* specifier is STATIC (`import("@novnc/novnc")`) so Vite can pre-bundle and
|
|
42
|
-
* resolve it — a runtime-string indirection with `@vite-ignore` (the previous
|
|
43
|
-
* approach) hands the browser a bare specifier and throws
|
|
44
|
-
* "Failed to resolve module specifier '@novnc/novnc'". The dynamic form keeps
|
|
45
|
-
* it out of the SSR / non-desktop critical path while staying resolvable. */
|
|
46
|
-
async function defaultRfbFactory(): Promise<DesktopRfbFactory> {
|
|
47
|
-
const mod = (await import("@novnc/novnc")) as unknown as {
|
|
48
|
-
default: new (
|
|
49
|
-
t: HTMLElement,
|
|
50
|
-
u: string,
|
|
51
|
-
o: {
|
|
52
|
-
credentials?: { password?: string | undefined } | undefined;
|
|
53
|
-
wsProtocols?: string[] | undefined;
|
|
54
|
-
},
|
|
55
|
-
) => DesktopRfbLike;
|
|
56
|
-
};
|
|
57
|
-
const RFB = mod.default;
|
|
58
|
-
return (target, url, opts) => new RFB(target, url, opts);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
46
|
/**
|
|
62
47
|
* Drive the noVNC RFB lifecycle from a `DesktopStreamCapability`, using the
|
|
63
48
|
* SDK's `desktop.ts` reducer + `desktopSocketUrl`. SSR-safe: the RFB import and
|
|
@@ -87,6 +72,12 @@ export function useDesktopStream(options: UseDesktopStreamOptions): UseDesktopSt
|
|
|
87
72
|
webSocketProtocols,
|
|
88
73
|
webSocketFactory,
|
|
89
74
|
} = options;
|
|
75
|
+
const peerRevision = useSyncExternalStore(
|
|
76
|
+
desktopViewerPeers.subscribe,
|
|
77
|
+
desktopViewerPeers.revision,
|
|
78
|
+
desktopViewerPeers.revision,
|
|
79
|
+
);
|
|
80
|
+
const factoryRevision = rfbFactory ? 0 : peerRevision;
|
|
90
81
|
|
|
91
82
|
// The self-hosted PNG-frame path. Always invoked (rules of hooks); dormant
|
|
92
83
|
// unless `transport === "relay-frames"`, in which case it owns the surface.
|
|
@@ -188,7 +179,7 @@ export function useDesktopStream(options: UseDesktopStreamOptions): UseDesktopSt
|
|
|
188
179
|
|
|
189
180
|
void (async () => {
|
|
190
181
|
try {
|
|
191
|
-
const factory = rfbFactoryRef.current ?? (await
|
|
182
|
+
const factory = rfbFactoryRef.current ?? (await desktopViewerPeers.load());
|
|
192
183
|
if (disposed) return;
|
|
193
184
|
const socketUrl = desktopSocketUrl({ url });
|
|
194
185
|
setBoth(nextDesktopState(stateRef.current, { type: "negotiated" }));
|
|
@@ -232,11 +223,11 @@ export function useDesktopStream(options: UseDesktopStreamOptions): UseDesktopSt
|
|
|
232
223
|
};
|
|
233
224
|
// ONLY a real transport change reconnects: a fresh url (rotation), a new
|
|
234
225
|
// credential (RFB password OR bearer subprotocol), the transport flipping,
|
|
235
|
-
// or an explicit manual reconnect
|
|
226
|
+
// a newly registered default peer loader, or an explicit manual reconnect
|
|
236
227
|
// (`nonce`). `interactive`/`scaleViewport`/`mode`/`rfbFactory` are read via
|
|
237
228
|
// refs and applied live below — they must never re-open the socket.
|
|
238
229
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
239
|
-
}, [url, token, transport, webSocketProtocolsKey, nonce]);
|
|
230
|
+
}, [url, token, transport, webSocketProtocolsKey, nonce, factoryRevision]);
|
|
240
231
|
|
|
241
232
|
// Apply take-control / return-control to the OPEN connection in place. noVNC
|
|
242
233
|
// honours `viewOnly` live, so flipping it neither blinks the surface nor drops
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
useEmbeddedFileAttachments,
|
|
5
5
|
type EmbeddedFileAttachmentClientOverride,
|
|
6
6
|
} from "../session-context";
|
|
7
|
+
import { useErrorMessage } from "../lib/error-message";
|
|
7
8
|
|
|
8
9
|
export type UseFileAttachmentsOptions = EmbeddedFileAttachmentClientOverride & {
|
|
9
10
|
/**
|
|
@@ -13,6 +14,8 @@ export type UseFileAttachmentsOptions = EmbeddedFileAttachmentClientOverride & {
|
|
|
13
14
|
* UseFileAttachmentsResult.addFiles} (the explicit picker / drop path)
|
|
14
15
|
* bypasses it.
|
|
15
16
|
*/
|
|
17
|
+
/** Retain original uploads in the chat owner’s personal scope when private. */
|
|
18
|
+
scope?: "workspace" | "personal";
|
|
16
19
|
pasteFilter?: ((file: File) => boolean) | undefined;
|
|
17
20
|
};
|
|
18
21
|
|
|
@@ -26,7 +29,11 @@ export type FileAttachment = {
|
|
|
26
29
|
file?: FileAsset | undefined;
|
|
27
30
|
/** Object-URL for an inline preview; minted for `image/*` files only. */
|
|
28
31
|
previewUrl?: string | undefined;
|
|
32
|
+
/** Stable SDK failure code for UI behavior that must not parse error copy. */
|
|
33
|
+
errorCode?: "secure_context_required" | undefined;
|
|
29
34
|
error?: string | undefined;
|
|
35
|
+
/** Original diagnostic failure; presentation copy is kept separately in `error`. */
|
|
36
|
+
errorCause?: unknown;
|
|
30
37
|
};
|
|
31
38
|
|
|
32
39
|
export type UseFileAttachmentsResult = {
|
|
@@ -50,6 +57,12 @@ export type UseFileAttachmentsResult = {
|
|
|
50
57
|
addFromPaste: (event: { clipboardData: DataTransfer | null }) => void;
|
|
51
58
|
/** Restore already-ready server assets without recreating browser-local bytes. */
|
|
52
59
|
restoreReadyFiles: (files: Iterable<FileAsset>) => void;
|
|
60
|
+
/**
|
|
61
|
+
* Resolve a ready image's short-lived server preview URL on demand. Optional
|
|
62
|
+
* for upload-only embedded clients; local object-URL previews remain usable
|
|
63
|
+
* without it.
|
|
64
|
+
*/
|
|
65
|
+
loadPreview?: ((id: string, signal?: AbortSignal) => Promise<string | undefined>) | undefined;
|
|
53
66
|
/**
|
|
54
67
|
* Re-run the upload for a `failed` attachment, in place (same id, same
|
|
55
68
|
* source file). No-op for an id that isn't a known failed upload.
|
|
@@ -76,6 +89,27 @@ export type UseFileAttachmentsResult = {
|
|
|
76
89
|
|
|
77
90
|
const isImage = (file: File): boolean => file.type.startsWith("image/");
|
|
78
91
|
|
|
92
|
+
let fallbackAttachmentId = 0;
|
|
93
|
+
|
|
94
|
+
function createAttachmentId(): string {
|
|
95
|
+
const cryptoSource = globalThis.crypto;
|
|
96
|
+
if (typeof cryptoSource?.randomUUID === "function") return cryptoSource.randomUUID();
|
|
97
|
+
fallbackAttachmentId += 1;
|
|
98
|
+
// This id is only a browser-local React key and retry lookup, never durable
|
|
99
|
+
// authority. Keep attachment tracking usable when HTTP withholds randomUUID
|
|
100
|
+
// or Web Crypto is unavailable so the SDK's typed failure reaches the card.
|
|
101
|
+
return `attachment:${Date.now().toString(36)}:${fallbackAttachmentId.toString(36)}`;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function secureContextRequiredErrorCode(error: unknown): "secure_context_required" | undefined {
|
|
105
|
+
return typeof error === "object" &&
|
|
106
|
+
error !== null &&
|
|
107
|
+
"code" in error &&
|
|
108
|
+
error.code === "secure_context_required"
|
|
109
|
+
? error.code
|
|
110
|
+
: undefined;
|
|
111
|
+
}
|
|
112
|
+
|
|
79
113
|
/**
|
|
80
114
|
* Upload-and-track state for files attached to the next message. Owns the
|
|
81
115
|
* full client-side upload layer: a per-file `uploading | ready | failed`
|
|
@@ -89,8 +123,11 @@ export function useFileAttachments(
|
|
|
89
123
|
options: UseFileAttachmentsOptions = {},
|
|
90
124
|
): UseFileAttachmentsResult {
|
|
91
125
|
const { client, workspaceId } = useEmbeddedFileAttachments(options);
|
|
126
|
+
const formatError = useErrorMessage();
|
|
92
127
|
const pasteFilter = options.pasteFilter ?? isImage;
|
|
93
128
|
const [attachments, setAttachments] = useState<FileAttachment[]>([]);
|
|
129
|
+
const attachmentsRef = useRef(attachments);
|
|
130
|
+
attachmentsRef.current = attachments;
|
|
94
131
|
// Keep the source File per attachment id so a failed upload can be retried
|
|
95
132
|
// in place. Cleared on remove/clear so it never outlives its attachment.
|
|
96
133
|
const sources = useRef<Map<string, File>>(new Map());
|
|
@@ -181,6 +218,7 @@ export function useFileAttachments(
|
|
|
181
218
|
filename: file.name || "file",
|
|
182
219
|
contentType: file.type || "application/octet-stream",
|
|
183
220
|
data: file,
|
|
221
|
+
...(options.scope ? { scope: options.scope } : {}),
|
|
184
222
|
})
|
|
185
223
|
.then((asset) => {
|
|
186
224
|
if (scopeGeneration.current !== generation) return;
|
|
@@ -198,7 +236,9 @@ export function useFileAttachments(
|
|
|
198
236
|
name: asset.filename,
|
|
199
237
|
contentType: asset.contentType,
|
|
200
238
|
sizeBytes: asset.sizeBytes,
|
|
239
|
+
errorCode: undefined,
|
|
201
240
|
error: undefined,
|
|
241
|
+
errorCause: undefined,
|
|
202
242
|
}
|
|
203
243
|
: attachment,
|
|
204
244
|
),
|
|
@@ -212,20 +252,22 @@ export function useFileAttachments(
|
|
|
212
252
|
? {
|
|
213
253
|
...attachment,
|
|
214
254
|
status: "failed",
|
|
215
|
-
|
|
255
|
+
errorCode: secureContextRequiredErrorCode(error),
|
|
256
|
+
error: formatError(error),
|
|
257
|
+
errorCause: error,
|
|
216
258
|
}
|
|
217
259
|
: attachment,
|
|
218
260
|
),
|
|
219
261
|
);
|
|
220
262
|
});
|
|
221
263
|
},
|
|
222
|
-
[client, workspaceId],
|
|
264
|
+
[client, workspaceId, options.scope, formatError],
|
|
223
265
|
);
|
|
224
266
|
|
|
225
267
|
const addFiles = useCallback(
|
|
226
268
|
(files: Iterable<File>) => {
|
|
227
269
|
for (const file of files) {
|
|
228
|
-
const id =
|
|
270
|
+
const id = createAttachmentId();
|
|
229
271
|
sources.current.set(id, file);
|
|
230
272
|
const previewUrl = isImage(file) ? URL.createObjectURL(file) : undefined;
|
|
231
273
|
if (previewUrl) previewUrls.current.set(id, previewUrl);
|
|
@@ -255,7 +297,13 @@ export function useFileAttachments(
|
|
|
255
297
|
setAttachments((current) =>
|
|
256
298
|
current.map((attachment) =>
|
|
257
299
|
attachment.id === id
|
|
258
|
-
? {
|
|
300
|
+
? {
|
|
301
|
+
...attachment,
|
|
302
|
+
status: "uploading",
|
|
303
|
+
errorCode: undefined,
|
|
304
|
+
error: undefined,
|
|
305
|
+
errorCause: undefined,
|
|
306
|
+
}
|
|
259
307
|
: attachment,
|
|
260
308
|
),
|
|
261
309
|
);
|
|
@@ -305,7 +353,9 @@ export function useFileAttachments(
|
|
|
305
353
|
sizeBytes: file.sizeBytes,
|
|
306
354
|
status: "ready",
|
|
307
355
|
file,
|
|
356
|
+
errorCode: undefined,
|
|
308
357
|
error: undefined,
|
|
358
|
+
errorCause: undefined,
|
|
309
359
|
}
|
|
310
360
|
: {
|
|
311
361
|
id: `restored:${file.id}`,
|
|
@@ -327,6 +377,31 @@ export function useFileAttachments(
|
|
|
327
377
|
[workspaceId],
|
|
328
378
|
);
|
|
329
379
|
|
|
380
|
+
const loadPreview = useCallback(
|
|
381
|
+
async (id: string, signal?: AbortSignal): Promise<string | undefined> => {
|
|
382
|
+
const generation = scopeGeneration.current;
|
|
383
|
+
const attachment = attachmentsRef.current.find((candidate) => candidate.id === id);
|
|
384
|
+
const createDownloadUrl = client.createFileDownloadUrl;
|
|
385
|
+
if (
|
|
386
|
+
!attachment ||
|
|
387
|
+
attachment.status !== "ready" ||
|
|
388
|
+
!attachment.file ||
|
|
389
|
+
!attachment.contentType.startsWith("image/") ||
|
|
390
|
+
typeof createDownloadUrl !== "function" ||
|
|
391
|
+
signal?.aborted
|
|
392
|
+
) {
|
|
393
|
+
return undefined;
|
|
394
|
+
}
|
|
395
|
+
const fileId = attachment.file.id;
|
|
396
|
+
const signed = await createDownloadUrl.call(client, workspaceId, fileId, { signal });
|
|
397
|
+
if (scopeGeneration.current !== generation || signal?.aborted) return undefined;
|
|
398
|
+
const current = attachmentsRef.current.find((candidate) => candidate.id === id);
|
|
399
|
+
if (current?.status !== "ready" || current.file?.id !== fileId) return undefined;
|
|
400
|
+
return signed.url;
|
|
401
|
+
},
|
|
402
|
+
[client, workspaceId],
|
|
403
|
+
);
|
|
404
|
+
|
|
330
405
|
const remove = useCallback(
|
|
331
406
|
(id: string) => {
|
|
332
407
|
sources.current.delete(id);
|
|
@@ -368,6 +443,7 @@ export function useFileAttachments(
|
|
|
368
443
|
addFiles,
|
|
369
444
|
addFromPaste,
|
|
370
445
|
restoreReadyFiles,
|
|
446
|
+
...(typeof client.createFileDownloadUrl === "function" ? { loadPreview } : {}),
|
|
371
447
|
retry,
|
|
372
448
|
retainPreview,
|
|
373
449
|
remove,
|
package/src/hooks/use-goal.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { OpenGeniApiError, type SessionEvent, type SessionGoal } from "@opengeni/sdk";
|
|
2
|
-
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
|
+
import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
3
3
|
import { useEmbeddedGoal, type EmbeddedGoalClientOverride } from "../session-context";
|
|
4
|
+
import { normalizeError } from "../lib/error-message";
|
|
4
5
|
import {
|
|
5
6
|
useDebouncedCallback,
|
|
6
7
|
useMutationRunner,
|
|
@@ -64,7 +65,8 @@ export type UseGoalResult = {
|
|
|
64
65
|
/**
|
|
65
66
|
* The session's goal: state, the autonomy counters (`autoContinuations`,
|
|
66
67
|
* `noProgressStreak`), and pause/resume control. A goal-less session yields
|
|
67
|
-
* `goal: null
|
|
68
|
+
* `goal: null`: read through `findGoal` as a successful null when the client
|
|
69
|
+
* has it, otherwise from an absorbed 404. Live-updates on goal, turn, session,
|
|
68
70
|
* control, and system-update events — pass `options.events` from
|
|
69
71
|
* `useSessionEvents` to reuse its stream.
|
|
70
72
|
*/
|
|
@@ -83,15 +85,45 @@ export function useGoal(
|
|
|
83
85
|
const { run, mutating, mutationError, clearMutationError } = useMutationRunner();
|
|
84
86
|
const generation = useRef(0);
|
|
85
87
|
const targetKeyRef = useRef<string | null>(null);
|
|
88
|
+
// True after the server answered that no goal exists. Only a goal event can
|
|
89
|
+
// create a goal, so turn/session traffic must not refetch while none exists.
|
|
90
|
+
const goalAbsentRef = useRef(false);
|
|
91
|
+
// Refresh events not yet covered by a read: "goal" when any was a goal.*
|
|
92
|
+
// event. Events that arrive while a read is in flight are decided when it
|
|
93
|
+
// settles, so the stream's opening burst never re-reads a goal-less session.
|
|
94
|
+
const pendingRefreshRef = useRef<"none" | "refresh" | "goal">("none");
|
|
95
|
+
const sharedEventsRef = useRef(sharedEvents);
|
|
96
|
+
useLayoutEffect(() => {
|
|
97
|
+
sharedEventsRef.current = sharedEvents;
|
|
98
|
+
}, [sharedEvents]);
|
|
99
|
+
const loadAbort = useRef<AbortController | null>(null);
|
|
100
|
+
const scheduleRefreshRef = useRef<() => void>(() => undefined);
|
|
101
|
+
|
|
102
|
+
const retireLoads = useCallback(() => {
|
|
103
|
+
generation.current += 1;
|
|
104
|
+
loadAbort.current?.abort();
|
|
105
|
+
loadAbort.current = null;
|
|
106
|
+
}, []);
|
|
86
107
|
|
|
87
108
|
const load = useCallback(async (): Promise<void> => {
|
|
88
109
|
if (!sessionId) {
|
|
89
110
|
return;
|
|
90
111
|
}
|
|
91
112
|
const ticket = ++generation.current;
|
|
113
|
+
pendingRefreshRef.current = "none";
|
|
114
|
+
loadAbort.current?.abort();
|
|
115
|
+
const controller = new AbortController();
|
|
116
|
+
loadAbort.current = controller;
|
|
92
117
|
try {
|
|
93
|
-
|
|
118
|
+
// findGoal reads a goal-less session as a successful null, so no failed
|
|
119
|
+
// request reaches the browser console. Custom clients without it keep
|
|
120
|
+
// getGoal, whose 404 is absorbed below (as it is from older servers).
|
|
121
|
+
const fetched =
|
|
122
|
+
typeof client.findGoal === "function"
|
|
123
|
+
? await client.findGoal(workspaceId, sessionId, { signal: controller.signal })
|
|
124
|
+
: await client.getGoal(workspaceId, sessionId, { signal: controller.signal });
|
|
94
125
|
if (ticket === generation.current) {
|
|
126
|
+
goalAbsentRef.current = fetched === null;
|
|
95
127
|
setGoal(fetched);
|
|
96
128
|
setError(null);
|
|
97
129
|
setLoading(false);
|
|
@@ -102,30 +134,58 @@ export function useGoal(
|
|
|
102
134
|
}
|
|
103
135
|
if (cause instanceof OpenGeniApiError && cause.status === 404) {
|
|
104
136
|
// No goal is a normal state, not an error.
|
|
137
|
+
goalAbsentRef.current = true;
|
|
105
138
|
setGoal(null);
|
|
106
139
|
setError(null);
|
|
107
140
|
} else {
|
|
108
|
-
setError(
|
|
141
|
+
setError(normalizeError(cause));
|
|
109
142
|
}
|
|
110
143
|
setLoading(false);
|
|
144
|
+
} finally {
|
|
145
|
+
if (loadAbort.current === controller) loadAbort.current = null;
|
|
146
|
+
}
|
|
147
|
+
if (ticket !== generation.current || pendingRefreshRef.current === "none") {
|
|
148
|
+
return;
|
|
111
149
|
}
|
|
150
|
+
// Events arrived during this read. A shared feed's first batch reports only
|
|
151
|
+
// its latest match, so a goal.* event behind newer turn traffic is visible
|
|
152
|
+
// only in the log: re-read when its latest goal event is not a clear.
|
|
153
|
+
if (goalAbsentRef.current && pendingRefreshRef.current === "refresh") {
|
|
154
|
+
const events = sharedEventsRef.current ?? [];
|
|
155
|
+
let latestGoalEvent: SessionEvent | undefined;
|
|
156
|
+
for (let index = events.length - 1; index >= 0 && !latestGoalEvent; index -= 1) {
|
|
157
|
+
const event = events[index];
|
|
158
|
+
if (event && isGoalEvent(event)) latestGoalEvent = event;
|
|
159
|
+
}
|
|
160
|
+
if (!latestGoalEvent || latestGoalEvent.type === "goal.cleared") {
|
|
161
|
+
pendingRefreshRef.current = "none";
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
pendingRefreshRef.current = "goal";
|
|
165
|
+
}
|
|
166
|
+
scheduleRefreshRef.current();
|
|
112
167
|
}, [client, workspaceId, sessionId]);
|
|
113
168
|
|
|
114
169
|
useEffect(() => {
|
|
115
170
|
const targetKey = `${workspaceId} ${sessionId ?? ""}`;
|
|
116
171
|
if (targetKeyRef.current !== targetKey) {
|
|
117
172
|
targetKeyRef.current = targetKey;
|
|
173
|
+
goalAbsentRef.current = false;
|
|
174
|
+
pendingRefreshRef.current = "none";
|
|
118
175
|
setGoal(null);
|
|
119
176
|
setError(null);
|
|
120
177
|
}
|
|
121
178
|
if (!enabled || !pageLive) {
|
|
179
|
+
retireLoads();
|
|
122
180
|
setLoading(false);
|
|
123
181
|
return;
|
|
124
182
|
}
|
|
125
183
|
if (sharedFeed) {
|
|
126
|
-
|
|
184
|
+
// A shared log supplies invalidations, not the authoritative goal snapshot.
|
|
185
|
+
setLoading(true);
|
|
186
|
+
void load();
|
|
127
187
|
return () => {
|
|
128
|
-
|
|
188
|
+
retireLoads();
|
|
129
189
|
};
|
|
130
190
|
}
|
|
131
191
|
setLoading(true);
|
|
@@ -133,7 +193,7 @@ export function useGoal(
|
|
|
133
193
|
if (pollIntervalMs === undefined || pollIntervalMs <= 0) {
|
|
134
194
|
void load();
|
|
135
195
|
return () => {
|
|
136
|
-
|
|
196
|
+
retireLoads();
|
|
137
197
|
};
|
|
138
198
|
}
|
|
139
199
|
let cancelled = false;
|
|
@@ -149,12 +209,46 @@ export function useGoal(
|
|
|
149
209
|
return () => {
|
|
150
210
|
cancelled = true;
|
|
151
211
|
if (timer !== null) clearTimeout(timer);
|
|
152
|
-
|
|
212
|
+
retireLoads();
|
|
153
213
|
};
|
|
154
|
-
}, [
|
|
214
|
+
}, [
|
|
215
|
+
load,
|
|
216
|
+
enabled,
|
|
217
|
+
pageLive,
|
|
218
|
+
workspaceId,
|
|
219
|
+
sessionId,
|
|
220
|
+
options.pollIntervalMs,
|
|
221
|
+
retireLoads,
|
|
222
|
+
sharedFeed,
|
|
223
|
+
]);
|
|
155
224
|
|
|
156
|
-
const scheduleRefresh = useDebouncedCallback(() =>
|
|
157
|
-
|
|
225
|
+
const scheduleRefresh = useDebouncedCallback(() => {
|
|
226
|
+
const pending = pendingRefreshRef.current;
|
|
227
|
+
// An in-flight read settles pending events itself.
|
|
228
|
+
if (pending === "none" || loadAbort.current !== null) return;
|
|
229
|
+
if (pending === "refresh" && goalAbsentRef.current) {
|
|
230
|
+
pendingRefreshRef.current = "none";
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
void load();
|
|
234
|
+
});
|
|
235
|
+
useLayoutEffect(() => {
|
|
236
|
+
scheduleRefreshRef.current = scheduleRefresh;
|
|
237
|
+
}, [scheduleRefresh]);
|
|
238
|
+
const isRefreshEvent = useCallback(
|
|
239
|
+
(event: SessionEvent) =>
|
|
240
|
+
goalAbsentRef.current ? isGoalEvent(event) : isGoalRefreshEvent(event),
|
|
241
|
+
[],
|
|
242
|
+
);
|
|
243
|
+
const onRefreshEvent = useCallback(
|
|
244
|
+
(event: SessionEvent) => {
|
|
245
|
+
if (isGoalEvent(event)) pendingRefreshRef.current = "goal";
|
|
246
|
+
else if (pendingRefreshRef.current === "none") pendingRefreshRef.current = "refresh";
|
|
247
|
+
scheduleRefresh();
|
|
248
|
+
},
|
|
249
|
+
[scheduleRefresh],
|
|
250
|
+
);
|
|
251
|
+
useSessionEventTrigger(client, workspaceId, sessionId, isRefreshEvent, onRefreshEvent, {
|
|
158
252
|
enabled,
|
|
159
253
|
...(sharedEvents !== undefined ? { events: sharedEvents } : {}),
|
|
160
254
|
});
|
|
@@ -203,11 +297,11 @@ export function useGoal(
|
|
|
203
297
|
return true as const;
|
|
204
298
|
});
|
|
205
299
|
if (ok) {
|
|
206
|
-
|
|
300
|
+
retireLoads();
|
|
207
301
|
setGoal(null);
|
|
208
302
|
setError(null);
|
|
209
303
|
}
|
|
210
|
-
}, [client, workspaceId, sessionId, run]);
|
|
304
|
+
}, [client, workspaceId, sessionId, run, retireLoads]);
|
|
211
305
|
|
|
212
306
|
return {
|
|
213
307
|
goal,
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
LatencyMode,
|
|
3
|
+
ReasoningEffort,
|
|
4
|
+
SessionEvent,
|
|
5
|
+
SessionTurn,
|
|
6
|
+
SessionModelAccountChoiceResponse,
|
|
7
|
+
} from "@opengeni/sdk";
|
|
2
8
|
import { useCallback, useEffect } from "react";
|
|
3
9
|
import { useOpenGeni, type ClientOverride } from "../session-context";
|
|
4
10
|
import { usePolledValue, useSessionEventTrigger, type SessionEventFeedOptions } from "./internal";
|
|
@@ -18,6 +24,8 @@ export type LastStartedTurnPolicy = {
|
|
|
18
24
|
export type UseLastStartedTurnPolicyOptions = ClientOverride &
|
|
19
25
|
SessionEventFeedOptions & {
|
|
20
26
|
pollIntervalMs?: number | undefined;
|
|
27
|
+
/** Project the last lease-backed serving model without changing the accepted policy. */
|
|
28
|
+
includeServingModel?: boolean | undefined;
|
|
21
29
|
};
|
|
22
30
|
|
|
23
31
|
export type UseLastStartedTurnPolicyResult = {
|
|
@@ -38,6 +46,20 @@ function policyFromTurn(turn: SessionTurn | null | undefined): LastStartedTurnPo
|
|
|
38
46
|
};
|
|
39
47
|
}
|
|
40
48
|
|
|
49
|
+
/** Never project an earlier turn's selection onto newly admitted work. */
|
|
50
|
+
export function withServingModel(
|
|
51
|
+
policy: LastStartedTurnPolicy | null,
|
|
52
|
+
serving: SessionModelAccountChoiceResponse["serving"],
|
|
53
|
+
): LastStartedTurnPolicy | null {
|
|
54
|
+
if (!policy || !serving || serving.turnId !== policy.turnId) return policy;
|
|
55
|
+
return {
|
|
56
|
+
turnId: policy.turnId,
|
|
57
|
+
model: serving.modelId,
|
|
58
|
+
reasoningEffort: serving.reasoningEffort,
|
|
59
|
+
latencyMode: serving.latencyMode,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
41
63
|
/**
|
|
42
64
|
* Model·effort·latency of the newest admitted turn (`turn.started`). This is
|
|
43
65
|
* historical runtime truth for the session header — not the composer next-turn
|
|
@@ -47,25 +69,30 @@ export function useLastStartedTurnPolicy(
|
|
|
47
69
|
sessionId: string | null | undefined,
|
|
48
70
|
options: UseLastStartedTurnPolicyOptions = {},
|
|
49
71
|
): UseLastStartedTurnPolicyResult {
|
|
50
|
-
const { client, workspaceId,
|
|
51
|
-
useOpenGeni(options);
|
|
72
|
+
const { client, workspaceId, registerSessionReconciler } = useOpenGeni(options);
|
|
52
73
|
const enabled = (options.enabled ?? true) && Boolean(sessionId);
|
|
74
|
+
const includeServingModel = options.includeServingModel === true;
|
|
53
75
|
|
|
54
|
-
const load = useCallback(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
76
|
+
const load = useCallback(
|
|
77
|
+
async (signal?: AbortSignal): Promise<LastStartedTurnPolicy | null> => {
|
|
78
|
+
if (!sessionId) return null;
|
|
79
|
+
const turns = await client.listTurns(workspaceId, sessionId, {
|
|
80
|
+
latestStarted: true,
|
|
81
|
+
signal,
|
|
82
|
+
});
|
|
83
|
+
const policy = policyFromTurn(turns[0]);
|
|
84
|
+
if (!includeServingModel || !policy || !client.getSessionModelAccount) return policy;
|
|
85
|
+
const choice = await client.getSessionModelAccount(workspaceId, sessionId);
|
|
86
|
+
return withServingModel(policy, choice.serving);
|
|
87
|
+
},
|
|
88
|
+
[client, workspaceId, sessionId, includeServingModel],
|
|
89
|
+
);
|
|
59
90
|
|
|
60
91
|
const { data, loading, error, refresh } = usePolledValue(load, {
|
|
61
92
|
pollIntervalMs: options.pollIntervalMs,
|
|
62
93
|
enabled,
|
|
63
94
|
});
|
|
64
95
|
|
|
65
|
-
useEffect(() => {
|
|
66
|
-
if (enabled && workspaceControlEvent) void refresh();
|
|
67
|
-
}, [enabled, refresh, workspaceControlEvent]);
|
|
68
|
-
|
|
69
96
|
useEffect(() => {
|
|
70
97
|
if (!sessionId || !enabled) return;
|
|
71
98
|
return registerSessionReconciler(sessionId, "last-started-turn-policy", refresh);
|
|
@@ -73,12 +100,17 @@ export function useLastStartedTurnPolicy(
|
|
|
73
100
|
|
|
74
101
|
// Shared-feed only: the session header lives outside the route event log and
|
|
75
102
|
// must not open a second SSE. Without `events`, rely on the initial fetch +
|
|
76
|
-
// optional poll /
|
|
103
|
+
// optional poll / reconciler. Pause/resume controls do not change the last
|
|
104
|
+
// admitted turn; its own turn.started event supplies that invalidation.
|
|
77
105
|
useSessionEventTrigger(
|
|
78
106
|
client,
|
|
79
107
|
workspaceId,
|
|
80
108
|
sessionId,
|
|
81
|
-
|
|
109
|
+
(event) =>
|
|
110
|
+
isLastStartedTurnPolicyEvent(event) ||
|
|
111
|
+
(includeServingModel &&
|
|
112
|
+
(event.type === "subscription.account.selected" ||
|
|
113
|
+
event.type === "subscription.account.switched")),
|
|
82
114
|
() => void refresh(),
|
|
83
115
|
{
|
|
84
116
|
events: options.events,
|
|
@@ -158,6 +158,10 @@ function swapFailureMessage(result: SwapActiveSandboxResponse): string {
|
|
|
158
158
|
return "The selected machine is offline.";
|
|
159
159
|
case "concurrent_swap":
|
|
160
160
|
return "The session route changed concurrently. Refresh and try again.";
|
|
161
|
+
case "personal_machine_permission_required":
|
|
162
|
+
return "The machine's owner has not allowed this chat to use it.";
|
|
163
|
+
case "personal_machine_not_permitted":
|
|
164
|
+
return "Only the machine's owner can use it in this chat.";
|
|
161
165
|
default:
|
|
162
166
|
return "The session stayed on its current sandbox.";
|
|
163
167
|
}
|