@opengeni/react 3.3.2 → 3.4.1-canary.38960406141001
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-XYRDDSXF.js → chunk-2I6R3GCZ.js} +4285 -3980
- 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-3AGBGTRT.js → chunk-X5UVUIMF.js} +1712 -1174
- 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 +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 +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 +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 -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 +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 +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 -429
- 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 +80 -4
- 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 +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 -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 +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-MKKFRRRV.js +0 -14
- package/dist/chunk-2DZVYHVO.js +0 -470
- package/dist/chunk-2DZVYHVO.js.map +0 -1
- package/dist/chunk-3AGBGTRT.js.map +0 -1
- 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-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-X4A66EWZ.js +0 -223
- package/dist/chunk-X4A66EWZ.js.map +0 -1
- package/dist/chunk-XYRDDSXF.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-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,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* remark: render a single newline inside prose as a line break.
|
|
3
|
+
*
|
|
4
|
+
* CommonMark folds a lone line ending inside a paragraph into a space, so an
|
|
5
|
+
* agent writing `1\n2\n3` shows "1 2 3". Chat surfaces (ChatGPT, GitHub
|
|
6
|
+
* comments) keep the line, which is what message authors expect. This plugin
|
|
7
|
+
* turns every line ending inside an mdast `text` node into a `break` node — the
|
|
8
|
+
* same result as `remark-breaks` — while leaving code (`code` / `inlineCode`
|
|
9
|
+
* carry `value`, not `text` children), raw HTML, and block structure (lists,
|
|
10
|
+
* tables, blockquotes, headings, blank-line paragraphs) untouched.
|
|
11
|
+
*
|
|
12
|
+
* Unlike `remark-breaks` (built on `mdast-util-find-and-replace`, which drops
|
|
13
|
+
* positions on the split nodes), every split text node keeps a source position.
|
|
14
|
+
* Streaming tip ink (`rehypeStreamReveal`) keys fade-in on those offsets, so a
|
|
15
|
+
* positionless line would render without ink and snap in at the stream tail.
|
|
16
|
+
*
|
|
17
|
+
* Structural local types keep the module dependency-free, like
|
|
18
|
+
* `stream-reveal.ts`; the renderer casts once at the plugin seam.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
type MdPoint = {
|
|
22
|
+
line?: number | undefined;
|
|
23
|
+
column?: number | undefined;
|
|
24
|
+
offset?: number | undefined;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
type MdPosition = { start?: MdPoint | undefined; end?: MdPoint | undefined };
|
|
28
|
+
|
|
29
|
+
type MdNode = {
|
|
30
|
+
type: string;
|
|
31
|
+
value?: string | undefined;
|
|
32
|
+
position?: MdPosition | undefined;
|
|
33
|
+
children?: MdNode[] | undefined;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
type ExactPoint = { line: number; column: number; offset: number };
|
|
37
|
+
|
|
38
|
+
const LINE_ENDING = /\r\n|\r|\n/g;
|
|
39
|
+
const HAS_LINE_ENDING = /[\r\n]/;
|
|
40
|
+
/** Line-start syntax the parser strips from text values: indentation and blockquote markers. */
|
|
41
|
+
const LINE_PREFIX = /[\t >]*/y;
|
|
42
|
+
|
|
43
|
+
export function remarkSoftLineBreaks() {
|
|
44
|
+
return (tree: MdNode, file?: { value?: unknown } | undefined) => {
|
|
45
|
+
walk(tree, typeof file?.value === "string" ? file.value : undefined);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function walk(node: MdNode, source: string | undefined): void {
|
|
50
|
+
if (!node.children) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
let next: MdNode[] | null = null;
|
|
54
|
+
for (let index = 0; index < node.children.length; index += 1) {
|
|
55
|
+
const child = node.children[index]!;
|
|
56
|
+
if (
|
|
57
|
+
child.type === "text" &&
|
|
58
|
+
typeof child.value === "string" &&
|
|
59
|
+
HAS_LINE_ENDING.test(child.value)
|
|
60
|
+
) {
|
|
61
|
+
next ??= node.children.slice(0, index);
|
|
62
|
+
next.push(...splitText(child, child.value, source));
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
walk(child, source);
|
|
66
|
+
next?.push(child);
|
|
67
|
+
}
|
|
68
|
+
if (next !== null) {
|
|
69
|
+
node.children = next;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function splitText(node: MdNode, value: string, source: string | undefined): MdNode[] {
|
|
74
|
+
const segments: { value: string; index: number }[] = [];
|
|
75
|
+
let cursor = 0;
|
|
76
|
+
for (const match of value.matchAll(LINE_ENDING)) {
|
|
77
|
+
segments.push({ value: value.slice(cursor, match.index), index: cursor });
|
|
78
|
+
cursor = match.index + match[0].length;
|
|
79
|
+
}
|
|
80
|
+
segments.push({ value: value.slice(cursor), index: cursor });
|
|
81
|
+
|
|
82
|
+
const starts = segmentStarts(node, segments, source);
|
|
83
|
+
const nodeEnd = exactPoint(node.position?.end);
|
|
84
|
+
const out: MdNode[] = [];
|
|
85
|
+
segments.forEach((segment, k) => {
|
|
86
|
+
const start = starts?.[k];
|
|
87
|
+
const isLast = k === segments.length - 1;
|
|
88
|
+
const end =
|
|
89
|
+
start === undefined
|
|
90
|
+
? undefined
|
|
91
|
+
: isLast && nodeEnd !== undefined
|
|
92
|
+
? nodeEnd
|
|
93
|
+
: {
|
|
94
|
+
line: start.line,
|
|
95
|
+
column: start.column + segment.value.length,
|
|
96
|
+
offset: start.offset + segment.value.length,
|
|
97
|
+
};
|
|
98
|
+
if (segment.value.length > 0) {
|
|
99
|
+
out.push({
|
|
100
|
+
type: "text",
|
|
101
|
+
value: segment.value,
|
|
102
|
+
...(start !== undefined && end !== undefined ? { position: { start, end } } : {}),
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
if (!isLast) {
|
|
106
|
+
const nextStart = starts?.[k + 1];
|
|
107
|
+
out.push({
|
|
108
|
+
type: "break",
|
|
109
|
+
...(end !== undefined && nextStart !== undefined
|
|
110
|
+
? { position: { start: end, end: nextStart } }
|
|
111
|
+
: {}),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
return out;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Source start of each line segment. Text values drop each continuation line's
|
|
120
|
+
* indentation / `>` prefix, so offsets are re-anchored on the real source line
|
|
121
|
+
* when the node's source slice has the same number of line endings; otherwise
|
|
122
|
+
* (e.g. a newline produced by a character reference) fall back to the value
|
|
123
|
+
* index, the same approximation tip ink already makes within one text node.
|
|
124
|
+
*/
|
|
125
|
+
function segmentStarts(
|
|
126
|
+
node: MdNode,
|
|
127
|
+
segments: readonly { index: number }[],
|
|
128
|
+
source: string | undefined,
|
|
129
|
+
): ExactPoint[] | undefined {
|
|
130
|
+
const start = exactPoint(node.position?.start);
|
|
131
|
+
if (start === undefined) {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
const endOffset = node.position?.end?.offset;
|
|
135
|
+
const lineStarts: number[] = [];
|
|
136
|
+
if (source !== undefined && endOffset !== undefined && endOffset >= start.offset) {
|
|
137
|
+
for (const match of source.slice(start.offset, endOffset).matchAll(LINE_ENDING)) {
|
|
138
|
+
lineStarts.push(start.offset + match.index + match[0].length);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
const anchoredSource = lineStarts.length === segments.length - 1 ? source : undefined;
|
|
142
|
+
return segments.map((segment, k) => {
|
|
143
|
+
if (k === 0) {
|
|
144
|
+
return start;
|
|
145
|
+
}
|
|
146
|
+
if (anchoredSource !== undefined) {
|
|
147
|
+
const lineStart = lineStarts[k - 1]!;
|
|
148
|
+
LINE_PREFIX.lastIndex = lineStart;
|
|
149
|
+
const prefix = LINE_PREFIX.exec(anchoredSource)?.[0].length ?? 0;
|
|
150
|
+
return { line: start.line + k, column: prefix + 1, offset: lineStart + prefix };
|
|
151
|
+
}
|
|
152
|
+
return { line: start.line + k, column: 1, offset: start.offset + segment.index };
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function exactPoint(point: MdPoint | undefined): ExactPoint | undefined {
|
|
157
|
+
if (
|
|
158
|
+
point === undefined ||
|
|
159
|
+
typeof point.line !== "number" ||
|
|
160
|
+
typeof point.column !== "number" ||
|
|
161
|
+
typeof point.offset !== "number"
|
|
162
|
+
) {
|
|
163
|
+
return undefined;
|
|
164
|
+
}
|
|
165
|
+
return { line: point.line, column: point.column, offset: point.offset };
|
|
166
|
+
}
|
|
@@ -57,6 +57,8 @@ export type SandboxFilesProps = {
|
|
|
57
57
|
workspaceWaking?: boolean | undefined;
|
|
58
58
|
/** Whether live reads are currently authoritative. */
|
|
59
59
|
liveWorkspaceReady?: boolean | undefined;
|
|
60
|
+
/** Failed live negotiation; never present a failure as an ongoing wake. */
|
|
61
|
+
workspaceError?: Error | null | undefined;
|
|
60
62
|
/** Deliberately wake the machine to read content absent from the capture. */
|
|
61
63
|
onWakeWorkspace?: (() => void) | undefined;
|
|
62
64
|
themeType?: "dark" | "light" | undefined;
|
|
@@ -87,6 +89,7 @@ export function SandboxFiles({
|
|
|
87
89
|
workspaceResting = false,
|
|
88
90
|
workspaceWaking = false,
|
|
89
91
|
liveWorkspaceReady = true,
|
|
92
|
+
workspaceError = null,
|
|
90
93
|
onWakeWorkspace,
|
|
91
94
|
themeType,
|
|
92
95
|
className,
|
|
@@ -254,10 +257,22 @@ export function SandboxFiles({
|
|
|
254
257
|
const captureFileUnavailable =
|
|
255
258
|
fileView.error instanceof CapturedFileUnavailableError ? fileView.error : null;
|
|
256
259
|
const waitingForSelectedFile =
|
|
260
|
+
!workspaceError &&
|
|
257
261
|
liveRequestedPath === viewPath &&
|
|
258
262
|
(!liveWorkspaceReady || files.loading) &&
|
|
259
263
|
captureFileUnavailable !== null;
|
|
260
264
|
|
|
265
|
+
if (workspaceError && !liveWorkspaceReady && files.source !== "capture") {
|
|
266
|
+
return (
|
|
267
|
+
<Notice className={className} title="Could not open live workspace" announce="alert">
|
|
268
|
+
<p>{workspaceError.message}</p>
|
|
269
|
+
{onWakeWorkspace ? (
|
|
270
|
+
<WakeButton onClick={onWakeWorkspace}>Retry live workspace</WakeButton>
|
|
271
|
+
) : null}
|
|
272
|
+
</Notice>
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
|
|
261
276
|
if (workspaceResting || workspaceWaking) {
|
|
262
277
|
return (
|
|
263
278
|
<div className={cn("h-full", className)} data-opengeni-workspace-resting>
|
|
@@ -415,6 +430,15 @@ export function SandboxFiles({
|
|
|
415
430
|
{...(onEditIntent ? { onEditIntent } : {})}
|
|
416
431
|
className="h-full"
|
|
417
432
|
/>
|
|
433
|
+
) : workspaceError &&
|
|
434
|
+
(liveRequestedPath === viewPath || requestedPath === viewPath) &&
|
|
435
|
+
!liveWorkspaceReady ? (
|
|
436
|
+
<Notice title="Could not open live file" announce="alert">
|
|
437
|
+
<p>{workspaceError.message}</p>
|
|
438
|
+
{onWakeWorkspace ? (
|
|
439
|
+
<WakeButton onClick={onWakeWorkspace}>Retry live file</WakeButton>
|
|
440
|
+
) : null}
|
|
441
|
+
</Notice>
|
|
418
442
|
) : waitingForSelectedFile ? (
|
|
419
443
|
<Notice
|
|
420
444
|
icon={
|
|
@@ -455,6 +479,12 @@ export function SandboxFiles({
|
|
|
455
479
|
</Notice>
|
|
456
480
|
) : fileView.loading ? (
|
|
457
481
|
<Notice announce="status">Loading {viewPath}…</Notice>
|
|
482
|
+
) : fileView.imageUrl ? (
|
|
483
|
+
<RasterFilePreview
|
|
484
|
+
key={fileView.imageUrl}
|
|
485
|
+
src={fileView.imageUrl}
|
|
486
|
+
path={viewPath}
|
|
487
|
+
/>
|
|
458
488
|
) : fileView.isBinary ? (
|
|
459
489
|
<Notice>
|
|
460
490
|
{viewPath} is a binary file ({fileView.sizeBytes ?? 0} bytes).
|
|
@@ -497,18 +527,27 @@ export function SandboxFiles({
|
|
|
497
527
|
)
|
|
498
528
|
) : // Nothing selected — the tree shows the whole workspace; pick a file.
|
|
499
529
|
requestedPath && !requestedPathReady ? (
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
<
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
530
|
+
workspaceError ? (
|
|
531
|
+
<Notice title="Could not open live file" announce="alert">
|
|
532
|
+
<p>{workspaceError.message}</p>
|
|
533
|
+
{onWakeWorkspace ? (
|
|
534
|
+
<WakeButton onClick={onWakeWorkspace}>Retry live file</WakeButton>
|
|
535
|
+
) : null}
|
|
536
|
+
</Notice>
|
|
537
|
+
) : (
|
|
538
|
+
<Notice
|
|
539
|
+
icon={
|
|
540
|
+
<LoaderCircleIcon
|
|
541
|
+
className="size-5 animate-spin motion-reduce:animate-none"
|
|
542
|
+
aria-hidden
|
|
543
|
+
/>
|
|
544
|
+
}
|
|
545
|
+
title="Waking sandbox"
|
|
546
|
+
announce="status"
|
|
547
|
+
>
|
|
548
|
+
Opening {requestedPath} when the live workspace is ready…
|
|
549
|
+
</Notice>
|
|
550
|
+
)
|
|
512
551
|
) : (
|
|
513
552
|
<Notice icon={<FileCode2Icon className="size-5" aria-hidden />} title="Choose a file">
|
|
514
553
|
Select a file in the tree to preview it.
|
|
@@ -526,7 +565,7 @@ function WakeButton({ children, onClick }: { children: ReactNode; onClick: () =>
|
|
|
526
565
|
<button
|
|
527
566
|
type="button"
|
|
528
567
|
onClick={onClick}
|
|
529
|
-
className="mt-1 inline-flex min-h-11 items-center justify-center rounded-og-md bg-og-
|
|
568
|
+
className="mt-1 inline-flex min-h-11 items-center justify-center rounded-og-md border border-og-primary-border bg-og-primary text-og-primary-fg px-3 py-2 text-og-sm font-medium transition-colors hover:bg-og-primary-hover focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent focus-visible:ring-offset-2 focus-visible:ring-offset-og-bg"
|
|
530
569
|
>
|
|
531
570
|
{children}
|
|
532
571
|
</button>
|
|
@@ -628,8 +667,10 @@ function GitHeader({ git, loading }: { git: SandboxFilesGitSummary; loading: boo
|
|
|
628
667
|
</span>
|
|
629
668
|
{(git.ahead > 0 || git.behind > 0) && (
|
|
630
669
|
<span className="flex shrink-0 items-center gap-1.5 text-og-xs text-og-fg-subtle">
|
|
631
|
-
{
|
|
632
|
-
|
|
670
|
+
{/* Small arrow glyphs can make axe's pixel overlap heuristic inconclusive.
|
|
671
|
+
Keep both counters in the same computed-contrast audit as the dirty count. */}
|
|
672
|
+
{git.ahead > 0 && <span data-contrast-audited>↑{git.ahead}</span>}
|
|
673
|
+
{git.behind > 0 && <span data-contrast-audited>↓{git.behind}</span>}
|
|
633
674
|
</span>
|
|
634
675
|
)}
|
|
635
676
|
{dirty && (
|
|
@@ -677,6 +718,7 @@ function Segmented({
|
|
|
677
718
|
|
|
678
719
|
type FileViewState = {
|
|
679
720
|
content: string | null;
|
|
721
|
+
imageUrl?: string | null;
|
|
680
722
|
isBinary: boolean;
|
|
681
723
|
/** The backend truncated the read (size cap hit) — content is a PREFIX only.
|
|
682
724
|
* Editing+saving such a file would write the prefix back and corrupt it, so
|
|
@@ -749,6 +791,8 @@ function useFileView(
|
|
|
749
791
|
: res.content;
|
|
750
792
|
setState({
|
|
751
793
|
content,
|
|
794
|
+
imageUrl:
|
|
795
|
+
!res.truncated && res.encoding === "base64" ? rasterImageUrl(path, res.content) : null,
|
|
752
796
|
isBinary: res.isBinary,
|
|
753
797
|
truncated: res.truncated,
|
|
754
798
|
sizeBytes: res.sizeBytes,
|
|
@@ -780,6 +824,38 @@ function useFileView(
|
|
|
780
824
|
return state;
|
|
781
825
|
}
|
|
782
826
|
|
|
827
|
+
/** Only raster formats belong in this preview; never interpret SVG/HTML as a document. */
|
|
828
|
+
function rasterImageUrl(path: string, content: string): string | null {
|
|
829
|
+
const extension = path.split(".").pop()?.toLowerCase();
|
|
830
|
+
const mime =
|
|
831
|
+
extension === "png"
|
|
832
|
+
? "image/png"
|
|
833
|
+
: extension === "jpg" || extension === "jpeg"
|
|
834
|
+
? "image/jpeg"
|
|
835
|
+
: extension === "gif"
|
|
836
|
+
? "image/gif"
|
|
837
|
+
: extension === "webp"
|
|
838
|
+
? "image/webp"
|
|
839
|
+
: null;
|
|
840
|
+
return mime ? `data:${mime};base64,${content}` : null;
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
function RasterFilePreview({ src, path }: { src: string; path: string }) {
|
|
844
|
+
const [failed, setFailed] = useState(false);
|
|
845
|
+
return failed ? (
|
|
846
|
+
<Notice title="Image preview unavailable" announce="alert">
|
|
847
|
+
Could not decode {path} as an image.
|
|
848
|
+
</Notice>
|
|
849
|
+
) : (
|
|
850
|
+
<img
|
|
851
|
+
src={src}
|
|
852
|
+
alt={path}
|
|
853
|
+
onError={() => setFailed(true)}
|
|
854
|
+
className="max-w-full object-contain"
|
|
855
|
+
/>
|
|
856
|
+
);
|
|
857
|
+
}
|
|
858
|
+
|
|
783
859
|
/** Decode a base64 payload to a UTF-8 string (browser `atob` + TextDecoder). */
|
|
784
860
|
function decodeBase64Utf8(b64: string): string {
|
|
785
861
|
try {
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import type { TerminalCapability } from "@opengeni/sdk";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
type ReactNode,
|
|
4
|
+
useEffect,
|
|
5
|
+
useLayoutEffect,
|
|
6
|
+
useRef,
|
|
7
|
+
useState,
|
|
8
|
+
useSyncExternalStore,
|
|
9
|
+
} from "react";
|
|
3
10
|
import { cn } from "../lib/cn";
|
|
4
11
|
import { type TerminalStreamStatus, useTerminalStream } from "../hooks/use-terminal-stream";
|
|
5
12
|
import type { UseSandboxTerminalResult } from "../hooks/use-sandbox-terminal";
|
|
@@ -7,6 +14,7 @@ import { resolveTerminalFont, xtermThemeFromTokens } from "../lib/xterm-theme";
|
|
|
7
14
|
import { sandboxAcceptsLiveIo } from "../lib/sandbox-liveness";
|
|
8
15
|
import { terminalCanAcquirePty } from "../lib/terminal-capability";
|
|
9
16
|
import { attachRenderer, type RendererLoaders, type RendererTier } from "../lib/xterm-renderer";
|
|
17
|
+
import { sandboxTerminalPeers } from "../lib/workbench-peers";
|
|
10
18
|
|
|
11
19
|
/**
|
|
12
20
|
* A COMPLETE xterm `ITheme` (subset by intent, but every field xterm colors a
|
|
@@ -114,6 +122,19 @@ type XtermLike = {
|
|
|
114
122
|
};
|
|
115
123
|
};
|
|
116
124
|
type FitAddonLike = { fit: () => void };
|
|
125
|
+
type TerminalPeerBundle = {
|
|
126
|
+
Terminal: new (options: Record<string, unknown>) => XtermLike;
|
|
127
|
+
FitAddon: new () => FitAddonLike;
|
|
128
|
+
WebLinksAddon: new (handler: (event: MouseEvent, uri: string) => void) => unknown;
|
|
129
|
+
loadWebgl?:
|
|
130
|
+
| (() => Promise<{
|
|
131
|
+
WebglAddon: new () => {
|
|
132
|
+
dispose: () => void;
|
|
133
|
+
onContextLoss?: (callback: () => void) => void;
|
|
134
|
+
};
|
|
135
|
+
}>)
|
|
136
|
+
| undefined;
|
|
137
|
+
};
|
|
117
138
|
|
|
118
139
|
export type TerminalSurfaceState =
|
|
119
140
|
| "loading"
|
|
@@ -237,6 +258,12 @@ export function SandboxTerminal({
|
|
|
237
258
|
const wroteFirehoseRef = useRef(false);
|
|
238
259
|
const bootActiveRef = useRef(false);
|
|
239
260
|
const [ready, setReady] = useState(false);
|
|
261
|
+
const [loadError, setLoadError] = useState<Error | null>(null);
|
|
262
|
+
const peerRevision = useSyncExternalStore(
|
|
263
|
+
sandboxTerminalPeers.subscribe,
|
|
264
|
+
sandboxTerminalPeers.revision,
|
|
265
|
+
sandboxTerminalPeers.revision,
|
|
266
|
+
);
|
|
240
267
|
const [inputReady, setInputReady] = useState(false);
|
|
241
268
|
const [activated, setActivated] = useState(false);
|
|
242
269
|
|
|
@@ -249,6 +276,8 @@ export function SandboxTerminal({
|
|
|
249
276
|
write: ptyWrite,
|
|
250
277
|
resize: resizePty,
|
|
251
278
|
connected: ptyConnected,
|
|
279
|
+
inputReadiness,
|
|
280
|
+
useLegacyInput,
|
|
252
281
|
} = useTerminalStream({
|
|
253
282
|
// Connect only after xterm exists. This makes the renderer the sole output
|
|
254
283
|
// owner from the first websocket frame and removes an otherwise unbounded
|
|
@@ -260,6 +289,8 @@ export function SandboxTerminal({
|
|
|
260
289
|
url: ptyDescriptor ? terminalCapability!.url : null,
|
|
261
290
|
token: ptyDescriptor ? terminalCapability!.token : null,
|
|
262
291
|
expiresAt: ptyDescriptor ? terminalCapability!.expiresAt : null,
|
|
292
|
+
ptyCapable: terminalCapability!.ptyCapable,
|
|
293
|
+
reason: terminalCapability!.reason,
|
|
263
294
|
}
|
|
264
295
|
: null,
|
|
265
296
|
onOutput: (data) => {
|
|
@@ -271,7 +302,8 @@ export function SandboxTerminal({
|
|
|
271
302
|
// A pty-ws capability exclusively owns the screen even while connecting or
|
|
272
303
|
// after a visible connection failure; never silently switch one terminal UI
|
|
273
304
|
// between two PTYs. Input is enabled during the handshake because the stream
|
|
274
|
-
// hook buffers it strictly
|
|
305
|
+
// hook buffers it strictly until negotiated readiness. Old servers are
|
|
306
|
+
// explicitly legacy: their transport-open state is not shell readiness.
|
|
275
307
|
const ptyMode = ptyDescriptor;
|
|
276
308
|
// Keep xterm stdin live for an attachable descriptor even before its URL has
|
|
277
309
|
// arrived. Focus/click triggers the grant; any immediately following input is
|
|
@@ -287,7 +319,7 @@ export function SandboxTerminal({
|
|
|
287
319
|
if (readOnly) terminalModeLabel = "read-only";
|
|
288
320
|
else if (!ptyAttachable) terminalModeLabel = acceptsInput ? null : "output only";
|
|
289
321
|
else if (ptyStatus === "error") terminalModeLabel = "connection error";
|
|
290
|
-
else if (acceptsInput) terminalModeLabel = null;
|
|
322
|
+
else if (acceptsInput) terminalModeLabel = inputReadiness === "legacy" ? "legacy input" : null;
|
|
291
323
|
else terminalModeLabel = activated ? "connecting" : "connect on input";
|
|
292
324
|
|
|
293
325
|
// Boot-in-terminal: after the user engages a not-yet-warm box, show styled
|
|
@@ -353,12 +385,10 @@ export function SandboxTerminal({
|
|
|
353
385
|
|
|
354
386
|
ensureXtermBaseCss();
|
|
355
387
|
|
|
388
|
+
setLoadError(null);
|
|
356
389
|
void (async () => {
|
|
357
|
-
const
|
|
358
|
-
|
|
359
|
-
import("@xterm/addon-fit"),
|
|
360
|
-
import("@xterm/addon-web-links"),
|
|
361
|
-
]);
|
|
390
|
+
const { Terminal, FitAddon, WebLinksAddon, loadWebgl } =
|
|
391
|
+
(await sandboxTerminalPeers.load()) as TerminalPeerBundle;
|
|
362
392
|
if (disposed) return;
|
|
363
393
|
await waitForSize(el);
|
|
364
394
|
if (disposed) return;
|
|
@@ -397,13 +427,17 @@ export function SandboxTerminal({
|
|
|
397
427
|
const failSet = forcedRendererFailures();
|
|
398
428
|
const loaders: RendererLoaders = {
|
|
399
429
|
webgl: async (onLoss) => {
|
|
430
|
+
if (disposed) throw new Error("Terminal was disposed");
|
|
400
431
|
if (failSet.has("webgl")) throw new Error("forced webgl failure");
|
|
401
|
-
|
|
432
|
+
if (!loadWebgl) throw new Error("WebGL terminal renderer is not enabled");
|
|
433
|
+
const { WebglAddon } = await loadWebgl();
|
|
434
|
+
if (disposed) throw new Error("Terminal was disposed");
|
|
402
435
|
const addon = new WebglAddon() as unknown as {
|
|
403
436
|
dispose: () => void;
|
|
404
437
|
onContextLoss?: (cb: () => void) => void;
|
|
405
438
|
};
|
|
406
439
|
addon.onContextLoss?.(() => {
|
|
440
|
+
if (disposed) return;
|
|
407
441
|
try {
|
|
408
442
|
addon.dispose();
|
|
409
443
|
} catch {
|
|
@@ -416,6 +450,7 @@ export function SandboxTerminal({
|
|
|
416
450
|
},
|
|
417
451
|
};
|
|
418
452
|
await attachRenderer("webgl", loaders, (tier) => {
|
|
453
|
+
if (disposed) return;
|
|
419
454
|
rendererRef.current = tier;
|
|
420
455
|
el.setAttribute("data-og-term-renderer", tier);
|
|
421
456
|
});
|
|
@@ -448,7 +483,9 @@ export function SandboxTerminal({
|
|
|
448
483
|
}
|
|
449
484
|
setReady(true);
|
|
450
485
|
});
|
|
451
|
-
})()
|
|
486
|
+
})().catch((cause: unknown) => {
|
|
487
|
+
if (!disposed) setLoadError(cause instanceof Error ? cause : new Error(String(cause)));
|
|
488
|
+
});
|
|
452
489
|
|
|
453
490
|
return () => {
|
|
454
491
|
disposed = true;
|
|
@@ -461,9 +498,9 @@ export function SandboxTerminal({
|
|
|
461
498
|
bootActiveRef.current = false;
|
|
462
499
|
setReady(false);
|
|
463
500
|
};
|
|
464
|
-
// Mount
|
|
501
|
+
// Mount once per peer registration; runtime options sync without a remount.
|
|
465
502
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
466
|
-
}, []);
|
|
503
|
+
}, [peerRevision]);
|
|
467
504
|
|
|
468
505
|
// Sync stdin/cursor at runtime (NOT a remount) when interactivity flips, so the
|
|
469
506
|
// projection→PTY handoff keeps the single Terminal instance + its scrollback.
|
|
@@ -594,6 +631,11 @@ export function SandboxTerminal({
|
|
|
594
631
|
<span
|
|
595
632
|
className="rounded-og-sm bg-og-surface-2 px-1.5 py-0.5 text-og-xs uppercase tracking-wide"
|
|
596
633
|
role="status"
|
|
634
|
+
title={
|
|
635
|
+
inputReadiness === "legacy"
|
|
636
|
+
? "Shell readiness is not guaranteed. Wait for startup before typing."
|
|
637
|
+
: undefined
|
|
638
|
+
}
|
|
597
639
|
>
|
|
598
640
|
{terminalModeLabel}
|
|
599
641
|
</span>
|
|
@@ -612,6 +654,29 @@ export function SandboxTerminal({
|
|
|
612
654
|
</span>
|
|
613
655
|
</div>
|
|
614
656
|
)}
|
|
657
|
+
{ptyAttachable && !readOnly && !showHeader && inputReadiness === "legacy" && (
|
|
658
|
+
<p role="status" className="shrink-0 px-3 py-1 text-og-xs text-og-fg-subtle">
|
|
659
|
+
Legacy input — wait for shell startup before typing.
|
|
660
|
+
</p>
|
|
661
|
+
)}
|
|
662
|
+
{ptyAttachable && !readOnly && inputReadiness === "waiting" && (
|
|
663
|
+
<div className="flex shrink-0 flex-wrap items-center justify-between gap-2 border-b border-og-border px-3 py-2 text-og-xs text-og-fg-subtle">
|
|
664
|
+
<span role="status">
|
|
665
|
+
Waiting for shell readiness. Manual input clears buffered typing.
|
|
666
|
+
</span>
|
|
667
|
+
<button
|
|
668
|
+
type="button"
|
|
669
|
+
onClick={() => {
|
|
670
|
+
useLegacyInput();
|
|
671
|
+
termRef.current?.focus();
|
|
672
|
+
}}
|
|
673
|
+
title="Use for startup prompts or shells without readiness support. Early input is not guaranteed."
|
|
674
|
+
className="shrink-0 rounded-og-sm px-2 py-1 text-og-fg hover:bg-og-surface-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-og-accent pointer-coarse:min-h-11"
|
|
675
|
+
>
|
|
676
|
+
Use manual input
|
|
677
|
+
</button>
|
|
678
|
+
</div>
|
|
679
|
+
)}
|
|
615
680
|
{/* `onPointerDownCapture`/`onFocusCapture` fire on the FIRST user engagement
|
|
616
681
|
with the terminal surface (capture so they win even though xterm's own
|
|
617
682
|
listeners stop propagation). The host warms the box for pty-ws here. The
|
|
@@ -621,7 +686,12 @@ export function SandboxTerminal({
|
|
|
621
686
|
onPointerDownCapture={handleActivate}
|
|
622
687
|
onFocusCapture={handleActivate}
|
|
623
688
|
>
|
|
624
|
-
{!ready &&
|
|
689
|
+
{!ready &&
|
|
690
|
+
(loadError ? (
|
|
691
|
+
<p role="alert">{loadError.message}</p>
|
|
692
|
+
) : (
|
|
693
|
+
(placeholder ?? <TerminalPlaceholder />)
|
|
694
|
+
))}
|
|
625
695
|
{/* Kept `visibility:hidden` until the first successful fit so the first
|
|
626
696
|
VISIBLE frame is already correctly sized (no 80×24 flash — E4). */}
|
|
627
697
|
<div
|
|
@@ -633,6 +703,7 @@ export function SandboxTerminal({
|
|
|
633
703
|
data-opengeni-terminal-interactive={surfaceState === "interactive" ? "true" : "false"}
|
|
634
704
|
data-opengeni-terminal-state={surfaceState}
|
|
635
705
|
data-opengeni-terminal-status={ptyAttachable ? ptyStatus : "firehose"}
|
|
706
|
+
data-opengeni-terminal-input-readiness={ptyAttachable ? inputReadiness : "firehose"}
|
|
636
707
|
/>
|
|
637
708
|
</div>
|
|
638
709
|
</div>
|