@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
|
@@ -17,6 +17,11 @@ import {
|
|
|
17
17
|
STREAM_KIND_PTY,
|
|
18
18
|
STREAM_ROLE_CLIENT,
|
|
19
19
|
} from "../lib/relay-wire";
|
|
20
|
+
import {
|
|
21
|
+
TERMINAL_INPUT_READY_PREFERENCE,
|
|
22
|
+
TERMINAL_INPUT_READY_PROTOCOL,
|
|
23
|
+
terminalInputReadyDecoder,
|
|
24
|
+
} from "../lib/terminal-input-readiness";
|
|
20
25
|
|
|
21
26
|
/** The ttyd connection lifecycle as surfaced to the component. */
|
|
22
27
|
export type TerminalStreamStatus = "connecting" | "open" | "closed" | "error";
|
|
@@ -25,8 +30,12 @@ export type UseTerminalStreamOptions = {
|
|
|
25
30
|
/** The Terminal cell of the negotiated capabilities (`capabilities.Terminal`).
|
|
26
31
|
* The stream connects ONLY when `transport === "pty-ws"` and `url` is set; on a
|
|
27
32
|
* cold box (`transport === "sse-events"` / no url) it stays idle and the caller
|
|
28
|
-
* falls back to the Channel-A
|
|
29
|
-
|
|
33
|
+
* falls back to the Channel-A firehose. Explicit PTY-capable cold cells may
|
|
34
|
+
* buffer input, but cannot connect or flush until the grant arrives. */
|
|
35
|
+
capability:
|
|
36
|
+
| (Pick<TerminalCapability, "transport" | "url" | "token" | "expiresAt"> &
|
|
37
|
+
Partial<Pick<TerminalCapability, "ptyCapable" | "reason">>)
|
|
38
|
+
| null;
|
|
30
39
|
/** Called for each OUTPUT payload from ttyd (write verbatim into xterm). */
|
|
31
40
|
onOutput?: ((data: string) => void) | undefined;
|
|
32
41
|
/** Called when ttyd sends a SET_WINDOW_TITLE frame. */
|
|
@@ -40,11 +49,16 @@ export type UseTerminalStreamOptions = {
|
|
|
40
49
|
};
|
|
41
50
|
|
|
42
51
|
export type UseTerminalStreamResult = {
|
|
43
|
-
/** True
|
|
52
|
+
/** True when input can be sent. Legacy ttyd does not guarantee shell readiness. */
|
|
44
53
|
connected: boolean;
|
|
45
54
|
status: TerminalStreamStatus;
|
|
55
|
+
/** `waiting` requires explicit shell readiness; `legacy` has no such guarantee. */
|
|
56
|
+
inputReadiness: "pending" | "waiting" | "ready" | "legacy";
|
|
57
|
+
/** Deliberate escape for startup prompts/no-Readline shells. Clears queued
|
|
58
|
+
* typing without executing it, then enables unguaranteed manual input. */
|
|
59
|
+
useLegacyInput: () => void;
|
|
46
60
|
/** Pipe a keystroke/paste to PTY stdin. Input during CONNECTING is bounded and
|
|
47
|
-
* replayed
|
|
61
|
+
* replayed after negotiated readiness (or legacy ttyd preferences). */
|
|
48
62
|
write: (data: string) => void;
|
|
49
63
|
/** Tell ttyd the PTY window changed size (on xterm fit/resize). */
|
|
50
64
|
resize: (cols: number, rows: number) => void;
|
|
@@ -52,8 +66,8 @@ export type UseTerminalStreamResult = {
|
|
|
52
66
|
disconnect: () => void;
|
|
53
67
|
};
|
|
54
68
|
|
|
55
|
-
// Keystrokes entered during
|
|
56
|
-
//
|
|
69
|
+
// Keystrokes entered during startup are held until the negotiated input boundary.
|
|
70
|
+
// Old ttyd servers retain explicitly legacy semantics. Bound by UTF-16 code units (a hard
|
|
57
71
|
// <=128 KiB string payload in current JS engines) so a paste cannot turn a slow
|
|
58
72
|
// handshake into unbounded renderer memory. Overflow rejects the whole pending
|
|
59
73
|
// input rather than ever executing a truncated shell command.
|
|
@@ -161,7 +175,7 @@ function closeSocket(socket: WebSocket | null): void {
|
|
|
161
175
|
* - first frame: `JSON.stringify({ AuthToken: "" })` (+ optional columns/rows).
|
|
162
176
|
* - client→server: INPUT = "0"+data ; RESIZE = "1"+JSON({columns,rows}).
|
|
163
177
|
* - server→client: "0" = OUTPUT (→ xterm) ; "1" = SET_WINDOW_TITLE ;
|
|
164
|
-
* "2" = SET_PREFERENCES (
|
|
178
|
+
* "2" = SET_PREFERENCES (readiness negotiation). Binary frames decode identically.
|
|
165
179
|
*
|
|
166
180
|
* On a `url`/`token` rotation (a box rollover folds a fresh address into the cell)
|
|
167
181
|
* the effect re-runs: the old socket closes and a fresh one connects — a brief
|
|
@@ -171,11 +185,15 @@ function closeSocket(socket: WebSocket | null): void {
|
|
|
171
185
|
export function useTerminalStream(options: UseTerminalStreamOptions): UseTerminalStreamResult {
|
|
172
186
|
const { capability, onOutput, onTitle, onReconnectNeeded, initialCols, initialRows } = options;
|
|
173
187
|
const [status, setStatus] = useState<TerminalStreamStatus>("closed");
|
|
188
|
+
const [inputReadiness, setInputReadiness] =
|
|
189
|
+
useState<UseTerminalStreamResult["inputReadiness"]>("pending");
|
|
174
190
|
const [reconnectGeneration, setReconnectGeneration] = useState(0);
|
|
175
191
|
const wsRef = useRef<WebSocket | null>(null);
|
|
176
192
|
const pendingInputRef = useRef("");
|
|
177
193
|
const socketFailedRef = useRef(false);
|
|
178
194
|
const socketAuthenticatedRef = useRef(false);
|
|
195
|
+
const legacyInputRef = useRef<(() => void) | null>(null);
|
|
196
|
+
const manuallyDisconnectedRef = useRef(false);
|
|
179
197
|
const relayChannelRef = useRef<RelayChannel | null>(null);
|
|
180
198
|
const relayIdentityRef = useRef<string | null>(null);
|
|
181
199
|
const relayInputSequenceRef = useRef(0n);
|
|
@@ -205,8 +223,18 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
|
|
|
205
223
|
const expiresAt = capability?.expiresAt ?? null;
|
|
206
224
|
const transportRef = useRef(transport);
|
|
207
225
|
transportRef.current = transport;
|
|
226
|
+
// A cold, explicitly PTY-capable cell may collect input before its viewer
|
|
227
|
+
// grant arrives. This is not a socket credential or a readiness assertion.
|
|
228
|
+
const acquiringPty =
|
|
229
|
+
transport === "sse-events" &&
|
|
230
|
+
capability?.ptyCapable === true &&
|
|
231
|
+
(capability.reason === "lease_cold" || capability.reason === "not_provisioned");
|
|
232
|
+
const acquiringPtyRef = useRef(acquiringPty);
|
|
233
|
+
acquiringPtyRef.current = acquiringPty;
|
|
208
234
|
|
|
209
235
|
useEffect(() => {
|
|
236
|
+
manuallyDisconnectedRef.current = false;
|
|
237
|
+
setInputReadiness("pending");
|
|
210
238
|
// SSR / no WebSocket / not a live pty-ws cell: stay closed; the caller falls
|
|
211
239
|
// back to the Channel-A read-only firehose.
|
|
212
240
|
if (typeof window === "undefined" || typeof WebSocket === "undefined") return;
|
|
@@ -222,6 +250,7 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
|
|
|
222
250
|
reconnectAttemptRef.current = 0;
|
|
223
251
|
credentialIdentityRef.current = null;
|
|
224
252
|
refreshRequestedRef.current = false;
|
|
253
|
+
socketFailedRef.current = false;
|
|
225
254
|
setStatus("closed");
|
|
226
255
|
return;
|
|
227
256
|
}
|
|
@@ -258,6 +287,11 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
|
|
|
258
287
|
let reconnectTimer: ReturnType<typeof setTimeout> | null = null;
|
|
259
288
|
let socket: WebSocket;
|
|
260
289
|
let relayChannel: RelayChannel | null = null;
|
|
290
|
+
let authSent = false;
|
|
291
|
+
let preferencesReceived = false;
|
|
292
|
+
let readinessNegotiated = false;
|
|
293
|
+
let sentSize: { cols: number; rows: number } | null = null;
|
|
294
|
+
const decodeReadyOutput = terminalInputReadyDecoder();
|
|
261
295
|
const relayOutputDecoder = new TextDecoder();
|
|
262
296
|
setStatus("connecting");
|
|
263
297
|
try {
|
|
@@ -311,12 +345,47 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
|
|
|
311
345
|
setStatus("connecting");
|
|
312
346
|
reconnectTimer = setTimeout(() => {
|
|
313
347
|
reconnectTimer = null;
|
|
314
|
-
if (!disposed
|
|
348
|
+
if (!disposed && !manuallyDisconnectedRef.current)
|
|
349
|
+
setReconnectGeneration((generation) => generation + 1);
|
|
315
350
|
}, delay);
|
|
316
351
|
};
|
|
317
352
|
|
|
353
|
+
const openTtydInput = (mode: "ready" | "legacy", discardPending = false) => {
|
|
354
|
+
if (
|
|
355
|
+
disposed ||
|
|
356
|
+
wsRef.current !== socket ||
|
|
357
|
+
socket.readyState !== WebSocket.OPEN ||
|
|
358
|
+
!authSent ||
|
|
359
|
+
socketFailedRef.current
|
|
360
|
+
)
|
|
361
|
+
return;
|
|
362
|
+
if (discardPending) pendingInputRef.current = "";
|
|
363
|
+
try {
|
|
364
|
+
// A fit/resize may have happened while shell readiness was pending.
|
|
365
|
+
if (sentSize?.cols !== sizeRef.current.cols || sentSize.rows !== sizeRef.current.rows) {
|
|
366
|
+
socket.send(ttydResizeFrame(sizeRef.current.cols, sizeRef.current.rows));
|
|
367
|
+
sentSize = { ...sizeRef.current };
|
|
368
|
+
}
|
|
369
|
+
if (pendingInputRef.current.length > 0) {
|
|
370
|
+
socket.send(ttydInputFrame(pendingInputRef.current));
|
|
371
|
+
pendingInputRef.current = "";
|
|
372
|
+
}
|
|
373
|
+
socketAuthenticatedRef.current = true;
|
|
374
|
+
legacyInputRef.current = null;
|
|
375
|
+
setInputReadiness(mode);
|
|
376
|
+
setStatus("open");
|
|
377
|
+
reconnectAttemptRef.current = 0;
|
|
378
|
+
refreshRequestedRef.current = false;
|
|
379
|
+
} catch {
|
|
380
|
+
socketAuthenticatedRef.current = false;
|
|
381
|
+
setInputReadiness("pending");
|
|
382
|
+
setStatus("connecting");
|
|
383
|
+
closeSocket(socket);
|
|
384
|
+
}
|
|
385
|
+
};
|
|
386
|
+
|
|
318
387
|
socket.onopen = () => {
|
|
319
|
-
if (disposed) return;
|
|
388
|
+
if (disposed || wsRef.current !== socket || socketFailedRef.current) return;
|
|
320
389
|
if (relay && relayChannel) {
|
|
321
390
|
try {
|
|
322
391
|
socket.send(
|
|
@@ -343,26 +412,18 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
|
|
|
343
412
|
try {
|
|
344
413
|
socket.send(ttydAuthFrame({ columns: sizeRef.current.cols, rows: sizeRef.current.rows }));
|
|
345
414
|
socket.send(ttydResizeFrame(sizeRef.current.cols, sizeRef.current.rows));
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
// client's perspective; never execute a prefix of a buffered command.
|
|
349
|
-
socket.send(ttydInputFrame(pendingInputRef.current));
|
|
350
|
-
pendingInputRef.current = "";
|
|
351
|
-
}
|
|
352
|
-
socketAuthenticatedRef.current = true;
|
|
415
|
+
sentSize = { ...sizeRef.current };
|
|
416
|
+
authSent = true;
|
|
353
417
|
} catch {
|
|
354
418
|
socketFailedRef.current = false;
|
|
355
419
|
setStatus("connecting");
|
|
356
420
|
closeSocket(socket);
|
|
357
421
|
return;
|
|
358
422
|
}
|
|
359
|
-
setStatus("open");
|
|
360
|
-
reconnectAttemptRef.current = 0;
|
|
361
|
-
refreshRequestedRef.current = false;
|
|
362
423
|
};
|
|
363
424
|
|
|
364
425
|
socket.onmessage = (ev: MessageEvent) => {
|
|
365
|
-
if (disposed) return;
|
|
426
|
+
if (disposed || wsRef.current !== socket || socketFailedRef.current) return;
|
|
366
427
|
if (relay) {
|
|
367
428
|
if (!(ev.data instanceof ArrayBuffer) || !relayChannel) return;
|
|
368
429
|
const bytes = new Uint8Array(ev.data);
|
|
@@ -386,6 +447,7 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
|
|
|
386
447
|
pendingInputRef.current = "";
|
|
387
448
|
}
|
|
388
449
|
setStatus("open");
|
|
450
|
+
setInputReadiness("ready");
|
|
389
451
|
} catch {
|
|
390
452
|
socketFailedRef.current = true;
|
|
391
453
|
setStatus("error");
|
|
@@ -410,19 +472,49 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
|
|
|
410
472
|
const { command, payload } = decodeFrame(ev.data as string | ArrayBuffer);
|
|
411
473
|
switch (command) {
|
|
412
474
|
case TtydServerCommand.OUTPUT:
|
|
413
|
-
|
|
475
|
+
if (readinessNegotiated) {
|
|
476
|
+
const decoded = decodeReadyOutput(payload);
|
|
477
|
+
if (decoded.output) onOutputRef.current?.(decoded.output);
|
|
478
|
+
if (decoded.ready && !socketAuthenticatedRef.current) openTtydInput("ready");
|
|
479
|
+
} else {
|
|
480
|
+
onOutputRef.current?.(payload);
|
|
481
|
+
}
|
|
414
482
|
break;
|
|
415
483
|
case TtydServerCommand.SET_WINDOW_TITLE:
|
|
416
484
|
onTitleRef.current?.(payload);
|
|
417
485
|
break;
|
|
418
|
-
|
|
486
|
+
case TtydServerCommand.SET_PREFERENCES:
|
|
487
|
+
if (!authSent || preferencesReceived || socketAuthenticatedRef.current) break;
|
|
488
|
+
preferencesReceived = true;
|
|
489
|
+
try {
|
|
490
|
+
const preferences = JSON.parse(payload) as Record<string, unknown>;
|
|
491
|
+
if (!preferences || typeof preferences !== "object" || Array.isArray(preferences)) {
|
|
492
|
+
throw new Error("invalid ttyd preferences");
|
|
493
|
+
}
|
|
494
|
+
const protocol = preferences[TERMINAL_INPUT_READY_PREFERENCE];
|
|
495
|
+
if (protocol === undefined) {
|
|
496
|
+
// Old images/running daemons do not acquire a guarantee merely
|
|
497
|
+
// because this client is new. Preserve their legacy input path.
|
|
498
|
+
openTtydInput("legacy");
|
|
499
|
+
} else {
|
|
500
|
+
readinessNegotiated = protocol === TERMINAL_INPUT_READY_PROTOCOL;
|
|
501
|
+
setInputReadiness("waiting");
|
|
502
|
+
legacyInputRef.current = () => openTtydInput("legacy", true);
|
|
503
|
+
}
|
|
504
|
+
} catch {
|
|
505
|
+
// Invalid negotiation is not readiness. Manual input remains a
|
|
506
|
+
// deliberate escape, never an automatic fallback or timer flush.
|
|
507
|
+
setInputReadiness("waiting");
|
|
508
|
+
legacyInputRef.current = () => openTtydInput("legacy", true);
|
|
509
|
+
}
|
|
510
|
+
break;
|
|
419
511
|
default:
|
|
420
512
|
break;
|
|
421
513
|
}
|
|
422
514
|
};
|
|
423
515
|
|
|
424
516
|
socket.onerror = () => {
|
|
425
|
-
if (!disposed) {
|
|
517
|
+
if (!disposed && wsRef.current === socket && !intentionalCloseRef.current.has(socket)) {
|
|
426
518
|
// A network/relay outage is retryable with the same credential and PTY.
|
|
427
519
|
// Keep accepting bounded input while the transport comes back.
|
|
428
520
|
socketFailedRef.current = false;
|
|
@@ -431,8 +523,11 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
|
|
|
431
523
|
}
|
|
432
524
|
};
|
|
433
525
|
socket.onclose = () => {
|
|
526
|
+
if (disposed || wsRef.current !== socket) return;
|
|
434
527
|
if (wsRef.current === socket) wsRef.current = null;
|
|
435
528
|
socketAuthenticatedRef.current = false;
|
|
529
|
+
legacyInputRef.current = null;
|
|
530
|
+
setInputReadiness("pending");
|
|
436
531
|
if (!disposed) {
|
|
437
532
|
if (socketFailedRef.current) setStatus("error");
|
|
438
533
|
else scheduleTransportReconnect();
|
|
@@ -443,6 +538,7 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
|
|
|
443
538
|
disposed = true;
|
|
444
539
|
wsRef.current = null;
|
|
445
540
|
socketAuthenticatedRef.current = false;
|
|
541
|
+
legacyInputRef.current = null;
|
|
446
542
|
relayChannelRef.current = null;
|
|
447
543
|
if (reconnectTimer !== null) clearTimeout(reconnectTimer);
|
|
448
544
|
// Drop handlers so an in-flight close/error doesn't mutate state post-unmount.
|
|
@@ -454,7 +550,7 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
|
|
|
454
550
|
};
|
|
455
551
|
// A url/token change (rotation) re-runs this effect → close old, open new.
|
|
456
552
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
457
|
-
}, [transport, url, token, expiresAt, reconnectGeneration]);
|
|
553
|
+
}, [transport, url, token, expiresAt, acquiringPty, reconnectGeneration]);
|
|
458
554
|
|
|
459
555
|
const write = useCallback((data: string) => {
|
|
460
556
|
const currentTransport = transportRef.current;
|
|
@@ -468,12 +564,30 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
|
|
|
468
564
|
ws.send(ttydInputFrame(data));
|
|
469
565
|
}
|
|
470
566
|
} catch {
|
|
567
|
+
// A synchronous ttyd send failure did not enqueue these bytes. Retain
|
|
568
|
+
// them for the next explicit readiness boundary, never replay a send
|
|
569
|
+
// which returned successfully. Relay sequencing keeps its own contract.
|
|
570
|
+
if (currentTransport === "pty-ws") {
|
|
571
|
+
const nextSize = pendingInputRef.current.length + data.length;
|
|
572
|
+
if (nextSize > MAX_PENDING_TERMINAL_INPUT_CODE_UNITS) {
|
|
573
|
+
pendingInputRef.current = "";
|
|
574
|
+
socketFailedRef.current = true;
|
|
575
|
+
socketAuthenticatedRef.current = false;
|
|
576
|
+
setStatus("error");
|
|
577
|
+
closeSocket(ws);
|
|
578
|
+
return;
|
|
579
|
+
}
|
|
580
|
+
pendingInputRef.current += data;
|
|
581
|
+
}
|
|
582
|
+
socketAuthenticatedRef.current = false;
|
|
471
583
|
socketFailedRef.current = false;
|
|
472
584
|
setStatus("connecting");
|
|
473
585
|
closeSocket(ws);
|
|
474
586
|
}
|
|
475
587
|
} else if (
|
|
476
|
-
(currentTransport === "pty-ws" ||
|
|
588
|
+
(currentTransport === "pty-ws" ||
|
|
589
|
+
currentTransport === "relay-pty" ||
|
|
590
|
+
acquiringPtyRef.current) &&
|
|
477
591
|
!socketFailedRef.current
|
|
478
592
|
) {
|
|
479
593
|
const nextSize = pendingInputRef.current.length + data.length;
|
|
@@ -502,18 +616,30 @@ export function useTerminalStream(options: UseTerminalStreamOptions): UseTermina
|
|
|
502
616
|
}
|
|
503
617
|
}, []);
|
|
504
618
|
const disconnect = useCallback(() => {
|
|
619
|
+
manuallyDisconnectedRef.current = true;
|
|
505
620
|
const ws = wsRef.current;
|
|
506
621
|
wsRef.current = null;
|
|
507
622
|
pendingInputRef.current = "";
|
|
508
623
|
socketFailedRef.current = false;
|
|
509
624
|
socketAuthenticatedRef.current = false;
|
|
625
|
+
legacyInputRef.current = null;
|
|
510
626
|
relayChannelRef.current = null;
|
|
511
627
|
setStatus("closed");
|
|
628
|
+
setInputReadiness("pending");
|
|
512
629
|
if (ws) intentionalCloseRef.current.add(ws);
|
|
513
630
|
closeSocket(ws);
|
|
514
631
|
}, []);
|
|
632
|
+
const useLegacyInput = useCallback(() => legacyInputRef.current?.(), []);
|
|
515
633
|
|
|
516
634
|
return useMemo<UseTerminalStreamResult>(() => {
|
|
517
|
-
return {
|
|
518
|
-
|
|
635
|
+
return {
|
|
636
|
+
connected: status === "open",
|
|
637
|
+
status,
|
|
638
|
+
inputReadiness,
|
|
639
|
+
useLegacyInput,
|
|
640
|
+
write,
|
|
641
|
+
resize,
|
|
642
|
+
disconnect,
|
|
643
|
+
};
|
|
644
|
+
}, [status, inputReadiness, useLegacyInput, write, resize, disconnect]);
|
|
519
645
|
}
|
|
@@ -611,6 +611,12 @@ function classifyStartError(error: unknown): TranscriptionErrorCode {
|
|
|
611
611
|
|
|
612
612
|
export function normalizeTranscriptionErrorCode(code: unknown): TranscriptionErrorCode {
|
|
613
613
|
switch (code) {
|
|
614
|
+
case "insufficient_credits":
|
|
615
|
+
case "allowance_exhausted":
|
|
616
|
+
case "monthly_model_cost_limit":
|
|
617
|
+
case "unavailable":
|
|
618
|
+
case "too_large":
|
|
619
|
+
case "invalid_audio":
|
|
614
620
|
case "permission_denied":
|
|
615
621
|
case "not_supported":
|
|
616
622
|
case "network":
|
|
@@ -10,6 +10,7 @@ import type {
|
|
|
10
10
|
} from "@opengeni/sdk";
|
|
11
11
|
import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
12
12
|
import { useEmbeddedSession, type EmbeddedSessionClientOverride } from "../session-context";
|
|
13
|
+
import { normalizeError } from "../lib/error-message";
|
|
13
14
|
import {
|
|
14
15
|
useDebouncedCallback,
|
|
15
16
|
usePageLiveActivity,
|
|
@@ -463,7 +464,7 @@ function operationKey(): string {
|
|
|
463
464
|
}
|
|
464
465
|
|
|
465
466
|
function asError(cause: unknown): Error {
|
|
466
|
-
return
|
|
467
|
+
return normalizeError(cause);
|
|
467
468
|
}
|
|
468
469
|
|
|
469
470
|
function isOutcomeUnknownError(cause: unknown): boolean {
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { OpenGeniClient } from "@opengeni/sdk";
|
|
2
|
+
import {
|
|
3
|
+
getMyUsage,
|
|
4
|
+
type UsageAllowancePeriod,
|
|
5
|
+
type WorkspaceUsageResponse,
|
|
6
|
+
} from "@opengeni/sdk/usage-allowances";
|
|
7
|
+
import { useCallback, useContext, useEffect, useMemo, useRef } from "react";
|
|
8
|
+
|
|
9
|
+
import { OpenGeniContext } from "../session-context";
|
|
10
|
+
import { summarizeUsage, type UsageSummary } from "../usage/summary";
|
|
11
|
+
import { usePolledValue } from "./internal";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Anything that can read the signed-in member's own usage: the root SDK client
|
|
15
|
+
* pointed at your session proxy (`getMyUsage`), or any client exposing
|
|
16
|
+
* `requestJson` (for example the narrower browser client).
|
|
17
|
+
*/
|
|
18
|
+
export type UsageClientLike =
|
|
19
|
+
| Pick<OpenGeniClient, "getMyUsage">
|
|
20
|
+
| Pick<OpenGeniClient, "requestJson">;
|
|
21
|
+
|
|
22
|
+
export type UseUsageOptions = {
|
|
23
|
+
/** Defaults to the `<OpenGeniProvider>` client. */
|
|
24
|
+
client?: UsageClientLike | undefined;
|
|
25
|
+
/** Defaults to the `<OpenGeniProvider>` workspace. */
|
|
26
|
+
workspaceId?: string | undefined;
|
|
27
|
+
/** `"current"` (default) or a `YYYY-MM` allowance period. */
|
|
28
|
+
period?: UsageAllowancePeriod | undefined;
|
|
29
|
+
/** Re-read on an interval. Off by default; usage changes only when work settles. */
|
|
30
|
+
pollIntervalMs?: number | undefined;
|
|
31
|
+
enabled?: boolean | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Re-read whenever this value changes, keeping the current reading while it
|
|
34
|
+
* loads. Pass something that changes when work settles (a turn count, the
|
|
35
|
+
* session status) so the meter follows real usage without polling.
|
|
36
|
+
*/
|
|
37
|
+
refreshKey?: unknown;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export type UseUsageResult = {
|
|
41
|
+
/** The raw `/usage/me` response: the workspace pool and your own row. */
|
|
42
|
+
usage: WorkspaceUsageResponse | null;
|
|
43
|
+
/** What to tell this member; null until loaded. */
|
|
44
|
+
summary: UsageSummary | null;
|
|
45
|
+
loading: boolean;
|
|
46
|
+
error: Error | null;
|
|
47
|
+
refresh: () => Promise<void>;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
function readOwnUsage(
|
|
51
|
+
client: UsageClientLike,
|
|
52
|
+
workspaceId: string,
|
|
53
|
+
period: UsageAllowancePeriod | undefined,
|
|
54
|
+
signal: AbortSignal | undefined,
|
|
55
|
+
): Promise<WorkspaceUsageResponse> {
|
|
56
|
+
const query = period === undefined ? {} : { period };
|
|
57
|
+
const options = signal ? { signal } : {};
|
|
58
|
+
if ("getMyUsage" in client && typeof client.getMyUsage === "function") {
|
|
59
|
+
return client.getMyUsage(workspaceId, query, options);
|
|
60
|
+
}
|
|
61
|
+
if ("requestJson" in client && typeof client.requestJson === "function") {
|
|
62
|
+
return getMyUsage(client, workspaceId, query, options);
|
|
63
|
+
}
|
|
64
|
+
throw new Error("@opengeni/react: the usage client needs getMyUsage or requestJson.");
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The signed-in member's own usage in one workspace, read through `/usage/me`
|
|
69
|
+
* (the session proxy serves exactly this route). Never reads another member.
|
|
70
|
+
*/
|
|
71
|
+
export function useUsage(options: UseUsageOptions = {}): UseUsageResult {
|
|
72
|
+
const context = useContext(OpenGeniContext);
|
|
73
|
+
const client = (options.client ?? context?.client) as UsageClientLike | undefined;
|
|
74
|
+
const workspaceId = options.workspaceId ?? context?.workspaceId;
|
|
75
|
+
if (!client || !workspaceId) {
|
|
76
|
+
throw new Error(
|
|
77
|
+
"@opengeni/react: useUsage needs a client and workspace. Wrap the tree in <OpenGeniProvider> or pass { client, workspaceId }.",
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
const period = options.period;
|
|
81
|
+
const load = useCallback(
|
|
82
|
+
(signal?: AbortSignal) => readOwnUsage(client, workspaceId, period, signal),
|
|
83
|
+
[client, workspaceId, period],
|
|
84
|
+
);
|
|
85
|
+
const state = usePolledValue(load, {
|
|
86
|
+
pollIntervalMs: options.pollIntervalMs,
|
|
87
|
+
enabled: options.enabled,
|
|
88
|
+
});
|
|
89
|
+
const refreshKey = options.refreshKey;
|
|
90
|
+
const seenKey = useRef(refreshKey);
|
|
91
|
+
const refresh = state.refresh;
|
|
92
|
+
useEffect(() => {
|
|
93
|
+
if (Object.is(seenKey.current, refreshKey)) return;
|
|
94
|
+
seenKey.current = refreshKey;
|
|
95
|
+
void refresh();
|
|
96
|
+
}, [refreshKey, refresh]);
|
|
97
|
+
const usage = state.data;
|
|
98
|
+
const summary = useMemo(() => (usage ? summarizeUsage(usage) : null), [usage]);
|
|
99
|
+
return { usage, summary, loading: state.loading, error: state.error, refresh };
|
|
100
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { useCallback, useMemo } from "react";
|
|
2
|
+
import { useOpenGeni, type ClientOverride } from "../provider";
|
|
3
|
+
import type {
|
|
4
|
+
ListVaultItemsQuery,
|
|
5
|
+
SessionSecretsView,
|
|
6
|
+
VaultFieldVersionMeta,
|
|
7
|
+
VaultItem,
|
|
8
|
+
VaultItemSummary,
|
|
9
|
+
VaultSummary,
|
|
10
|
+
} from "@opengeni/sdk";
|
|
11
|
+
import { asVaultClient, vaultsApi, type VaultsApi } from "@opengeni/sdk";
|
|
12
|
+
import { usePolledValue } from "./internal";
|
|
13
|
+
|
|
14
|
+
export type UseVaultQueryOptions = ClientOverride & {
|
|
15
|
+
pollIntervalMs?: number | undefined;
|
|
16
|
+
enabled?: boolean | undefined;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
type QueryResult<T> = {
|
|
20
|
+
loading: boolean;
|
|
21
|
+
error: Error | null;
|
|
22
|
+
refresh: () => Promise<void>;
|
|
23
|
+
} & T;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The workspace's vault REST surface for the current client. Mutations are
|
|
27
|
+
* plain promises: callers refresh the affected query afterwards. Plaintext
|
|
28
|
+
* (`revealField`) is returned to the caller only and never stored here.
|
|
29
|
+
*/
|
|
30
|
+
export function useVaultsApi(options: ClientOverride = {}): VaultsApi {
|
|
31
|
+
const { client, workspaceId } = useOpenGeni(options);
|
|
32
|
+
return useMemo(() => vaultsApi(asVaultClient(client), workspaceId), [client, workspaceId]);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Vaults the caller can see in this workspace (metadata only). */
|
|
36
|
+
export function useVaults(
|
|
37
|
+
options: UseVaultQueryOptions = {},
|
|
38
|
+
): QueryResult<{ vaults: VaultSummary[] | null; api: VaultsApi }> {
|
|
39
|
+
const api = useVaultsApi(options);
|
|
40
|
+
const load = useCallback((signal?: AbortSignal) => api.listVaults(signal), [api]);
|
|
41
|
+
const { data, loading, error, refresh } = usePolledValue(load, {
|
|
42
|
+
pollIntervalMs: options.pollIntervalMs,
|
|
43
|
+
enabled: options.enabled,
|
|
44
|
+
});
|
|
45
|
+
return { vaults: data, loading, error, refresh, api };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** One vault's metadata. */
|
|
49
|
+
export function useVault(
|
|
50
|
+
vaultId: string,
|
|
51
|
+
options: UseVaultQueryOptions = {},
|
|
52
|
+
): QueryResult<{ vault: VaultSummary | null; api: VaultsApi }> {
|
|
53
|
+
const api = useVaultsApi(options);
|
|
54
|
+
const load = useCallback((signal?: AbortSignal) => api.getVault(vaultId, signal), [api, vaultId]);
|
|
55
|
+
const { data, loading, error, refresh } = usePolledValue(load, {
|
|
56
|
+
pollIntervalMs: options.pollIntervalMs,
|
|
57
|
+
enabled: options.enabled,
|
|
58
|
+
});
|
|
59
|
+
return { vault: data, loading, error, refresh, api };
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** The contract's maximum page size (`ListVaultItemsQuery.limit`). */
|
|
63
|
+
export const VAULT_ITEM_PAGE_LIMIT = 200;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* A vault's items (metadata only). Follows cursors so a dense vault renders
|
|
67
|
+
* as one list; `q`/`type` filter server-side.
|
|
68
|
+
*/
|
|
69
|
+
export function useVaultItems(
|
|
70
|
+
vaultId: string,
|
|
71
|
+
query: ListVaultItemsQuery = {},
|
|
72
|
+
options: UseVaultQueryOptions = {},
|
|
73
|
+
): QueryResult<{ items: VaultItemSummary[] | null; api: VaultsApi }> {
|
|
74
|
+
const api = useVaultsApi(options);
|
|
75
|
+
const { q, type, includeArchived } = query;
|
|
76
|
+
const load = useCallback(
|
|
77
|
+
async (signal?: AbortSignal) => {
|
|
78
|
+
const items: VaultItemSummary[] = [];
|
|
79
|
+
let cursor: string | undefined;
|
|
80
|
+
for (let page = 0; page < 40; page += 1) {
|
|
81
|
+
const result = await api.listItems(
|
|
82
|
+
vaultId,
|
|
83
|
+
{ q, type, includeArchived, cursor, limit: VAULT_ITEM_PAGE_LIMIT },
|
|
84
|
+
signal,
|
|
85
|
+
);
|
|
86
|
+
items.push(...result.items);
|
|
87
|
+
if (!result.nextCursor) break;
|
|
88
|
+
cursor = result.nextCursor;
|
|
89
|
+
}
|
|
90
|
+
return items;
|
|
91
|
+
},
|
|
92
|
+
[api, vaultId, q, type, includeArchived],
|
|
93
|
+
);
|
|
94
|
+
const { data, loading, error, refresh } = usePolledValue(load, {
|
|
95
|
+
pollIntervalMs: options.pollIntervalMs,
|
|
96
|
+
enabled: options.enabled,
|
|
97
|
+
});
|
|
98
|
+
return { items: data, loading, error, refresh, api };
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** One item with its fields' metadata (concealed values are never included). */
|
|
102
|
+
export function useVaultItem(
|
|
103
|
+
vaultId: string,
|
|
104
|
+
itemId: string,
|
|
105
|
+
options: UseVaultQueryOptions = {},
|
|
106
|
+
): QueryResult<{ item: VaultItem | null; api: VaultsApi }> {
|
|
107
|
+
const api = useVaultsApi(options);
|
|
108
|
+
const load = useCallback(
|
|
109
|
+
(signal?: AbortSignal) => api.getItem(vaultId, itemId, signal),
|
|
110
|
+
[api, vaultId, itemId],
|
|
111
|
+
);
|
|
112
|
+
const { data, loading, error, refresh } = usePolledValue(load, {
|
|
113
|
+
pollIntervalMs: options.pollIntervalMs,
|
|
114
|
+
enabled: options.enabled,
|
|
115
|
+
});
|
|
116
|
+
return { item: data, loading, error, refresh, api };
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** A field's version history (metadata only). */
|
|
120
|
+
export function useVaultFieldVersions(
|
|
121
|
+
vaultId: string,
|
|
122
|
+
itemId: string,
|
|
123
|
+
fieldId: string,
|
|
124
|
+
options: UseVaultQueryOptions = {},
|
|
125
|
+
): QueryResult<{ versions: VaultFieldVersionMeta[] | null }> {
|
|
126
|
+
const api = useVaultsApi(options);
|
|
127
|
+
const load = useCallback(
|
|
128
|
+
(signal?: AbortSignal) => api.listFieldVersions(vaultId, itemId, fieldId, signal),
|
|
129
|
+
[api, vaultId, itemId, fieldId],
|
|
130
|
+
);
|
|
131
|
+
const { data, loading, error, refresh } = usePolledValue(load, {
|
|
132
|
+
pollIntervalMs: options.pollIntervalMs,
|
|
133
|
+
enabled: options.enabled,
|
|
134
|
+
});
|
|
135
|
+
return { versions: data, loading, error, refresh };
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/** A session's secrets view: policy, reachable vaults and its task vault. */
|
|
139
|
+
export function useSessionSecrets(
|
|
140
|
+
sessionId: string | null | undefined,
|
|
141
|
+
options: UseVaultQueryOptions = {},
|
|
142
|
+
): QueryResult<{ secrets: SessionSecretsView | null; api: VaultsApi }> {
|
|
143
|
+
const api = useVaultsApi(options);
|
|
144
|
+
const load = useCallback(
|
|
145
|
+
(signal?: AbortSignal) => api.getSessionSecrets(sessionId ?? "", signal),
|
|
146
|
+
[api, sessionId],
|
|
147
|
+
);
|
|
148
|
+
const { data, loading, error, refresh } = usePolledValue(load, {
|
|
149
|
+
pollIntervalMs: options.pollIntervalMs,
|
|
150
|
+
enabled: (options.enabled ?? true) && !!sessionId,
|
|
151
|
+
});
|
|
152
|
+
return { secrets: data, loading, error, refresh, api };
|
|
153
|
+
}
|
|
@@ -15,7 +15,7 @@ export function useVideoArtifactPlaybackLoader(
|
|
|
15
15
|
return useMemo(
|
|
16
16
|
() => async (artifactId: string, signal?: AbortSignal) => {
|
|
17
17
|
if (typeof client.createVideoArtifactPlaybackSource !== "function") {
|
|
18
|
-
throw new Error("This
|
|
18
|
+
throw new Error("This Opengeni host does not expose retained-video playback.");
|
|
19
19
|
}
|
|
20
20
|
return await client.createVideoArtifactPlaybackSource(
|
|
21
21
|
workspaceId,
|