@opengeni/react 3.3.2-canary.1 → 3.4.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/README.md +769 -22
- package/dist/accounts.js +2 -0
- 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-4EUKJXUO.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-ZKNTK7IA.js → chunk-2I6R3GCZ.js} +4284 -3983
- package/dist/chunk-2I6R3GCZ.js.map +1 -0
- package/dist/{chunk-JAQ5K7W6.js → chunk-2SFFYIH3.js} +1178 -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-3RJKUVCA.js +14068 -0
- package/dist/chunk-3RJKUVCA.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-ZPBTI3TE.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-YVCHAQZY.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-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-IOLVN74D.js → chunk-V5ZUJT2T.js} +175 -42
- package/dist/chunk-V5ZUJT2T.js.map +1 -0
- package/dist/chunk-WBJY57A3.js +402 -0
- package/dist/chunk-WBJY57A3.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-E5KISKFG.js → chunk-X5UVUIMF.js} +1709 -1184
- 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/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 +35 -28
- 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/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 +10 -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 +26 -5
- 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 +24 -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 +2340 -6603
- 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 +28 -2
- 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 -1333
- 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/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 +106 -7
- 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 +193 -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 +390 -191
- 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 +5 -3
- 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 +2370 -667
- 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 +252 -454
- 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/tool-action-review.tsx +650 -0
- package/src/components/tool-review-history.tsx +88 -0
- 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 +2 -2
- 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 +227 -44
- 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 +53 -3
- package/src/hooks/use-goal.ts +79 -9
- package/src/hooks/use-last-started-turn-policy.ts +37 -11
- 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 +531 -335
- 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 +30 -2
- 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 +74 -7
- 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 +205 -10
- 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 +261 -27
- 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 -550
- 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/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 +1742 -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 +2318 -752
- 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-MKKFRRRV.js +0 -14
- package/dist/chunk-4MDLEHXL.js.map +0 -1
- package/dist/chunk-5YK2ZDIG.js.map +0 -1
- package/dist/chunk-7EAFGICR.js +0 -302
- package/dist/chunk-7EAFGICR.js.map +0 -1
- package/dist/chunk-7KBJLTKS.js +0 -494
- package/dist/chunk-7KBJLTKS.js.map +0 -1
- package/dist/chunk-E5KISKFG.js.map +0 -1
- package/dist/chunk-ELIYWBZR.js.map +0 -1
- package/dist/chunk-H5YGYNXS.js.map +0 -1
- package/dist/chunk-HUIKIDM5.js.map +0 -1
- package/dist/chunk-ICA6R6TW.js.map +0 -1
- package/dist/chunk-IOLVN74D.js.map +0 -1
- package/dist/chunk-JAQ5K7W6.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-NEXLLTP4.js.map +0 -1
- package/dist/chunk-PEI6RANI.js.map +0 -1
- package/dist/chunk-VTOREEXF.js +0 -142
- package/dist/chunk-VTOREEXF.js.map +0 -1
- package/dist/chunk-WSK7G5LE.js +0 -170
- package/dist/chunk-WSK7G5LE.js.map +0 -1
- package/dist/chunk-X5S426G2.js +0 -217
- package/dist/chunk-X5S426G2.js.map +0 -1
- package/dist/chunk-YG4QEQF5.js +0 -9557
- package/dist/chunk-YG4QEQF5.js.map +0 -1
- package/dist/chunk-YVCHAQZY.js.map +0 -1
- package/dist/chunk-ZKNTK7IA.js.map +0 -1
- package/dist/chunk-ZPBTI3TE.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-MKKFRRRV.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
- /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-4EUKJXUO.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
|
|
|
@@ -29,6 +32,8 @@ export type FileAttachment = {
|
|
|
29
32
|
/** Stable SDK failure code for UI behavior that must not parse error copy. */
|
|
30
33
|
errorCode?: "secure_context_required" | undefined;
|
|
31
34
|
error?: string | undefined;
|
|
35
|
+
/** Original diagnostic failure; presentation copy is kept separately in `error`. */
|
|
36
|
+
errorCause?: unknown;
|
|
32
37
|
};
|
|
33
38
|
|
|
34
39
|
export type UseFileAttachmentsResult = {
|
|
@@ -52,6 +57,12 @@ export type UseFileAttachmentsResult = {
|
|
|
52
57
|
addFromPaste: (event: { clipboardData: DataTransfer | null }) => void;
|
|
53
58
|
/** Restore already-ready server assets without recreating browser-local bytes. */
|
|
54
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;
|
|
55
66
|
/**
|
|
56
67
|
* Re-run the upload for a `failed` attachment, in place (same id, same
|
|
57
68
|
* source file). No-op for an id that isn't a known failed upload.
|
|
@@ -112,8 +123,11 @@ export function useFileAttachments(
|
|
|
112
123
|
options: UseFileAttachmentsOptions = {},
|
|
113
124
|
): UseFileAttachmentsResult {
|
|
114
125
|
const { client, workspaceId } = useEmbeddedFileAttachments(options);
|
|
126
|
+
const formatError = useErrorMessage();
|
|
115
127
|
const pasteFilter = options.pasteFilter ?? isImage;
|
|
116
128
|
const [attachments, setAttachments] = useState<FileAttachment[]>([]);
|
|
129
|
+
const attachmentsRef = useRef(attachments);
|
|
130
|
+
attachmentsRef.current = attachments;
|
|
117
131
|
// Keep the source File per attachment id so a failed upload can be retried
|
|
118
132
|
// in place. Cleared on remove/clear so it never outlives its attachment.
|
|
119
133
|
const sources = useRef<Map<string, File>>(new Map());
|
|
@@ -204,6 +218,7 @@ export function useFileAttachments(
|
|
|
204
218
|
filename: file.name || "file",
|
|
205
219
|
contentType: file.type || "application/octet-stream",
|
|
206
220
|
data: file,
|
|
221
|
+
...(options.scope ? { scope: options.scope } : {}),
|
|
207
222
|
})
|
|
208
223
|
.then((asset) => {
|
|
209
224
|
if (scopeGeneration.current !== generation) return;
|
|
@@ -223,6 +238,7 @@ export function useFileAttachments(
|
|
|
223
238
|
sizeBytes: asset.sizeBytes,
|
|
224
239
|
errorCode: undefined,
|
|
225
240
|
error: undefined,
|
|
241
|
+
errorCause: undefined,
|
|
226
242
|
}
|
|
227
243
|
: attachment,
|
|
228
244
|
),
|
|
@@ -237,14 +253,15 @@ export function useFileAttachments(
|
|
|
237
253
|
...attachment,
|
|
238
254
|
status: "failed",
|
|
239
255
|
errorCode: secureContextRequiredErrorCode(error),
|
|
240
|
-
error:
|
|
256
|
+
error: formatError(error),
|
|
257
|
+
errorCause: error,
|
|
241
258
|
}
|
|
242
259
|
: attachment,
|
|
243
260
|
),
|
|
244
261
|
);
|
|
245
262
|
});
|
|
246
263
|
},
|
|
247
|
-
[client, workspaceId],
|
|
264
|
+
[client, workspaceId, options.scope, formatError],
|
|
248
265
|
);
|
|
249
266
|
|
|
250
267
|
const addFiles = useCallback(
|
|
@@ -280,7 +297,13 @@ export function useFileAttachments(
|
|
|
280
297
|
setAttachments((current) =>
|
|
281
298
|
current.map((attachment) =>
|
|
282
299
|
attachment.id === id
|
|
283
|
-
? {
|
|
300
|
+
? {
|
|
301
|
+
...attachment,
|
|
302
|
+
status: "uploading",
|
|
303
|
+
errorCode: undefined,
|
|
304
|
+
error: undefined,
|
|
305
|
+
errorCause: undefined,
|
|
306
|
+
}
|
|
284
307
|
: attachment,
|
|
285
308
|
),
|
|
286
309
|
);
|
|
@@ -332,6 +355,7 @@ export function useFileAttachments(
|
|
|
332
355
|
file,
|
|
333
356
|
errorCode: undefined,
|
|
334
357
|
error: undefined,
|
|
358
|
+
errorCause: undefined,
|
|
335
359
|
}
|
|
336
360
|
: {
|
|
337
361
|
id: `restored:${file.id}`,
|
|
@@ -353,6 +377,31 @@ export function useFileAttachments(
|
|
|
353
377
|
[workspaceId],
|
|
354
378
|
);
|
|
355
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
|
+
|
|
356
405
|
const remove = useCallback(
|
|
357
406
|
(id: string) => {
|
|
358
407
|
sources.current.delete(id);
|
|
@@ -394,6 +443,7 @@ export function useFileAttachments(
|
|
|
394
443
|
addFiles,
|
|
395
444
|
addFromPaste,
|
|
396
445
|
restoreReadyFiles,
|
|
446
|
+
...(typeof client.createFileDownloadUrl === "function" ? { loadPreview } : {}),
|
|
397
447
|
retry,
|
|
398
448
|
retainPreview,
|
|
399
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,7 +85,19 @@ 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]);
|
|
86
99
|
const loadAbort = useRef<AbortController | null>(null);
|
|
100
|
+
const scheduleRefreshRef = useRef<() => void>(() => undefined);
|
|
87
101
|
|
|
88
102
|
const retireLoads = useCallback(() => {
|
|
89
103
|
generation.current += 1;
|
|
@@ -96,14 +110,20 @@ export function useGoal(
|
|
|
96
110
|
return;
|
|
97
111
|
}
|
|
98
112
|
const ticket = ++generation.current;
|
|
113
|
+
pendingRefreshRef.current = "none";
|
|
99
114
|
loadAbort.current?.abort();
|
|
100
115
|
const controller = new AbortController();
|
|
101
116
|
loadAbort.current = controller;
|
|
102
117
|
try {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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 });
|
|
106
125
|
if (ticket === generation.current) {
|
|
126
|
+
goalAbsentRef.current = fetched === null;
|
|
107
127
|
setGoal(fetched);
|
|
108
128
|
setError(null);
|
|
109
129
|
setLoading(false);
|
|
@@ -114,21 +134,44 @@ export function useGoal(
|
|
|
114
134
|
}
|
|
115
135
|
if (cause instanceof OpenGeniApiError && cause.status === 404) {
|
|
116
136
|
// No goal is a normal state, not an error.
|
|
137
|
+
goalAbsentRef.current = true;
|
|
117
138
|
setGoal(null);
|
|
118
139
|
setError(null);
|
|
119
140
|
} else {
|
|
120
|
-
setError(
|
|
141
|
+
setError(normalizeError(cause));
|
|
121
142
|
}
|
|
122
143
|
setLoading(false);
|
|
123
144
|
} finally {
|
|
124
145
|
if (loadAbort.current === controller) loadAbort.current = null;
|
|
125
146
|
}
|
|
147
|
+
if (ticket !== generation.current || pendingRefreshRef.current === "none") {
|
|
148
|
+
return;
|
|
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();
|
|
126
167
|
}, [client, workspaceId, sessionId]);
|
|
127
168
|
|
|
128
169
|
useEffect(() => {
|
|
129
170
|
const targetKey = `${workspaceId} ${sessionId ?? ""}`;
|
|
130
171
|
if (targetKeyRef.current !== targetKey) {
|
|
131
172
|
targetKeyRef.current = targetKey;
|
|
173
|
+
goalAbsentRef.current = false;
|
|
174
|
+
pendingRefreshRef.current = "none";
|
|
132
175
|
setGoal(null);
|
|
133
176
|
setError(null);
|
|
134
177
|
}
|
|
@@ -138,7 +181,9 @@ export function useGoal(
|
|
|
138
181
|
return;
|
|
139
182
|
}
|
|
140
183
|
if (sharedFeed) {
|
|
141
|
-
|
|
184
|
+
// A shared log supplies invalidations, not the authoritative goal snapshot.
|
|
185
|
+
setLoading(true);
|
|
186
|
+
void load();
|
|
142
187
|
return () => {
|
|
143
188
|
retireLoads();
|
|
144
189
|
};
|
|
@@ -177,8 +222,33 @@ export function useGoal(
|
|
|
177
222
|
sharedFeed,
|
|
178
223
|
]);
|
|
179
224
|
|
|
180
|
-
const scheduleRefresh = useDebouncedCallback(() =>
|
|
181
|
-
|
|
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, {
|
|
182
252
|
enabled,
|
|
183
253
|
...(sharedEvents !== undefined ? { events: sharedEvents } : {}),
|
|
184
254
|
});
|
|
@@ -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,9 +69,9 @@ 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
76
|
const load = useCallback(
|
|
55
77
|
async (signal?: AbortSignal): Promise<LastStartedTurnPolicy | null> => {
|
|
@@ -58,9 +80,12 @@ export function useLastStartedTurnPolicy(
|
|
|
58
80
|
latestStarted: true,
|
|
59
81
|
signal,
|
|
60
82
|
});
|
|
61
|
-
|
|
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);
|
|
62
87
|
},
|
|
63
|
-
[client, workspaceId, sessionId],
|
|
88
|
+
[client, workspaceId, sessionId, includeServingModel],
|
|
64
89
|
);
|
|
65
90
|
|
|
66
91
|
const { data, loading, error, refresh } = usePolledValue(load, {
|
|
@@ -68,10 +93,6 @@ export function useLastStartedTurnPolicy(
|
|
|
68
93
|
enabled,
|
|
69
94
|
});
|
|
70
95
|
|
|
71
|
-
useEffect(() => {
|
|
72
|
-
if (enabled && workspaceControlEvent) void refresh();
|
|
73
|
-
}, [enabled, refresh, workspaceControlEvent]);
|
|
74
|
-
|
|
75
96
|
useEffect(() => {
|
|
76
97
|
if (!sessionId || !enabled) return;
|
|
77
98
|
return registerSessionReconciler(sessionId, "last-started-turn-policy", refresh);
|
|
@@ -79,12 +100,17 @@ export function useLastStartedTurnPolicy(
|
|
|
79
100
|
|
|
80
101
|
// Shared-feed only: the session header lives outside the route event log and
|
|
81
102
|
// must not open a second SSE. Without `events`, rely on the initial fetch +
|
|
82
|
-
// 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.
|
|
83
105
|
useSessionEventTrigger(
|
|
84
106
|
client,
|
|
85
107
|
workspaceId,
|
|
86
108
|
sessionId,
|
|
87
|
-
|
|
109
|
+
(event) =>
|
|
110
|
+
isLastStartedTurnPolicyEvent(event) ||
|
|
111
|
+
(includeServingModel &&
|
|
112
|
+
(event.type === "subscription.account.selected" ||
|
|
113
|
+
event.type === "subscription.account.switched")),
|
|
88
114
|
() => void refresh(),
|
|
89
115
|
{
|
|
90
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
|
}
|