@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,529 @@
|
|
|
1
|
+
import { type CSSProperties, type RefObject, useLayoutEffect, useEffect, useState } from "react";
|
|
2
|
+
import { markClassicScrollbars } from "./scrollbars";
|
|
3
|
+
|
|
4
|
+
/* ----------------------------------------------------------------------------
|
|
5
|
+
Host theme
|
|
6
|
+
|
|
7
|
+
The embedded chat should look native in someone else's product with zero
|
|
8
|
+
styling. Two things decide that:
|
|
9
|
+
|
|
10
|
+
1. Light or dark follows the HOST, not the operating system. An explicit
|
|
11
|
+
`theme` prop wins; then the nearest `data-og-theme` / `.og-light`
|
|
12
|
+
ancestor; then the host's own signals on <html>/<body> (`class="dark"`,
|
|
13
|
+
`data-theme`, `data-mode`, `data-bs-theme`, ...); then the background
|
|
14
|
+
the chat actually sits on; then the host's explicit `color-scheme` (which
|
|
15
|
+
also colors an unpainted page canvas). A host whose page stays light while
|
|
16
|
+
the OS is dark gets a light chat.
|
|
17
|
+
|
|
18
|
+
2. Surfaces derive from the host background ("host" surface), so a navy app
|
|
19
|
+
gets navy-tinted cards instead of neutral grey boxes, and a white app gets
|
|
20
|
+
a white chat instead of a grey panel. Each surface is an opaque mix of the
|
|
21
|
+
host background and the theme's text color, so portalled menus that copy
|
|
22
|
+
the tokens stay opaque. A host that customizes the `--og-color-*` surface
|
|
23
|
+
tokens keeps them: blending only replaces the stock defaults, and only
|
|
24
|
+
when the background agrees with the resolved theme.
|
|
25
|
+
|
|
26
|
+
An embed root nested in another (the conversation inside OpenGeniChat)
|
|
27
|
+
inherits the enclosing root's resolution instead of resolving again.
|
|
28
|
+
-------------------------------------------------------------------------- */
|
|
29
|
+
|
|
30
|
+
/** Marks an embed root that resolves the host theme for its subtree. */
|
|
31
|
+
export const HOST_THEME_ROOT_ATTRIBUTE = "data-og-host-theme";
|
|
32
|
+
|
|
33
|
+
export type HostThemePreference = "auto" | "light" | "dark";
|
|
34
|
+
export type HostSurfacePreference = "host" | "theme";
|
|
35
|
+
export type ResolvedHostTheme = "light" | "dark";
|
|
36
|
+
|
|
37
|
+
const HOST_THEME_ATTRIBUTES = [
|
|
38
|
+
"data-theme",
|
|
39
|
+
"data-mode",
|
|
40
|
+
"data-color-mode",
|
|
41
|
+
"data-color-scheme",
|
|
42
|
+
"data-bs-theme",
|
|
43
|
+
"data-mantine-color-scheme",
|
|
44
|
+
] as const;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Stock literal color tokens as `[dark, light]`, mirroring `styles/tokens.css`
|
|
48
|
+
* (a test keeps them in sync). A different value inherited from the host means
|
|
49
|
+
* the host customized that token.
|
|
50
|
+
*/
|
|
51
|
+
export const STOCK_COLOR_TOKENS: Readonly<Record<string, readonly [string, string]>> = {
|
|
52
|
+
"--og-color-bg": ["#303030", "#f6f6f6"],
|
|
53
|
+
"--og-color-canvas": ["#202020", "#ffffff"],
|
|
54
|
+
"--og-color-surface-1": ["#333333", "#ffffff"],
|
|
55
|
+
"--og-color-surface-2": ["#383838", "#eeeeee"],
|
|
56
|
+
"--og-color-surface-3": ["#404040", "#e5e5e5"],
|
|
57
|
+
"--og-color-selection": ["#484848", "#e2e2e2"],
|
|
58
|
+
"--og-color-border": ["#454545", "#dedede"],
|
|
59
|
+
"--og-color-border-strong": ["#555555", "#bdbdbd"],
|
|
60
|
+
"--og-color-fg": ["#e6e6e6", "#242424"],
|
|
61
|
+
"--og-color-fg-label": ["#d4d4d4", "#3a3a3a"],
|
|
62
|
+
"--og-color-fg-muted": ["#b8b8b8", "#5f5f5f"],
|
|
63
|
+
"--og-color-fg-subtle": ["#a3a3a3", "#696969"],
|
|
64
|
+
"--og-color-accent": ["#c4c4c4", "#545454"],
|
|
65
|
+
"--og-color-accent-strong": ["#dcdcdc", "#383838"],
|
|
66
|
+
"--og-color-accent-deep": ["#d5d5d5", "#383838"],
|
|
67
|
+
"--og-color-accent-fg": ["#242424", "#ffffff"],
|
|
68
|
+
"--og-color-primary": ["#2b3432", "#ebf2f0"],
|
|
69
|
+
"--og-color-primary-fg": ["#eeeeee", "#292929"],
|
|
70
|
+
"--og-color-primary-border": ["#4e5e59", "#c4d5d0"],
|
|
71
|
+
"--og-color-switch-track": ["#454545", "#bdbdbd"],
|
|
72
|
+
"--og-color-switch-thumb": ["#a3a3a3", "#ffffff"],
|
|
73
|
+
"--og-color-status-queued": ["#a3a3a3", "#696969"],
|
|
74
|
+
"--og-color-status-running": ["#d5bd72", "#716122"],
|
|
75
|
+
"--og-color-status-idle": ["#83cbb0", "#237058"],
|
|
76
|
+
"--og-color-status-waiting": ["#e9ab77", "#8c5524"],
|
|
77
|
+
"--og-color-status-failed": ["oklch(0.77 0.12 22)", "oklch(0.5 0.19 22)"],
|
|
78
|
+
"--og-color-status-cancelled": ["#a3a3a3", "#696969"],
|
|
79
|
+
"--og-color-danger": ["oklch(0.76 0.13 22)", "oklch(0.52 0.2 22)"],
|
|
80
|
+
"--og-color-danger-fill": ["oklch(0.52 0.16 22)", "oklch(0.5 0.19 22)"],
|
|
81
|
+
"--og-color-danger-fg": ["#ffffff", "#ffffff"],
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const SURFACE_TOKENS = [
|
|
85
|
+
"--og-color-canvas",
|
|
86
|
+
"--og-color-bg",
|
|
87
|
+
"--og-color-surface-1",
|
|
88
|
+
"--og-color-surface-2",
|
|
89
|
+
] as const;
|
|
90
|
+
|
|
91
|
+
/** Percent of the theme's text color mixed into the host background. */
|
|
92
|
+
const SURFACE_MIX: Record<ResolvedHostTheme, Record<string, number>> = {
|
|
93
|
+
light: {
|
|
94
|
+
"--og-color-canvas": 0,
|
|
95
|
+
"--og-color-bg": 0,
|
|
96
|
+
"--og-color-surface-1": 0,
|
|
97
|
+
"--og-color-surface-2": 5,
|
|
98
|
+
"--og-color-surface-3": 8,
|
|
99
|
+
"--og-color-selection": 9,
|
|
100
|
+
"--og-color-border": 11,
|
|
101
|
+
"--og-color-border-strong": 24,
|
|
102
|
+
},
|
|
103
|
+
dark: {
|
|
104
|
+
"--og-color-canvas": 0,
|
|
105
|
+
"--og-color-bg": 0,
|
|
106
|
+
"--og-color-surface-1": 5,
|
|
107
|
+
"--og-color-surface-2": 8,
|
|
108
|
+
"--og-color-surface-3": 12,
|
|
109
|
+
"--og-color-selection": 15,
|
|
110
|
+
"--og-color-border": 14,
|
|
111
|
+
"--og-color-border-strong": 24,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Tokens derived from the surfaces (or theme-tuned shadows), redeclared on the
|
|
117
|
+
* root whenever its surfaces or theme are replaced inline: custom properties
|
|
118
|
+
* resolve `var()` where they are declared, so values computed on an ancestor
|
|
119
|
+
* would otherwise keep the ancestor's surfaces.
|
|
120
|
+
*/
|
|
121
|
+
const DERIVED_TOKENS: Record<ResolvedHostTheme, Record<string, string>> = {
|
|
122
|
+
light: {
|
|
123
|
+
"--og-session-chrome-surface":
|
|
124
|
+
"color-mix(in oklch, var(--og-color-surface-2) 88%, transparent)",
|
|
125
|
+
"--og-session-chrome-surface-open": "var(--og-color-surface-2)",
|
|
126
|
+
"--og-session-chrome-border": "color-mix(in oklch, var(--og-color-border) 90%, transparent)",
|
|
127
|
+
"--og-session-chrome-border-open": "var(--og-color-border)",
|
|
128
|
+
"--og-session-chrome-highlight": "var(--og-color-surface-3)",
|
|
129
|
+
"--og-session-chrome-row-hover":
|
|
130
|
+
"color-mix(in oklch, var(--og-color-surface-3) 70%, transparent)",
|
|
131
|
+
},
|
|
132
|
+
dark: {
|
|
133
|
+
"--og-session-chrome-surface":
|
|
134
|
+
"color-mix(in oklch, var(--og-color-surface-2) 82%, transparent)",
|
|
135
|
+
"--og-session-chrome-surface-open":
|
|
136
|
+
"color-mix(in oklch, var(--og-color-surface-2) 92%, transparent)",
|
|
137
|
+
"--og-session-chrome-border": "color-mix(in oklch, var(--og-color-border) 85%, transparent)",
|
|
138
|
+
"--og-session-chrome-border-open": "var(--og-color-border)",
|
|
139
|
+
"--og-session-chrome-highlight": "var(--og-color-surface-3)",
|
|
140
|
+
"--og-session-chrome-row-hover":
|
|
141
|
+
"color-mix(in oklch, var(--og-color-surface-3) 55%, transparent)",
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
/** The rest of the stock dark theme, for a dark root under a light ancestor. */
|
|
146
|
+
const DARK_RESET_EXTRA: Record<string, string> = {
|
|
147
|
+
"--og-color-hover": "color-mix(in srgb, var(--og-color-fg) 8%, transparent)",
|
|
148
|
+
"--og-color-accent-soft": "color-mix(in oklch, var(--og-color-accent) 16%, transparent)",
|
|
149
|
+
"--og-color-primary-hover":
|
|
150
|
+
"color-mix(in srgb, var(--og-color-primary) 85%, var(--og-color-primary-fg))",
|
|
151
|
+
"--og-color-diff-add-bg": "color-mix(in oklch, var(--og-color-status-idle) 14%, transparent)",
|
|
152
|
+
"--og-color-diff-del-bg": "color-mix(in oklch, var(--og-color-status-failed) 14%, transparent)",
|
|
153
|
+
"--og-shadow-sm": "0 1px 2px oklch(0 0 0 / 0.28)",
|
|
154
|
+
"--og-shadow-md": "0 2px 8px oklch(0 0 0 / 0.32), 0 1px 2px oklch(0 0 0 / 0.24)",
|
|
155
|
+
"--og-shadow-lg": "0 8px 28px oklch(0 0 0 / 0.42), 0 2px 8px oklch(0 0 0 / 0.28)",
|
|
156
|
+
"--og-shadow-glow": "0 0 24px color-mix(in oklch, var(--og-color-accent) 10%, transparent)",
|
|
157
|
+
"--og-glow-teal": "#79d9c125",
|
|
158
|
+
"--og-glow-peach": "#ffb78724",
|
|
159
|
+
"--og-glow-teal-quiet": "#79d9c115",
|
|
160
|
+
"--og-glow-peach-quiet": "#ffb78714",
|
|
161
|
+
"--og-session-chrome-highlight-ring": "color-mix(in oklch, var(--og-color-fg) 16%, transparent)",
|
|
162
|
+
"--og-session-chrome-shadow": "0 6px 22px -14px oklch(0 0 0 / 0.42)",
|
|
163
|
+
"--og-session-chrome-shadow-open": "0 10px 28px -16px oklch(0 0 0 / 0.5)",
|
|
164
|
+
"--_og-color-scheme": "dark",
|
|
165
|
+
colorScheme: "dark",
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
/** Neutral tokens are designed for one theme; brand/status tokens travel. */
|
|
169
|
+
const NEUTRAL_TOKEN =
|
|
170
|
+
/^--og-color-(bg|canvas|surface-\d|selection|border(-strong)?|fg(-\w+)?|switch-\w+)$/;
|
|
171
|
+
|
|
172
|
+
type Rgba = { r: number; g: number; b: number; a: number };
|
|
173
|
+
|
|
174
|
+
/** Parse the `rgb()/rgba()` strings that `getComputedStyle` returns. */
|
|
175
|
+
export function parseComputedColor(value: string | null | undefined): Rgba | null {
|
|
176
|
+
if (!value) return null;
|
|
177
|
+
const match =
|
|
178
|
+
/^rgba?\(\s*([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)(?:\s*[,/]\s*([\d.]+%?))?\s*\)$/i.exec(
|
|
179
|
+
value.trim(),
|
|
180
|
+
);
|
|
181
|
+
if (!match) return null;
|
|
182
|
+
const alphaText = match[4];
|
|
183
|
+
const alpha =
|
|
184
|
+
alphaText === undefined
|
|
185
|
+
? 1
|
|
186
|
+
: alphaText.endsWith("%")
|
|
187
|
+
? Number(alphaText.slice(0, -1)) / 100
|
|
188
|
+
: Number(alphaText);
|
|
189
|
+
return { r: Number(match[1]), g: Number(match[2]), b: Number(match[3]), a: alpha };
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/** WCAG relative luminance, 0 (black) to 1 (white). */
|
|
193
|
+
export function relativeLuminance({ r, g, b }: Pick<Rgba, "r" | "g" | "b">): number {
|
|
194
|
+
const channel = (value: number) => {
|
|
195
|
+
const srgb = value / 255;
|
|
196
|
+
return srgb <= 0.03928 ? srgb / 12.92 : ((srgb + 0.055) / 1.055) ** 2.4;
|
|
197
|
+
};
|
|
198
|
+
return 0.2126 * channel(r) + 0.7152 * channel(g) + 0.0722 * channel(b);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/** Parse a `#rgb`/`#rrggbb` or `rgb()` token value; null for anything else. */
|
|
202
|
+
export function parseTokenColor(value: string): Rgba | null {
|
|
203
|
+
const text = value.trim();
|
|
204
|
+
const hex = /^#([\da-f]{3}|[\da-f]{6})$/i.exec(text)?.[1];
|
|
205
|
+
if (hex) {
|
|
206
|
+
const full = hex.length === 3 ? [...hex].map((digit) => digit + digit).join("") : hex;
|
|
207
|
+
return {
|
|
208
|
+
r: parseInt(full.slice(0, 2), 16),
|
|
209
|
+
g: parseInt(full.slice(2, 4), 16),
|
|
210
|
+
b: parseInt(full.slice(4, 6), 16),
|
|
211
|
+
a: 1,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
return parseComputedColor(text);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const STOCK_LIGHT_TEXT = relativeLuminance({ r: 0x24, g: 0x24, b: 0x24 });
|
|
218
|
+
const STOCK_DARK_TEXT = relativeLuminance({ r: 0xe6, g: 0xe6, b: 0xe6 });
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* The theme whose text reads better on this background: dark when the stock
|
|
222
|
+
* light text has the higher contrast ratio. Mid-tone and saturated brand
|
|
223
|
+
* backgrounds land on whichever text actually stays legible.
|
|
224
|
+
*/
|
|
225
|
+
export function themeForBackground(color: Pick<Rgba, "r" | "g" | "b">): ResolvedHostTheme {
|
|
226
|
+
const background = relativeLuminance(color);
|
|
227
|
+
const contrast = (a: number, b: number) => (Math.max(a, b) + 0.05) / (Math.min(a, b) + 0.05);
|
|
228
|
+
return contrast(STOCK_DARK_TEXT, background) > contrast(STOCK_LIGHT_TEXT, background)
|
|
229
|
+
? "dark"
|
|
230
|
+
: "light";
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
function themeWord(value: string | null | undefined): ResolvedHostTheme | null {
|
|
234
|
+
if (!value) return null;
|
|
235
|
+
const words = value.toLowerCase().split(/[\s_-]+/);
|
|
236
|
+
if (words.includes("dark")) return "dark";
|
|
237
|
+
if (words.includes("light")) return "light";
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
function classTheme(element: Element | null): ResolvedHostTheme | null {
|
|
242
|
+
if (!element) return null;
|
|
243
|
+
const classes = element.classList;
|
|
244
|
+
if (classes.contains("dark") || classes.contains("theme-dark") || classes.contains("dark-mode"))
|
|
245
|
+
return "dark";
|
|
246
|
+
if (
|
|
247
|
+
classes.contains("light") ||
|
|
248
|
+
classes.contains("theme-light") ||
|
|
249
|
+
classes.contains("light-mode")
|
|
250
|
+
)
|
|
251
|
+
return "light";
|
|
252
|
+
for (const attribute of HOST_THEME_ATTRIBUTES) {
|
|
253
|
+
const theme = themeWord(element.getAttribute(attribute));
|
|
254
|
+
if (theme) return theme;
|
|
255
|
+
}
|
|
256
|
+
return null;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
function colorSchemeTheme(element: Element): ResolvedHostTheme | null {
|
|
260
|
+
const scheme = getComputedStyle(element).colorScheme?.toLowerCase() ?? "";
|
|
261
|
+
const words = scheme.split(/\s+/).filter((word) => word && word !== "only");
|
|
262
|
+
// `light dark` only says the page supports both; the background decides.
|
|
263
|
+
if (words.length === 1 && (words[0] === "dark" || words[0] === "light")) return words[0];
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* The first opaque background the element sits on (its ancestors only), or
|
|
269
|
+
* null when the page paints none of its own and the browser canvas shows.
|
|
270
|
+
*/
|
|
271
|
+
export function hostBackground(element: Element): Rgba | null {
|
|
272
|
+
let current: Element | null = element.parentElement;
|
|
273
|
+
while (current) {
|
|
274
|
+
const color = parseComputedColor(getComputedStyle(current).backgroundColor);
|
|
275
|
+
if (color && color.a >= 0.5) return color;
|
|
276
|
+
current = current.parentElement;
|
|
277
|
+
}
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Resolve light or dark for an embedded root from its host page. Pure DOM
|
|
283
|
+
* reads; never consults `prefers-color-scheme` on its own.
|
|
284
|
+
*/
|
|
285
|
+
export function resolveHostTheme(element: Element): ResolvedHostTheme {
|
|
286
|
+
const parent = element.parentElement;
|
|
287
|
+
const tagged = parent?.closest("[data-og-theme], .og-light");
|
|
288
|
+
if (tagged) {
|
|
289
|
+
if (tagged.classList.contains("og-light")) return "light";
|
|
290
|
+
return tagged.getAttribute("data-og-theme") === "light" ? "light" : "dark";
|
|
291
|
+
}
|
|
292
|
+
const document = element.ownerDocument;
|
|
293
|
+
const signalled = classTheme(document.documentElement) ?? classTheme(document.body);
|
|
294
|
+
if (signalled) return signalled;
|
|
295
|
+
// What the chat actually sits on is the strongest remaining signal. A
|
|
296
|
+
// color-scheme alone can come from a stylesheet (including our own
|
|
297
|
+
// tokens.css on :root) without the page being painted that way.
|
|
298
|
+
const background = hostBackground(element);
|
|
299
|
+
if (background) return themeForBackground(background);
|
|
300
|
+
// No host paint: the browser canvas shows, colored by the root scheme.
|
|
301
|
+
const scheme =
|
|
302
|
+
(parent ? colorSchemeTheme(parent) : null) ?? colorSchemeTheme(document.documentElement);
|
|
303
|
+
if (scheme) return scheme;
|
|
304
|
+
// A page that supports both schemes follows the OS on its canvas.
|
|
305
|
+
const rootScheme = getComputedStyle(document.documentElement).colorScheme ?? "";
|
|
306
|
+
if (/\bdark\b/.test(rootScheme) && /\blight\b/.test(rootScheme)) {
|
|
307
|
+
return document.defaultView?.matchMedia?.("(prefers-color-scheme: dark)").matches
|
|
308
|
+
? "dark"
|
|
309
|
+
: "light";
|
|
310
|
+
}
|
|
311
|
+
return "light";
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Canonical text for comparing a token value with the stock one. The
|
|
316
|
+
* published `compiled.css` is minified (`#333`, `oklch(.52 .16 22)`), so the
|
|
317
|
+
* same color must compare equal in short and long form; otherwise every stock
|
|
318
|
+
* token reads as a host customization and dark values leak into light themes.
|
|
319
|
+
*/
|
|
320
|
+
export function normalizeToken(value: string): string {
|
|
321
|
+
return value
|
|
322
|
+
.trim()
|
|
323
|
+
.toLowerCase()
|
|
324
|
+
.replace(/\s+/g, " ")
|
|
325
|
+
.replace(/#([\da-f])([\da-f])([\da-f])(?![\da-f])/g, "#$1$1$2$2$3$3")
|
|
326
|
+
.replace(/(^|[\s(,/])0+(\.\d)/g, "$1$2")
|
|
327
|
+
.replace(/(\.\d*?)0+(?=[\s),/%]|$)/g, "$1")
|
|
328
|
+
.replace(/\.(?=[\s),/%]|$)/g, "");
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Tokens the host customized on an ancestor, by value. Setting our own
|
|
333
|
+
* `data-og-theme` would otherwise reset them to the theme's stock values.
|
|
334
|
+
*/
|
|
335
|
+
export function hostTokenOverrides(element: Element): Record<`--${string}`, string> {
|
|
336
|
+
const parent = element.parentElement;
|
|
337
|
+
const overrides: Record<`--${string}`, string> = {};
|
|
338
|
+
if (!parent) return overrides;
|
|
339
|
+
const computed = getComputedStyle(parent);
|
|
340
|
+
for (const [token, stock] of Object.entries(STOCK_COLOR_TOKENS)) {
|
|
341
|
+
const value = computed.getPropertyValue(token);
|
|
342
|
+
if (!value.trim()) continue;
|
|
343
|
+
const normalized = normalizeToken(value);
|
|
344
|
+
if (!stock.some((candidate) => normalizeToken(candidate) === normalized)) {
|
|
345
|
+
overrides[token as `--${string}`] = value.trim();
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
return overrides;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/** Inline token overrides that blend the stock surfaces into the host background. */
|
|
352
|
+
export function hostSurfaceStyle(
|
|
353
|
+
theme: ResolvedHostTheme,
|
|
354
|
+
background: Pick<Rgba, "r" | "g" | "b"> | null,
|
|
355
|
+
): Record<`--${string}`, string> {
|
|
356
|
+
const base = background
|
|
357
|
+
? `rgb(${Math.round(background.r)} ${Math.round(background.g)} ${Math.round(background.b)})`
|
|
358
|
+
: "Canvas";
|
|
359
|
+
const style: Record<`--${string}`, string> = {};
|
|
360
|
+
for (const [token, percent] of Object.entries(SURFACE_MIX[theme])) {
|
|
361
|
+
style[token as `--${string}`] =
|
|
362
|
+
percent === 0 ? base : `color-mix(in srgb, var(--og-color-fg) ${percent}%, ${base})`;
|
|
363
|
+
}
|
|
364
|
+
return style;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
export type HostTheme = {
|
|
368
|
+
/** `data-og-theme` to set on the root, or undefined to inherit. */
|
|
369
|
+
attribute: ResolvedHostTheme | undefined;
|
|
370
|
+
theme: ResolvedHostTheme | undefined;
|
|
371
|
+
style: CSSProperties | undefined;
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
const useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
|
|
375
|
+
|
|
376
|
+
/** The theme a set of customized neutral tokens was designed for, if any. */
|
|
377
|
+
function designedTheme(overrides: Record<string, string>): ResolvedHostTheme | null {
|
|
378
|
+
for (const token of ["--og-color-fg", "--og-color-bg", "--og-color-canvas"] as const) {
|
|
379
|
+
const value = overrides[token];
|
|
380
|
+
const color = value ? parseTokenColor(value) : null;
|
|
381
|
+
if (!color) continue;
|
|
382
|
+
const luminance = relativeLuminance(color);
|
|
383
|
+
// Text colors are dark on light themes; backgrounds the other way round.
|
|
384
|
+
const light = token === "--og-color-fg" ? luminance < 0.19 : luminance >= 0.19;
|
|
385
|
+
return light ? "light" : "dark";
|
|
386
|
+
}
|
|
387
|
+
return null;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/** Inline style and theme for one embed root. Pure; exported for tests. */
|
|
391
|
+
export function resolveHostThemeState(
|
|
392
|
+
element: Element,
|
|
393
|
+
preference: HostThemePreference,
|
|
394
|
+
surface: HostSurfacePreference,
|
|
395
|
+
): { theme: ResolvedHostTheme; inherited: boolean; style: Record<string, string> | null } {
|
|
396
|
+
const theme = preference === "auto" ? resolveHostTheme(element) : preference;
|
|
397
|
+
const tagged = element.parentElement?.closest("[data-og-theme], .og-light");
|
|
398
|
+
const inheritedTheme = tagged
|
|
399
|
+
? tagged.classList.contains("og-light") || tagged.getAttribute("data-og-theme") === "light"
|
|
400
|
+
? "light"
|
|
401
|
+
: "dark"
|
|
402
|
+
: // Untagged ancestors carry the stock dark defaults.
|
|
403
|
+
"dark";
|
|
404
|
+
const inherited = inheritedTheme === theme;
|
|
405
|
+
const overrides = hostTokenOverrides(element);
|
|
406
|
+
// Customized neutrals designed for the other theme would put dark text on a
|
|
407
|
+
// dark root (or light on light) once the theme flips; brand colors travel.
|
|
408
|
+
const designed = designedTheme(overrides);
|
|
409
|
+
const carried = Object.fromEntries(
|
|
410
|
+
Object.entries(overrides).filter(
|
|
411
|
+
([token]) => !NEUTRAL_TOKEN.test(token) || designed === null || designed === theme,
|
|
412
|
+
),
|
|
413
|
+
);
|
|
414
|
+
const surfacesCustomized = SURFACE_TOKENS.some((token) => token in carried);
|
|
415
|
+
const background = hostBackground(element);
|
|
416
|
+
// Blend only when the background agrees with the theme: light text on a
|
|
417
|
+
// white card (or the reverse) would be unreadable.
|
|
418
|
+
const blends =
|
|
419
|
+
surface === "host" &&
|
|
420
|
+
!surfacesCustomized &&
|
|
421
|
+
(background === null || themeForBackground(background) === theme);
|
|
422
|
+
const darkReset =
|
|
423
|
+
!inherited && theme === "dark"
|
|
424
|
+
? {
|
|
425
|
+
...Object.fromEntries(
|
|
426
|
+
Object.entries(STOCK_COLOR_TOKENS).map(([token, [dark]]) => [token, dark]),
|
|
427
|
+
),
|
|
428
|
+
...DARK_RESET_EXTRA,
|
|
429
|
+
}
|
|
430
|
+
: {};
|
|
431
|
+
const replacesSurfaces = blends || Object.keys(darkReset).length > 0;
|
|
432
|
+
const style: Record<string, string> = {
|
|
433
|
+
...darkReset,
|
|
434
|
+
...(blends ? hostSurfaceStyle(theme, background) : {}),
|
|
435
|
+
...(replacesSurfaces ? DERIVED_TOKENS[theme] : {}),
|
|
436
|
+
// Re-declaring the theme on this root would reset the host's own
|
|
437
|
+
// customizations; carry them over explicitly.
|
|
438
|
+
...(inherited ? {} : carried),
|
|
439
|
+
};
|
|
440
|
+
return { theme, inherited, style: Object.keys(style).length > 0 ? style : null };
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* Resolve and track the host theme for an embedded root. Re-resolves when the
|
|
445
|
+
* host flips `class`/`data-*`/`style` on <html>, <body> or an ancestor, and
|
|
446
|
+
* when the OS scheme changes (which only matters for hosts that follow it).
|
|
447
|
+
* A root nested inside another embed root inherits its resolution.
|
|
448
|
+
*/
|
|
449
|
+
export function useHostTheme(
|
|
450
|
+
ref: RefObject<HTMLElement | null>,
|
|
451
|
+
options: { theme?: HostThemePreference | undefined; surface?: HostSurfacePreference | undefined },
|
|
452
|
+
): HostTheme {
|
|
453
|
+
const preference = options.theme ?? "auto";
|
|
454
|
+
const surface = options.surface ?? "host";
|
|
455
|
+
const [state, setState] = useState<{
|
|
456
|
+
theme: ResolvedHostTheme | undefined;
|
|
457
|
+
inherited: boolean;
|
|
458
|
+
style: Record<string, string> | null;
|
|
459
|
+
}>({ theme: preference === "auto" ? undefined : preference, inherited: false, style: null });
|
|
460
|
+
|
|
461
|
+
useIsomorphicLayoutEffect(() => {
|
|
462
|
+
markClassicScrollbars(ref.current?.ownerDocument);
|
|
463
|
+
}, [ref]);
|
|
464
|
+
|
|
465
|
+
useIsomorphicLayoutEffect(() => {
|
|
466
|
+
const element = ref.current;
|
|
467
|
+
if (!element || typeof window === "undefined") return;
|
|
468
|
+
// The enclosing embed root resolves for this subtree; its attribute is
|
|
469
|
+
// rendered from the first commit, so there is no ordering race.
|
|
470
|
+
if (preference === "auto" && element.parentElement?.closest(`[${HOST_THEME_ROOT_ATTRIBUTE}]`)) {
|
|
471
|
+
setState((current) =>
|
|
472
|
+
current.inherited && current.style === null
|
|
473
|
+
? current
|
|
474
|
+
: { theme: undefined, inherited: true, style: null },
|
|
475
|
+
);
|
|
476
|
+
return;
|
|
477
|
+
}
|
|
478
|
+
let signature = "";
|
|
479
|
+
const sync = () => {
|
|
480
|
+
const next = resolveHostThemeState(element, preference, surface);
|
|
481
|
+
const nextSignature = JSON.stringify(next);
|
|
482
|
+
if (nextSignature === signature) return;
|
|
483
|
+
signature = nextSignature;
|
|
484
|
+
setState(next);
|
|
485
|
+
};
|
|
486
|
+
sync();
|
|
487
|
+
// Host mutations (resizable panels restyle every frame) coalesce per frame.
|
|
488
|
+
let frame: number | null = null;
|
|
489
|
+
const schedule = () => {
|
|
490
|
+
if (frame !== null) return;
|
|
491
|
+
frame = window.requestAnimationFrame(() => {
|
|
492
|
+
frame = null;
|
|
493
|
+
sync();
|
|
494
|
+
});
|
|
495
|
+
};
|
|
496
|
+
const document = element.ownerDocument;
|
|
497
|
+
const observers: MutationObserver[] = [];
|
|
498
|
+
if (typeof MutationObserver !== "undefined") {
|
|
499
|
+
const watched = new Set<Element>([document.documentElement]);
|
|
500
|
+
if (document.body) watched.add(document.body);
|
|
501
|
+
for (let ancestor = element.parentElement; ancestor; ancestor = ancestor.parentElement) {
|
|
502
|
+
watched.add(ancestor);
|
|
503
|
+
}
|
|
504
|
+
for (const target of watched) {
|
|
505
|
+
const observer = new MutationObserver(schedule);
|
|
506
|
+
observer.observe(target, {
|
|
507
|
+
attributes: true,
|
|
508
|
+
attributeFilter: ["class", "style", "data-og-theme", ...HOST_THEME_ATTRIBUTES],
|
|
509
|
+
});
|
|
510
|
+
observers.push(observer);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
const media = window.matchMedia?.("(prefers-color-scheme: dark)");
|
|
514
|
+
media?.addEventListener?.("change", schedule);
|
|
515
|
+
return () => {
|
|
516
|
+
if (frame !== null) window.cancelAnimationFrame(frame);
|
|
517
|
+
for (const observer of observers) observer.disconnect();
|
|
518
|
+
media?.removeEventListener?.("change", schedule);
|
|
519
|
+
};
|
|
520
|
+
}, [preference, ref, surface]);
|
|
521
|
+
|
|
522
|
+
return {
|
|
523
|
+
theme: state.theme,
|
|
524
|
+
// Re-declaring the inherited theme on this root would reset tokens that an
|
|
525
|
+
// enclosing embed root already blended or the host customized.
|
|
526
|
+
attribute: state.theme && !state.inherited ? state.theme : undefined,
|
|
527
|
+
style: state.style ? (state.style as CSSProperties) : undefined,
|
|
528
|
+
};
|
|
529
|
+
}
|
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
import { OpenGeniApiError } from "@opengeni/sdk";
|
|
2
|
+
import { interactionControlFailureFromError } from "@opengeni/sdk/interaction";
|
|
3
|
+
|
|
4
|
+
/** Media can remain live when the independent control service is unavailable.
|
|
5
|
+
* A target refusal or an uncertain mutation does not establish a service outage. */
|
|
6
|
+
export function isInteractionControlUnavailable(
|
|
7
|
+
error: unknown,
|
|
8
|
+
request: "control" | "observation" = "control",
|
|
9
|
+
): error is OpenGeniApiError {
|
|
10
|
+
if (!(error instanceof OpenGeniApiError)) return false;
|
|
11
|
+
const failure = interactionControlFailureFromError(error);
|
|
12
|
+
if (failure) return failure.code === "agent_offline" || failure.code === "draining";
|
|
13
|
+
return (
|
|
14
|
+
request === "control" && !error.outcomeUnknown && (error.status >= 500 || error.status === 0)
|
|
15
|
+
);
|
|
16
|
+
}
|
|
2
17
|
|
|
3
18
|
export function isNonRetryableInteractionError(error: unknown): error is OpenGeniApiError {
|
|
4
19
|
return error instanceof OpenGeniApiError && error.retryable === false;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/* ----------------------------------------------------------------------------
|
|
2
|
+
The one menu spec, SDK side. Mirrors `apps/web/src/components/ui/menu-styles.ts`
|
|
3
|
+
(and apps/web DESIGN.md "Menus and popovers") in `og-` token names so the
|
|
4
|
+
SDK's menus and pickers draw the same surface and rows as the web app's.
|
|
5
|
+
Change both together.
|
|
6
|
+
-------------------------------------------------------------------------- */
|
|
7
|
+
|
|
8
|
+
/** The panel: surface-1, 1px hairline, 16px radius, shadow-md, 6px inset. */
|
|
9
|
+
export const MENU_SURFACE_CLASS =
|
|
10
|
+
"rounded-2xl border border-og-border bg-og-surface-1 p-1.5 text-og-fg shadow-og-md";
|
|
11
|
+
|
|
12
|
+
/** One row: 32px (44px on coarse pointers), 10px radius, 16px muted icons, 14/400 label. */
|
|
13
|
+
export const MENU_ITEM_BASE_CLASS =
|
|
14
|
+
"relative flex min-h-8 w-full min-w-0 cursor-default items-center gap-2.5 rounded-og-md px-2.5 py-1.5 text-left text-og-menu font-normal text-og-fg outline-hidden select-none transition-colors duration-[120ms] pointer-coarse:min-h-11 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-og-fg-muted";
|
|
15
|
+
|
|
16
|
+
/** Radix menu items: hover and keyboard focus take the hover wash; disabled is 50%. */
|
|
17
|
+
export const MENU_ITEM_STATE_CLASS =
|
|
18
|
+
"focus:bg-og-hover data-[highlighted]:bg-og-hover data-[state=open]:bg-og-hover data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[variant=destructive]:text-og-danger data-[variant=destructive]:focus:bg-og-danger/10 data-[variant=destructive]:*:[svg]:text-og-danger!";
|
|
19
|
+
|
|
20
|
+
export const MENU_ITEM_CLASS = `${MENU_ITEM_BASE_CLASS} ${MENU_ITEM_STATE_CLASS}`;
|
|
21
|
+
|
|
22
|
+
/** The same row as a plain button inside a hand-built popover. */
|
|
23
|
+
export const MENU_BUTTON_STATE_CLASS =
|
|
24
|
+
"cursor-pointer hover:bg-og-hover focus-visible:bg-og-hover focus-visible:outline-2 focus-visible:-outline-offset-2! focus-visible:outline-og-accent/55 disabled:pointer-events-none disabled:opacity-50";
|
|
25
|
+
|
|
26
|
+
export const MENU_BUTTON_CLASS = `${MENU_ITEM_BASE_CLASS} ${MENU_BUTTON_STATE_CLASS}`;
|
|
27
|
+
|
|
28
|
+
/** A group heading inside a menu: 12/500 fg-muted, sentence case. */
|
|
29
|
+
export const MENU_LABEL_CLASS = "px-2.5 pt-2 pb-1 text-og-sm font-medium text-og-fg-muted";
|
|
30
|
+
|
|
31
|
+
/** The hairline between groups, inside the panel's 6px inset. */
|
|
32
|
+
export const MENU_SEPARATOR_CLASS = "my-1.5 h-px shrink-0 bg-og-border";
|
|
33
|
+
|
|
34
|
+
/** Right-side meta on a row (counts, the current value). */
|
|
35
|
+
export const MENU_META_CLASS = "ml-auto shrink-0 text-og-sm text-og-fg-muted tabular-nums";
|
|
36
|
+
|
|
37
|
+
/** The selected option's mark, always on the right. */
|
|
38
|
+
export const MENU_CHECK_CLASS = "size-4 shrink-0 text-og-fg";
|
|
39
|
+
|
|
40
|
+
/** "Opens a submenu" chevron on the right. */
|
|
41
|
+
export const MENU_CHEVRON_CLASS = "size-4 shrink-0 text-og-fg-muted";
|
|
42
|
+
|
|
43
|
+
/** A plain sentence inside a menu (empty, loading, unavailable). Never a box. */
|
|
44
|
+
export const MENU_NOTE_CLASS = "px-2.5 py-2 text-og-menu text-og-fg-muted";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Notifications cannot change the result of an already accepted operation. */
|
|
2
|
+
export function notifyObserver<Args extends unknown[]>(
|
|
3
|
+
observer: ((...args: Args) => unknown) | undefined,
|
|
4
|
+
...args: Args
|
|
5
|
+
): void {
|
|
6
|
+
const report = (cause: unknown) => globalThis.reportError?.(cause);
|
|
7
|
+
try {
|
|
8
|
+
const result = observer?.(...args);
|
|
9
|
+
if (result && typeof (result as PromiseLike<unknown>).then === "function") {
|
|
10
|
+
void Promise.resolve(result).catch(report);
|
|
11
|
+
}
|
|
12
|
+
} catch (cause) {
|
|
13
|
+
report(cause);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@pierre/diffs` is an optional heavy peer. The package never names it in an
|
|
3
|
+
* `import()` that the conversation surfaces can reach: bundlers such as
|
|
4
|
+
* Turbopack resolve every reachable dynamic import at build time, so a host
|
|
5
|
+
* without the peer would fail to build. Hosts that install it opt in once with
|
|
6
|
+
* `enablePierreDiffs()` from `@opengeni/react/diffs` (or register their own
|
|
7
|
+
* loader); otherwise diffs and file views use the plain-text renderer.
|
|
8
|
+
*/
|
|
9
|
+
export type PierreDiffsLoader = () => Promise<unknown>;
|
|
10
|
+
|
|
11
|
+
let loader: PierreDiffsLoader | null = null;
|
|
12
|
+
let loaded: Promise<unknown> | null = null;
|
|
13
|
+
let revision = 0;
|
|
14
|
+
const listeners = new Set<() => void>();
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Register (or clear with `null`) the loader for `@pierre/diffs/react`.
|
|
18
|
+
* Views already on screen retry with the new loader, so a host may register
|
|
19
|
+
* lazily (for example from the route that renders diffs).
|
|
20
|
+
*/
|
|
21
|
+
export function registerPierreDiffs(next: PierreDiffsLoader | null): void {
|
|
22
|
+
if (next === loader) return;
|
|
23
|
+
loader = next;
|
|
24
|
+
loaded = null;
|
|
25
|
+
revision += 1;
|
|
26
|
+
for (const listener of listeners) listener();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Changes whenever the registered loader changes (for `useSyncExternalStore`). */
|
|
30
|
+
export function pierreDiffsRevision(): number {
|
|
31
|
+
return revision;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function subscribePierreDiffs(listener: () => void): () => void {
|
|
35
|
+
listeners.add(listener);
|
|
36
|
+
return () => listeners.delete(listener);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Resolve the registered `@pierre/diffs/react` module; rejects when none is registered. */
|
|
40
|
+
export function loadPierreDiffs(): Promise<unknown> {
|
|
41
|
+
if (!loader) {
|
|
42
|
+
return Promise.reject(
|
|
43
|
+
new Error(
|
|
44
|
+
"@pierre/diffs is not enabled; call enablePierreDiffs() from @opengeni/react/diffs",
|
|
45
|
+
),
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
loaded ??= loader().catch((error: unknown) => {
|
|
49
|
+
loaded = null;
|
|
50
|
+
throw error;
|
|
51
|
+
});
|
|
52
|
+
return loaded;
|
|
53
|
+
}
|