@opengeni/react 3.3.2-canary.1 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +769 -22
- package/dist/accounts.js +2 -0
- package/dist/accounts.js.map +1 -1
- package/dist/approvals.d.ts +2 -1
- package/dist/artifacts-document.js +5 -3
- package/dist/artifacts-presentation.js +5 -3
- package/dist/artifacts-spreadsheet.d.ts +1 -1
- package/dist/artifacts-spreadsheet.js +5 -3
- package/dist/artifacts.d.ts +5 -1
- package/dist/artifacts.js +536 -42
- package/dist/artifacts.js.map +1 -1
- package/dist/browser-viewer-ZWR6MWJ7.js +19 -0
- package/dist/capability-catalog-row.d.ts +20 -0
- package/dist/capability-logo-fallback.d.ts +3 -0
- package/dist/chat-interactive-block-4EUKJXUO.js +14 -0
- package/dist/chunk-2DDJ6YH6.js +41 -0
- package/dist/chunk-2DDJ6YH6.js.map +1 -0
- package/dist/chunk-2HVLQ26H.js +183 -0
- package/dist/chunk-2HVLQ26H.js.map +1 -0
- package/dist/{chunk-ZKNTK7IA.js → chunk-2I6R3GCZ.js} +4284 -3983
- package/dist/chunk-2I6R3GCZ.js.map +1 -0
- package/dist/{chunk-JAQ5K7W6.js → chunk-2SFFYIH3.js} +1178 -166
- package/dist/chunk-2SFFYIH3.js.map +1 -0
- package/dist/chunk-3PVDYTTB.js +24 -0
- package/dist/chunk-3PVDYTTB.js.map +1 -0
- package/dist/chunk-3RJKUVCA.js +14068 -0
- package/dist/chunk-3RJKUVCA.js.map +1 -0
- package/dist/chunk-3UZCWK46.js +298 -0
- package/dist/chunk-3UZCWK46.js.map +1 -0
- package/dist/chunk-47CKUXTW.js +293 -0
- package/dist/chunk-47CKUXTW.js.map +1 -0
- package/dist/chunk-4QYP6QUI.js +109 -0
- package/dist/chunk-4QYP6QUI.js.map +1 -0
- package/dist/chunk-5EY26VZ7.js +1053 -0
- package/dist/chunk-5EY26VZ7.js.map +1 -0
- package/dist/chunk-5I4VRWBB.js +56 -0
- package/dist/chunk-5I4VRWBB.js.map +1 -0
- package/dist/chunk-5WOR7UCL.js +191 -0
- package/dist/chunk-5WOR7UCL.js.map +1 -0
- package/dist/chunk-5YJLGOM5.js +51 -0
- package/dist/chunk-5YJLGOM5.js.map +1 -0
- package/dist/chunk-6JFN3OWG.js +386 -0
- package/dist/chunk-6JFN3OWG.js.map +1 -0
- package/dist/chunk-7QJT5O4S.js +35 -0
- package/dist/chunk-7QJT5O4S.js.map +1 -0
- package/dist/chunk-A55KV72M.js +402 -0
- package/dist/chunk-A55KV72M.js.map +1 -0
- package/dist/chunk-ADWCLI4G.js +2028 -0
- package/dist/chunk-ADWCLI4G.js.map +1 -0
- package/dist/chunk-B27E3V37.js +29 -0
- package/dist/chunk-B27E3V37.js.map +1 -0
- package/dist/chunk-B7TC2A33.js +83 -0
- package/dist/chunk-B7TC2A33.js.map +1 -0
- package/dist/chunk-BLL56F7R.js +385 -0
- package/dist/chunk-BLL56F7R.js.map +1 -0
- package/dist/chunk-BOFEQC6K.js +162 -0
- package/dist/chunk-BOFEQC6K.js.map +1 -0
- package/dist/chunk-CM7LVUKC.js +35 -0
- package/dist/chunk-CM7LVUKC.js.map +1 -0
- package/dist/chunk-CORUP6JB.js +122 -0
- package/dist/chunk-CORUP6JB.js.map +1 -0
- package/dist/chunk-CSX5FFKZ.js +35 -0
- package/dist/chunk-CSX5FFKZ.js.map +1 -0
- package/dist/chunk-EGVHJKGJ.js +3125 -0
- package/dist/chunk-EGVHJKGJ.js.map +1 -0
- package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
- package/dist/chunk-G76LSA76.js.map +1 -0
- package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
- package/dist/chunk-GQMRL52F.js.map +1 -0
- package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
- package/dist/chunk-GUUXOISA.js.map +1 -0
- package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
- package/dist/chunk-I7X2P4FU.js.map +1 -0
- package/dist/chunk-IGFZFLI2.js +1390 -0
- package/dist/chunk-IGFZFLI2.js.map +1 -0
- package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
- package/dist/chunk-IMSUVYQB.js.map +1 -0
- package/dist/chunk-IOYHDEP3.js +38 -0
- package/dist/chunk-IOYHDEP3.js.map +1 -0
- package/dist/chunk-IZV5FTJC.js +55 -0
- package/dist/chunk-IZV5FTJC.js.map +1 -0
- package/dist/chunk-KF33GTWN.js +343 -0
- package/dist/chunk-KF33GTWN.js.map +1 -0
- package/dist/chunk-KSGQ5ODA.js +457 -0
- package/dist/chunk-KSGQ5ODA.js.map +1 -0
- package/dist/{chunk-ZPBTI3TE.js → chunk-KZC6QRNR.js} +1513 -697
- package/dist/chunk-KZC6QRNR.js.map +1 -0
- package/dist/chunk-LJUMYUBO.js +218 -0
- package/dist/chunk-LJUMYUBO.js.map +1 -0
- package/dist/chunk-LSW2OJVV.js +380 -0
- package/dist/chunk-LSW2OJVV.js.map +1 -0
- package/dist/chunk-M357MHH3.js +2 -0
- package/dist/chunk-M357MHH3.js.map +1 -0
- package/dist/chunk-MK2TQO4Y.js +24 -0
- package/dist/chunk-MK2TQO4Y.js.map +1 -0
- package/dist/chunk-N7S72EXK.js +25 -0
- package/dist/chunk-N7S72EXK.js.map +1 -0
- package/dist/{chunk-YVCHAQZY.js → chunk-NKMYZFHA.js} +616 -621
- package/dist/chunk-NKMYZFHA.js.map +1 -0
- package/dist/chunk-NX4ADH73.js +14 -0
- package/dist/chunk-NX4ADH73.js.map +1 -0
- package/dist/chunk-O7F6UJO4.js +71 -0
- package/dist/chunk-O7F6UJO4.js.map +1 -0
- package/dist/chunk-OYQQJL3J.js +16 -0
- package/dist/chunk-OYQQJL3J.js.map +1 -0
- package/dist/{chunk-H5YGYNXS.js → chunk-P4BNUO57.js} +60 -17
- package/dist/chunk-P4BNUO57.js.map +1 -0
- package/dist/{chunk-JVYQRRC4.js → chunk-PEHTX3V7.js} +21 -1
- package/dist/chunk-PEHTX3V7.js.map +1 -0
- package/dist/chunk-PMV53IMM.js +26 -0
- package/dist/chunk-PMV53IMM.js.map +1 -0
- package/dist/{chunk-KCGXPP5V.js → chunk-PYEOPA4M.js} +13 -7
- package/dist/chunk-PYEOPA4M.js.map +1 -0
- package/dist/{chunk-KZ73RL76.js → chunk-QHUE7E4N.js} +8 -3
- package/dist/chunk-QHUE7E4N.js.map +1 -0
- package/dist/chunk-QV3DJVRZ.js +11 -0
- package/dist/chunk-QV3DJVRZ.js.map +1 -0
- package/dist/chunk-R5SBNG7S.js +810 -0
- package/dist/chunk-R5SBNG7S.js.map +1 -0
- package/dist/chunk-RI42H5IU.js +326 -0
- package/dist/chunk-RI42H5IU.js.map +1 -0
- package/dist/chunk-S2QH6EZ5.js +211 -0
- package/dist/chunk-S2QH6EZ5.js.map +1 -0
- package/dist/chunk-SHLZMAJN.js +304 -0
- package/dist/chunk-SHLZMAJN.js.map +1 -0
- package/dist/chunk-TGXK4BAZ.js +293 -0
- package/dist/chunk-TGXK4BAZ.js.map +1 -0
- package/dist/{chunk-5YK2ZDIG.js → chunk-TNEZNMSN.js} +4 -10
- package/dist/chunk-TNEZNMSN.js.map +1 -0
- package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
- package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
- package/dist/chunk-UNJPZGNK.js +63 -0
- package/dist/chunk-UNJPZGNK.js.map +1 -0
- package/dist/{chunk-IOLVN74D.js → chunk-V5ZUJT2T.js} +175 -42
- package/dist/chunk-V5ZUJT2T.js.map +1 -0
- package/dist/chunk-WBJY57A3.js +402 -0
- package/dist/chunk-WBJY57A3.js.map +1 -0
- package/dist/chunk-WIUKB3LD.js +1911 -0
- package/dist/chunk-WIUKB3LD.js.map +1 -0
- package/dist/{chunk-ICA6R6TW.js → chunk-WNN7NO2N.js} +1451 -355
- package/dist/chunk-WNN7NO2N.js.map +1 -0
- package/dist/{chunk-E5KISKFG.js → chunk-X5UVUIMF.js} +1709 -1184
- package/dist/chunk-X5UVUIMF.js.map +1 -0
- package/dist/chunk-XDA5QJE7.js +402 -0
- package/dist/chunk-XDA5QJE7.js.map +1 -0
- package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
- package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
- package/dist/chunk-XHF7OYAN.js +1150 -0
- package/dist/chunk-XHF7OYAN.js.map +1 -0
- package/dist/chunk-YSRBFJMQ.js +43 -0
- package/dist/chunk-YSRBFJMQ.js.map +1 -0
- package/dist/chunk-ZOZAPAUO.js +174 -0
- package/dist/chunk-ZOZAPAUO.js.map +1 -0
- package/dist/chunk-ZQV5W7YC.js +809 -0
- package/dist/chunk-ZQV5W7YC.js.map +1 -0
- package/dist/chunk-ZUWF4NF7.js +13 -0
- package/dist/chunk-ZUWF4NF7.js.map +1 -0
- package/dist/client.d.ts +16 -7
- package/dist/clipboard.js +3 -1
- package/dist/commands/types.d.ts +2 -0
- package/dist/components/anthropic-mark.d.ts +3 -0
- package/dist/components/approval-surface.d.ts +19 -6
- package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
- package/dist/components/artifacts/artifact-sandbox.d.ts +30 -0
- package/dist/components/artifacts/artifact-surface.d.ts +4 -2
- package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
- package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
- package/dist/components/artifacts/document-editor.d.ts +4 -2
- package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
- package/dist/components/artifacts/editable-artifact-view.d.ts +48 -0
- package/dist/components/artifacts/editable-document.d.ts +1 -1
- package/dist/components/artifacts/editable-presentation.d.ts +2 -2
- package/dist/components/artifacts/editable-spreadsheet.d.ts +8 -3
- package/dist/components/artifacts/index.d.ts +9 -2
- package/dist/components/artifacts/inline-html-document.d.ts +2 -0
- package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
- package/dist/components/artifacts/presentation-editor.d.ts +6 -2
- package/dist/components/artifacts/published-html-artifact-frame.d.ts +23 -3
- package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
- package/dist/components/artifacts/site-view.d.ts +26 -0
- package/dist/components/artifacts/spreadsheet-command-queue.d.ts +20 -0
- package/dist/components/artifacts/spreadsheet-download.d.ts +7 -0
- package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
- package/dist/components/artifacts/spreadsheet-grid.d.ts +10 -3
- package/dist/components/artifacts/spreadsheet-resize.d.ts +50 -0
- package/dist/components/artifacts/spreadsheet-submissions.d.ts +9 -0
- package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
- package/dist/components/browser-select-control.d.ts +16 -0
- package/dist/components/browser-viewer.d.ts +11 -2
- package/dist/components/chat-composer.d.ts +21 -3
- package/dist/components/child-session-link.d.ts +9 -0
- package/dist/components/claude-mark.d.ts +3 -0
- package/dist/components/code-editor.d.ts +1 -4
- package/dist/components/composer-transcription-control.d.ts +7 -0
- package/dist/components/composer.d.ts +34 -67
- package/dist/components/computer-viewer.d.ts +1 -1
- package/dist/components/copy-button.d.ts +3 -1
- package/dist/components/desktop-viewer.d.ts +1 -1
- package/dist/components/grok-mark.d.ts +26 -0
- package/dist/components/human-input-form.d.ts +28 -32
- package/dist/components/human-input-surface.d.ts +7 -2
- package/dist/components/linkified-text.d.ts +18 -0
- package/dist/components/machine-input-display.d.ts +22 -1
- package/dist/components/machines/agent-status-icon.d.ts +6 -0
- package/dist/components/machines/machine-detail.d.ts +7 -1
- package/dist/components/machines/machine-status.d.ts +48 -0
- package/dist/components/markdown-table-layout.d.ts +18 -0
- package/dist/components/markdown.d.ts +37 -4
- package/dist/components/message-timeline.d.ts +86 -7
- package/dist/components/model-mark.d.ts +29 -0
- package/dist/components/model-policy-picker-menu.d.ts +9 -0
- package/dist/components/model-policy-picker.d.ts +35 -28
- package/dist/components/new-conversation.d.ts +32 -0
- package/dist/components/open-geni-chat.d.ts +73 -0
- package/dist/components/open-geni-links.d.ts +68 -0
- package/dist/components/openrouter-mark.d.ts +6 -0
- package/dist/components/opper-mark.d.ts +7 -0
- package/dist/components/preview-loading.d.ts +2 -0
- package/dist/components/provider-recovery-notice.d.ts +16 -0
- package/dist/components/queue-item-content.d.ts +9 -0
- package/dist/components/rehype-secret-refs.d.ts +23 -0
- package/dist/components/remark-soft-line-breaks.d.ts +38 -0
- package/dist/components/sandbox-files.d.ts +3 -1
- package/dist/components/sandbox-workspace.d.ts +18 -0
- package/dist/components/secret-question-field.d.ts +31 -0
- package/dist/components/secret-ref-chip.d.ts +35 -0
- package/dist/components/session-capability-frame.d.ts +37 -0
- package/dist/components/session-chrome.d.ts +57 -8
- package/dist/components/session-commands-panel.d.ts +6 -0
- package/dist/components/session-commands.d.ts +6 -0
- package/dist/components/session-connection-request.d.ts +8 -0
- package/dist/components/session-conversation.d.ts +157 -0
- package/dist/components/session-list.d.ts +39 -0
- package/dist/components/session-mcp-capability-card.d.ts +41 -0
- package/dist/components/session-proxy-scope.d.ts +35 -0
- package/dist/components/session-status.d.ts +4 -1
- package/dist/components/session-usage-limit-notice.d.ts +39 -0
- package/dist/components/timeline-anchor.d.ts +24 -0
- package/dist/components/timeline-annotation-chrome.d.ts +25 -0
- package/dist/components/timeline-annotation-layout.d.ts +42 -0
- package/dist/components/timeline-annotation-markers.d.ts +8 -0
- package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
- package/dist/components/timeline-annotation-shared.d.ts +31 -0
- package/dist/components/timeline-annotations-dialog.d.ts +3 -2
- package/dist/components/timeline-annotations.d.ts +13 -3
- package/dist/components/timeline-reading-progress.d.ts +11 -0
- package/dist/components/timeline-search.d.ts +34 -0
- package/dist/components/timeline-settlement.d.ts +16 -0
- package/dist/components/tool-action-review.d.ts +47 -0
- package/dist/components/tool-review-history.d.ts +25 -0
- package/dist/components/usage-limit-notice.d.ts +49 -0
- package/dist/components/usage-member-list.d.ts +91 -0
- package/dist/components/usage-meter.d.ts +73 -0
- package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
- package/dist/components/user-message-body.d.ts +10 -1
- package/dist/composer-messages.d.ts +74 -0
- package/dist/composer-messages.js +9 -0
- package/dist/composer-messages.js.map +1 -0
- package/dist/composer-voice-events.d.ts +8 -0
- package/dist/composer.d.ts +5 -4
- package/dist/composer.js +26 -13
- package/dist/computer-viewer-GMLDXPON.js +20 -0
- package/dist/computer-viewer-GMLDXPON.js.map +1 -0
- package/dist/connect-account-identity.d.ts +8 -0
- package/dist/connect-accounts.d.ts +15 -0
- package/dist/connect-chooser.d.ts +18 -0
- package/dist/connect-panel.d.ts +18 -0
- package/dist/connect-setup.d.ts +18 -0
- package/dist/connect.d.ts +21 -0
- package/dist/connect.js +2149 -0
- package/dist/connect.js.map +1 -0
- package/dist/connection-catalog.d.ts +38 -0
- package/dist/connection-discovery.d.ts +12 -0
- package/dist/connection-installed.d.ts +17 -0
- package/dist/connection-logo.d.ts +9 -0
- package/dist/connection-service-logo.d.ts +8 -0
- package/dist/connection-service-presentation.d.ts +13 -0
- package/dist/connection-skeleton.d.ts +5 -0
- package/dist/connection-type-picker.d.ts +6 -0
- package/dist/conversation-timeline.d.ts +5 -0
- package/dist/desktop.d.ts +7 -0
- package/dist/desktop.js +27 -0
- package/dist/desktop.js.map +1 -0
- package/dist/device-authorization.d.ts +23 -0
- package/dist/diffs.d.ts +8 -0
- package/dist/diffs.js +15 -0
- package/dist/diffs.js.map +1 -0
- package/dist/discovery-cache.d.ts +5 -0
- package/dist/editor.d.ts +7 -0
- package/dist/editor.js +22 -0
- package/dist/editor.js.map +1 -0
- package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
- package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
- package/dist/embedded-voice-RPHPYVBT.js +18 -0
- package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
- package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
- package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
- package/dist/hooks/latest-question.d.ts +25 -0
- package/dist/hooks/shared-machines-list.d.ts +4 -0
- package/dist/hooks/shared-query.d.ts +113 -0
- package/dist/hooks/use-attached-browsers.d.ts +1 -1
- package/dist/hooks/use-auth-runs.d.ts +1 -4
- package/dist/hooks/use-available-models.d.ts +1 -1
- package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
- package/dist/hooks/use-browser-session.d.ts +12 -1
- package/dist/hooks/use-client-config-flags.d.ts +49 -0
- package/dist/hooks/use-codex-accounts.d.ts +59 -10
- package/dist/hooks/use-composer.d.ts +24 -2
- package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
- package/dist/hooks/use-computer-input-posture.d.ts +13 -0
- package/dist/hooks/use-computer-session.d.ts +4 -0
- package/dist/hooks/use-connect.d.ts +23 -0
- package/dist/hooks/use-desktop-stream.d.ts +1 -1
- package/dist/hooks/use-file-attachments.d.ts +10 -0
- package/dist/hooks/use-goal.d.ts +2 -1
- package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
- package/dist/hooks/use-new-conversation.d.ts +56 -0
- package/dist/hooks/use-new-session-draft.d.ts +74 -0
- package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
- package/dist/hooks/use-sandbox-files.d.ts +4 -1
- package/dist/hooks/use-session-conversation.d.ts +49 -0
- package/dist/hooks/use-session-events.d.ts +26 -5
- package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
- package/dist/hooks/use-session-model-account.d.ts +48 -0
- package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
- package/dist/hooks/use-terminal-stream.d.ts +11 -5
- package/dist/hooks/use-usage.d.ts +40 -0
- package/dist/hooks/use-vaults.d.ts +53 -0
- package/dist/hooks/use-voice-input.d.ts +8 -1
- package/dist/hooks/use-workspace-edit.d.ts +4 -0
- package/dist/hooks/use-workspace-sessions.d.ts +24 -5
- package/dist/human-input-model.d.ts +122 -0
- package/dist/identity-link-accounts.d.ts +11 -0
- package/dist/identity-link-consent.d.ts +18 -0
- package/dist/index.d.ts +82 -20
- package/dist/index.js +2340 -6603
- package/dist/index.js.map +1 -1
- package/dist/interaction.d.ts +1 -1
- package/dist/interaction.js +14 -24
- package/dist/interaction.js.map +1 -1
- package/dist/latest-question-R77KWSUP.js +118 -0
- package/dist/latest-question-R77KWSUP.js.map +1 -0
- package/dist/lib/clipboard.d.ts +7 -0
- package/dist/lib/error-message.d.ts +7 -0
- package/dist/lib/format.d.ts +58 -4
- package/dist/lib/host-theme.d.ts +77 -0
- package/dist/lib/interaction-errors.d.ts +3 -0
- package/dist/lib/menu-styles.d.ts +22 -0
- package/dist/lib/notify-observer.d.ts +2 -0
- package/dist/lib/pierre-diffs-loader.d.ts +20 -0
- package/dist/lib/provider-recovery.d.ts +55 -0
- package/dist/lib/scrollbars.d.ts +11 -0
- package/dist/lib/terminal-input-readiness.d.ts +11 -0
- package/dist/lib/transient-retry.d.ts +25 -0
- package/dist/lib/workbench-peers.d.ts +36 -0
- package/dist/lib/xterm-theme.d.ts +7 -5
- package/dist/machines.js +9 -5
- package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
- package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
- package/dist/mcp-connection-status.d.ts +14 -0
- package/dist/model-mark-paths.d.ts +34 -0
- package/dist/model-mark-paths.js +16 -0
- package/dist/model-mark-paths.js.map +1 -0
- package/dist/model-picker-model.d.ts +111 -0
- package/dist/model-picker-model.js +25 -0
- package/dist/model-picker-model.js.map +1 -0
- package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
- package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
- package/dist/model-policy.d.ts +28 -2
- package/dist/model-policy.js +14 -1
- package/dist/native-previews.d.ts +28 -0
- package/dist/native-previews.js +82 -0
- package/dist/native-previews.js.map +1 -0
- package/dist/new-session-draft.d.ts +7 -0
- package/dist/new-session-draft.js +639 -0
- package/dist/new-session-draft.js.map +1 -0
- package/dist/notification-text.d.ts +27 -0
- package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
- package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
- package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
- package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
- package/dist/older-history.d.ts +3 -2
- package/dist/organization-model.d.ts +32 -0
- package/dist/organization-model.js +65 -0
- package/dist/organization-model.js.map +1 -0
- package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
- package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
- package/dist/plugin-details.d.ts +14 -0
- package/dist/plugin-discovery.d.ts +25 -0
- package/dist/preview-loading-paint.d.ts +20 -0
- package/dist/provider.d.ts +25 -2
- package/dist/queue-presentation-model.d.ts +72 -0
- package/dist/queue-presentation-model.js +38 -0
- package/dist/queue-presentation-model.js.map +1 -0
- package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
- package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
- package/dist/realtime/embedded-new-voice.d.ts +1 -0
- package/dist/realtime/embedded-voice.d.ts +1 -0
- package/dist/realtime/realtime-control.d.ts +4 -65
- package/dist/realtime/session-realtime.d.ts +78 -0
- package/dist/realtime.js +25 -1333
- package/dist/realtime.js.map +1 -1
- package/dist/sandbox-files-O27IPOZW.js +21 -0
- package/dist/sandbox-files-O27IPOZW.js.map +1 -0
- package/dist/sandbox-label-model.d.ts +30 -0
- package/dist/sandbox-label-model.js +20 -0
- package/dist/sandbox-label-model.js.map +1 -0
- package/dist/scrollbars.d.ts +1 -0
- package/dist/scrollbars.js +10 -0
- package/dist/scrollbars.js.map +1 -0
- package/dist/secret-reference-label.d.ts +14 -0
- package/dist/secrets-ui.d.ts +57 -0
- package/dist/session-agents-model.d.ts +10 -0
- package/dist/session-agents-model.js +25 -0
- package/dist/session-agents-model.js.map +1 -0
- package/dist/session-attention-model.d.ts +8 -0
- package/dist/session-attention-model.js +47 -0
- package/dist/session-attention-model.js.map +1 -0
- package/dist/session-auth-recommendation.d.ts +5 -0
- package/dist/session-capability-policy.d.ts +31 -0
- package/dist/session-feedback-model.d.ts +20 -0
- package/dist/session-feedback-model.js +56 -0
- package/dist/session-feedback-model.js.map +1 -0
- package/dist/session-list-model.d.ts +138 -0
- package/dist/session-list-model.js +274 -0
- package/dist/session-list-model.js.map +1 -0
- package/dist/session-realtime-7DJOIHQW.js +21 -0
- package/dist/session-realtime-7DJOIHQW.js.map +1 -0
- package/dist/session-realtime.d.ts +7 -0
- package/dist/session-realtime.js +19 -0
- package/dist/session-realtime.js.map +1 -0
- package/dist/session-status-model.d.ts +36 -0
- package/dist/session-ui.d.ts +39 -1
- package/dist/session-ui.js +126 -12
- package/dist/session-ui.js.map +1 -1
- package/dist/session.d.ts +8 -2
- package/dist/session.js +35 -20
- package/dist/site-snapshot.d.ts +14 -0
- package/dist/sites-ui.d.ts +24 -0
- package/dist/sites.d.ts +3 -0
- package/dist/sites.js +14 -0
- package/dist/sites.js.map +1 -0
- package/dist/skill-discovery.d.ts +47 -0
- package/dist/terminal.d.ts +8 -0
- package/dist/terminal.js +32 -0
- package/dist/terminal.js.map +1 -0
- package/dist/testing/session-scenarios.d.ts +10 -0
- package/dist/testing/session-scenarios.js +367 -0
- package/dist/testing/session-scenarios.js.map +1 -0
- package/dist/timeline/activity-rail.d.ts +11 -2
- package/dist/timeline/agent-identity.d.ts +30 -0
- package/dist/timeline/agent-row.d.ts +31 -0
- package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
- package/dist/timeline/compaction-copy.d.ts +46 -0
- package/dist/timeline/focus-sequence.d.ts +9 -0
- package/dist/timeline/genie-copy.d.ts +3 -0
- package/dist/timeline/genie-loading.d.ts +47 -0
- package/dist/timeline/index.d.ts +10 -5
- package/dist/timeline/knowledge-receipt.d.ts +17 -0
- package/dist/timeline/message-sender.d.ts +19 -0
- package/dist/timeline/notice-presentation.d.ts +13 -0
- package/dist/timeline/parsers.d.ts +11 -0
- package/dist/timeline/patch-apply-command.d.ts +18 -0
- package/dist/timeline/platform-activity-presentation.d.ts +21 -0
- package/dist/timeline/platform-activity-row.d.ts +1 -2
- package/dist/timeline/presented-image.d.ts +11 -0
- package/dist/timeline/projection.d.ts +31 -2
- package/dist/timeline/provider-logo.d.ts +15 -0
- package/dist/timeline/question-nav-model.d.ts +23 -0
- package/dist/timeline/registry.d.ts +12 -1
- package/dist/timeline/retained-image.d.ts +18 -0
- package/dist/timeline/retained-loaders.d.ts +27 -0
- package/dist/timeline/rolling-activity.d.ts +11 -0
- package/dist/timeline/screenshot-lightbox.d.ts +23 -1
- package/dist/timeline/session-usage-limit-row.d.ts +11 -0
- package/dist/timeline/shared.d.ts +4 -1
- package/dist/timeline/startup-dispatch-details.d.ts +5 -0
- package/dist/timeline/startup-preference.d.ts +3 -0
- package/dist/timeline/startup-timings.d.ts +4 -0
- package/dist/timeline/tool-display-name.d.ts +5 -2
- package/dist/timeline/tool-presentation.d.ts +172 -0
- package/dist/timeline/turn-summary-model.d.ts +95 -0
- package/dist/timeline/turn-summary.d.ts +20 -54
- package/dist/timeline/types.d.ts +179 -7
- package/dist/timeline/work-presentation.d.ts +60 -0
- package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
- package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
- package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
- package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
- package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
- package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
- package/dist/timeline-model.d.ts +29 -0
- package/dist/timeline-model.js +254 -0
- package/dist/timeline-model.js.map +1 -0
- package/dist/usage/allowance-copy.d.ts +25 -0
- package/dist/usage/session-usage-limit.d.ts +88 -0
- package/dist/usage/summary.d.ts +35 -0
- package/dist/usage.d.ts +17 -0
- package/dist/usage.js +1187 -0
- package/dist/usage.js.map +1 -0
- package/dist/voice-recording-owner.d.ts +7 -0
- package/package.json +106 -7
- package/src/approvals.ts +8 -1
- package/src/artifacts-spreadsheet.ts +1 -0
- package/src/artifacts.ts +44 -0
- package/src/assets/README.md +8 -0
- package/src/assets/gmail.ico +0 -0
- package/src/assets/outlook.ico +0 -0
- package/src/capability-catalog-row.tsx +94 -0
- package/src/capability-logo-fallback.ts +22 -0
- package/src/client.ts +20 -31
- package/src/commands/registry.ts +18 -15
- package/src/commands/types.ts +2 -0
- package/src/components/anthropic-mark.tsx +10 -0
- package/src/components/approval-surface.tsx +401 -138
- package/src/components/artifacts/artifact-chrome.tsx +413 -0
- package/src/components/artifacts/artifact-sandbox.tsx +193 -0
- package/src/components/artifacts/artifact-surface.tsx +40 -20
- package/src/components/artifacts/chat-interactive-block.tsx +260 -0
- package/src/components/artifacts/deferred-chat-media.tsx +67 -0
- package/src/components/artifacts/document-editor.tsx +141 -16
- package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
- package/src/components/artifacts/editable-artifact-view.tsx +197 -0
- package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
- package/src/components/artifacts/editable-document.tsx +37 -36
- package/src/components/artifacts/editable-presentation.tsx +36 -18
- package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
- package/src/components/artifacts/index.ts +45 -0
- package/src/components/artifacts/inline-html-document.ts +24 -0
- package/src/components/artifacts/latest-task-runner.ts +49 -0
- package/src/components/artifacts/presentation-editor.tsx +323 -67
- package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
- package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
- package/src/components/artifacts/site-view.tsx +121 -0
- package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
- package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
- package/src/components/artifacts/spreadsheet-download.tsx +109 -0
- package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
- package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
- package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
- package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
- package/src/components/artifacts/visualization-assets/base.css +1015 -0
- package/src/components/artifacts/visualization-assets/helpers.html +349 -0
- package/src/components/artifacts/visualization-assets.gen.ts +3 -0
- package/src/components/browser-select-control.tsx +312 -0
- package/src/components/browser-viewer.tsx +778 -318
- package/src/components/chat-composer.tsx +47 -5
- package/src/components/child-session-link.tsx +36 -0
- package/src/components/claude-mark.tsx +11 -0
- package/src/components/code-editor.tsx +13 -16
- package/src/components/composer-transcription-control.tsx +128 -30
- package/src/components/composer.tsx +390 -191
- package/src/components/computer-viewer.tsx +880 -253
- package/src/components/copy-button.tsx +13 -5
- package/src/components/desktop-viewer.tsx +1 -1
- package/src/components/enrollment-consent.tsx +1 -1
- package/src/components/enrollment-device-flow.tsx +1 -1
- package/src/components/file-browser.tsx +10 -14
- package/src/components/fleet-tile.tsx +5 -3
- package/src/components/generated-video-player.tsx +4 -2
- package/src/components/grok-mark.tsx +34 -0
- package/src/components/human-input-form.tsx +590 -283
- package/src/components/human-input-surface.tsx +11 -0
- package/src/components/interaction-intervention-banner.tsx +2 -2
- package/src/components/linkified-text.tsx +79 -0
- package/src/components/machine-card.tsx +35 -78
- package/src/components/machine-dock-bar.tsx +1 -1
- package/src/components/machine-input-display.ts +197 -3
- package/src/components/machines/agent-status-icon.tsx +31 -0
- package/src/components/machines/machine-detail.tsx +200 -31
- package/src/components/machines/machine-operation-policy.tsx +1 -1
- package/src/components/machines/machine-status.ts +241 -0
- package/src/components/machines-dashboard.tsx +2 -17
- package/src/components/markdown-table-layout.ts +143 -0
- package/src/components/markdown.tsx +466 -129
- package/src/components/message-timeline.tsx +2370 -667
- package/src/components/model-mark.tsx +102 -0
- package/src/components/model-picker.tsx +15 -4
- package/src/components/model-policy-picker-menu.tsx +371 -0
- package/src/components/model-policy-picker.tsx +252 -454
- package/src/components/new-conversation.tsx +221 -0
- package/src/components/open-geni-chat.tsx +309 -0
- package/src/components/open-geni-links.tsx +179 -0
- package/src/components/openrouter-mark.tsx +13 -0
- package/src/components/opper-mark.tsx +18 -0
- package/src/components/pierre-diff.tsx +41 -16
- package/src/components/pierre-file.tsx +35 -10
- package/src/components/preview-loading.tsx +109 -0
- package/src/components/provider-recovery-notice.tsx +49 -0
- package/src/components/queue-item-content.ts +14 -0
- package/src/components/queue-surface-implementation.tsx +51 -356
- package/src/components/queue-surface-state.tsx +3 -1
- package/src/components/rehype-secret-refs.ts +98 -0
- package/src/components/remark-soft-line-breaks.ts +166 -0
- package/src/components/sandbox-files.tsx +91 -15
- package/src/components/sandbox-terminal.tsx +84 -13
- package/src/components/sandbox-workspace.tsx +147 -51
- package/src/components/secret-question-field.tsx +324 -0
- package/src/components/secret-ref-chip.tsx +185 -0
- package/src/components/session-capability-frame.tsx +197 -0
- package/src/components/session-chrome.tsx +842 -251
- package/src/components/session-commands-panel.tsx +126 -0
- package/src/components/session-commands.tsx +18 -0
- package/src/components/session-connection-request.tsx +97 -0
- package/src/components/session-conversation.tsx +876 -0
- package/src/components/session-list.tsx +257 -0
- package/src/components/session-mcp-capability-card.tsx +680 -0
- package/src/components/session-proxy-scope.tsx +153 -0
- package/src/components/session-status.tsx +26 -17
- package/src/components/session-usage-limit-notice.tsx +174 -0
- package/src/components/timeline-anchor.tsx +119 -0
- package/src/components/timeline-annotation-chrome.tsx +196 -0
- package/src/components/timeline-annotation-layout.ts +268 -0
- package/src/components/timeline-annotation-markers.tsx +185 -0
- package/src/components/timeline-annotation-reveal-context.ts +9 -0
- package/src/components/timeline-annotation-selection.tsx +106 -54
- package/src/components/timeline-annotation-shared.ts +245 -0
- package/src/components/timeline-annotations-dialog.tsx +185 -128
- package/src/components/timeline-annotations.tsx +189 -45
- package/src/components/timeline-reading-progress.ts +80 -0
- package/src/components/timeline-search.tsx +168 -0
- package/src/components/timeline-settlement.ts +60 -0
- package/src/components/tool-action-review.tsx +650 -0
- package/src/components/tool-review-history.tsx +88 -0
- package/src/components/usage-limit-notice.tsx +179 -0
- package/src/components/usage-member-list.tsx +792 -0
- package/src/components/usage-meter.tsx +382 -0
- package/src/components/use-viewer-menu-dismiss.ts +33 -0
- package/src/components/user-message-body.tsx +27 -2
- package/src/components/workspace-dock.tsx +18 -1
- package/src/composer-messages.ts +150 -0
- package/src/composer-voice-events.ts +12 -0
- package/src/composer.ts +6 -1
- package/src/connect-account-identity.tsx +34 -0
- package/src/connect-accounts.tsx +233 -0
- package/src/connect-chooser.tsx +336 -0
- package/src/connect-panel.tsx +99 -0
- package/src/connect-setup.tsx +355 -0
- package/src/connect.ts +60 -0
- package/src/connection-assets.d.ts +4 -0
- package/src/connection-catalog.tsx +162 -0
- package/src/connection-discovery.tsx +238 -0
- package/src/connection-installed.tsx +51 -0
- package/src/connection-logo.tsx +37 -0
- package/src/connection-service-logo.tsx +55 -0
- package/src/connection-service-presentation.ts +46 -0
- package/src/connection-skeleton.tsx +16 -0
- package/src/connection-type-picker.tsx +36 -0
- package/src/conversation-timeline.ts +92 -0
- package/src/desktop.ts +24 -0
- package/src/device-authorization.tsx +98 -0
- package/src/diffs.ts +16 -0
- package/src/discovery-cache.ts +42 -0
- package/src/editor.ts +13 -0
- package/src/hooks/internal.ts +3 -2
- package/src/hooks/latest-question.ts +164 -0
- package/src/hooks/shared-machines-list.ts +34 -1
- package/src/hooks/shared-query.ts +721 -0
- package/src/hooks/use-attached-browsers.ts +1 -1
- package/src/hooks/use-auth-runs.ts +0 -27
- package/src/hooks/use-available-models.ts +2 -2
- package/src/hooks/use-browser-frame-stream.ts +19 -2
- package/src/hooks/use-browser-session.ts +680 -205
- package/src/hooks/use-browser-sessions.ts +32 -1
- package/src/hooks/use-client-config-flags.ts +118 -0
- package/src/hooks/use-codex-accounts.ts +247 -47
- package/src/hooks/use-composer.ts +227 -44
- package/src/hooks/use-computer-frame-stream.ts +25 -7
- package/src/hooks/use-computer-input-posture.ts +94 -0
- package/src/hooks/use-computer-session.ts +409 -95
- package/src/hooks/use-connect.ts +23 -0
- package/src/hooks/use-desktop-stream.ts +19 -28
- package/src/hooks/use-file-attachments.ts +53 -3
- package/src/hooks/use-goal.ts +79 -9
- package/src/hooks/use-last-started-turn-policy.ts +37 -11
- package/src/hooks/use-machines.ts +4 -0
- package/src/hooks/use-new-conversation.ts +374 -0
- package/src/hooks/use-new-session-draft.ts +813 -0
- package/src/hooks/use-realtime-voice-models.ts +46 -0
- package/src/hooks/use-sandbox-files.ts +68 -20
- package/src/hooks/use-session-background-commands.ts +22 -11
- package/src/hooks/use-session-capabilities.ts +3 -2
- package/src/hooks/use-session-conversation.ts +150 -0
- package/src/hooks/use-session-events.ts +531 -335
- package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
- package/src/hooks/use-session-model-account.ts +174 -0
- package/src/hooks/use-session.ts +30 -2
- package/src/hooks/use-slash-commands.ts +6 -11
- package/src/hooks/use-supergrok-accounts.ts +22 -8
- package/src/hooks/use-terminal-stream.ts +153 -27
- package/src/hooks/use-transcription.ts +6 -0
- package/src/hooks/use-turn-queue.ts +2 -1
- package/src/hooks/use-usage.ts +100 -0
- package/src/hooks/use-vaults.ts +153 -0
- package/src/hooks/use-video-artifact-playback.ts +1 -1
- package/src/hooks/use-voice-input.ts +127 -19
- package/src/hooks/use-workspace-capture.ts +3 -2
- package/src/hooks/use-workspace-edit.ts +23 -5
- package/src/hooks/use-workspace-sessions.ts +74 -7
- package/src/human-input-model.ts +359 -0
- package/src/identity-link-accounts.tsx +148 -0
- package/src/identity-link-consent.tsx +192 -0
- package/src/index.ts +262 -16
- package/src/interaction.ts +1 -0
- package/src/lib/clipboard.ts +29 -0
- package/src/lib/error-message.ts +37 -0
- package/src/lib/format.ts +205 -10
- package/src/lib/host-theme.ts +529 -0
- package/src/lib/interaction-errors.ts +15 -0
- package/src/lib/menu-styles.ts +44 -0
- package/src/lib/notify-observer.ts +15 -0
- package/src/lib/pierre-diffs-loader.ts +53 -0
- package/src/lib/provider-recovery.ts +243 -0
- package/src/lib/scrollbars.ts +30 -0
- package/src/lib/terminal-input-readiness.ts +51 -0
- package/src/lib/transient-retry.ts +99 -0
- package/src/lib/workbench-peers.ts +62 -0
- package/src/lib/xterm-theme.ts +23 -21
- package/src/mcp-connection-status.ts +35 -0
- package/src/model-mark-paths.ts +53 -0
- package/src/model-picker-model.ts +330 -0
- package/src/model-policy.ts +261 -27
- package/src/native-previews.ts +100 -0
- package/src/new-session-draft.ts +22 -0
- package/src/notification-text.ts +81 -0
- package/src/older-history.ts +22 -4
- package/src/organization-model.ts +118 -0
- package/src/plugin-details.tsx +185 -0
- package/src/plugin-discovery.tsx +196 -0
- package/src/preview-loading-paint.ts +68 -0
- package/src/provider.tsx +74 -15
- package/src/queue-presentation-model.ts +464 -0
- package/src/realtime/dropdown-menu.tsx +19 -12
- package/src/realtime/embedded-new-voice.tsx +1 -0
- package/src/realtime/embedded-voice.tsx +3 -0
- package/src/realtime/realtime-control.tsx +138 -550
- package/src/realtime/session-realtime.ts +566 -0
- package/src/sandbox-label-model.ts +53 -0
- package/src/scrollbars.ts +3 -0
- package/src/secret-reference-label.ts +43 -0
- package/src/secrets-ui.tsx +59 -0
- package/src/session-agents-model.ts +33 -0
- package/src/session-attention-model.ts +62 -0
- package/src/session-auth-recommendation.ts +48 -0
- package/src/session-capability-policy.ts +196 -0
- package/src/session-context.ts +3 -4
- package/src/session-feedback-model.ts +95 -0
- package/src/session-list-model.ts +434 -0
- package/src/session-realtime.ts +18 -0
- package/src/session-status-model.ts +99 -0
- package/src/session-ui.ts +98 -1
- package/src/session.ts +17 -1
- package/src/site-snapshot.ts +74 -0
- package/src/sites-ui.tsx +348 -0
- package/src/sites.ts +3 -0
- package/src/skill-discovery.tsx +208 -0
- package/src/terminal.ts +26 -0
- package/src/testing/session-scenarios.ts +404 -0
- package/src/timeline/activity-rail.tsx +242 -101
- package/src/timeline/agent-identity.tsx +84 -0
- package/src/timeline/agent-row.tsx +231 -0
- package/src/timeline/allowance-exhausted-row.tsx +86 -0
- package/src/timeline/compaction-copy.ts +115 -0
- package/src/timeline/fleet-decision-projection.ts +2 -1
- package/src/timeline/fleet-decision-row.tsx +1 -0
- package/src/timeline/focus-sequence.ts +44 -0
- package/src/timeline/genie-copy.ts +19 -0
- package/src/timeline/genie-loading.tsx +143 -0
- package/src/timeline/index.ts +30 -2
- package/src/timeline/knowledge-receipt.tsx +100 -0
- package/src/timeline/message-sender.tsx +71 -0
- package/src/timeline/notice-presentation.ts +48 -0
- package/src/timeline/parsers.ts +42 -2
- package/src/timeline/patch-apply-command.tsx +135 -0
- package/src/timeline/platform-activity-presentation.ts +166 -0
- package/src/timeline/platform-activity-row.tsx +15 -90
- package/src/timeline/presented-image.ts +63 -0
- package/src/timeline/projection.ts +1742 -76
- package/src/timeline/provider-logo.tsx +53 -0
- package/src/timeline/question-nav-model.ts +28 -0
- package/src/timeline/registry.ts +26 -4
- package/src/timeline/retained-image.ts +97 -0
- package/src/timeline/retained-loaders.ts +91 -0
- package/src/timeline/rolling-activity.tsx +80 -0
- package/src/timeline/screenshot-lightbox.tsx +228 -5
- package/src/timeline/session-usage-limit-row.tsx +42 -0
- package/src/timeline/shared.tsx +42 -15
- package/src/timeline/startup-dispatch-details.tsx +36 -0
- package/src/timeline/startup-preference.ts +33 -0
- package/src/timeline/startup-timings.tsx +145 -0
- package/src/timeline/tool-display-name.ts +19 -7
- package/src/timeline/tool-presentation.ts +1316 -0
- package/src/timeline/tool-renderers.tsx +835 -1138
- package/src/timeline/turn-summary-model.ts +343 -0
- package/src/timeline/turn-summary.tsx +272 -365
- package/src/timeline/types.ts +189 -6
- package/src/timeline/work-presentation.ts +189 -0
- package/src/timeline-model.ts +143 -0
- package/src/usage/allowance-copy.ts +64 -0
- package/src/usage/session-usage-limit.ts +266 -0
- package/src/usage/summary.ts +93 -0
- package/src/usage.ts +70 -0
- package/src/voice-recording-owner.ts +22 -0
- package/styles/compiled.css +2318 -752
- package/styles/connect.css +290 -0
- package/styles/connect.d.ts +1 -0
- package/styles/effective-tokens.css +1 -0
- package/styles/index.css +309 -9
- package/styles/responsive.css +99 -7
- package/styles/session-capability.css +44 -0
- package/styles/tokens.css +134 -66
- package/dist/browser-viewer-MKKFRRRV.js +0 -14
- package/dist/chunk-4MDLEHXL.js.map +0 -1
- package/dist/chunk-5YK2ZDIG.js.map +0 -1
- package/dist/chunk-7EAFGICR.js +0 -302
- package/dist/chunk-7EAFGICR.js.map +0 -1
- package/dist/chunk-7KBJLTKS.js +0 -494
- package/dist/chunk-7KBJLTKS.js.map +0 -1
- package/dist/chunk-E5KISKFG.js.map +0 -1
- package/dist/chunk-ELIYWBZR.js.map +0 -1
- package/dist/chunk-H5YGYNXS.js.map +0 -1
- package/dist/chunk-HUIKIDM5.js.map +0 -1
- package/dist/chunk-ICA6R6TW.js.map +0 -1
- package/dist/chunk-IOLVN74D.js.map +0 -1
- package/dist/chunk-JAQ5K7W6.js.map +0 -1
- package/dist/chunk-JVYQRRC4.js.map +0 -1
- package/dist/chunk-KCGXPP5V.js.map +0 -1
- package/dist/chunk-KZ73RL76.js.map +0 -1
- package/dist/chunk-NEXLLTP4.js.map +0 -1
- package/dist/chunk-PEI6RANI.js.map +0 -1
- package/dist/chunk-VTOREEXF.js +0 -142
- package/dist/chunk-VTOREEXF.js.map +0 -1
- package/dist/chunk-WSK7G5LE.js +0 -170
- package/dist/chunk-WSK7G5LE.js.map +0 -1
- package/dist/chunk-X5S426G2.js +0 -217
- package/dist/chunk-X5S426G2.js.map +0 -1
- package/dist/chunk-YG4QEQF5.js +0 -9557
- package/dist/chunk-YG4QEQF5.js.map +0 -1
- package/dist/chunk-YVCHAQZY.js.map +0 -1
- package/dist/chunk-ZKNTK7IA.js.map +0 -1
- package/dist/chunk-ZPBTI3TE.js.map +0 -1
- package/dist/computer-viewer-FWEZISW4.js +0 -16
- package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
- package/dist/hooks/use-environments.d.ts +0 -41
- package/dist/hooks/use-packs.d.ts +0 -32
- package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
- package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
- package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
- package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
- package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
- package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
- package/src/hooks/use-environments.ts +0 -182
- package/src/hooks/use-packs.ts +0 -157
- /package/dist/{browser-viewer-MKKFRRRV.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
- /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-4EUKJXUO.js.map} +0 -0
package/src/model-policy.ts
CHANGED
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
modelPickerBillingClassFor,
|
|
4
4
|
type ModelPickerBillingClass,
|
|
5
5
|
} from "@opengeni/sdk/model-picker-order";
|
|
6
|
+
import { modelDisplayName } from "@opengeni/sdk/model-display";
|
|
6
7
|
import type { ClientModel, ReasoningEffort, WorkspaceModelCatalogModel } from "@opengeni/sdk";
|
|
7
8
|
|
|
8
9
|
export type PickerBillingClass = ModelPickerBillingClass;
|
|
@@ -16,6 +17,7 @@ export type PickerModelRow<TCatalog extends ClientModel = WorkspaceModelCatalogM
|
|
|
16
17
|
billingClassLabel: string;
|
|
17
18
|
selectable: boolean;
|
|
18
19
|
unavailableReason: string | null;
|
|
20
|
+
fundingHint?: string | undefined;
|
|
19
21
|
provider: string;
|
|
20
22
|
providerLabel: string;
|
|
21
23
|
catalog: TCatalog;
|
|
@@ -24,11 +26,22 @@ export type PickerModelRow<TCatalog extends ClientModel = WorkspaceModelCatalogM
|
|
|
24
26
|
export type LatencyModeId = "standard" | "priority" | "fast";
|
|
25
27
|
|
|
26
28
|
const BILLING_CLASS_LABELS: Record<PickerBillingClass, string> = {
|
|
27
|
-
opengeni_credits: "
|
|
29
|
+
opengeni_credits: "Models",
|
|
28
30
|
external: "External",
|
|
29
31
|
codex_subscription: "Codex",
|
|
30
32
|
supergrok_subscription: "SuperGrok",
|
|
33
|
+
claude_subscription: "Claude subscription",
|
|
34
|
+
// Who connected the key (organization or workspace) is a settings fact, not
|
|
35
|
+
// a model choice: both scopes share one label and one picker group.
|
|
36
|
+
byok: "API keys",
|
|
37
|
+
organization_byok: "API keys",
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/** Models settings keeps naming who connected the key. */
|
|
41
|
+
const SCOPED_BILLING_CLASS_LABELS: Record<PickerBillingClass, string> = {
|
|
42
|
+
...BILLING_CLASS_LABELS,
|
|
31
43
|
byok: "Workspace providers",
|
|
44
|
+
organization_byok: "Organization providers",
|
|
32
45
|
};
|
|
33
46
|
|
|
34
47
|
const AVAILABILITY_REASON_LABELS: Record<string, string> = {
|
|
@@ -39,10 +52,27 @@ const AVAILABILITY_REASON_LABELS: Record<string, string> = {
|
|
|
39
52
|
provider_unhealthy: "Provider unavailable",
|
|
40
53
|
policy_blocked: "Blocked by workspace policy",
|
|
41
54
|
unsupported: "Unsupported",
|
|
55
|
+
credits_disabled: "Opengeni credits off",
|
|
42
56
|
};
|
|
43
57
|
|
|
44
58
|
export function billingClassForModel(model: ClientModel): PickerBillingClass {
|
|
45
|
-
if (
|
|
59
|
+
if (
|
|
60
|
+
model.provider === "organization-gateway" ||
|
|
61
|
+
model.provider === "organization-openrouter" ||
|
|
62
|
+
model.provider === "organization-opper"
|
|
63
|
+
) {
|
|
64
|
+
return "organization_byok";
|
|
65
|
+
}
|
|
66
|
+
if (
|
|
67
|
+
model.provider?.startsWith("workspace-openai-") ||
|
|
68
|
+
model.provider?.startsWith("workspace-azure-openai-")
|
|
69
|
+
)
|
|
70
|
+
return "byok";
|
|
71
|
+
if (
|
|
72
|
+
model.provider === "workspace-gateway" ||
|
|
73
|
+
model.provider === "workspace-openrouter" ||
|
|
74
|
+
model.provider === "workspace-opper"
|
|
75
|
+
) {
|
|
46
76
|
return "byok";
|
|
47
77
|
}
|
|
48
78
|
return modelPickerBillingClassFor(model);
|
|
@@ -52,6 +82,11 @@ export function billingClassLabel(billingClass: PickerBillingClass): string {
|
|
|
52
82
|
return BILLING_CLASS_LABELS[billingClass];
|
|
53
83
|
}
|
|
54
84
|
|
|
85
|
+
/** The group label that names the connection scope, for Models settings only. */
|
|
86
|
+
export function scopedBillingClassLabel(billingClass: PickerBillingClass): string {
|
|
87
|
+
return SCOPED_BILLING_CLASS_LABELS[billingClass];
|
|
88
|
+
}
|
|
89
|
+
|
|
55
90
|
export function availabilityReasonLabel(
|
|
56
91
|
reason: WorkspaceModelCatalogModel["availability"]["reason"],
|
|
57
92
|
): string | null {
|
|
@@ -90,6 +125,30 @@ export function coerceReasoningEffortForModel(
|
|
|
90
125
|
return defaultEffortForModel(model);
|
|
91
126
|
}
|
|
92
127
|
|
|
128
|
+
/** Whether the composer offers (and therefore labels) a reasoning-effort choice. */
|
|
129
|
+
export function modelOffersEffortChoice(model: ClientModel): boolean {
|
|
130
|
+
return (
|
|
131
|
+
effortOptionsForModel(model).length > 1 && model.capabilities?.reasoning.runnable !== false
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* The composer model pill at phone width: the catalog's compact name (falling
|
|
137
|
+
* back to the display name) and the effort label when effort is a choice.
|
|
138
|
+
*/
|
|
139
|
+
export function compactModelPill(
|
|
140
|
+
models: readonly ClientModel[],
|
|
141
|
+
modelId: string,
|
|
142
|
+
effort: ReasoningEffort | null | undefined,
|
|
143
|
+
): { name: string; effort: string | null } {
|
|
144
|
+
const row = findPickerRow(projectClientModelRows([...models]), modelId);
|
|
145
|
+
return {
|
|
146
|
+
name: row?.shortLabel ?? row?.label ?? modelDisplayName(modelId),
|
|
147
|
+
effort:
|
|
148
|
+
row && effort && modelOffersEffortChoice(row.catalog) ? labelReasoningEffort(effort) : null,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
|
|
93
152
|
export function runnableLatencyModesForModel(model: ClientModel): LatencyModeId[] {
|
|
94
153
|
const modes = model.capabilities?.latencyModes ?? [];
|
|
95
154
|
return modes.filter((mode) => mode.runnable).map((mode) => mode.id);
|
|
@@ -112,21 +171,33 @@ export function labelReasoningEffort(effort: ReasoningEffort): string {
|
|
|
112
171
|
return effort.slice(0, 1).toUpperCase() + effort.slice(1);
|
|
113
172
|
}
|
|
114
173
|
|
|
174
|
+
/** Payment prompts must use cost policy, never the presentation group. */
|
|
175
|
+
export function modelUsesCredits(model: ClientModel | undefined): boolean {
|
|
176
|
+
if (model?.cost !== undefined) return model.cost === "credits";
|
|
177
|
+
return model?.billing?.metering === "opengeni_credits";
|
|
178
|
+
}
|
|
179
|
+
|
|
115
180
|
export function payerSummaryForModel(model: ClientModel): string {
|
|
116
181
|
if (model.cost === "free") {
|
|
117
182
|
return "Free in this deployment";
|
|
118
183
|
}
|
|
119
184
|
if (model.cost === "credits") {
|
|
120
|
-
return "
|
|
185
|
+
return "Opengeni credits";
|
|
121
186
|
}
|
|
122
187
|
if (model.cost === "subscription") {
|
|
123
|
-
return model.
|
|
124
|
-
|
|
125
|
-
|
|
188
|
+
return model.credentialSource?.kind === "connected_subscription" &&
|
|
189
|
+
model.credentialSource.provider === "claude"
|
|
190
|
+
? "Claude subscription · external billing"
|
|
191
|
+
: model.source === "supergrok"
|
|
192
|
+
? "SuperGrok subscription · external billing"
|
|
193
|
+
: "Codex subscription · external billing";
|
|
126
194
|
}
|
|
127
195
|
if (model.cost === "workspace") {
|
|
128
196
|
return workspaceProviderPayerSummary(model);
|
|
129
197
|
}
|
|
198
|
+
if (model.cost === "organization") {
|
|
199
|
+
return organizationProviderPayerSummary(model);
|
|
200
|
+
}
|
|
130
201
|
|
|
131
202
|
// Older client-config payloads do not carry `cost`; preserve their existing
|
|
132
203
|
// settlement-derived label until every deployment has rolled forward.
|
|
@@ -135,35 +206,48 @@ export function payerSummaryForModel(model: ClientModel): string {
|
|
|
135
206
|
return "Route unknown";
|
|
136
207
|
}
|
|
137
208
|
if (billing.metering === "opengeni_credits") {
|
|
138
|
-
return "
|
|
209
|
+
return "Opengeni credits · automatic managed route";
|
|
139
210
|
}
|
|
140
211
|
if (billing.upstreamPayer === "connected_subscription") {
|
|
141
|
-
return model.
|
|
142
|
-
|
|
143
|
-
|
|
212
|
+
return model.credentialSource?.kind === "connected_subscription" &&
|
|
213
|
+
model.credentialSource.provider === "claude"
|
|
214
|
+
? "Claude subscription · external billing"
|
|
215
|
+
: model.source === "supergrok"
|
|
216
|
+
? "SuperGrok subscription · external billing"
|
|
217
|
+
: "Codex subscription · external billing";
|
|
144
218
|
}
|
|
145
219
|
if (billing.upstreamPayer === "workspace") {
|
|
146
220
|
return workspaceProviderPayerSummary(model);
|
|
147
221
|
}
|
|
148
|
-
|
|
222
|
+
if (billing.upstreamPayer === "organization") {
|
|
223
|
+
return organizationProviderPayerSummary(model);
|
|
224
|
+
}
|
|
225
|
+
return billing.upstreamPayer === "deployment"
|
|
226
|
+
? "Opengeni · no model credits"
|
|
227
|
+
: "External provider · no Opengeni credits";
|
|
149
228
|
}
|
|
150
229
|
|
|
151
230
|
export function advancedSourceSummary(model: ClientModel): string | null {
|
|
152
231
|
const source = model.credentialSource;
|
|
153
232
|
if (!source) {
|
|
154
233
|
return model.billing?.metering === "external" && model.billing.upstreamPayer === "deployment"
|
|
155
|
-
? "Deployment
|
|
234
|
+
? "Deployment-provided connection"
|
|
156
235
|
: null;
|
|
157
236
|
}
|
|
158
237
|
if (source.kind === "connected_subscription") {
|
|
159
|
-
return source.provider === "
|
|
160
|
-
? "Connected
|
|
161
|
-
:
|
|
238
|
+
return source.provider === "claude"
|
|
239
|
+
? "Connected Claude subscription"
|
|
240
|
+
: source.provider === "xai"
|
|
241
|
+
? "Connected SuperGrok subscription"
|
|
242
|
+
: "Connected Codex subscription";
|
|
162
243
|
}
|
|
163
244
|
if (source.kind === "workspace_connection") {
|
|
164
245
|
if (model.provider === "workspace-openrouter") {
|
|
165
246
|
return "Workspace OpenRouter connection";
|
|
166
247
|
}
|
|
248
|
+
if (model.provider === "workspace-opper") {
|
|
249
|
+
return "Workspace Opper connection";
|
|
250
|
+
}
|
|
167
251
|
if (model.provider === "workspace-gateway" || model.source === "workspace_gateway") {
|
|
168
252
|
return "Workspace Vercel AI Gateway";
|
|
169
253
|
}
|
|
@@ -178,30 +262,97 @@ export function advancedSourceSummary(model: ClientModel): string | null {
|
|
|
178
262
|
}
|
|
179
263
|
|
|
180
264
|
function workspaceProviderPayerSummary(model: ClientModel): string {
|
|
265
|
+
if (model.provider === "workspace-anthropic")
|
|
266
|
+
return "Billed to the workspace Anthropic API account";
|
|
267
|
+
if (model.provider === "workspace-claude-subscription")
|
|
268
|
+
return "Uses the workspace Claude subscription · no Opengeni credits";
|
|
181
269
|
if (model.provider === "workspace-openrouter") {
|
|
182
270
|
return "Billed to the workspace OpenRouter account";
|
|
183
271
|
}
|
|
272
|
+
if (model.provider === "workspace-opper") {
|
|
273
|
+
return "Billed to the workspace Opper account";
|
|
274
|
+
}
|
|
184
275
|
if (model.provider === "workspace-gateway" || model.source === "workspace_gateway") {
|
|
185
276
|
return "Billed to the workspace Vercel account";
|
|
186
277
|
}
|
|
187
278
|
return "Billed to the workspace provider account";
|
|
188
279
|
}
|
|
189
280
|
|
|
281
|
+
function organizationProviderPayerSummary(model: ClientModel): string {
|
|
282
|
+
if (model.provider === "organization-anthropic")
|
|
283
|
+
return "Billed to the organization Anthropic API account";
|
|
284
|
+
if (model.provider === "organization-claude-subscription")
|
|
285
|
+
return "Uses the connected Claude subscription · no Opengeni credits";
|
|
286
|
+
if (model.provider === "organization-openrouter") {
|
|
287
|
+
return "Billed to the organization OpenRouter account";
|
|
288
|
+
}
|
|
289
|
+
if (model.provider === "organization-opper") {
|
|
290
|
+
return "Billed to the organization Opper account";
|
|
291
|
+
}
|
|
292
|
+
if (model.provider === "organization-gateway") {
|
|
293
|
+
return "Billed to the organization Vercel account";
|
|
294
|
+
}
|
|
295
|
+
return "Billed to the organization provider account";
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* The curated compact label, else a derived one for narrow triggers: the name
|
|
300
|
+
* without trailing access and release-stage qualifiers ("Muse Spark 1.3
|
|
301
|
+
* Contributor Free" → "Muse Spark 1.3"), which the picker's groups and
|
|
302
|
+
* descriptions already carry. Claude names are already family-free
|
|
303
|
+
* ("Opus 5.5") in the shared display name.
|
|
304
|
+
*/
|
|
305
|
+
function compactLabel(catalog: ClientModel): { shortLabel?: string } {
|
|
306
|
+
if (catalog.shortLabel) return { shortLabel: catalog.shortLabel };
|
|
307
|
+
const name = modelDisplayName(catalog);
|
|
308
|
+
const trimmed = withoutTrailingQualifiers(name);
|
|
309
|
+
return trimmed !== name ? { shortLabel: trimmed } : {};
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
const TRAILING_QUALIFIERS = new Set([
|
|
313
|
+
"free",
|
|
314
|
+
"contributor",
|
|
315
|
+
"preview",
|
|
316
|
+
"beta",
|
|
317
|
+
"experimental",
|
|
318
|
+
"exp",
|
|
319
|
+
"latest",
|
|
320
|
+
]);
|
|
321
|
+
|
|
322
|
+
/** Drops trailing qualifier words ("Free", "Preview", "(free)") while a name remains. */
|
|
323
|
+
function withoutTrailingQualifiers(name: string): string {
|
|
324
|
+
const words = name.trim().split(/\s+/u);
|
|
325
|
+
while (words.length > 1) {
|
|
326
|
+
const last = words
|
|
327
|
+
.at(-1)!
|
|
328
|
+
.replace(/^[([]|[)\]]$/gu, "")
|
|
329
|
+
.toLowerCase();
|
|
330
|
+
if (!TRAILING_QUALIFIERS.has(last)) break;
|
|
331
|
+
words.pop();
|
|
332
|
+
}
|
|
333
|
+
return words.join(" ");
|
|
334
|
+
}
|
|
335
|
+
|
|
190
336
|
export function projectPickerRows(models: WorkspaceModelCatalogModel[]): PickerModelRow[] {
|
|
191
337
|
return models
|
|
192
|
-
.filter((catalog) =>
|
|
193
|
-
const billingClass = billingClassForModel(catalog);
|
|
194
|
-
return billingClass === "opengeni_credits" || catalog.credentialReadiness.status === "ready";
|
|
195
|
-
})
|
|
338
|
+
.filter((catalog) => catalog.credentialReadiness.status === "ready")
|
|
196
339
|
.map((catalog) => {
|
|
197
340
|
const billingClass = billingClassForModel(catalog);
|
|
198
341
|
return {
|
|
199
342
|
id: catalog.id,
|
|
200
|
-
label: catalog
|
|
201
|
-
...(catalog
|
|
343
|
+
label: modelDisplayName(catalog),
|
|
344
|
+
...compactLabel(catalog),
|
|
202
345
|
billingClass,
|
|
203
346
|
billingClassLabel: billingClassLabel(billingClass),
|
|
204
347
|
selectable: catalog.availability.selectable,
|
|
348
|
+
fundingHint:
|
|
349
|
+
catalog.creditFunding === "promotional"
|
|
350
|
+
? "Free credits"
|
|
351
|
+
: catalog.creditFunding === "general"
|
|
352
|
+
? "Uses credits"
|
|
353
|
+
: catalog.creditFunding === "unavailable"
|
|
354
|
+
? "Needs credits"
|
|
355
|
+
: undefined,
|
|
205
356
|
unavailableReason: catalog.availability.selectable
|
|
206
357
|
? null
|
|
207
358
|
: availabilityReasonLabel(catalog.availability.reason),
|
|
@@ -218,8 +369,8 @@ export function projectClientModelRows(models: ClientModel[]): PickerModelRow<Cl
|
|
|
218
369
|
const billingClass = billingClassForModel(catalog);
|
|
219
370
|
return {
|
|
220
371
|
id: catalog.id,
|
|
221
|
-
label: catalog
|
|
222
|
-
...(catalog
|
|
372
|
+
label: modelDisplayName(catalog),
|
|
373
|
+
...compactLabel(catalog),
|
|
223
374
|
billingClass,
|
|
224
375
|
billingClassLabel: billingClassLabel(billingClass),
|
|
225
376
|
selectable: true,
|
|
@@ -244,11 +395,62 @@ export function findPickerRow<TCatalog extends ClientModel>(
|
|
|
244
395
|
return rows.find((row) => row.id === modelId) ?? null;
|
|
245
396
|
}
|
|
246
397
|
|
|
398
|
+
export type GroupPickerRowsOptions = {
|
|
399
|
+
codexOnly?: boolean;
|
|
400
|
+
/**
|
|
401
|
+
* Default true: organization- and workspace-connected keys share one group
|
|
402
|
+
* and identical copies show once. Models settings passes false.
|
|
403
|
+
*/
|
|
404
|
+
collapseScopes?: boolean | undefined;
|
|
405
|
+
/** Kept visible when it has an identical twin (see below). */
|
|
406
|
+
selectedId?: string | undefined;
|
|
407
|
+
};
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* Organization- and workspace-connected API keys are one choice for the person
|
|
411
|
+
* picking a model, so they share one group.
|
|
412
|
+
*/
|
|
413
|
+
function displayGroupFor(billingClass: PickerBillingClass): PickerBillingClass {
|
|
414
|
+
return billingClass === "organization_byok" ? "byok" : billingClass;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
/**
|
|
418
|
+
* The same model through the same provider kind, whichever scope connected it:
|
|
419
|
+
* `organization-anthropic/claude-opus-5-5` and `workspace-anthropic/claude-opus-5-5`
|
|
420
|
+
* share a key, while OpenRouter and the Anthropic API never do (different
|
|
421
|
+
* accounts and bills).
|
|
422
|
+
*/
|
|
423
|
+
function scopeFreeIdentity(row: PickerModelRow<ClientModel>): string | null {
|
|
424
|
+
const provider = row.provider.replace(/^(?:organization|workspace)-/, "");
|
|
425
|
+
if (provider === row.provider) return null;
|
|
426
|
+
const upstream =
|
|
427
|
+
row.catalog.deployment?.upstreamModelId ??
|
|
428
|
+
(row.id.startsWith(`${row.provider}/`) ? row.id.slice(row.provider.length + 1) : row.id);
|
|
429
|
+
return `${provider}\u0000${upstream}`;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* Two rows that are the same model through the same provider kind, connected
|
|
434
|
+
* by the organization and by the workspace, are one choice: show one. Keep the
|
|
435
|
+
* current selection, else a selectable row, else the first in picker order.
|
|
436
|
+
*/
|
|
437
|
+
function prefersTwin<TCatalog extends ClientModel>(
|
|
438
|
+
candidate: PickerModelRow<TCatalog>,
|
|
439
|
+
current: PickerModelRow<TCatalog>,
|
|
440
|
+
selectedId: string | undefined,
|
|
441
|
+
): boolean {
|
|
442
|
+
if (selectedId !== undefined && current.id === selectedId) return false;
|
|
443
|
+
if (selectedId !== undefined && candidate.id === selectedId) return true;
|
|
444
|
+
return candidate.selectable && !current.selectable;
|
|
445
|
+
}
|
|
446
|
+
|
|
247
447
|
export function groupPickerRowsByBillingClass(
|
|
248
448
|
rows: PickerModelRow[],
|
|
449
|
+
options?: GroupPickerRowsOptions,
|
|
249
450
|
): Array<{ billingClass: PickerBillingClass; label: string; rows: PickerModelRow[] }>;
|
|
250
451
|
export function groupPickerRowsByBillingClass<TCatalog extends ClientModel>(
|
|
251
452
|
rows: PickerModelRow<TCatalog>[],
|
|
453
|
+
options?: GroupPickerRowsOptions,
|
|
252
454
|
): Array<{
|
|
253
455
|
billingClass: PickerBillingClass;
|
|
254
456
|
label: string;
|
|
@@ -256,6 +458,7 @@ export function groupPickerRowsByBillingClass<TCatalog extends ClientModel>(
|
|
|
256
458
|
}>;
|
|
257
459
|
export function groupPickerRowsByBillingClass<TCatalog extends ClientModel>(
|
|
258
460
|
rows: PickerModelRow<TCatalog>[],
|
|
461
|
+
options?: GroupPickerRowsOptions,
|
|
259
462
|
): Array<{
|
|
260
463
|
billingClass: PickerBillingClass;
|
|
261
464
|
label: string;
|
|
@@ -268,16 +471,47 @@ export function groupPickerRowsByBillingClass<TCatalog extends ClientModel>(
|
|
|
268
471
|
rows: PickerModelRow<TCatalog>[];
|
|
269
472
|
}> = [];
|
|
270
473
|
for (const row of sorted) {
|
|
271
|
-
const
|
|
474
|
+
const collapse = options?.collapseScopes !== false;
|
|
475
|
+
const billingClass = collapse ? displayGroupFor(row.billingClass) : row.billingClass;
|
|
476
|
+
const existing = groups.find((group) => group.billingClass === billingClass);
|
|
272
477
|
if (existing) {
|
|
273
|
-
|
|
478
|
+
const identity = collapse ? scopeFreeIdentity(row) : null;
|
|
479
|
+
const twin =
|
|
480
|
+
identity === null
|
|
481
|
+
? -1
|
|
482
|
+
: existing.rows.findIndex((candidate) => scopeFreeIdentity(candidate) === identity);
|
|
483
|
+
if (twin < 0) {
|
|
484
|
+
existing.rows.push(row);
|
|
485
|
+
} else if (prefersTwin(row, existing.rows[twin]!, options?.selectedId)) {
|
|
486
|
+
existing.rows[twin] = row;
|
|
487
|
+
}
|
|
274
488
|
continue;
|
|
275
489
|
}
|
|
276
490
|
groups.push({
|
|
277
|
-
billingClass
|
|
278
|
-
label:
|
|
491
|
+
billingClass,
|
|
492
|
+
label:
|
|
493
|
+
billingClass === row.billingClass ? row.billingClassLabel : billingClassLabel(billingClass),
|
|
279
494
|
rows: [row],
|
|
280
495
|
});
|
|
281
496
|
}
|
|
497
|
+
const codexIndex = groups.findIndex((group) => group.billingClass === "codex_subscription");
|
|
498
|
+
const codex = groups[codexIndex];
|
|
499
|
+
const selectableOpenGeni = groups
|
|
500
|
+
.find((group) => group.billingClass === "opengeni_credits")
|
|
501
|
+
?.rows.filter((row) => row.selectable);
|
|
502
|
+
// Presentation only: never change the catalog/default model ordering or selection.
|
|
503
|
+
const onlyFreeOpenGeni =
|
|
504
|
+
selectableOpenGeni !== undefined &&
|
|
505
|
+
selectableOpenGeni.length > 0 &&
|
|
506
|
+
selectableOpenGeni.every((row) => row.catalog.cost === "free");
|
|
507
|
+
if (
|
|
508
|
+
codex &&
|
|
509
|
+
codex.rows.some((row) => row.selectable) &&
|
|
510
|
+
(options?.codexOnly || onlyFreeOpenGeni)
|
|
511
|
+
) {
|
|
512
|
+
groups.splice(codexIndex, 1);
|
|
513
|
+
groups.unshift(codex);
|
|
514
|
+
}
|
|
282
515
|
return groups;
|
|
283
516
|
}
|
|
517
|
+
export { modelDisplayName, modelVendor } from "@opengeni/sdk/model-display";
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOM-free building blocks for showing agent previews outside a browser page
|
|
3
|
+
* (React Native web views): the same documents and loading surface the web
|
|
4
|
+
* chat uses, as strings and pure functions.
|
|
5
|
+
*/
|
|
6
|
+
import { PREVIEW_LOADING_COLORS } from "./preview-loading-paint";
|
|
7
|
+
|
|
8
|
+
export { inlineHtmlDocument } from "./components/artifacts/inline-html-document";
|
|
9
|
+
export {
|
|
10
|
+
loadSiteSnapshot,
|
|
11
|
+
type SiteDisplayContent,
|
|
12
|
+
type SiteSnapshotReadClient,
|
|
13
|
+
} from "./site-snapshot";
|
|
14
|
+
export { paintPreviewLoading, PREVIEW_LOADING_COLORS } from "./preview-loading-paint";
|
|
15
|
+
|
|
16
|
+
/** Fence languages the assistant uses for interactive previews. */
|
|
17
|
+
export type InteractivePreviewKind = "html" | "site";
|
|
18
|
+
|
|
19
|
+
export function interactivePreviewKind(language: string): InteractivePreviewKind | null {
|
|
20
|
+
return language === "opengeni-html" ? "html" : language === "opengeni-site" ? "site" : null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** A Site fence body: `{"siteId": "…", "versionId"?: "…"}`; null when malformed. */
|
|
24
|
+
export function parseSiteFence(content: string): { siteId: string; versionId?: string } | null {
|
|
25
|
+
try {
|
|
26
|
+
const value = JSON.parse(content) as { siteId?: unknown; versionId?: unknown };
|
|
27
|
+
const uuid = /^[0-9a-f-]{36}$/i;
|
|
28
|
+
if (!value || typeof value.siteId !== "string" || !uuid.test(value.siteId)) return null;
|
|
29
|
+
if (value.versionId === undefined) return { siteId: value.siteId };
|
|
30
|
+
return typeof value.versionId === "string" && uuid.test(value.versionId)
|
|
31
|
+
? { siteId: value.siteId, versionId: value.versionId }
|
|
32
|
+
: null;
|
|
33
|
+
} catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Script source of `paintPreviewLoading` (kept in lockstep by a test), for
|
|
40
|
+
* documents that run outside this bundle. Release React Native builds compile
|
|
41
|
+
* functions to bytecode, so `Function.prototype.toString` cannot be used.
|
|
42
|
+
*/
|
|
43
|
+
export const PREVIEW_LOADING_PAINT_SCRIPT = `function paintPreviewLoading(context,width,height,time,ink,glowColor){
|
|
44
|
+
context.clearRect(0,0,width,height);
|
|
45
|
+
const cx=width*(0.5+0.13*Math.sin(time*0.21));
|
|
46
|
+
const cy=height*(0.5+0.12*Math.cos(time*0.27));
|
|
47
|
+
const glow=context.createRadialGradient(cx,cy,0,cx,cy,Math.max(width,height)*0.65);
|
|
48
|
+
glow.addColorStop(0,glowColor);glow.addColorStop(1,"transparent");
|
|
49
|
+
context.globalAlpha=0.09;context.fillStyle=glow;context.fillRect(0,0,width,height);
|
|
50
|
+
const rows=Math.ceil(height/18)+7;const cols=Math.ceil(width/18)+7;
|
|
51
|
+
const points=Array.from({length:rows},(_row,r)=>Array.from({length:cols},(_col,c)=>{
|
|
52
|
+
const x=(c-3)*18;const y=(r-3)*18;const dist=Math.hypot((x-cx)*0.8,y-cy);
|
|
53
|
+
const wave=Math.sin(dist*0.032-time*0.95);
|
|
54
|
+
return {x:x+((x-cx)/Math.max(dist,1))*wave*4,y:y+((y-cy)/Math.max(dist,1))*wave*4,l:Math.pow((wave+1)/2,5)};}));
|
|
55
|
+
context.strokeStyle=ink;context.fillStyle=ink;context.lineWidth=0.65;
|
|
56
|
+
points.forEach((row,r)=>row.forEach((p,c)=>{
|
|
57
|
+
context.globalAlpha=0.035+p.l*0.055;context.beginPath();
|
|
58
|
+
if(c+1<cols){context.moveTo(p.x,p.y);context.lineTo(row[c+1].x,row[c+1].y);}
|
|
59
|
+
if(r+1<rows){context.moveTo(p.x,p.y);context.lineTo(points[r+1][c].x,points[r+1][c].y);}
|
|
60
|
+
context.stroke();
|
|
61
|
+
context.globalAlpha=0.15+p.l*0.55;context.beginPath();
|
|
62
|
+
context.arc(p.x,p.y,0.85+p.l*0.65,0,Math.PI*2);context.fill();}));
|
|
63
|
+
context.globalAlpha=1;}`;
|
|
64
|
+
|
|
65
|
+
const escapeHtml = (value: string) =>
|
|
66
|
+
value.replace(
|
|
67
|
+
/[&<>"']/g,
|
|
68
|
+
(char) =>
|
|
69
|
+
({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" })[char] ?? char,
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* A standalone page for the web's "Preparing preview…" surface: the animated
|
|
74
|
+
* ripple filling the page with a steady label, for a web view while the
|
|
75
|
+
* assistant is still writing the preview. Never contains the unfinished fence.
|
|
76
|
+
*/
|
|
77
|
+
export function previewLoadingDocument(options: {
|
|
78
|
+
scheme: "light" | "dark";
|
|
79
|
+
label?: string;
|
|
80
|
+
labelColor?: string;
|
|
81
|
+
reducedMotion?: boolean;
|
|
82
|
+
}): string {
|
|
83
|
+
const colors = PREVIEW_LOADING_COLORS[options.scheme];
|
|
84
|
+
const label = escapeHtml(options.label ?? "Preparing preview…");
|
|
85
|
+
const labelColor = options.labelColor ?? (options.scheme === "dark" ? "#a1a1a1" : "#6b6b6b");
|
|
86
|
+
return `<!doctype html><html><head><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"><style>
|
|
87
|
+
html,body{margin:0;height:100%;overflow:hidden;background:${colors.background};-webkit-user-select:none;user-select:none}
|
|
88
|
+
canvas{position:fixed;inset:0;width:100%;height:100%;display:block}
|
|
89
|
+
span{position:fixed;left:16px;bottom:14px;color:${labelColor};font:400 12px/16px -apple-system,system-ui,sans-serif}
|
|
90
|
+
</style></head><body><canvas aria-hidden="true"></canvas><span role="status">${label}</span><script>
|
|
91
|
+
${PREVIEW_LOADING_PAINT_SCRIPT}
|
|
92
|
+
(()=>{const canvas=document.querySelector("canvas");const context=canvas.getContext("2d");if(!context)return;
|
|
93
|
+
const still=${options.reducedMotion === true};let time=2;let last;
|
|
94
|
+
const draw=()=>{const w=canvas.clientWidth,h=canvas.clientHeight;if(!w||!h)return;const d=Math.min(window.devicePixelRatio||1,2);
|
|
95
|
+
if(canvas.width!==Math.round(w*d)||canvas.height!==Math.round(h*d)){canvas.width=Math.round(w*d);canvas.height=Math.round(h*d);}
|
|
96
|
+
context.setTransform(d,0,0,d,0,0);paintPreviewLoading(context,w,h,time,${JSON.stringify(colors.ink)},${JSON.stringify(colors.glow)});};
|
|
97
|
+
const tick=(stamp)=>{if(!document.hidden){if(last!==undefined)time+=Math.min((stamp-last)/1000,0.05);last=stamp;draw();}else last=undefined;requestAnimationFrame(tick);};
|
|
98
|
+
window.addEventListener("resize",draw);draw();if(!still)requestAnimationFrame(tick);})();
|
|
99
|
+
</script></body></html>`;
|
|
100
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The new-session composer's server-authoritative draft (text, model, options,
|
|
3
|
+
* project, attachments), shared by the web app and native apps so a draft
|
|
4
|
+
* started on one device continues on another.
|
|
5
|
+
*/
|
|
6
|
+
export {
|
|
7
|
+
isNewSessionDraftConflict,
|
|
8
|
+
useNewSessionDraft,
|
|
9
|
+
type AcknowledgeConsumedNewSessionDraftResult,
|
|
10
|
+
type FlushedNewSessionDraft,
|
|
11
|
+
type NewSessionDraftEditable,
|
|
12
|
+
type UseNewSessionDraftOptions,
|
|
13
|
+
type UseNewSessionDraftResult,
|
|
14
|
+
} from "./hooks/use-new-session-draft";
|
|
15
|
+
export {
|
|
16
|
+
isTransientServiceFailure,
|
|
17
|
+
OPENGENI_UPDATING_NOTICE,
|
|
18
|
+
retryTransient,
|
|
19
|
+
TRANSIENT_RECONNECT_INTERVAL_MS,
|
|
20
|
+
TRANSIENT_RETRY_DELAYS_MS,
|
|
21
|
+
type RetryTransientOptions,
|
|
22
|
+
} from "./lib/transient-retry";
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The small text format of an agent's notification, shared by every surface
|
|
3
|
+
* that shows one (the web inbox, the native inbox): short paragraphs and "- "
|
|
4
|
+
* bullets, with **bold**, `code` and [links](https://…) inside a line.
|
|
5
|
+
* Anything else is shown as written. The phone's lock screen gets plain text
|
|
6
|
+
* from the server instead.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export type NotificationSpan =
|
|
10
|
+
| { kind: "text"; text: string }
|
|
11
|
+
| { kind: "bold"; text: string }
|
|
12
|
+
| { kind: "code"; text: string }
|
|
13
|
+
| { kind: "link"; text: string; href: string };
|
|
14
|
+
|
|
15
|
+
export type NotificationBlock =
|
|
16
|
+
| { kind: "paragraph"; spans: NotificationSpan[] }
|
|
17
|
+
| { kind: "bullets"; items: NotificationSpan[][] };
|
|
18
|
+
|
|
19
|
+
const INLINE = /\*\*(.+?)\*\*|__(.+?)__|`([^`]+)`|\[([^\]]+)\]\((https:\/\/[^\s)]+)\)/gu;
|
|
20
|
+
|
|
21
|
+
/** One line's spans. Only https links become links. */
|
|
22
|
+
export function parseNotificationInline(line: string): NotificationSpan[] {
|
|
23
|
+
const spans: NotificationSpan[] = [];
|
|
24
|
+
let last = 0;
|
|
25
|
+
for (const match of line.matchAll(INLINE)) {
|
|
26
|
+
const index = match.index ?? 0;
|
|
27
|
+
if (index > last) spans.push({ kind: "text", text: line.slice(last, index) });
|
|
28
|
+
const [, bold, boldAlt, code, linkText, href] = match;
|
|
29
|
+
if (bold ?? boldAlt) spans.push({ kind: "bold", text: (bold ?? boldAlt)! });
|
|
30
|
+
else if (code) spans.push({ kind: "code", text: code });
|
|
31
|
+
else if (linkText && href) spans.push({ kind: "link", text: linkText, href });
|
|
32
|
+
last = index + match[0].length;
|
|
33
|
+
}
|
|
34
|
+
if (last < line.length) spans.push({ kind: "text", text: line.slice(last) });
|
|
35
|
+
return spans;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Paragraphs (blank-line separated; single line breaks kept) and bullet lists. */
|
|
39
|
+
export function parseNotificationText(text: string): NotificationBlock[] {
|
|
40
|
+
const blocks: NotificationBlock[] = [];
|
|
41
|
+
let paragraph: string[] = [];
|
|
42
|
+
let bullets: NotificationSpan[][] = [];
|
|
43
|
+
const flushParagraph = () => {
|
|
44
|
+
if (paragraph.length === 0) return;
|
|
45
|
+
blocks.push({ kind: "paragraph", spans: parseNotificationInline(paragraph.join("\n")) });
|
|
46
|
+
paragraph = [];
|
|
47
|
+
};
|
|
48
|
+
const flushBullets = () => {
|
|
49
|
+
if (bullets.length === 0) return;
|
|
50
|
+
blocks.push({ kind: "bullets", items: bullets });
|
|
51
|
+
bullets = [];
|
|
52
|
+
};
|
|
53
|
+
for (const raw of text.replace(/\r\n?/gu, "\n").split("\n")) {
|
|
54
|
+
const line = raw.trimEnd();
|
|
55
|
+
const bullet = /^\s*[-*•]\s+(.*)$/u.exec(line);
|
|
56
|
+
if (bullet) {
|
|
57
|
+
flushParagraph();
|
|
58
|
+
bullets.push(parseNotificationInline(bullet[1]!));
|
|
59
|
+
} else if (line.trim() === "") {
|
|
60
|
+
flushParagraph();
|
|
61
|
+
flushBullets();
|
|
62
|
+
} else {
|
|
63
|
+
flushBullets();
|
|
64
|
+
paragraph.push(line.trim());
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
flushParagraph();
|
|
68
|
+
flushBullets();
|
|
69
|
+
return blocks;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** The text as one plain line, for previews that clamp to a line or two. */
|
|
73
|
+
export function notificationPlainText(text: string): string {
|
|
74
|
+
return parseNotificationText(text)
|
|
75
|
+
.map((block) =>
|
|
76
|
+
block.kind === "paragraph"
|
|
77
|
+
? block.spans.map((span) => span.text).join("")
|
|
78
|
+
: block.items.map((spans) => `• ${spans.map((span) => span.text).join("")}`).join("\n"),
|
|
79
|
+
)
|
|
80
|
+
.join("\n");
|
|
81
|
+
}
|