@opengeni/react 0.57.0 → 1.0.2-canary.37191796234001
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 +654 -22
- package/dist/accounts.d.ts +64 -0
- package/dist/accounts.js +822 -0
- package/dist/accounts.js.map +1 -0
- package/dist/approvals.d.ts +2 -1
- package/dist/artifacts-document.js +3 -2
- package/dist/artifacts-presentation.js +3 -2
- package/dist/artifacts-spreadsheet.js +2 -2
- package/dist/artifacts.d.ts +4 -1
- package/dist/artifacts.js +518 -42
- package/dist/artifacts.js.map +1 -1
- package/dist/browser-viewer-GTR5XQ7X.js +16 -0
- package/dist/capability-catalog-row.d.ts +20 -0
- package/dist/capability-logo-fallback.d.ts +3 -0
- package/dist/chat-interactive-block-UGBTNB3L.js +11 -0
- package/dist/chat-interactive-block-UGBTNB3L.js.map +1 -0
- package/dist/{chunk-5UQPNLIO.js → chunk-23J2ZNXT.js} +4117 -3896
- package/dist/chunk-23J2ZNXT.js.map +1 -0
- package/dist/chunk-447JLCBU.js +209 -0
- package/dist/chunk-447JLCBU.js.map +1 -0
- package/dist/chunk-4RVYOY4O.js +379 -0
- package/dist/chunk-4RVYOY4O.js.map +1 -0
- package/dist/chunk-5CVXZA3Y.js +292 -0
- package/dist/chunk-5CVXZA3Y.js.map +1 -0
- package/dist/chunk-5J4FOW6Q.js +108 -0
- package/dist/chunk-5J4FOW6Q.js.map +1 -0
- package/dist/chunk-A2PI6UMY.js +41 -0
- package/dist/chunk-A2PI6UMY.js.map +1 -0
- package/dist/{chunk-7WCLAEFV.js → chunk-A4UJB2MM.js} +37 -27
- package/dist/chunk-A4UJB2MM.js.map +1 -0
- package/dist/chunk-B3V6TG77.js +41 -0
- package/dist/chunk-B3V6TG77.js.map +1 -0
- package/dist/chunk-BRM6FVZA.js +302 -0
- package/dist/chunk-BRM6FVZA.js.map +1 -0
- package/dist/chunk-C5X5AJXK.js +182 -0
- package/dist/chunk-C5X5AJXK.js.map +1 -0
- package/dist/chunk-CR7U7HAR.js +453 -0
- package/dist/chunk-CR7U7HAR.js.map +1 -0
- package/dist/{chunk-R3AZOAB5.js → chunk-DYWBUX5Q.js} +29 -123
- package/dist/chunk-DYWBUX5Q.js.map +1 -0
- package/dist/chunk-E3G7SAYZ.js +3124 -0
- package/dist/chunk-E3G7SAYZ.js.map +1 -0
- package/dist/chunk-ELCE5SXV.js +359 -0
- package/dist/chunk-ELCE5SXV.js.map +1 -0
- package/dist/chunk-ERGYJIBB.js +21 -0
- package/dist/chunk-ERGYJIBB.js.map +1 -0
- package/dist/chunk-FFA2OVOV.js +319 -0
- package/dist/chunk-FFA2OVOV.js.map +1 -0
- package/dist/chunk-FZCP527Y.js +116 -0
- package/dist/chunk-FZCP527Y.js.map +1 -0
- package/dist/chunk-GIMRELBW.js +14 -0
- package/dist/chunk-GIMRELBW.js.map +1 -0
- package/dist/{chunk-6KLX2RH5.js → chunk-H2NJQORO.js} +1069 -79
- package/dist/chunk-H2NJQORO.js.map +1 -0
- package/dist/chunk-I7IWRQLN.js +1608 -0
- package/dist/chunk-I7IWRQLN.js.map +1 -0
- package/dist/{chunk-HA46CYQK.js → chunk-IQUCRAT7.js} +792 -537
- package/dist/chunk-IQUCRAT7.js.map +1 -0
- package/dist/chunk-IWIDV7SB.js +1 -0
- package/dist/chunk-IWIDV7SB.js.map +1 -0
- package/dist/chunk-J2QWVSQY.js +312 -0
- package/dist/chunk-J2QWVSQY.js.map +1 -0
- package/dist/chunk-JFNEV4LU.js +2733 -0
- package/dist/chunk-JFNEV4LU.js.map +1 -0
- package/dist/chunk-JT4JW7BC.js +54 -0
- package/dist/chunk-JT4JW7BC.js.map +1 -0
- package/dist/chunk-K3HQAKQX.js +24 -0
- package/dist/chunk-K3HQAKQX.js.map +1 -0
- package/dist/{chunk-C5ZPSSS5.js → chunk-NEXLLTP4.js} +2 -1
- package/dist/{chunk-C5ZPSSS5.js.map → chunk-NEXLLTP4.js.map} +1 -1
- package/dist/chunk-NZUI76EM.js +371 -0
- package/dist/chunk-NZUI76EM.js.map +1 -0
- package/dist/{chunk-PEI6RANI.js → chunk-PNY3JKBJ.js} +309 -74
- package/dist/chunk-PNY3JKBJ.js.map +1 -0
- package/dist/{chunk-IGC6A2ZI.js → chunk-Q5QBEZIQ.js} +777 -246
- package/dist/chunk-Q5QBEZIQ.js.map +1 -0
- package/dist/chunk-RHREZ7BO.js +11 -0
- package/dist/chunk-RHREZ7BO.js.map +1 -0
- package/dist/chunk-SCOTPE2I.js +589 -0
- package/dist/chunk-SCOTPE2I.js.map +1 -0
- package/dist/{chunk-B6WPZSTT.js → chunk-SJZDKVW2.js} +1331 -1163
- package/dist/chunk-SJZDKVW2.js.map +1 -0
- package/dist/chunk-TMJRG4YC.js +12803 -0
- package/dist/chunk-TMJRG4YC.js.map +1 -0
- package/dist/chunk-TMYGL6X5.js +742 -0
- package/dist/chunk-TMYGL6X5.js.map +1 -0
- package/dist/chunk-UGLEYEMP.js +33 -0
- package/dist/chunk-UGLEYEMP.js.map +1 -0
- package/dist/chunk-UK4TINKT.js +27 -0
- package/dist/chunk-UK4TINKT.js.map +1 -0
- package/dist/chunk-UTRTG6LH.js +220 -0
- package/dist/chunk-UTRTG6LH.js.map +1 -0
- package/dist/chunk-WEHMPOXK.js +39 -0
- package/dist/chunk-WEHMPOXK.js.map +1 -0
- package/dist/chunk-WRHIZYZF.js +988 -0
- package/dist/chunk-WRHIZYZF.js.map +1 -0
- package/dist/{chunk-HUIKIDM5.js → chunk-WUISZ3WU.js} +223 -115
- package/dist/chunk-WUISZ3WU.js.map +1 -0
- package/dist/chunk-XCHWDJ22.js +107 -0
- package/dist/chunk-XCHWDJ22.js.map +1 -0
- package/dist/chunk-XOAMRDDK.js +481 -0
- package/dist/chunk-XOAMRDDK.js.map +1 -0
- package/dist/chunk-XUW2UWQM.js +299 -0
- package/dist/chunk-XUW2UWQM.js.map +1 -0
- package/dist/{chunk-KCGXPP5V.js → chunk-Y2PRMYLC.js} +11 -6
- package/dist/chunk-Y2PRMYLC.js.map +1 -0
- package/dist/chunk-YBXQDQFX.js +1772 -0
- package/dist/chunk-YBXQDQFX.js.map +1 -0
- package/dist/{chunk-KZ73RL76.js → chunk-YQEAA6LT.js} +7 -3
- package/dist/chunk-YQEAA6LT.js.map +1 -0
- package/dist/chunk-YV4L3ILF.js +9 -0
- package/dist/chunk-YV4L3ILF.js.map +1 -0
- package/dist/{chunk-LLOLUHVG.js → chunk-YWFG7ZX7.js} +1358 -2746
- package/dist/chunk-YWFG7ZX7.js.map +1 -0
- package/dist/chunk-ZYRGEKWS.js +216 -0
- package/dist/chunk-ZYRGEKWS.js.map +1 -0
- package/dist/client.d.ts +7 -4
- package/dist/clipboard.js +1 -0
- package/dist/commands/types.d.ts +2 -0
- package/dist/components/anthropic-mark.d.ts +3 -0
- package/dist/components/approval-surface.d.ts +15 -0
- package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
- package/dist/components/artifacts/artifact-sandbox.d.ts +27 -0
- package/dist/components/artifacts/artifact-surface.d.ts +3 -1
- 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 +46 -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 +2 -1
- package/dist/components/artifacts/index.d.ts +8 -1
- 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 +48 -3
- package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
- package/dist/components/artifacts/site-view.d.ts +23 -0
- package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -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 +10 -1
- package/dist/components/chat-composer.d.ts +21 -3
- package/dist/components/child-session-link.d.ts +5 -0
- package/dist/components/claude-mark.d.ts +3 -0
- package/dist/components/code-editor.d.ts +1 -4
- package/dist/components/composer.d.ts +45 -4
- package/dist/components/computer-viewer.d.ts +4 -1
- package/dist/components/copy-button.d.ts +3 -1
- package/dist/components/desktop-viewer.d.ts +1 -1
- package/dist/components/enrollment-consent.d.ts +6 -3
- package/dist/components/file-browser.d.ts +10 -1
- package/dist/components/fleet-tile.d.ts +2 -2
- package/dist/components/grok-mark.d.ts +26 -0
- package/dist/components/human-input-form.d.ts +21 -2
- package/dist/components/human-input-surface.d.ts +6 -3
- package/dist/components/machine-card.d.ts +4 -1
- package/dist/components/machines/machine-detail.d.ts +4 -1
- package/dist/components/machines/machine-operation-policy.d.ts +11 -0
- package/dist/components/machines-dashboard.d.ts +3 -1
- package/dist/components/markdown-table-layout.d.ts +12 -0
- package/dist/components/markdown.d.ts +47 -3
- package/dist/components/message-timeline.d.ts +72 -9
- 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 +62 -13
- package/dist/components/open-geni-chat.d.ts +55 -0
- package/dist/components/open-geni-links.d.ts +68 -0
- package/dist/components/openrouter-mark.d.ts +6 -0
- package/dist/components/pierre-file.d.ts +1 -1
- package/dist/components/preview-loading.d.ts +2 -0
- package/dist/components/queue-item-content.d.ts +9 -0
- package/dist/components/sandbox-files.d.ts +13 -2
- package/dist/components/sandbox-workspace.d.ts +43 -3
- package/dist/components/session-capability-frame.d.ts +35 -0
- package/dist/components/session-chrome.d.ts +66 -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 +86 -0
- package/dist/components/session-list.d.ts +36 -0
- package/dist/components/session-mcp-capability-card.d.ts +41 -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/tip-follow.d.ts +16 -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/components/workspace-dock.d.ts +6 -2
- package/dist/composer.d.ts +5 -4
- package/dist/composer.js +15 -9
- package/dist/computer-viewer-ENHVAZ2Q.js +19 -0
- package/dist/computer-viewer-ENHVAZ2Q.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 +16 -0
- package/dist/connect.d.ts +21 -0
- package/dist/connect.js +2129 -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 +26 -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 +14 -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 +21 -0
- package/dist/editor.js.map +1 -0
- package/dist/embedded-session-client.d.ts +23 -0
- package/dist/file-node-visibility.d.ts +15 -0
- package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-YZ3ZKWMM.js} +2 -1
- package/dist/fleet-decision-row-YZ3ZKWMM.js.map +1 -0
- package/dist/hooks/channel-cache.d.ts +23 -0
- package/dist/hooks/latest-question.d.ts +25 -0
- package/dist/hooks/shared-machines-list.d.ts +14 -0
- package/dist/hooks/use-attached-browsers.d.ts +2 -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-channels.d.ts +1 -0
- package/dist/hooks/use-codex-accounts.d.ts +25 -7
- package/dist/hooks/use-composer.d.ts +45 -9
- 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 +2 -0
- package/dist/hooks/use-connect.d.ts +22 -0
- package/dist/hooks/use-desktop-stream.d.ts +1 -1
- package/dist/hooks/use-file-attachments.d.ts +21 -2
- package/dist/hooks/use-machine-chip.d.ts +3 -3
- package/dist/hooks/use-machines.d.ts +19 -1
- package/dist/hooks/use-sandbox-files.d.ts +5 -1
- package/dist/hooks/use-session-background-commands.d.ts +14 -0
- package/dist/hooks/use-session-events.d.ts +30 -8
- package/dist/hooks/use-session-lineage.d.ts +4 -0
- package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
- package/dist/hooks/use-session.d.ts +6 -0
- package/dist/hooks/use-turn-queue.d.ts +12 -0
- package/dist/hooks/use-usage.d.ts +40 -0
- package/dist/hooks/use-workspace-edit.d.ts +4 -0
- package/dist/hooks/use-workspace-sessions.d.ts +27 -5
- package/dist/human-input.d.ts +3 -1
- package/dist/identity-link-accounts.d.ts +11 -0
- package/dist/identity-link-consent.d.ts +18 -0
- package/dist/index.d.ts +60 -17
- package/dist/index.js +2237 -6200
- package/dist/index.js.map +1 -1
- package/dist/interaction.d.ts +1 -1
- package/dist/interaction.js +35 -184
- package/dist/interaction.js.map +1 -1
- package/dist/latest-question-755OW5DS.js +117 -0
- package/dist/latest-question-755OW5DS.js.map +1 -0
- package/dist/lib/error-message.d.ts +7 -0
- package/dist/lib/format.d.ts +36 -2
- package/dist/lib/host-theme.d.ts +70 -0
- package/dist/lib/interaction-errors.d.ts +6 -0
- package/dist/lib/menu-styles.d.ts +22 -0
- package/dist/lib/pierre-diffs-loader.d.ts +20 -0
- package/dist/lib/workbench-peers.d.ts +36 -0
- package/dist/lib/xterm-theme.d.ts +7 -5
- package/dist/machines.d.ts +4 -2
- package/dist/machines.js +14 -4
- package/dist/markdown-table-layout-QXSLK4BY.js +106 -0
- package/dist/markdown-table-layout-QXSLK4BY.js.map +1 -0
- package/dist/mcp-connection-status.d.ts +14 -0
- package/dist/model-policy-picker-menu-PWRI7R2X.js +14 -0
- package/dist/model-policy-picker-menu-PWRI7R2X.js.map +1 -0
- package/dist/model-policy.d.ts +19 -3
- package/dist/model-policy.js +9 -1
- package/dist/older-history.d.ts +30 -0
- package/dist/platform-activity-row-627BFZ46.js +182 -0
- package/dist/platform-activity-row-627BFZ46.js.map +1 -0
- package/dist/plugin-details.d.ts +14 -0
- package/dist/plugin-discovery.d.ts +25 -0
- package/dist/provider.d.ts +13 -1
- package/dist/{queue-surface-implementation-2KVJTYXH.js → queue-surface-implementation-ZHFI5JBP.js} +131 -44
- package/dist/queue-surface-implementation-ZHFI5JBP.js.map +1 -0
- package/dist/realtime/realtime-control.d.ts +10 -3
- package/dist/realtime.js +229 -83
- package/dist/realtime.js.map +1 -1
- package/dist/sandbox-files-BBC47SLD.js +20 -0
- package/dist/sandbox-files-BBC47SLD.js.map +1 -0
- package/dist/session-auth-recommendation.d.ts +5 -0
- package/dist/session-capability-policy.d.ts +12 -0
- package/dist/session-ui.d.ts +30 -2
- package/dist/session-ui.js +85 -7
- package/dist/session-ui.js.map +1 -1
- package/dist/session.d.ts +8 -2
- package/dist/session.js +30 -19
- package/dist/sites-ui.d.ts +34 -0
- package/dist/sites.d.ts +3 -0
- package/dist/sites.js +11 -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 +31 -0
- package/dist/terminal.js.map +1 -0
- package/dist/timeline/activity-rail.d.ts +11 -2
- package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
- package/dist/timeline/compaction-copy.d.ts +10 -0
- package/dist/timeline/entrance.d.ts +13 -1
- package/dist/timeline/genie-loading.d.ts +34 -0
- package/dist/timeline/index.d.ts +6 -2
- package/dist/timeline/knowledge-receipt.d.ts +17 -0
- package/dist/timeline/platform-activity-row.d.ts +14 -0
- package/dist/timeline/presented-image.d.ts +6 -0
- package/dist/timeline/projection.d.ts +31 -2
- package/dist/timeline/registry.d.ts +2 -0
- package/dist/timeline/retained-image.d.ts +18 -0
- package/dist/timeline/rolling-activity.d.ts +11 -0
- package/dist/timeline/screenshot-lightbox.d.ts +16 -1
- package/dist/timeline/shared.d.ts +8 -3
- 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 +2 -1
- package/dist/timeline/turn-summary.d.ts +32 -3
- package/dist/timeline/types.d.ts +141 -7
- package/dist/timeline-annotation-markers-GNDHTGBD.js +165 -0
- package/dist/timeline-annotation-markers-GNDHTGBD.js.map +1 -0
- package/dist/timeline-annotation-selection-DMLMM2TX.js +241 -0
- package/dist/timeline-annotation-selection-DMLMM2TX.js.map +1 -0
- package/dist/timeline-annotations-dialog-ELRDBHTS.js +273 -0
- package/dist/timeline-annotations-dialog-ELRDBHTS.js.map +1 -0
- package/dist/types/machines.d.ts +2 -2
- package/dist/usage/allowance-copy.d.ts +25 -0
- package/dist/usage/summary.d.ts +35 -0
- package/dist/usage.d.ts +13 -0
- package/dist/usage.js +1074 -0
- package/dist/usage.js.map +1 -0
- package/package.json +44 -4
- package/src/accounts.tsx +1072 -0
- package/src/approvals.ts +8 -1
- package/src/artifacts.ts +42 -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 +22 -13
- 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 +171 -37
- package/src/components/artifacts/artifact-chrome.tsx +413 -0
- package/src/components/artifacts/artifact-sandbox.tsx +185 -0
- package/src/components/artifacts/artifact-surface.tsx +39 -19
- 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 +187 -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 +5 -2
- package/src/components/artifacts/index.ts +44 -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 +338 -5
- package/src/components/artifacts/session-artifact-viewer.tsx +376 -0
- package/src/components/artifacts/site-view.tsx +116 -0
- package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
- package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
- package/src/components/artifacts/spreadsheet-grid.tsx +12 -13
- 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 +1054 -314
- package/src/components/chat-composer.tsx +131 -85
- package/src/components/child-session-link.tsx +27 -0
- package/src/components/claude-mark.tsx +10 -0
- package/src/components/code-editor.tsx +13 -16
- package/src/components/composer-transcription-control.tsx +7 -5
- package/src/components/composer.tsx +376 -49
- package/src/components/computer-viewer.tsx +1041 -329
- package/src/components/copy-button.tsx +13 -5
- package/src/components/desktop-viewer.tsx +1 -1
- package/src/components/enrollment-consent.tsx +65 -7
- package/src/components/enrollment-device-flow.tsx +1 -1
- package/src/components/file-browser.tsx +158 -34
- package/src/components/fleet-tile.tsx +8 -16
- package/src/components/generated-video-player.tsx +4 -2
- package/src/components/grok-mark.tsx +33 -0
- package/src/components/human-input-form.tsx +455 -114
- package/src/components/human-input-surface.tsx +18 -7
- package/src/components/interaction-intervention-banner.tsx +2 -2
- package/src/components/machine-card.tsx +119 -4
- package/src/components/machine-dock-bar.tsx +1 -1
- package/src/components/machine-input-display.ts +23 -2
- package/src/components/machines/machine-detail.tsx +52 -2
- package/src/components/machines/machine-operation-policy.tsx +179 -0
- package/src/components/machines-dashboard.tsx +8 -17
- package/src/components/markdown-table-layout.ts +132 -0
- package/src/components/markdown.tsx +473 -44
- package/src/components/message-timeline.tsx +2498 -663
- package/src/components/model-mark.tsx +90 -0
- package/src/components/model-picker.tsx +15 -4
- package/src/components/model-policy-picker-menu.tsx +424 -0
- package/src/components/model-policy-picker.tsx +337 -381
- package/src/components/open-geni-chat.tsx +319 -0
- package/src/components/open-geni-links.tsx +179 -0
- package/src/components/openrouter-mark.tsx +13 -0
- package/src/components/pierre-diff.tsx +41 -16
- package/src/components/pierre-file.tsx +36 -11
- package/src/components/preview-loading.tsx +154 -0
- package/src/components/queue-item-content.ts +14 -0
- package/src/components/queue-surface-implementation.tsx +132 -42
- package/src/components/queue-surface-state.tsx +3 -1
- package/src/components/sandbox-files.tsx +267 -35
- package/src/components/sandbox-terminal.tsx +48 -11
- package/src/components/sandbox-workspace.tsx +337 -135
- package/src/components/session-capability-frame.tsx +192 -0
- package/src/components/session-chrome.tsx +1027 -328
- 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 +512 -0
- package/src/components/session-list.tsx +250 -0
- package/src/components/session-mcp-capability-card.tsx +680 -0
- package/src/components/session-status.tsx +1 -1
- 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/tip-follow.ts +70 -7
- package/src/components/tooltip.tsx +38 -5
- 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 +194 -49
- package/src/components/workspace-dock.tsx +141 -175
- 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 +307 -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 +235 -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/embedded-session-client.ts +104 -0
- package/src/file-node-visibility.ts +66 -0
- package/src/hooks/channel-cache.ts +104 -0
- package/src/hooks/internal.ts +3 -2
- package/src/hooks/latest-question.ts +164 -0
- package/src/hooks/shared-machines-list.ts +239 -0
- package/src/hooks/use-attached-browsers.ts +5 -1
- package/src/hooks/use-available-models.ts +20 -14
- package/src/hooks/use-browser-frame-stream.ts +25 -3
- package/src/hooks/use-browser-session.ts +271 -71
- package/src/hooks/use-browser-sessions.ts +7 -1
- package/src/hooks/use-channels.ts +32 -10
- package/src/hooks/use-codex-accounts.ts +78 -21
- package/src/hooks/use-composer.ts +1034 -320
- package/src/hooks/use-computer-frame-stream.ts +39 -16
- package/src/hooks/use-computer-input-posture.ts +94 -0
- package/src/hooks/use-computer-session.ts +110 -32
- package/src/hooks/use-computer-sessions.ts +8 -1
- package/src/hooks/use-connect.ts +23 -0
- package/src/hooks/use-desktop-stream.ts +19 -28
- package/src/hooks/use-file-attachments.ts +118 -10
- package/src/hooks/use-goal.ts +36 -9
- package/src/hooks/use-human-input.ts +31 -4
- package/src/hooks/use-last-started-turn-policy.ts +15 -13
- package/src/hooks/use-machine-chip.ts +23 -6
- package/src/hooks/use-machines.ts +104 -6
- package/src/hooks/use-sandbox-files.ts +253 -150
- package/src/hooks/use-sandbox-git.ts +58 -29
- package/src/hooks/use-session-background-commands.ts +67 -0
- package/src/hooks/use-session-capabilities.ts +21 -2
- package/src/hooks/use-session-events.ts +759 -433
- package/src/hooks/use-session-lineage.ts +28 -6
- package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
- package/src/hooks/use-session.ts +75 -16
- package/src/hooks/use-slash-commands.ts +6 -11
- package/src/hooks/use-turn-queue.ts +113 -13
- package/src/hooks/use-usage.ts +100 -0
- package/src/hooks/use-voice-input.ts +12 -1
- 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 +99 -11
- package/src/human-input.ts +12 -1
- package/src/identity-link-accounts.tsx +148 -0
- package/src/identity-link-consent.tsx +192 -0
- package/src/index.ts +157 -12
- package/src/interaction.ts +1 -0
- package/src/lib/error-message.ts +37 -0
- package/src/lib/format.ts +150 -14
- package/src/lib/host-theme.ts +511 -0
- package/src/lib/interaction-errors.ts +33 -0
- package/src/lib/menu-styles.ts +44 -0
- package/src/lib/pierre-diffs-loader.ts +53 -0
- package/src/lib/workbench-peers.ts +62 -0
- package/src/lib/xterm-theme.ts +23 -21
- package/src/machines.ts +9 -1
- package/src/mcp-connection-status.ts +35 -0
- package/src/model-policy.ts +223 -69
- package/src/older-history.ts +87 -0
- package/src/plugin-details.tsx +185 -0
- package/src/plugin-discovery.tsx +196 -0
- package/src/provider.tsx +55 -14
- package/src/realtime/dropdown-menu.tsx +19 -12
- package/src/realtime/realtime-control.tsx +274 -60
- package/src/session-auth-recommendation.ts +48 -0
- package/src/session-capability-policy.ts +83 -0
- package/src/session-context.ts +1 -0
- package/src/session-ui.ts +66 -2
- package/src/session.ts +18 -1
- package/src/sites-ui.tsx +402 -0
- package/src/sites.ts +3 -0
- package/src/skill-discovery.tsx +208 -0
- package/src/terminal.ts +26 -0
- package/src/timeline/activity-rail.tsx +171 -80
- package/src/timeline/allowance-exhausted-row.tsx +86 -0
- package/src/timeline/compaction-copy.ts +42 -0
- package/src/timeline/entrance.tsx +28 -3
- package/src/timeline/fleet-decision-projection.ts +2 -1
- package/src/timeline/fleet-decision-row.tsx +1 -0
- package/src/timeline/genie-loading.tsx +136 -0
- package/src/timeline/index.ts +11 -0
- package/src/timeline/knowledge-receipt.tsx +100 -0
- package/src/timeline/parsers.ts +2 -2
- package/src/timeline/platform-activity-row.tsx +216 -0
- package/src/timeline/presented-image.ts +49 -0
- package/src/timeline/projection.ts +1600 -84
- package/src/timeline/registry.ts +15 -3
- package/src/timeline/retained-image.ts +97 -0
- package/src/timeline/rolling-activity.tsx +92 -0
- package/src/timeline/screenshot-lightbox.tsx +115 -17
- package/src/timeline/shared.tsx +47 -15
- package/src/timeline/startup-preference.ts +33 -0
- package/src/timeline/startup-timings.tsx +145 -0
- package/src/timeline/tool-display-name.ts +8 -6
- package/src/timeline/tool-renderers.tsx +497 -128
- package/src/timeline/turn-summary.tsx +208 -44
- package/src/timeline/types.ts +186 -7
- package/src/types/machines.ts +10 -0
- package/src/usage/allowance-copy.ts +64 -0
- package/src/usage/summary.ts +93 -0
- package/src/usage.ts +50 -0
- package/styles/compiled.css +2098 -757
- package/styles/connect.css +284 -0
- package/styles/connect.d.ts +1 -0
- package/styles/effective-tokens.css +1 -0
- package/styles/index.css +201 -9
- package/styles/responsive.css +27 -1
- package/styles/session-capability.css +44 -0
- package/styles/tokens.css +135 -65
- package/dist/chunk-5UQPNLIO.js.map +0 -1
- package/dist/chunk-6KLX2RH5.js.map +0 -1
- package/dist/chunk-7WCLAEFV.js.map +0 -1
- package/dist/chunk-B6WPZSTT.js.map +0 -1
- package/dist/chunk-FK6VG4LL.js +0 -90
- package/dist/chunk-FK6VG4LL.js.map +0 -1
- package/dist/chunk-HA46CYQK.js.map +0 -1
- package/dist/chunk-HUIKIDM5.js.map +0 -1
- package/dist/chunk-IGC6A2ZI.js.map +0 -1
- package/dist/chunk-KCGXPP5V.js.map +0 -1
- package/dist/chunk-KZ73RL76.js.map +0 -1
- package/dist/chunk-LAKLF4PA.js +0 -141
- package/dist/chunk-LAKLF4PA.js.map +0 -1
- package/dist/chunk-LLOLUHVG.js.map +0 -1
- package/dist/chunk-MKPIAGVL.js +0 -465
- package/dist/chunk-MKPIAGVL.js.map +0 -1
- package/dist/chunk-PEI6RANI.js.map +0 -1
- package/dist/chunk-R3AZOAB5.js.map +0 -1
- package/dist/chunk-WSK7G5LE.js +0 -170
- package/dist/chunk-WSK7G5LE.js.map +0 -1
- package/dist/chunk-XBZWOM2K.js +0 -218
- package/dist/chunk-XBZWOM2K.js.map +0 -1
- package/dist/chunk-Y7OEDUJ5.js +0 -8810
- package/dist/chunk-Y7OEDUJ5.js.map +0 -1
- package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
- package/dist/hooks/use-packs.d.ts +0 -32
- package/dist/interactive-workbench-viewers-TOHBXJEE.js +0 -15
- package/dist/queue-surface-implementation-2KVJTYXH.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-packs.ts +0 -157
- /package/dist/{interactive-workbench-viewers-TOHBXJEE.js.map → browser-viewer-GTR5XQ7X.js.map} +0 -0
package/dist/realtime.js
CHANGED
|
@@ -3,15 +3,22 @@ import {
|
|
|
3
3
|
PickerAnimatedPage,
|
|
4
4
|
PickerBackHeader,
|
|
5
5
|
PickerNavRow
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import
|
|
6
|
+
} from "./chunk-CR7U7HAR.js";
|
|
7
|
+
import {
|
|
8
|
+
MENU_CHECK_CLASS,
|
|
9
|
+
MENU_CHEVRON_CLASS,
|
|
10
|
+
MENU_ITEM_CLASS,
|
|
11
|
+
MENU_SEPARATOR_CLASS,
|
|
12
|
+
MENU_SURFACE_CLASS
|
|
13
|
+
} from "./chunk-K3HQAKQX.js";
|
|
14
|
+
import "./chunk-XUW2UWQM.js";
|
|
8
15
|
import {
|
|
9
16
|
usePortalTokenSource,
|
|
10
17
|
usePortalTokenStyle
|
|
11
18
|
} from "./chunk-VZTQ73XT.js";
|
|
12
19
|
import {
|
|
13
20
|
useEmbeddedRealtimeSession
|
|
14
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-NEXLLTP4.js";
|
|
15
22
|
import {
|
|
16
23
|
cn
|
|
17
24
|
} from "./chunk-22KP6LR5.js";
|
|
@@ -48,6 +55,7 @@ import { ChevronRightIcon } from "lucide-react";
|
|
|
48
55
|
import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
|
|
49
56
|
import { createContext, useContext } from "react";
|
|
50
57
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
58
|
+
var MENU_MOTION_CLASS = "data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95";
|
|
51
59
|
var DropdownMenuSourceContext = createContext(null);
|
|
52
60
|
function assignRef(ref, value) {
|
|
53
61
|
if (typeof ref === "function") ref(value);
|
|
@@ -88,7 +96,9 @@ function DropdownMenuContent({
|
|
|
88
96
|
"data-slot": "dropdown-menu-content",
|
|
89
97
|
sideOffset,
|
|
90
98
|
className: cn(
|
|
91
|
-
"og-root z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto
|
|
99
|
+
"og-root z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto",
|
|
100
|
+
MENU_SURFACE_CLASS,
|
|
101
|
+
MENU_MOTION_CLASS,
|
|
92
102
|
className
|
|
93
103
|
),
|
|
94
104
|
style: { ...portalStyle, ...style },
|
|
@@ -108,10 +118,7 @@ function DropdownMenuItem({
|
|
|
108
118
|
"data-slot": "dropdown-menu-item",
|
|
109
119
|
"data-inset": inset,
|
|
110
120
|
"data-variant": variant,
|
|
111
|
-
className: cn(
|
|
112
|
-
"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-og-menu outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!",
|
|
113
|
-
className
|
|
114
|
-
),
|
|
121
|
+
className: cn(MENU_ITEM_CLASS, "data-[inset]:pl-9", className),
|
|
115
122
|
...props
|
|
116
123
|
}
|
|
117
124
|
);
|
|
@@ -124,7 +131,7 @@ function DropdownMenuSeparator({
|
|
|
124
131
|
DropdownMenuPrimitive.Separator,
|
|
125
132
|
{
|
|
126
133
|
"data-slot": "dropdown-menu-separator",
|
|
127
|
-
className: cn(
|
|
134
|
+
className: cn(MENU_SEPARATOR_CLASS, className),
|
|
128
135
|
...props
|
|
129
136
|
}
|
|
130
137
|
);
|
|
@@ -143,14 +150,11 @@ function DropdownMenuSubTrigger({
|
|
|
143
150
|
{
|
|
144
151
|
"data-slot": "dropdown-menu-sub-trigger",
|
|
145
152
|
"data-inset": inset,
|
|
146
|
-
className: cn(
|
|
147
|
-
"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-og-menu outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
|
|
148
|
-
className
|
|
149
|
-
),
|
|
153
|
+
className: cn(MENU_ITEM_CLASS, "data-[inset]:pl-9", className),
|
|
150
154
|
...props,
|
|
151
155
|
children: [
|
|
152
156
|
children,
|
|
153
|
-
/* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto
|
|
157
|
+
/* @__PURE__ */ jsx(ChevronRightIcon, { "aria-hidden": "true", className: cn(MENU_CHEVRON_CLASS, "ml-auto") })
|
|
154
158
|
]
|
|
155
159
|
}
|
|
156
160
|
);
|
|
@@ -167,7 +171,9 @@ function DropdownMenuSubContent({
|
|
|
167
171
|
{
|
|
168
172
|
"data-slot": "dropdown-menu-sub-content",
|
|
169
173
|
className: cn(
|
|
170
|
-
"og-root z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden
|
|
174
|
+
"og-root z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden",
|
|
175
|
+
MENU_SURFACE_CLASS,
|
|
176
|
+
MENU_MOTION_CLASS,
|
|
171
177
|
className
|
|
172
178
|
),
|
|
173
179
|
style: { ...portalStyle, ...style },
|
|
@@ -206,6 +212,109 @@ var REALTIME_PROVIDER_META = {
|
|
|
206
212
|
"Your Gateway": { billingClass: "byok", hint: "Billed to your AI Gateway" }
|
|
207
213
|
};
|
|
208
214
|
var REALTIME_MODEL_STORAGE_PREFIX = "opengeni:realtime-model";
|
|
215
|
+
var REALTIME_MODEL_CATALOG_CACHE_TTL_MS = 6e4;
|
|
216
|
+
var REALTIME_MODEL_CATALOG_CACHE_MAX_WORKSPACES = 64;
|
|
217
|
+
var realtimeModelCatalogCache = /* @__PURE__ */ new WeakMap();
|
|
218
|
+
function realtimeModelFallback(codexConnected) {
|
|
219
|
+
return [
|
|
220
|
+
{
|
|
221
|
+
...CODEX_LIVE_MODEL,
|
|
222
|
+
available: codexConnected,
|
|
223
|
+
unavailableReason: codexConnected ? null : CODEX_LIVE_MODEL.unavailableReason
|
|
224
|
+
}
|
|
225
|
+
];
|
|
226
|
+
}
|
|
227
|
+
function realtimeModelCatalogCacheFor(client) {
|
|
228
|
+
const existing = realtimeModelCatalogCache.get(client);
|
|
229
|
+
if (existing) return existing;
|
|
230
|
+
const created = /* @__PURE__ */ new Map();
|
|
231
|
+
realtimeModelCatalogCache.set(client, created);
|
|
232
|
+
return created;
|
|
233
|
+
}
|
|
234
|
+
function readCachedRealtimeModelCatalog(client, workspaceId, now = Date.now()) {
|
|
235
|
+
const cache = realtimeModelCatalogCache.get(client);
|
|
236
|
+
const entry = cache?.get(workspaceId);
|
|
237
|
+
if (!entry || entry.state === "loading") return null;
|
|
238
|
+
if (entry.expiresAt > now) return entry.models;
|
|
239
|
+
cache?.delete(workspaceId);
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
function pruneRealtimeModelCatalogCache(cache, now) {
|
|
243
|
+
for (const [workspaceId, entry] of cache) {
|
|
244
|
+
if (entry.state === "ready" && entry.expiresAt <= now) cache.delete(workspaceId);
|
|
245
|
+
}
|
|
246
|
+
while (cache.size >= REALTIME_MODEL_CATALOG_CACHE_MAX_WORKSPACES) {
|
|
247
|
+
const oldestWorkspaceId = cache.keys().next().value;
|
|
248
|
+
if (oldestWorkspaceId === void 0) return;
|
|
249
|
+
cache.delete(oldestWorkspaceId);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
function loadRealtimeModelCatalog(client, workspaceId, signal) {
|
|
253
|
+
const load = client.getWorkspaceRealtimeModelCatalog;
|
|
254
|
+
if (!load) return null;
|
|
255
|
+
if (signal?.aborted) {
|
|
256
|
+
return Promise.reject(signal.reason ?? new DOMException("Request aborted", "AbortError"));
|
|
257
|
+
}
|
|
258
|
+
const now = Date.now();
|
|
259
|
+
const cache = realtimeModelCatalogCacheFor(client);
|
|
260
|
+
const entry = cache.get(workspaceId);
|
|
261
|
+
if (entry?.state === "loading" && !entry.controller.signal.aborted) {
|
|
262
|
+
return consumeRealtimeModelCatalog(entry, signal);
|
|
263
|
+
}
|
|
264
|
+
if (entry?.state === "ready" && entry.expiresAt > now) return Promise.resolve(entry.models);
|
|
265
|
+
if (entry) cache.delete(workspaceId);
|
|
266
|
+
pruneRealtimeModelCatalogCache(cache, now);
|
|
267
|
+
const controller = new AbortController();
|
|
268
|
+
const promise = load.call(client, workspaceId, { signal: controller.signal }).then((response) => response.models.map(toRealtimeModelOption)).then((models) => {
|
|
269
|
+
const current = cache.get(workspaceId);
|
|
270
|
+
if (current?.state === "loading" && current.promise === promise) {
|
|
271
|
+
cache.delete(workspaceId);
|
|
272
|
+
cache.set(workspaceId, {
|
|
273
|
+
state: "ready",
|
|
274
|
+
models,
|
|
275
|
+
expiresAt: Date.now() + REALTIME_MODEL_CATALOG_CACHE_TTL_MS
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
return models;
|
|
279
|
+
}).catch((error) => {
|
|
280
|
+
const current = cache.get(workspaceId);
|
|
281
|
+
if (current?.state === "loading" && current.promise === promise) cache.delete(workspaceId);
|
|
282
|
+
throw error;
|
|
283
|
+
});
|
|
284
|
+
const loading = {
|
|
285
|
+
state: "loading",
|
|
286
|
+
promise,
|
|
287
|
+
controller,
|
|
288
|
+
consumers: 0
|
|
289
|
+
};
|
|
290
|
+
cache.set(workspaceId, loading);
|
|
291
|
+
return consumeRealtimeModelCatalog(loading, signal);
|
|
292
|
+
}
|
|
293
|
+
function consumeRealtimeModelCatalog(entry, signal) {
|
|
294
|
+
entry.consumers += 1;
|
|
295
|
+
return new Promise((resolve, reject) => {
|
|
296
|
+
let released = false;
|
|
297
|
+
const release = (abandoned) => {
|
|
298
|
+
if (released) return;
|
|
299
|
+
released = true;
|
|
300
|
+
entry.consumers = Math.max(0, entry.consumers - 1);
|
|
301
|
+
if (abandoned && entry.consumers === 0) {
|
|
302
|
+
entry.controller.abort(
|
|
303
|
+
signal?.reason ?? new DOMException("Request abandoned", "AbortError")
|
|
304
|
+
);
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
const onAbort = () => {
|
|
308
|
+
release(true);
|
|
309
|
+
reject(signal?.reason ?? new DOMException("Request aborted", "AbortError"));
|
|
310
|
+
};
|
|
311
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
312
|
+
void entry.promise.then(resolve, reject).finally(() => {
|
|
313
|
+
signal?.removeEventListener("abort", onAbort);
|
|
314
|
+
release(false);
|
|
315
|
+
});
|
|
316
|
+
});
|
|
317
|
+
}
|
|
209
318
|
function codexRealtimeAdmissionAllowed(input) {
|
|
210
319
|
return codexRealtimeAdmissionBlocker(input) === null;
|
|
211
320
|
}
|
|
@@ -226,6 +335,8 @@ function useSessionRealtime(options) {
|
|
|
226
335
|
const audioRef = useRef(null);
|
|
227
336
|
const controllerRef = useRef(null);
|
|
228
337
|
const controllerModelRef = useRef(null);
|
|
338
|
+
const modelContextProviderRef = useRef(options.getModelContext);
|
|
339
|
+
modelContextProviderRef.current = options.getModelContext;
|
|
229
340
|
const [snapshot, setSnapshot] = useState(() => ({
|
|
230
341
|
status: hasStoredSessionRealtimeOwnerProof({
|
|
231
342
|
workspaceId,
|
|
@@ -252,7 +363,7 @@ function useSessionRealtime(options) {
|
|
|
252
363
|
const eventsReadyRef = useRef(options.eventsReady);
|
|
253
364
|
lifecycleRef.current = lifecycle;
|
|
254
365
|
eventsReadyRef.current = options.eventsReady;
|
|
255
|
-
const lifecycleActive = lifecycle
|
|
366
|
+
const lifecycleActive = sessionRealtimeLifecycleIsActive(lifecycle);
|
|
256
367
|
useEffect(() => {
|
|
257
368
|
let disposed = false;
|
|
258
369
|
let controller = null;
|
|
@@ -265,7 +376,8 @@ function useSessionRealtime(options) {
|
|
|
265
376
|
workspaceId,
|
|
266
377
|
sessionId: options.sessionId,
|
|
267
378
|
...audioRef.current ? { remoteAudio: audioRef.current } : {},
|
|
268
|
-
model
|
|
379
|
+
model,
|
|
380
|
+
getModelContext: () => modelContextProviderRef.current?.()
|
|
269
381
|
});
|
|
270
382
|
controllerRef.current = controller;
|
|
271
383
|
controllerModelRef.current = model;
|
|
@@ -356,13 +468,19 @@ function useSessionRealtime(options) {
|
|
|
356
468
|
setOutputMuted
|
|
357
469
|
};
|
|
358
470
|
}
|
|
471
|
+
function sessionRealtimeLifecycleIsActive(lifecycle) {
|
|
472
|
+
if (lifecycle?.state !== "active") return false;
|
|
473
|
+
const leaseExpiresAt = Date.parse(lifecycle.leaseExpiresAt);
|
|
474
|
+
return !Number.isFinite(leaseExpiresAt) || leaseExpiresAt > Date.now();
|
|
475
|
+
}
|
|
359
476
|
function SessionRealtimeControl(props) {
|
|
360
477
|
const lifecycle = useMemo(() => projectSessionRealtimeLifecycle(props.events), [props.events]);
|
|
478
|
+
const lifecycleActive = sessionRealtimeLifecycleIsActive(lifecycle);
|
|
361
479
|
const selection = useRealtimeModelSelection({
|
|
362
480
|
client: props.client,
|
|
363
481
|
workspaceId: props.workspaceId,
|
|
364
482
|
codexConnected: props.codexConnected,
|
|
365
|
-
activeModel: lifecycle?.state === "active" ? lifecycle.model : null
|
|
483
|
+
activeModel: lifecycleActive && lifecycle?.state === "active" ? lifecycle.model : null
|
|
366
484
|
});
|
|
367
485
|
const selectedModel = selection.selectedModel;
|
|
368
486
|
const realtime = useSessionRealtime({
|
|
@@ -383,7 +501,7 @@ function SessionRealtimeControl(props) {
|
|
|
383
501
|
}, [onVoiceActiveChange, voiceActive]);
|
|
384
502
|
useEffect(() => {
|
|
385
503
|
const pending = autostartModelRef.current;
|
|
386
|
-
if (!pending || autostartStartedRef.current ||
|
|
504
|
+
if (!pending || autostartStartedRef.current || lifecycleActive) return;
|
|
387
505
|
const available = models.some((model) => model.id === pending && model.available);
|
|
388
506
|
if (!available) return;
|
|
389
507
|
if (selectedRealtimeModel.id !== pending) {
|
|
@@ -400,7 +518,7 @@ function SessionRealtimeControl(props) {
|
|
|
400
518
|
});
|
|
401
519
|
}, [
|
|
402
520
|
canStart,
|
|
403
|
-
|
|
521
|
+
lifecycleActive,
|
|
404
522
|
models,
|
|
405
523
|
props.sessionId,
|
|
406
524
|
props.workspaceId,
|
|
@@ -418,6 +536,7 @@ function SessionRealtimeControl(props) {
|
|
|
418
536
|
modelAvailable: selectedModel.available,
|
|
419
537
|
menuSide: "top",
|
|
420
538
|
modelMenu: props.modelMenu ?? "split",
|
|
539
|
+
showDiagnostics: props.showDiagnostics,
|
|
421
540
|
audioRef: realtime.audioRef,
|
|
422
541
|
selectedModel,
|
|
423
542
|
models: selection.models,
|
|
@@ -437,31 +556,51 @@ function useRealtimeModelSelection(options) {
|
|
|
437
556
|
workspaceId: options.workspaceId
|
|
438
557
|
});
|
|
439
558
|
const activeModel = options.activeModel;
|
|
440
|
-
const
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
available: options.codexConnected,
|
|
444
|
-
unavailableReason: options.codexConnected ? null : CODEX_LIVE_MODEL.unavailableReason
|
|
445
|
-
}
|
|
446
|
-
]);
|
|
447
|
-
const [selectedModelId, setSelectedModelId] = useState(
|
|
448
|
-
() => readRealtimeModelPreference(workspaceId) ?? CODEX_LIVE_MODEL.id
|
|
559
|
+
const initialCachedCatalog = readCachedRealtimeModelCatalog(client, workspaceId);
|
|
560
|
+
const [catalog, setCatalog] = useState(
|
|
561
|
+
() => initialCachedCatalog ?? realtimeModelFallback(options.codexConnected)
|
|
449
562
|
);
|
|
563
|
+
const catalogScopeRef = useRef({
|
|
564
|
+
client,
|
|
565
|
+
workspaceId,
|
|
566
|
+
source: initialCachedCatalog ? "cache" : "fallback"
|
|
567
|
+
});
|
|
568
|
+
const [selectedModelId, setSelectedModelId] = useState(() => {
|
|
569
|
+
const preferred = readRealtimeModelPreference(workspaceId) ?? CODEX_LIVE_MODEL.id;
|
|
570
|
+
if (!initialCachedCatalog) return preferred;
|
|
571
|
+
if (initialCachedCatalog.some((model) => model.id === preferred && model.available)) {
|
|
572
|
+
return preferred;
|
|
573
|
+
}
|
|
574
|
+
return initialCachedCatalog.find((model) => model.available)?.id ?? CODEX_LIVE_MODEL.id;
|
|
575
|
+
});
|
|
450
576
|
useEffect(() => {
|
|
451
577
|
let disposed = false;
|
|
452
|
-
const
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
if (disposed) return;
|
|
456
|
-
const models = response.models.map(toRealtimeModelOption);
|
|
578
|
+
const requestAbort = new AbortController();
|
|
579
|
+
const applyCatalog = (models) => {
|
|
580
|
+
catalogScopeRef.current = { client, workspaceId, source: "cache" };
|
|
457
581
|
setCatalog(models);
|
|
458
582
|
setSelectedModelId((current) => {
|
|
459
583
|
if (models.some((model) => model.id === current && model.available)) return current;
|
|
460
584
|
return models.find((model) => model.available)?.id ?? CODEX_LIVE_MODEL.id;
|
|
461
585
|
});
|
|
586
|
+
};
|
|
587
|
+
const cached = readCachedRealtimeModelCatalog(client, workspaceId);
|
|
588
|
+
if (cached) {
|
|
589
|
+
const scope = catalogScopeRef.current;
|
|
590
|
+
if (scope.client !== client || scope.workspaceId !== workspaceId || scope.source !== "cache") {
|
|
591
|
+
applyCatalog(cached);
|
|
592
|
+
}
|
|
593
|
+
return;
|
|
594
|
+
}
|
|
595
|
+
const loading = loadRealtimeModelCatalog(client, workspaceId, requestAbort.signal);
|
|
596
|
+
if (!loading) return;
|
|
597
|
+
void loading.then((models) => {
|
|
598
|
+
if (disposed) return;
|
|
599
|
+
applyCatalog(models);
|
|
462
600
|
}).catch(() => void 0);
|
|
463
601
|
return () => {
|
|
464
602
|
disposed = true;
|
|
603
|
+
requestAbort.abort();
|
|
465
604
|
};
|
|
466
605
|
}, [client, workspaceId]);
|
|
467
606
|
useEffect(() => {
|
|
@@ -498,16 +637,31 @@ var IDLE_REALTIME_SNAPSHOT = {
|
|
|
498
637
|
error: null
|
|
499
638
|
};
|
|
500
639
|
function NewSessionRealtimeControl(props) {
|
|
501
|
-
|
|
640
|
+
if (props.models && props.selectedModel && props.onSelectModel) {
|
|
641
|
+
return /* @__PURE__ */ jsx2(
|
|
642
|
+
NewSessionRealtimeControlView,
|
|
643
|
+
{
|
|
644
|
+
...props,
|
|
645
|
+
selection: {
|
|
646
|
+
models: props.models,
|
|
647
|
+
selectedModel: props.selectedModel,
|
|
648
|
+
selectModel: props.onSelectModel
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
);
|
|
652
|
+
}
|
|
653
|
+
return /* @__PURE__ */ jsx2(NewSessionRealtimeControlWithInternalSelection, { ...props });
|
|
654
|
+
}
|
|
655
|
+
function NewSessionRealtimeControlWithInternalSelection(props) {
|
|
656
|
+
const selection = useRealtimeModelSelection({
|
|
502
657
|
client: props.client,
|
|
503
658
|
workspaceId: props.workspaceId,
|
|
504
659
|
codexConnected: props.codexConnected
|
|
505
660
|
});
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
} : internalSelection;
|
|
661
|
+
return /* @__PURE__ */ jsx2(NewSessionRealtimeControlView, { ...props, selection });
|
|
662
|
+
}
|
|
663
|
+
function NewSessionRealtimeControlView(props) {
|
|
664
|
+
const selection = props.selection;
|
|
511
665
|
const audioRef = useRef(null);
|
|
512
666
|
const [starting, setStarting] = useState(false);
|
|
513
667
|
const [error, setError] = useState(null);
|
|
@@ -576,7 +730,7 @@ function RealtimeVoiceControl(props) {
|
|
|
576
730
|
const mainDisabled = props.snapshot.status === "stopping" || props.snapshot.status === "lost_owner" || !modeOwned && !props.canStart || props.snapshot.status === "starting" && !modeOwned;
|
|
577
731
|
const mainLabel = audioBlocked ? "Resume voice audio" : retryConnection ? "Retry voice connection" : modeOwned ? "End voice conversation" : `Start voice with ${selectedModel.label}`;
|
|
578
732
|
const runMainAction = audioBlocked ? props.onRetryAudibleOutput : retryConnection ? props.onRetry : modeOwned ? props.onStop : props.onStart;
|
|
579
|
-
const diagnosticsVisible = props.showDiagnostics ??
|
|
733
|
+
const diagnosticsVisible = props.showDiagnostics ?? false;
|
|
580
734
|
const modelMenu = props.modelMenu ?? "split";
|
|
581
735
|
const showAttachedModelMenu = modelMenu === "split" || modelMenu === "split-desktop";
|
|
582
736
|
const desktopOnlyModelMenu = modelMenu === "split-desktop";
|
|
@@ -732,7 +886,7 @@ function RealtimeVoiceControl(props) {
|
|
|
732
886
|
align: "end",
|
|
733
887
|
sideOffset: 8,
|
|
734
888
|
collisionPadding: 12,
|
|
735
|
-
className: "og-realtime-menu flex w-72 max-h-[min(20rem,var(--radix-dropdown-menu-content-available-height))] flex-col overflow-hidden
|
|
889
|
+
className: "og-realtime-menu flex w-72 max-h-[min(20rem,var(--radix-dropdown-menu-content-available-height))] flex-col overflow-hidden",
|
|
736
890
|
onCloseAutoFocus: (event) => event.preventDefault(),
|
|
737
891
|
children: [
|
|
738
892
|
/* @__PURE__ */ jsx2("div", { className: "min-h-0 flex-1 overflow-y-auto overscroll-contain", children: /* @__PURE__ */ jsx2(
|
|
@@ -753,8 +907,9 @@ function RealtimeVoiceControl(props) {
|
|
|
753
907
|
}
|
|
754
908
|
}
|
|
755
909
|
) }),
|
|
756
|
-
status.phase !== "idle"
|
|
757
|
-
|
|
910
|
+
status.phase !== "idle" && // Say it once: the selected model's row already carries its reason.
|
|
911
|
+
!(status.phase === "unavailable" && pickerProvider === selectedModel.provider && selectedModel.unavailableReason === status.detail) ? /* @__PURE__ */ jsxs2(Fragment, { children: [
|
|
912
|
+
/* @__PURE__ */ jsx2(DropdownMenuSeparator, {}),
|
|
758
913
|
/* @__PURE__ */ jsxs2("div", { className: "px-2.5 py-2", role: "status", "aria-live": "polite", children: [
|
|
759
914
|
/* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2 text-og-sm font-medium text-og-fg", children: [
|
|
760
915
|
/* @__PURE__ */ jsx2(
|
|
@@ -772,7 +927,6 @@ function RealtimeVoiceControl(props) {
|
|
|
772
927
|
audioBlocked ? /* @__PURE__ */ jsxs2(
|
|
773
928
|
DropdownMenuItem,
|
|
774
929
|
{
|
|
775
|
-
className: "rounded-og-md",
|
|
776
930
|
onSelect: () => void props.onRetryAudibleOutput().catch(() => void 0),
|
|
777
931
|
children: [
|
|
778
932
|
/* @__PURE__ */ jsx2(Volume2Icon, {}),
|
|
@@ -780,22 +934,14 @@ function RealtimeVoiceControl(props) {
|
|
|
780
934
|
]
|
|
781
935
|
}
|
|
782
936
|
) : null,
|
|
783
|
-
retryConnection ? /* @__PURE__ */ jsxs2(
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
onSelect: () => void props.onRetry().catch(() => void 0),
|
|
788
|
-
children: [
|
|
789
|
-
/* @__PURE__ */ jsx2(RotateCcwIcon, {}),
|
|
790
|
-
"Retry connection"
|
|
791
|
-
]
|
|
792
|
-
}
|
|
793
|
-
) : null,
|
|
937
|
+
retryConnection ? /* @__PURE__ */ jsxs2(DropdownMenuItem, { onSelect: () => void props.onRetry().catch(() => void 0), children: [
|
|
938
|
+
/* @__PURE__ */ jsx2(RotateCcwIcon, {}),
|
|
939
|
+
"Retry connection"
|
|
940
|
+
] }) : null,
|
|
794
941
|
modeOwned && props.snapshot.status !== "lost_owner" ? /* @__PURE__ */ jsxs2(
|
|
795
942
|
DropdownMenuItem,
|
|
796
943
|
{
|
|
797
944
|
variant: "destructive",
|
|
798
|
-
className: "rounded-og-md",
|
|
799
945
|
disabled: props.snapshot.status === "stopping",
|
|
800
946
|
onSelect: () => void props.onStop().catch(() => void 0),
|
|
801
947
|
children: [
|
|
@@ -824,28 +970,28 @@ function RealtimeVoiceModelPanel(props) {
|
|
|
824
970
|
const [provider, setProvider] = useState(null);
|
|
825
971
|
const [direction, setDirection] = useState(1);
|
|
826
972
|
return /* @__PURE__ */ jsxs2("div", { className: "flex min-h-0 flex-1 flex-col", "data-testid": "realtime-voice-model-panel", children: [
|
|
827
|
-
/* @__PURE__ */ jsxs2("div", { className: "flex shrink-0 items-
|
|
973
|
+
/* @__PURE__ */ jsxs2("div", { className: "flex min-h-10 shrink-0 items-center gap-2 border-b border-og-border px-2 pb-2", children: [
|
|
828
974
|
props.leading,
|
|
829
|
-
/* @__PURE__ */
|
|
830
|
-
/* @__PURE__ */ jsx2("div", { className: "text-og-menu font-medium text-og-fg", children: "Voice model" }),
|
|
831
|
-
/* @__PURE__ */ jsx2("p", { className: "mt-0.5 text-og-control text-og-fg-subtle", children: "Used when you start a voice conversation." })
|
|
832
|
-
] })
|
|
975
|
+
/* @__PURE__ */ jsx2("div", { className: "min-w-0 flex-1 text-og-menu font-medium text-og-fg", children: "Voice model" })
|
|
833
976
|
] }),
|
|
834
|
-
/* @__PURE__ */
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
977
|
+
/* @__PURE__ */ jsxs2("div", { className: "min-h-0 flex-1 overflow-y-auto overscroll-contain p-2", children: [
|
|
978
|
+
/* @__PURE__ */ jsx2("p", { className: "mb-3 text-og-control text-og-fg-muted", children: "Used when you start a voice conversation." }),
|
|
979
|
+
/* @__PURE__ */ jsx2(
|
|
980
|
+
RealtimeModelPickerMenu,
|
|
981
|
+
{
|
|
982
|
+
models: props.models,
|
|
983
|
+
selectedModel: props.selectedModel,
|
|
984
|
+
provider,
|
|
985
|
+
direction,
|
|
986
|
+
disabled: props.disabled === true,
|
|
987
|
+
onProviderChange: (next, nextDirection) => {
|
|
988
|
+
setDirection(nextDirection);
|
|
989
|
+
setProvider(next);
|
|
990
|
+
},
|
|
991
|
+
onSelect: props.onSelect
|
|
992
|
+
}
|
|
993
|
+
)
|
|
994
|
+
] })
|
|
849
995
|
] });
|
|
850
996
|
}
|
|
851
997
|
function RealtimeMuteButton(props) {
|
|
@@ -911,7 +1057,7 @@ function RealtimeModelPickerMenu(props) {
|
|
|
911
1057
|
title: model.unavailableReason ?? model.description,
|
|
912
1058
|
active: selected,
|
|
913
1059
|
showChevron: false,
|
|
914
|
-
trailing: selected ? /* @__PURE__ */ jsx2(CheckIcon, { className:
|
|
1060
|
+
trailing: selected ? /* @__PURE__ */ jsx2(CheckIcon, { className: MENU_CHECK_CLASS, "aria-hidden": true }) : void 0,
|
|
915
1061
|
testId: `realtime-model-choice-${model.id}`,
|
|
916
1062
|
onClick: () => props.onSelect(model.id)
|
|
917
1063
|
},
|
|
@@ -960,10 +1106,10 @@ function RealtimeDiagnosticsMenu({ snapshot }) {
|
|
|
960
1106
|
["diagnostic", snapshot.diagnostic?.kind ?? "none"]
|
|
961
1107
|
];
|
|
962
1108
|
return /* @__PURE__ */ jsxs2(Fragment, { children: [
|
|
963
|
-
/* @__PURE__ */ jsx2(DropdownMenuSeparator, {
|
|
1109
|
+
/* @__PURE__ */ jsx2(DropdownMenuSeparator, {}),
|
|
964
1110
|
/* @__PURE__ */ jsxs2(DropdownMenuSub, { children: [
|
|
965
|
-
/* @__PURE__ */ jsx2(DropdownMenuSubTrigger, { className: "
|
|
966
|
-
/* @__PURE__ */ jsx2(DropdownMenuSubContent, { className: "max-h-80 w-72 overflow-y-auto
|
|
1111
|
+
/* @__PURE__ */ jsx2(DropdownMenuSubTrigger, { className: "text-og-fg-muted", children: "Realtime diagnostics" }),
|
|
1112
|
+
/* @__PURE__ */ jsx2(DropdownMenuSubContent, { className: "max-h-80 w-72 overflow-y-auto", children: rows.map(([label, value]) => /* @__PURE__ */ jsxs2(
|
|
967
1113
|
DropdownMenuItem,
|
|
968
1114
|
{
|
|
969
1115
|
disabled: true,
|
|
@@ -1137,7 +1283,7 @@ function RealtimeStatusDot(props) {
|
|
|
1137
1283
|
}
|
|
1138
1284
|
function voiceButtonTone(phase) {
|
|
1139
1285
|
if (phase === "listening" || phase === "speaking") {
|
|
1140
|
-
return "border border-og-
|
|
1286
|
+
return "border border-og-primary-border bg-og-primary text-og-primary-fg hover:bg-og-primary-hover";
|
|
1141
1287
|
}
|
|
1142
1288
|
if (phase === "blocked" || phase === "error") {
|
|
1143
1289
|
return "border border-og-status-waiting/35 bg-og-status-waiting/10 text-og-status-waiting hover:bg-og-status-waiting/15";
|
|
@@ -1149,7 +1295,7 @@ function voiceButtonTone(phase) {
|
|
|
1149
1295
|
}
|
|
1150
1296
|
function voiceChevronTone(phase) {
|
|
1151
1297
|
if (phase === "listening" || phase === "speaking") {
|
|
1152
|
-
return "border border-l-0 border-og-
|
|
1298
|
+
return "border border-l-0 border-og-primary-border bg-og-primary text-og-primary-fg hover:bg-og-primary-hover";
|
|
1153
1299
|
}
|
|
1154
1300
|
if (phase === "blocked" || phase === "error") {
|
|
1155
1301
|
return "border border-l-0 border-og-status-waiting/35 bg-og-status-waiting/10 text-og-status-waiting hover:bg-og-status-waiting/15";
|