@opengeni/react 3.3.2 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +769 -22
- package/dist/accounts.js +2 -0
- package/dist/accounts.js.map +1 -1
- package/dist/approvals.d.ts +2 -1
- package/dist/artifacts-document.js +5 -3
- package/dist/artifacts-presentation.js +5 -3
- package/dist/artifacts-spreadsheet.d.ts +1 -1
- package/dist/artifacts-spreadsheet.js +5 -3
- package/dist/artifacts.d.ts +5 -1
- package/dist/artifacts.js +536 -42
- package/dist/artifacts.js.map +1 -1
- package/dist/browser-viewer-ZWR6MWJ7.js +19 -0
- package/dist/capability-catalog-row.d.ts +20 -0
- package/dist/capability-logo-fallback.d.ts +3 -0
- package/dist/chat-interactive-block-4EUKJXUO.js +14 -0
- package/dist/chunk-2DDJ6YH6.js +41 -0
- package/dist/chunk-2DDJ6YH6.js.map +1 -0
- package/dist/chunk-2HVLQ26H.js +183 -0
- package/dist/chunk-2HVLQ26H.js.map +1 -0
- package/dist/{chunk-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,243 @@
|
|
|
1
|
+
import type { SessionEvent, SessionStatus } from "@opengeni/sdk";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Finite same-turn provider recovery, projected for people. Presentation only:
|
|
5
|
+
* the worker owns retry authority, pacing and the recovery budget. The worker
|
|
6
|
+
* (`apps/worker/src/activities/agent-turn/provider-recovery-copy.ts`) writes
|
|
7
|
+
* the same exhausted sentence into `turn.failed.error`; keep the two in step.
|
|
8
|
+
*/
|
|
9
|
+
export type ProviderRecoveryCondition =
|
|
10
|
+
| "overloaded"
|
|
11
|
+
| "unavailable"
|
|
12
|
+
| "unresponsive"
|
|
13
|
+
| "rate_limited";
|
|
14
|
+
|
|
15
|
+
export type ProviderRecoveryFacts = {
|
|
16
|
+
/** Recorded worker failure code (`provider_unavailable`, `mcp_transport_timeout`, ...). */
|
|
17
|
+
code: string;
|
|
18
|
+
condition: ProviderRecoveryCondition | null;
|
|
19
|
+
/** Display label of the affected model, when the route was recorded. */
|
|
20
|
+
modelLabel: string | null;
|
|
21
|
+
/** Display label of the serving provider, when the route was recorded. */
|
|
22
|
+
providerLabel: string | null;
|
|
23
|
+
/** Automatic retries scheduled (live) or spent (exhausted). */
|
|
24
|
+
attempt: number | null;
|
|
25
|
+
/** Finite automatic retry budget. */
|
|
26
|
+
maxAttempts: number | null;
|
|
27
|
+
/** True when the model route itself is affected, so another model may help. */
|
|
28
|
+
modelRoute: boolean;
|
|
29
|
+
/** True while the turn waits for its sandbox to be saved and replaced. It
|
|
30
|
+
* has no retry budget: it resumes as soon as the successor box is ready. */
|
|
31
|
+
sandboxWait?: boolean;
|
|
32
|
+
/** Recorded lifecycle fence of a sandbox wait (`capture_in_progress`,
|
|
33
|
+
* `rotation_in_progress`, `provider_recovery_in_progress`), when known. */
|
|
34
|
+
sandboxTransition?: string | null;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const MODEL_CODES: ReadonlySet<string> = new Set([
|
|
38
|
+
"provider_unavailable",
|
|
39
|
+
"provider_rate_limited",
|
|
40
|
+
"provider_unknown_finish_reason",
|
|
41
|
+
"post_compaction_continuation_empty",
|
|
42
|
+
]);
|
|
43
|
+
|
|
44
|
+
/** A recovering turn parked behind a sandbox lifecycle transition (worker
|
|
45
|
+
* `failure-settlement.ts`). Before, this showed only "Recovering" with no
|
|
46
|
+
* reason. A superseded lease
|
|
47
|
+
* counts only when the worker recorded the pending transition it waits for. */
|
|
48
|
+
const SANDBOX_WAIT_CODES: ReadonlySet<string> = new Set([
|
|
49
|
+
"sandbox_deadline_rotation",
|
|
50
|
+
"sandbox_lifecycle_transition",
|
|
51
|
+
"sandbox_lease_superseded",
|
|
52
|
+
]);
|
|
53
|
+
|
|
54
|
+
const RECOVERY_CODES: ReadonlySet<string> = new Set([
|
|
55
|
+
...MODEL_CODES,
|
|
56
|
+
...SANDBOX_WAIT_CODES,
|
|
57
|
+
"upstream_connectivity_unavailable",
|
|
58
|
+
"mcp_transport_timeout",
|
|
59
|
+
"mcp_transport_unavailable",
|
|
60
|
+
"sandbox_command_start_unavailable",
|
|
61
|
+
"retained_attachment_unavailable",
|
|
62
|
+
"turn_execution_policy_definition_mismatch",
|
|
63
|
+
]);
|
|
64
|
+
|
|
65
|
+
/** Matches the worker's default budget for legacy events that omit it. */
|
|
66
|
+
const DEFAULT_MAX_ATTEMPTS = 5;
|
|
67
|
+
|
|
68
|
+
function text(value: unknown, max = 120): string | null {
|
|
69
|
+
if (typeof value !== "string") return null;
|
|
70
|
+
const normalized = value.replace(/\s+/g, " ").trim();
|
|
71
|
+
return normalized ? normalized.slice(0, max) : null;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function count(value: unknown): number | null {
|
|
75
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : null;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function condition(
|
|
79
|
+
payload: Record<string, unknown>,
|
|
80
|
+
code: string,
|
|
81
|
+
): ProviderRecoveryCondition | null {
|
|
82
|
+
const recorded = payload.providerCondition;
|
|
83
|
+
if (
|
|
84
|
+
recorded === "overloaded" ||
|
|
85
|
+
recorded === "unavailable" ||
|
|
86
|
+
recorded === "unresponsive" ||
|
|
87
|
+
recorded === "rate_limited"
|
|
88
|
+
)
|
|
89
|
+
return recorded;
|
|
90
|
+
if (code === "provider_rate_limited") return "rate_limited";
|
|
91
|
+
if (code !== "provider_unavailable") return null;
|
|
92
|
+
// Older events predate the typed condition; their provider text still says so.
|
|
93
|
+
return [payload.lastRetryableError, payload.detail, payload.error].some(
|
|
94
|
+
(value) => typeof value === "string" && /\boverload(?:ed)?(?:_error)?\b/i.test(value),
|
|
95
|
+
)
|
|
96
|
+
? "overloaded"
|
|
97
|
+
: null;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Read a retryable `turn.recovery.requested` payload or an exhausted
|
|
102
|
+
* `turn.failed` payload. Returns null for every other recovery reason (human
|
|
103
|
+
* Retry, worker shutdown, credential rotation, capacity waits, ...).
|
|
104
|
+
*/
|
|
105
|
+
export function parseProviderRecovery(payload: unknown): ProviderRecoveryFacts | null {
|
|
106
|
+
if (!payload || typeof payload !== "object" || Array.isArray(payload)) return null;
|
|
107
|
+
const record = payload as Record<string, unknown>;
|
|
108
|
+
const code = text(record.code) ?? text(record.reason);
|
|
109
|
+
if (!code || !RECOVERY_CODES.has(code)) return null;
|
|
110
|
+
const rotation = text(record.rotationReason);
|
|
111
|
+
const transition = text(record.transitionReason);
|
|
112
|
+
if (code === "sandbox_lease_superseded" && !rotation && !transition) return null;
|
|
113
|
+
// A live recovery request is retryable; a spent budget is explicitly marked.
|
|
114
|
+
if (record.recoveryExhausted !== true && record.retryable === false) return null;
|
|
115
|
+
const attempt = count(record.providerRecoveryCount);
|
|
116
|
+
return {
|
|
117
|
+
code,
|
|
118
|
+
condition: condition(record, code),
|
|
119
|
+
modelLabel: text(record.modelLabel),
|
|
120
|
+
providerLabel: text(record.providerLabel),
|
|
121
|
+
attempt,
|
|
122
|
+
maxAttempts: count(record.maxProviderRecoveryCount) ?? DEFAULT_MAX_ATTEMPTS,
|
|
123
|
+
modelRoute: MODEL_CODES.has(code),
|
|
124
|
+
...(SANDBOX_WAIT_CODES.has(code)
|
|
125
|
+
? {
|
|
126
|
+
sandboxWait: true,
|
|
127
|
+
sandboxTransition: transition ?? (rotation ? "rotation_in_progress" : null),
|
|
128
|
+
}
|
|
129
|
+
: {}),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/** One present-tense clause naming what is unavailable, without a trailing period. */
|
|
134
|
+
export function providerRecoverySubject(facts: ProviderRecoveryFacts): string {
|
|
135
|
+
const model = facts.modelLabel ?? "The model";
|
|
136
|
+
const at = facts.providerLabel ? ` at the provider (${facts.providerLabel})` : " at the provider";
|
|
137
|
+
switch (facts.code) {
|
|
138
|
+
case "provider_rate_limited":
|
|
139
|
+
return `${model} is rate limited${at}`;
|
|
140
|
+
case "provider_unavailable":
|
|
141
|
+
return facts.condition === "overloaded"
|
|
142
|
+
? `${model} is overloaded${at}`
|
|
143
|
+
: facts.condition === "unresponsive"
|
|
144
|
+
? `${model} stopped responding${at}`
|
|
145
|
+
: `${model} is temporarily unavailable${at}`;
|
|
146
|
+
case "provider_unknown_finish_reason":
|
|
147
|
+
return `${model} ended its response unexpectedly`;
|
|
148
|
+
case "post_compaction_continuation_empty":
|
|
149
|
+
return `${model} stopped right after compacting the conversation`;
|
|
150
|
+
case "upstream_connectivity_unavailable":
|
|
151
|
+
return "Opengeni can't reach an upstream service";
|
|
152
|
+
case "mcp_transport_timeout":
|
|
153
|
+
return "A required MCP server isn't responding";
|
|
154
|
+
case "mcp_transport_unavailable":
|
|
155
|
+
return "A required MCP server is unreachable";
|
|
156
|
+
case "sandbox_command_start_unavailable":
|
|
157
|
+
return "The sandbox isn't ready yet";
|
|
158
|
+
case "retained_attachment_unavailable":
|
|
159
|
+
return "An image from earlier in this conversation can't be read from storage";
|
|
160
|
+
case "turn_execution_policy_definition_mismatch":
|
|
161
|
+
return "Opengeni is applying a configuration update";
|
|
162
|
+
case "sandbox_deadline_rotation":
|
|
163
|
+
return "The sandbox reached its maximum lifetime, so Opengeni is moving the workspace to a fresh sandbox";
|
|
164
|
+
case "sandbox_lifecycle_transition":
|
|
165
|
+
case "sandbox_lease_superseded":
|
|
166
|
+
return facts.sandboxTransition === "capture_in_progress"
|
|
167
|
+
? "Opengeni is saving the sandbox workspace"
|
|
168
|
+
: facts.sandboxTransition === "provider_recovery_in_progress"
|
|
169
|
+
? "Opengeni is recovering the sandbox"
|
|
170
|
+
: facts.sandboxTransition === "rotation_in_progress"
|
|
171
|
+
? "Opengeni is moving the workspace to a fresh sandbox"
|
|
172
|
+
: "Opengeni is preparing the sandbox";
|
|
173
|
+
default:
|
|
174
|
+
return "A service this turn depends on is temporarily unavailable";
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/** Live status while the same turn waits for its next automatic retry. */
|
|
179
|
+
export function providerRecoveryRetryingText(facts: ProviderRecoveryFacts): string {
|
|
180
|
+
if (facts.sandboxWait) return `${providerRecoverySubject(facts)}…`;
|
|
181
|
+
const progress =
|
|
182
|
+
facts.attempt !== null && facts.maxAttempts !== null
|
|
183
|
+
? ` (attempt ${Math.min(facts.attempt, facts.maxAttempts)} of ${facts.maxAttempts})`
|
|
184
|
+
: " automatically";
|
|
185
|
+
return `${providerRecoverySubject(facts)} — retrying${progress}…`;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/** Terminal sentence once the automatic budget is spent. */
|
|
189
|
+
export function providerRecoveryExhaustedText(facts: ProviderRecoveryFacts): string {
|
|
190
|
+
const spent = facts.attempt ?? facts.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;
|
|
191
|
+
const retried = `Opengeni retried ${spent} ${spent === 1 ? "time" : "times"} without success.`;
|
|
192
|
+
const remedy = facts.modelRoute
|
|
193
|
+
? "Try again in a few minutes, or switch to another model."
|
|
194
|
+
: "Try again in a few minutes.";
|
|
195
|
+
return `${providerRecoverySubject(facts)}. ${retried} ${remedy}`;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const BOUNDARY_TYPES: ReadonlySet<string> = new Set([
|
|
199
|
+
"turn.recovery.requested",
|
|
200
|
+
"turn.started",
|
|
201
|
+
"turn.completed",
|
|
202
|
+
"turn.failed",
|
|
203
|
+
"turn.cancelled",
|
|
204
|
+
"turn.superseded",
|
|
205
|
+
]);
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* The active turn's current automatic provider retry, or null. Only a
|
|
209
|
+
* `recovering`, unpaused session qualifies, and only the newest boundary of its
|
|
210
|
+
* exact active turn counts, so merged or replayed pages never borrow another
|
|
211
|
+
* turn's diagnosis.
|
|
212
|
+
*/
|
|
213
|
+
export function currentProviderRecovery(
|
|
214
|
+
session: {
|
|
215
|
+
id: string;
|
|
216
|
+
status: SessionStatus | null | undefined;
|
|
217
|
+
activeTurnId: string | null | undefined;
|
|
218
|
+
effectiveControl?: { state: string } | null | undefined;
|
|
219
|
+
},
|
|
220
|
+
events: readonly SessionEvent[],
|
|
221
|
+
): ProviderRecoveryFacts | null {
|
|
222
|
+
if (
|
|
223
|
+
session.status !== "recovering" ||
|
|
224
|
+
(session.effectiveControl && session.effectiveControl.state !== "active") ||
|
|
225
|
+
!session.activeTurnId
|
|
226
|
+
)
|
|
227
|
+
return null;
|
|
228
|
+
let latest: SessionEvent | undefined;
|
|
229
|
+
for (const event of events) {
|
|
230
|
+
if (
|
|
231
|
+
event.sessionId !== session.id ||
|
|
232
|
+
event.turnId !== session.activeTurnId ||
|
|
233
|
+
event.duplicateOfEventId ||
|
|
234
|
+
(event.turnAssociation && event.turnAssociation !== "current") ||
|
|
235
|
+
!BOUNDARY_TYPES.has(event.type)
|
|
236
|
+
)
|
|
237
|
+
continue;
|
|
238
|
+
if (!latest || event.sequence > latest.sequence) latest = event;
|
|
239
|
+
}
|
|
240
|
+
if (latest?.type !== "turn.recovery.requested") return null;
|
|
241
|
+
const payload = latest.payload as Record<string, unknown> | null | undefined;
|
|
242
|
+
return payload?.recoveryExhausted === true ? null : parseProviderRecovery(payload);
|
|
243
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a platform draws classic, always-visible scrollbars (Windows, and Linux
|
|
3
|
+
* or macOS when set to always show them), Chromium paints arrow buttons on the
|
|
4
|
+
* thin, colored scrollbars the stylesheet asks for with `scrollbar-width` and
|
|
5
|
+
* `scrollbar-color`. This marks such documents with
|
|
6
|
+
* `data-og-scrollbars="classic"` on <html> so the stylesheet can use a slim
|
|
7
|
+
* rounded thumb there instead. Overlay-scrollbar platforms keep their native
|
|
8
|
+
* scrollbars.
|
|
9
|
+
*/
|
|
10
|
+
export const CLASSIC_SCROLLBARS_ATTRIBUTE = "data-og-scrollbars";
|
|
11
|
+
|
|
12
|
+
const marked = new WeakSet<Document>();
|
|
13
|
+
|
|
14
|
+
export function markClassicScrollbars(doc: Document | undefined = globalThis.document): void {
|
|
15
|
+
if (!doc?.documentElement || marked.has(doc)) return;
|
|
16
|
+
marked.add(doc);
|
|
17
|
+
const root = doc.documentElement;
|
|
18
|
+
// Probe with the platform default: the page's own scrollbar styles must not
|
|
19
|
+
// decide what the platform draws.
|
|
20
|
+
root.removeAttribute(CLASSIC_SCROLLBARS_ATTRIBUTE);
|
|
21
|
+
const probe = doc.createElement("div");
|
|
22
|
+
probe.setAttribute("aria-hidden", "true");
|
|
23
|
+
probe.style.cssText =
|
|
24
|
+
"position:absolute;top:-9999px;left:-9999px;width:100px;height:100px;" +
|
|
25
|
+
"overflow:scroll;visibility:hidden;scrollbar-width:auto;scrollbar-color:auto";
|
|
26
|
+
root.append(probe);
|
|
27
|
+
const classic = probe.offsetWidth - probe.clientWidth > 0;
|
|
28
|
+
probe.remove();
|
|
29
|
+
if (classic) root.setAttribute(CLASSIC_SCROLLBARS_ATTRIBUTE, "classic");
|
|
30
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** Negotiated by the stock ttyd launcher, never inferred from ordinary output.
|
|
2
|
+
* The Bash Readline adapter emits this OSC only at its first input boundary.
|
|
3
|
+
* It is metadata (ignored by older xterm clients), not a prompt string. */
|
|
4
|
+
export const TERMINAL_INPUT_READY_PREFERENCE = "opengeniInputReady";
|
|
5
|
+
export const TERMINAL_INPUT_READY_PROTOCOL = "bash-readline-v1";
|
|
6
|
+
const PREFIX = "\x1b]777;opengeni-input;";
|
|
7
|
+
const FRAME = /^\x1b\]777;opengeni-input;(hello|ready);([a-f0-9]{32})\x07$/;
|
|
8
|
+
const MAX_FRAME = PREFIX.length + "hello;".length + 32 + 1;
|
|
9
|
+
|
|
10
|
+
/** One decoder per WebSocket/PTY generation. Retains at most a partial marker,
|
|
11
|
+
* rather than buffering terminal output while the shell initializes. */
|
|
12
|
+
export function terminalInputReadyDecoder() {
|
|
13
|
+
let pending = "";
|
|
14
|
+
let received = false;
|
|
15
|
+
let identity: string | null = null;
|
|
16
|
+
return (data: string): { output: string; ready: boolean } => {
|
|
17
|
+
let input = pending + data;
|
|
18
|
+
let output = "";
|
|
19
|
+
let ready = false;
|
|
20
|
+
pending = "";
|
|
21
|
+
while (input.length > 0) {
|
|
22
|
+
const marker = input.indexOf(PREFIX);
|
|
23
|
+
if (marker < 0) break;
|
|
24
|
+
output += input.slice(0, marker);
|
|
25
|
+
input = input.slice(marker);
|
|
26
|
+
const end = input.indexOf("\x07", PREFIX.length);
|
|
27
|
+
if (end < 0 && input.length < MAX_FRAME) {
|
|
28
|
+
pending = input;
|
|
29
|
+
return { output, ready };
|
|
30
|
+
}
|
|
31
|
+
const match = end >= 0 && end < MAX_FRAME ? FRAME.exec(input.slice(0, end + 1)) : null;
|
|
32
|
+
if (!match) {
|
|
33
|
+
// Malformed/overlong metadata is ordinary output, never an unbounded
|
|
34
|
+
// parser buffer or permission to deliver input.
|
|
35
|
+
output += input[0];
|
|
36
|
+
input = input.slice(1);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
input = input.slice(end + 1);
|
|
40
|
+
if (match[1] === "hello" && identity === null) identity = match[2]!;
|
|
41
|
+
if (match[1] === "ready" && match[2] === identity && !received) {
|
|
42
|
+
ready = true;
|
|
43
|
+
received = true;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
let suffix = Math.min(input.length, PREFIX.length - 1);
|
|
47
|
+
while (suffix > 0 && !PREFIX.startsWith(input.slice(-suffix))) suffix--;
|
|
48
|
+
pending = suffix > 0 ? input.slice(-suffix) : "";
|
|
49
|
+
return { output: output + (suffix > 0 ? input.slice(0, -suffix) : input), ready };
|
|
50
|
+
};
|
|
51
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { OpenGeniApiError } from "@opengeni/sdk";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* A deploy, failover or database restart makes the API answer 502/503/504 (or a
|
|
5
|
+
* retryable 500) for a few seconds, or drops the connection outright. Reads
|
|
6
|
+
* behind the new-chat composer retry those quietly before anything is shown;
|
|
7
|
+
* the person keeps typing and never sees a raw "service unavailable" line.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/** Backoff between attempts: about ten seconds in all before anything is shown. */
|
|
11
|
+
export const TRANSIENT_RETRY_DELAYS_MS: readonly number[] = [1_000, 2_000, 3_000, 4_000];
|
|
12
|
+
|
|
13
|
+
/** After the quiet retries give up, try once at this pace until Opengeni answers. */
|
|
14
|
+
export const TRANSIENT_RECONNECT_INTERVAL_MS = 3_000;
|
|
15
|
+
|
|
16
|
+
/** The one line shown while Opengeni is briefly unreachable. */
|
|
17
|
+
export const OPENGENI_UPDATING_NOTICE = "Opengeni is updating. We'll reconnect automatically.";
|
|
18
|
+
|
|
19
|
+
const NETWORK_FAILURE =
|
|
20
|
+
/failed to fetch|fetch failed|networkerror|load failed|network request failed/iu;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* True for a failure that says the service is briefly unreachable, not that
|
|
24
|
+
* the request was wrong: a gateway or availability status, a 500 the API marks
|
|
25
|
+
* retryable, or a request that never got a response.
|
|
26
|
+
*/
|
|
27
|
+
export function isTransientServiceFailure(error: unknown): boolean {
|
|
28
|
+
if (isAbort(error)) return false;
|
|
29
|
+
if (error instanceof OpenGeniApiError) {
|
|
30
|
+
if (error.status === 502 || error.status === 503 || error.status === 504) return true;
|
|
31
|
+
if (error.status === 500) return error.retryable;
|
|
32
|
+
// The SDK reports a mutation whose response never arrived as status 0.
|
|
33
|
+
return error.status === 0 && error.code === "network_error";
|
|
34
|
+
}
|
|
35
|
+
return error instanceof TypeError && NETWORK_FAILURE.test(error.message);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export type RetryTransientOptions = {
|
|
39
|
+
/** Stop waiting (and rethrow the last failure) once this returns false. */
|
|
40
|
+
shouldContinue?: () => boolean;
|
|
41
|
+
signal?: AbortSignal;
|
|
42
|
+
delaysMs?: readonly number[];
|
|
43
|
+
sleep?: (ms: number, signal?: AbortSignal) => Promise<void>;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Run a read, retrying only transient service failures with backoff. Never use
|
|
48
|
+
* this for a request whose repeat could apply twice: it is for reads and for
|
|
49
|
+
* writes that are idempotent by construction.
|
|
50
|
+
*/
|
|
51
|
+
export async function retryTransient<T>(
|
|
52
|
+
operation: () => Promise<T>,
|
|
53
|
+
options: RetryTransientOptions = {},
|
|
54
|
+
): Promise<T> {
|
|
55
|
+
const delays = options.delaysMs ?? TRANSIENT_RETRY_DELAYS_MS;
|
|
56
|
+
const sleep = options.sleep ?? abortableSleep;
|
|
57
|
+
for (let attempt = 0; ; attempt += 1) {
|
|
58
|
+
try {
|
|
59
|
+
return await operation();
|
|
60
|
+
} catch (error) {
|
|
61
|
+
const delay = delays[attempt];
|
|
62
|
+
if (
|
|
63
|
+
delay === undefined ||
|
|
64
|
+
!isTransientServiceFailure(error) ||
|
|
65
|
+
options.signal?.aborted ||
|
|
66
|
+
options.shouldContinue?.() === false
|
|
67
|
+
) {
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
await sleep(delay, options.signal);
|
|
71
|
+
if (options.signal?.aborted || options.shouldContinue?.() === false) throw error;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function abortableSleep(ms: number, signal?: AbortSignal): Promise<void> {
|
|
77
|
+
return new Promise((resolve) => {
|
|
78
|
+
if (signal?.aborted) {
|
|
79
|
+
resolve();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const done = () => {
|
|
83
|
+
clearTimeout(timer);
|
|
84
|
+
signal?.removeEventListener("abort", done);
|
|
85
|
+
resolve();
|
|
86
|
+
};
|
|
87
|
+
const timer = setTimeout(done, ms);
|
|
88
|
+
signal?.addEventListener("abort", done, { once: true });
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function isAbort(error: unknown): boolean {
|
|
93
|
+
return (
|
|
94
|
+
(typeof DOMException !== "undefined" &&
|
|
95
|
+
error instanceof DOMException &&
|
|
96
|
+
error.name === "AbortError") ||
|
|
97
|
+
(error instanceof Error && error.name === "AbortError")
|
|
98
|
+
);
|
|
99
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { DesktopRfbFactory } from "@opengeni/sdk";
|
|
2
|
+
|
|
3
|
+
/** Host-owned imports keep optional peers outside the root's bundler graph. */
|
|
4
|
+
export type WorkbenchPeerLoader<T = unknown> = () => Promise<T>;
|
|
5
|
+
export type CodeEditorLanguage = "javascript" | "json" | "python" | "markdown" | "css" | "html";
|
|
6
|
+
export type CodeEditorLanguages = Partial<Record<CodeEditorLanguage, WorkbenchPeerLoader>>;
|
|
7
|
+
export type CodeEditorPeers = { module: unknown; languages?: CodeEditorLanguages | undefined };
|
|
8
|
+
export type SandboxTerminalPeers = {
|
|
9
|
+
Terminal: unknown;
|
|
10
|
+
FitAddon: unknown;
|
|
11
|
+
WebLinksAddon: unknown;
|
|
12
|
+
loadWebgl?: WorkbenchPeerLoader | undefined;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
function optionalPeer<T>(setup: string) {
|
|
16
|
+
let loader: WorkbenchPeerLoader<T> | null = null;
|
|
17
|
+
let loaded: Promise<T> | null = null;
|
|
18
|
+
let version = 0;
|
|
19
|
+
const listeners = new Set<() => void>();
|
|
20
|
+
return {
|
|
21
|
+
register(next: WorkbenchPeerLoader<T> | null): void {
|
|
22
|
+
if (next === loader) return;
|
|
23
|
+
loader = next;
|
|
24
|
+
loaded = null;
|
|
25
|
+
version += 1;
|
|
26
|
+
for (const listener of listeners) listener();
|
|
27
|
+
},
|
|
28
|
+
revision: () => version,
|
|
29
|
+
subscribe(listener: () => void): () => void {
|
|
30
|
+
listeners.add(listener);
|
|
31
|
+
return () => listeners.delete(listener);
|
|
32
|
+
},
|
|
33
|
+
load(): Promise<T> {
|
|
34
|
+
if (!loader) return Promise.reject(new Error(`Call ${setup} to enable this surface`));
|
|
35
|
+
if (!loaded) {
|
|
36
|
+
// A synchronous host-loader failure is also a rejected, retryable load.
|
|
37
|
+
const pending = Promise.resolve()
|
|
38
|
+
.then(loader)
|
|
39
|
+
.catch((error: unknown) => {
|
|
40
|
+
if (loaded === pending) loaded = null;
|
|
41
|
+
throw error;
|
|
42
|
+
});
|
|
43
|
+
loaded = pending;
|
|
44
|
+
}
|
|
45
|
+
return loaded;
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export const sandboxTerminalPeers = optionalPeer<SandboxTerminalPeers>(
|
|
51
|
+
"enableSandboxTerminal() from @opengeni/react/terminal",
|
|
52
|
+
);
|
|
53
|
+
export const codeEditorPeers = optionalPeer<CodeEditorPeers>(
|
|
54
|
+
"enableCodeEditor() from @opengeni/react/editor",
|
|
55
|
+
);
|
|
56
|
+
export const desktopViewerPeers = optionalPeer<DesktopRfbFactory>(
|
|
57
|
+
"enableDesktopViewer() from @opengeni/react/desktop",
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
export const registerSandboxTerminal = sandboxTerminalPeers.register;
|
|
61
|
+
export const registerCodeEditor = codeEditorPeers.register;
|
|
62
|
+
export const registerDesktopViewer = desktopViewerPeers.register;
|
package/src/lib/xterm-theme.ts
CHANGED
|
@@ -24,11 +24,13 @@ export type TokenReader = (name: string) => string | undefined;
|
|
|
24
24
|
* The 16 ANSI colors + selection/cursor treatment, designed against the og
|
|
25
25
|
* OKLCH palette. Hues are borrowed from the og status ramp so terminal color
|
|
26
26
|
* reads as part of the same system: red≈status-failed(22), green≈status-idle
|
|
27
|
-
* (155), yellow≈status-running(80),
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
27
|
+
* (155), yellow≈status-running(80), magenta(305), cyan≈200. The ANSI blue and
|
|
28
|
+
* magenta slots stay chromatic because program output means them; the app
|
|
29
|
+
* chrome around the terminal is neutral. Dark uses lifted lightness on the
|
|
30
|
+
* dark neutral ground; light uses deeper, more saturated inks on the
|
|
31
|
+
* near-white ground. Bright variants add lightness + a touch of chroma.
|
|
32
|
+
* `black`/`white` and the selection are neutral grey ramp stops (never pure
|
|
33
|
+
* #000/#fff — that clashes with the calm neutral ground).
|
|
32
34
|
*/
|
|
33
35
|
export type AnsiPalette = {
|
|
34
36
|
black: string;
|
|
@@ -54,47 +56,47 @@ export type AnsiPalette = {
|
|
|
54
56
|
};
|
|
55
57
|
|
|
56
58
|
const DARK_ANSI: AnsiPalette = {
|
|
57
|
-
black: "oklch(0.3 0
|
|
59
|
+
black: "oklch(0.3 0 0)",
|
|
58
60
|
red: "oklch(0.68 0.17 22)",
|
|
59
61
|
green: "oklch(0.75 0.13 155)",
|
|
60
62
|
yellow: "oklch(0.8 0.11 80)",
|
|
61
63
|
blue: "oklch(0.7 0.14 255)",
|
|
62
64
|
magenta: "oklch(0.72 0.13 305)",
|
|
63
65
|
cyan: "oklch(0.75 0.1 210)",
|
|
64
|
-
white: "oklch(0.8 0
|
|
65
|
-
brightBlack: "oklch(0.45 0
|
|
66
|
+
white: "oklch(0.8 0 0)",
|
|
67
|
+
brightBlack: "oklch(0.45 0 0)",
|
|
66
68
|
brightRed: "oklch(0.76 0.17 22)",
|
|
67
69
|
brightGreen: "oklch(0.82 0.14 155)",
|
|
68
70
|
brightYellow: "oklch(0.86 0.12 85)",
|
|
69
71
|
brightBlue: "oklch(0.78 0.13 255)",
|
|
70
72
|
brightMagenta: "oklch(0.8 0.13 305)",
|
|
71
73
|
brightCyan: "oklch(0.83 0.1 200)",
|
|
72
|
-
brightWhite: "oklch(0.97 0
|
|
73
|
-
selectionBackground: "oklch(0.
|
|
74
|
-
selectionForeground: "oklch(0.985 0
|
|
75
|
-
selectionInactiveBackground: "oklch(0.72 0
|
|
74
|
+
brightWhite: "oklch(0.97 0 0)",
|
|
75
|
+
selectionBackground: "oklch(0.8 0 0 / 0.3)",
|
|
76
|
+
selectionForeground: "oklch(0.985 0 0)",
|
|
77
|
+
selectionInactiveBackground: "oklch(0.72 0 0 / 0.2)",
|
|
76
78
|
};
|
|
77
79
|
|
|
78
80
|
const LIGHT_ANSI: AnsiPalette = {
|
|
79
|
-
black: "oklch(0.35 0
|
|
81
|
+
black: "oklch(0.35 0 0)",
|
|
80
82
|
red: "oklch(0.52 0.19 22)",
|
|
81
83
|
green: "oklch(0.5 0.13 155)",
|
|
82
84
|
yellow: "oklch(0.56 0.13 80)",
|
|
83
85
|
blue: "oklch(0.52 0.18 255)",
|
|
84
86
|
magenta: "oklch(0.52 0.16 305)",
|
|
85
87
|
cyan: "oklch(0.52 0.1 210)",
|
|
86
|
-
white: "oklch(0.7 0
|
|
87
|
-
brightBlack: "oklch(0.5 0
|
|
88
|
+
white: "oklch(0.7 0 0)",
|
|
89
|
+
brightBlack: "oklch(0.5 0 0)",
|
|
88
90
|
brightRed: "oklch(0.55 0.2 22)",
|
|
89
91
|
brightGreen: "oklch(0.54 0.14 155)",
|
|
90
92
|
brightYellow: "oklch(0.6 0.14 80)",
|
|
91
93
|
brightBlue: "oklch(0.48 0.19 255)",
|
|
92
94
|
brightMagenta: "oklch(0.54 0.17 305)",
|
|
93
95
|
brightCyan: "oklch(0.54 0.11 210)",
|
|
94
|
-
brightWhite: "oklch(0.3 0
|
|
95
|
-
selectionBackground: "oklch(0.
|
|
96
|
-
selectionForeground: "oklch(0.21 0
|
|
97
|
-
selectionInactiveBackground: "oklch(0.6 0
|
|
96
|
+
brightWhite: "oklch(0.3 0 0)",
|
|
97
|
+
selectionBackground: "oklch(0.45 0 0 / 0.2)",
|
|
98
|
+
selectionForeground: "oklch(0.21 0 0)",
|
|
99
|
+
selectionInactiveBackground: "oklch(0.6 0 0 / 0.14)",
|
|
98
100
|
};
|
|
99
101
|
|
|
100
102
|
/** The designed ANSI-16 palette for a theme mode. Pure. */
|
|
@@ -110,8 +112,8 @@ export function ogAnsiPalette(mode: ThemeMode): AnsiPalette {
|
|
|
110
112
|
*/
|
|
111
113
|
export function buildXtermTheme(read: TokenReader, mode: ThemeMode): XtermTheme {
|
|
112
114
|
const ansi = ogAnsiPalette(mode);
|
|
113
|
-
const bgFallback = mode === "light" ? "
|
|
114
|
-
const fgFallback = mode === "light" ? "
|
|
115
|
+
const bgFallback = mode === "light" ? "#ffffff" : "#202020";
|
|
116
|
+
const fgFallback = mode === "light" ? "#242424" : "#e6e6e6";
|
|
115
117
|
const bg = read("--og-color-bg") ?? bgFallback;
|
|
116
118
|
const fg = read("--og-color-fg") ?? fgFallback;
|
|
117
119
|
const accent = read("--og-color-accent") ?? ansi.brightBlue;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { CapabilityCatalogItem, ConnectionMetadata } from "@opengeni/sdk";
|
|
2
|
+
|
|
3
|
+
/** Status only; runtime use is authorized for the authenticated initiating user. */
|
|
4
|
+
export function matchingActiveMcpConnections(
|
|
5
|
+
item: CapabilityCatalogItem,
|
|
6
|
+
connections: ConnectionMetadata[],
|
|
7
|
+
) {
|
|
8
|
+
return matchingMcpConnections(item, connections).filter((entry) => entry.status === "active");
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function matchingMcpConnections(item: CapabilityCatalogItem, connections: ConnectionMetadata[]) {
|
|
12
|
+
const ref = item.connectionRef;
|
|
13
|
+
if (!item.enabled || !ref) return [];
|
|
14
|
+
return connections.filter(
|
|
15
|
+
(entry) =>
|
|
16
|
+
entry.status !== "revoked" &&
|
|
17
|
+
entry.kind === "oauth2" &&
|
|
18
|
+
entry.metadata.mcpUrl === (item.mcpUrl ?? item.endpointUrl) &&
|
|
19
|
+
(ref.subjectScope !== "subject"
|
|
20
|
+
? entry.id === ref.connectionId && entry.subjectId === null
|
|
21
|
+
: entry.subjectId !== null),
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Installation availability is not account readiness. Revoked history is not actionable. */
|
|
26
|
+
export function mcpConnectionDiscoveryState(
|
|
27
|
+
item: CapabilityCatalogItem,
|
|
28
|
+
connections: ConnectionMetadata[],
|
|
29
|
+
) {
|
|
30
|
+
const matching = matchingMcpConnections(item, connections);
|
|
31
|
+
const active = matching.filter((entry) => entry.status === "active");
|
|
32
|
+
if (active.length === 1) return { status: "added", label: "Connected" } as const;
|
|
33
|
+
if (matching.length > 0) return { status: "attention", label: "Review connection" } as const;
|
|
34
|
+
return { status: "available", label: "Connect" } as const;
|
|
35
|
+
}
|