@opengeni/react 3.3.2 → 3.4.1-canary.38960406141001
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +769 -22
- package/dist/accounts.js +2 -0
- package/dist/accounts.js.map +1 -1
- package/dist/approvals.d.ts +2 -1
- package/dist/artifacts-document.js +5 -3
- package/dist/artifacts-presentation.js +5 -3
- package/dist/artifacts-spreadsheet.d.ts +1 -1
- package/dist/artifacts-spreadsheet.js +5 -3
- package/dist/artifacts.d.ts +5 -1
- package/dist/artifacts.js +536 -42
- package/dist/artifacts.js.map +1 -1
- package/dist/browser-viewer-ZWR6MWJ7.js +19 -0
- package/dist/capability-catalog-row.d.ts +20 -0
- package/dist/capability-logo-fallback.d.ts +3 -0
- package/dist/chat-interactive-block-4EUKJXUO.js +14 -0
- package/dist/chunk-2DDJ6YH6.js +41 -0
- package/dist/chunk-2DDJ6YH6.js.map +1 -0
- package/dist/chunk-2HVLQ26H.js +183 -0
- package/dist/chunk-2HVLQ26H.js.map +1 -0
- package/dist/{chunk-XYRDDSXF.js → chunk-2I6R3GCZ.js} +4285 -3980
- package/dist/chunk-2I6R3GCZ.js.map +1 -0
- package/dist/{chunk-JAQ5K7W6.js → chunk-2SFFYIH3.js} +1178 -166
- package/dist/chunk-2SFFYIH3.js.map +1 -0
- package/dist/chunk-3PVDYTTB.js +24 -0
- package/dist/chunk-3PVDYTTB.js.map +1 -0
- package/dist/chunk-3RJKUVCA.js +14068 -0
- package/dist/chunk-3RJKUVCA.js.map +1 -0
- package/dist/chunk-3UZCWK46.js +298 -0
- package/dist/chunk-3UZCWK46.js.map +1 -0
- package/dist/chunk-47CKUXTW.js +293 -0
- package/dist/chunk-47CKUXTW.js.map +1 -0
- package/dist/chunk-4QYP6QUI.js +109 -0
- package/dist/chunk-4QYP6QUI.js.map +1 -0
- package/dist/chunk-5EY26VZ7.js +1053 -0
- package/dist/chunk-5EY26VZ7.js.map +1 -0
- package/dist/chunk-5I4VRWBB.js +56 -0
- package/dist/chunk-5I4VRWBB.js.map +1 -0
- package/dist/chunk-5WOR7UCL.js +191 -0
- package/dist/chunk-5WOR7UCL.js.map +1 -0
- package/dist/chunk-5YJLGOM5.js +51 -0
- package/dist/chunk-5YJLGOM5.js.map +1 -0
- package/dist/chunk-6JFN3OWG.js +386 -0
- package/dist/chunk-6JFN3OWG.js.map +1 -0
- package/dist/chunk-7QJT5O4S.js +35 -0
- package/dist/chunk-7QJT5O4S.js.map +1 -0
- package/dist/chunk-A55KV72M.js +402 -0
- package/dist/chunk-A55KV72M.js.map +1 -0
- package/dist/chunk-ADWCLI4G.js +2028 -0
- package/dist/chunk-ADWCLI4G.js.map +1 -0
- package/dist/chunk-B27E3V37.js +29 -0
- package/dist/chunk-B27E3V37.js.map +1 -0
- package/dist/chunk-B7TC2A33.js +83 -0
- package/dist/chunk-B7TC2A33.js.map +1 -0
- package/dist/chunk-BLL56F7R.js +385 -0
- package/dist/chunk-BLL56F7R.js.map +1 -0
- package/dist/chunk-BOFEQC6K.js +162 -0
- package/dist/chunk-BOFEQC6K.js.map +1 -0
- package/dist/chunk-CM7LVUKC.js +35 -0
- package/dist/chunk-CM7LVUKC.js.map +1 -0
- package/dist/chunk-CORUP6JB.js +122 -0
- package/dist/chunk-CORUP6JB.js.map +1 -0
- package/dist/chunk-CSX5FFKZ.js +35 -0
- package/dist/chunk-CSX5FFKZ.js.map +1 -0
- package/dist/chunk-EGVHJKGJ.js +3125 -0
- package/dist/chunk-EGVHJKGJ.js.map +1 -0
- package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
- package/dist/chunk-G76LSA76.js.map +1 -0
- package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
- package/dist/chunk-GQMRL52F.js.map +1 -0
- package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
- package/dist/chunk-GUUXOISA.js.map +1 -0
- package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
- package/dist/chunk-I7X2P4FU.js.map +1 -0
- package/dist/chunk-IGFZFLI2.js +1390 -0
- package/dist/chunk-IGFZFLI2.js.map +1 -0
- package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
- package/dist/chunk-IMSUVYQB.js.map +1 -0
- package/dist/chunk-IOYHDEP3.js +38 -0
- package/dist/chunk-IOYHDEP3.js.map +1 -0
- package/dist/chunk-IZV5FTJC.js +55 -0
- package/dist/chunk-IZV5FTJC.js.map +1 -0
- package/dist/chunk-KF33GTWN.js +343 -0
- package/dist/chunk-KF33GTWN.js.map +1 -0
- package/dist/chunk-KSGQ5ODA.js +457 -0
- package/dist/chunk-KSGQ5ODA.js.map +1 -0
- package/dist/{chunk-ZPBTI3TE.js → chunk-KZC6QRNR.js} +1513 -697
- package/dist/chunk-KZC6QRNR.js.map +1 -0
- package/dist/chunk-LJUMYUBO.js +218 -0
- package/dist/chunk-LJUMYUBO.js.map +1 -0
- package/dist/chunk-LSW2OJVV.js +380 -0
- package/dist/chunk-LSW2OJVV.js.map +1 -0
- package/dist/chunk-M357MHH3.js +2 -0
- package/dist/chunk-M357MHH3.js.map +1 -0
- package/dist/chunk-MK2TQO4Y.js +24 -0
- package/dist/chunk-MK2TQO4Y.js.map +1 -0
- package/dist/chunk-N7S72EXK.js +25 -0
- package/dist/chunk-N7S72EXK.js.map +1 -0
- package/dist/{chunk-YVCHAQZY.js → chunk-NKMYZFHA.js} +616 -621
- package/dist/chunk-NKMYZFHA.js.map +1 -0
- package/dist/chunk-NX4ADH73.js +14 -0
- package/dist/chunk-NX4ADH73.js.map +1 -0
- package/dist/chunk-O7F6UJO4.js +71 -0
- package/dist/chunk-O7F6UJO4.js.map +1 -0
- package/dist/chunk-OYQQJL3J.js +16 -0
- package/dist/chunk-OYQQJL3J.js.map +1 -0
- package/dist/{chunk-H5YGYNXS.js → chunk-P4BNUO57.js} +60 -17
- package/dist/chunk-P4BNUO57.js.map +1 -0
- package/dist/{chunk-JVYQRRC4.js → chunk-PEHTX3V7.js} +21 -1
- package/dist/chunk-PEHTX3V7.js.map +1 -0
- package/dist/chunk-PMV53IMM.js +26 -0
- package/dist/chunk-PMV53IMM.js.map +1 -0
- package/dist/{chunk-KCGXPP5V.js → chunk-PYEOPA4M.js} +13 -7
- package/dist/chunk-PYEOPA4M.js.map +1 -0
- package/dist/{chunk-KZ73RL76.js → chunk-QHUE7E4N.js} +8 -3
- package/dist/chunk-QHUE7E4N.js.map +1 -0
- package/dist/chunk-QV3DJVRZ.js +11 -0
- package/dist/chunk-QV3DJVRZ.js.map +1 -0
- package/dist/chunk-R5SBNG7S.js +810 -0
- package/dist/chunk-R5SBNG7S.js.map +1 -0
- package/dist/chunk-RI42H5IU.js +326 -0
- package/dist/chunk-RI42H5IU.js.map +1 -0
- package/dist/chunk-S2QH6EZ5.js +211 -0
- package/dist/chunk-S2QH6EZ5.js.map +1 -0
- package/dist/chunk-SHLZMAJN.js +304 -0
- package/dist/chunk-SHLZMAJN.js.map +1 -0
- package/dist/chunk-TGXK4BAZ.js +293 -0
- package/dist/chunk-TGXK4BAZ.js.map +1 -0
- package/dist/{chunk-5YK2ZDIG.js → chunk-TNEZNMSN.js} +4 -10
- package/dist/chunk-TNEZNMSN.js.map +1 -0
- package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
- package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
- package/dist/chunk-UNJPZGNK.js +63 -0
- package/dist/chunk-UNJPZGNK.js.map +1 -0
- package/dist/{chunk-IOLVN74D.js → chunk-V5ZUJT2T.js} +175 -42
- package/dist/chunk-V5ZUJT2T.js.map +1 -0
- package/dist/chunk-WBJY57A3.js +402 -0
- package/dist/chunk-WBJY57A3.js.map +1 -0
- package/dist/chunk-WIUKB3LD.js +1911 -0
- package/dist/chunk-WIUKB3LD.js.map +1 -0
- package/dist/{chunk-ICA6R6TW.js → chunk-WNN7NO2N.js} +1451 -355
- package/dist/chunk-WNN7NO2N.js.map +1 -0
- package/dist/{chunk-3AGBGTRT.js → chunk-X5UVUIMF.js} +1712 -1174
- package/dist/chunk-X5UVUIMF.js.map +1 -0
- package/dist/chunk-XDA5QJE7.js +402 -0
- package/dist/chunk-XDA5QJE7.js.map +1 -0
- package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
- package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
- package/dist/chunk-XHF7OYAN.js +1150 -0
- package/dist/chunk-XHF7OYAN.js.map +1 -0
- package/dist/chunk-YSRBFJMQ.js +43 -0
- package/dist/chunk-YSRBFJMQ.js.map +1 -0
- package/dist/chunk-ZOZAPAUO.js +174 -0
- package/dist/chunk-ZOZAPAUO.js.map +1 -0
- package/dist/chunk-ZQV5W7YC.js +809 -0
- package/dist/chunk-ZQV5W7YC.js.map +1 -0
- package/dist/chunk-ZUWF4NF7.js +13 -0
- package/dist/chunk-ZUWF4NF7.js.map +1 -0
- package/dist/client.d.ts +16 -7
- package/dist/clipboard.js +3 -1
- package/dist/commands/types.d.ts +2 -0
- package/dist/components/anthropic-mark.d.ts +3 -0
- package/dist/components/approval-surface.d.ts +19 -6
- package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
- package/dist/components/artifacts/artifact-sandbox.d.ts +30 -0
- package/dist/components/artifacts/artifact-surface.d.ts +4 -2
- package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
- package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
- package/dist/components/artifacts/document-editor.d.ts +4 -2
- package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
- package/dist/components/artifacts/editable-artifact-view.d.ts +48 -0
- package/dist/components/artifacts/editable-document.d.ts +1 -1
- package/dist/components/artifacts/editable-presentation.d.ts +2 -2
- package/dist/components/artifacts/editable-spreadsheet.d.ts +8 -3
- package/dist/components/artifacts/index.d.ts +9 -2
- package/dist/components/artifacts/inline-html-document.d.ts +2 -0
- package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
- package/dist/components/artifacts/presentation-editor.d.ts +6 -2
- package/dist/components/artifacts/published-html-artifact-frame.d.ts +23 -3
- package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
- package/dist/components/artifacts/site-view.d.ts +26 -0
- package/dist/components/artifacts/spreadsheet-command-queue.d.ts +20 -0
- package/dist/components/artifacts/spreadsheet-download.d.ts +7 -0
- package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
- package/dist/components/artifacts/spreadsheet-grid.d.ts +10 -3
- package/dist/components/artifacts/spreadsheet-resize.d.ts +50 -0
- package/dist/components/artifacts/spreadsheet-submissions.d.ts +9 -0
- package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
- package/dist/components/browser-select-control.d.ts +16 -0
- package/dist/components/browser-viewer.d.ts +11 -2
- package/dist/components/chat-composer.d.ts +21 -3
- package/dist/components/child-session-link.d.ts +9 -0
- package/dist/components/claude-mark.d.ts +3 -0
- package/dist/components/code-editor.d.ts +1 -4
- package/dist/components/composer-transcription-control.d.ts +7 -0
- package/dist/components/composer.d.ts +34 -67
- package/dist/components/computer-viewer.d.ts +1 -1
- package/dist/components/copy-button.d.ts +3 -1
- package/dist/components/desktop-viewer.d.ts +1 -1
- package/dist/components/grok-mark.d.ts +26 -0
- package/dist/components/human-input-form.d.ts +28 -32
- package/dist/components/human-input-surface.d.ts +7 -2
- package/dist/components/linkified-text.d.ts +18 -0
- package/dist/components/machine-input-display.d.ts +22 -1
- package/dist/components/machines/agent-status-icon.d.ts +6 -0
- package/dist/components/machines/machine-detail.d.ts +7 -1
- package/dist/components/machines/machine-status.d.ts +48 -0
- package/dist/components/markdown-table-layout.d.ts +18 -0
- package/dist/components/markdown.d.ts +37 -4
- package/dist/components/message-timeline.d.ts +86 -7
- package/dist/components/model-mark.d.ts +29 -0
- package/dist/components/model-policy-picker-menu.d.ts +9 -0
- package/dist/components/model-policy-picker.d.ts +35 -28
- package/dist/components/new-conversation.d.ts +32 -0
- package/dist/components/open-geni-chat.d.ts +73 -0
- package/dist/components/open-geni-links.d.ts +68 -0
- package/dist/components/openrouter-mark.d.ts +6 -0
- package/dist/components/opper-mark.d.ts +7 -0
- package/dist/components/preview-loading.d.ts +2 -0
- package/dist/components/provider-recovery-notice.d.ts +16 -0
- package/dist/components/queue-item-content.d.ts +9 -0
- package/dist/components/rehype-secret-refs.d.ts +23 -0
- package/dist/components/remark-soft-line-breaks.d.ts +38 -0
- package/dist/components/sandbox-files.d.ts +3 -1
- package/dist/components/sandbox-workspace.d.ts +18 -0
- package/dist/components/secret-question-field.d.ts +31 -0
- package/dist/components/secret-ref-chip.d.ts +35 -0
- package/dist/components/session-capability-frame.d.ts +37 -0
- package/dist/components/session-chrome.d.ts +57 -8
- package/dist/components/session-commands-panel.d.ts +6 -0
- package/dist/components/session-commands.d.ts +6 -0
- package/dist/components/session-connection-request.d.ts +8 -0
- package/dist/components/session-conversation.d.ts +157 -0
- package/dist/components/session-list.d.ts +39 -0
- package/dist/components/session-mcp-capability-card.d.ts +41 -0
- package/dist/components/session-proxy-scope.d.ts +35 -0
- package/dist/components/session-status.d.ts +4 -1
- package/dist/components/session-usage-limit-notice.d.ts +39 -0
- package/dist/components/timeline-anchor.d.ts +24 -0
- package/dist/components/timeline-annotation-chrome.d.ts +25 -0
- package/dist/components/timeline-annotation-layout.d.ts +42 -0
- package/dist/components/timeline-annotation-markers.d.ts +8 -0
- package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
- package/dist/components/timeline-annotation-shared.d.ts +31 -0
- package/dist/components/timeline-annotations-dialog.d.ts +3 -2
- package/dist/components/timeline-annotations.d.ts +13 -3
- package/dist/components/timeline-reading-progress.d.ts +11 -0
- package/dist/components/timeline-search.d.ts +34 -0
- package/dist/components/timeline-settlement.d.ts +16 -0
- package/dist/components/tool-action-review.d.ts +47 -0
- package/dist/components/tool-review-history.d.ts +25 -0
- package/dist/components/usage-limit-notice.d.ts +49 -0
- package/dist/components/usage-member-list.d.ts +91 -0
- package/dist/components/usage-meter.d.ts +73 -0
- package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
- package/dist/components/user-message-body.d.ts +10 -1
- package/dist/composer-messages.d.ts +74 -0
- package/dist/composer-messages.js +9 -0
- package/dist/composer-messages.js.map +1 -0
- package/dist/composer-voice-events.d.ts +8 -0
- package/dist/composer.d.ts +5 -4
- package/dist/composer.js +26 -13
- package/dist/computer-viewer-GMLDXPON.js +20 -0
- package/dist/computer-viewer-GMLDXPON.js.map +1 -0
- package/dist/connect-account-identity.d.ts +8 -0
- package/dist/connect-accounts.d.ts +15 -0
- package/dist/connect-chooser.d.ts +18 -0
- package/dist/connect-panel.d.ts +18 -0
- package/dist/connect-setup.d.ts +18 -0
- package/dist/connect.d.ts +21 -0
- package/dist/connect.js +2149 -0
- package/dist/connect.js.map +1 -0
- package/dist/connection-catalog.d.ts +38 -0
- package/dist/connection-discovery.d.ts +12 -0
- package/dist/connection-installed.d.ts +17 -0
- package/dist/connection-logo.d.ts +9 -0
- package/dist/connection-service-logo.d.ts +8 -0
- package/dist/connection-service-presentation.d.ts +13 -0
- package/dist/connection-skeleton.d.ts +5 -0
- package/dist/connection-type-picker.d.ts +6 -0
- package/dist/conversation-timeline.d.ts +5 -0
- package/dist/desktop.d.ts +7 -0
- package/dist/desktop.js +27 -0
- package/dist/desktop.js.map +1 -0
- package/dist/device-authorization.d.ts +23 -0
- package/dist/diffs.d.ts +8 -0
- package/dist/diffs.js +15 -0
- package/dist/diffs.js.map +1 -0
- package/dist/discovery-cache.d.ts +5 -0
- package/dist/editor.d.ts +7 -0
- package/dist/editor.js +22 -0
- package/dist/editor.js.map +1 -0
- package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
- package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
- package/dist/embedded-voice-RPHPYVBT.js +18 -0
- package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
- package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
- package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
- package/dist/hooks/latest-question.d.ts +25 -0
- package/dist/hooks/shared-machines-list.d.ts +4 -0
- package/dist/hooks/shared-query.d.ts +113 -0
- package/dist/hooks/use-attached-browsers.d.ts +1 -1
- package/dist/hooks/use-auth-runs.d.ts +1 -4
- package/dist/hooks/use-available-models.d.ts +1 -1
- package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
- package/dist/hooks/use-browser-session.d.ts +12 -1
- package/dist/hooks/use-client-config-flags.d.ts +49 -0
- package/dist/hooks/use-codex-accounts.d.ts +59 -10
- package/dist/hooks/use-composer.d.ts +24 -2
- package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
- package/dist/hooks/use-computer-input-posture.d.ts +13 -0
- package/dist/hooks/use-computer-session.d.ts +4 -0
- package/dist/hooks/use-connect.d.ts +23 -0
- package/dist/hooks/use-desktop-stream.d.ts +1 -1
- package/dist/hooks/use-file-attachments.d.ts +12 -0
- package/dist/hooks/use-goal.d.ts +2 -1
- package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
- package/dist/hooks/use-new-conversation.d.ts +56 -0
- package/dist/hooks/use-new-session-draft.d.ts +74 -0
- package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
- package/dist/hooks/use-sandbox-files.d.ts +4 -1
- package/dist/hooks/use-session-conversation.d.ts +49 -0
- package/dist/hooks/use-session-events.d.ts +26 -5
- package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
- package/dist/hooks/use-session-model-account.d.ts +48 -0
- package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
- package/dist/hooks/use-terminal-stream.d.ts +11 -5
- package/dist/hooks/use-usage.d.ts +40 -0
- package/dist/hooks/use-vaults.d.ts +53 -0
- package/dist/hooks/use-voice-input.d.ts +8 -1
- package/dist/hooks/use-workspace-edit.d.ts +4 -0
- package/dist/hooks/use-workspace-sessions.d.ts +24 -5
- package/dist/human-input-model.d.ts +122 -0
- package/dist/identity-link-accounts.d.ts +11 -0
- package/dist/identity-link-consent.d.ts +18 -0
- package/dist/index.d.ts +82 -20
- package/dist/index.js +2340 -6603
- package/dist/index.js.map +1 -1
- package/dist/interaction.d.ts +1 -1
- package/dist/interaction.js +14 -24
- package/dist/interaction.js.map +1 -1
- package/dist/latest-question-R77KWSUP.js +118 -0
- package/dist/latest-question-R77KWSUP.js.map +1 -0
- package/dist/lib/clipboard.d.ts +7 -0
- package/dist/lib/error-message.d.ts +7 -0
- package/dist/lib/format.d.ts +58 -4
- package/dist/lib/host-theme.d.ts +77 -0
- package/dist/lib/interaction-errors.d.ts +3 -0
- package/dist/lib/menu-styles.d.ts +22 -0
- package/dist/lib/notify-observer.d.ts +2 -0
- package/dist/lib/pierre-diffs-loader.d.ts +20 -0
- package/dist/lib/provider-recovery.d.ts +55 -0
- package/dist/lib/scrollbars.d.ts +11 -0
- package/dist/lib/terminal-input-readiness.d.ts +11 -0
- package/dist/lib/transient-retry.d.ts +25 -0
- package/dist/lib/workbench-peers.d.ts +36 -0
- package/dist/lib/xterm-theme.d.ts +7 -5
- package/dist/machines.js +9 -5
- package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
- package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
- package/dist/mcp-connection-status.d.ts +14 -0
- package/dist/model-mark-paths.d.ts +34 -0
- package/dist/model-mark-paths.js +16 -0
- package/dist/model-mark-paths.js.map +1 -0
- package/dist/model-picker-model.d.ts +111 -0
- package/dist/model-picker-model.js +25 -0
- package/dist/model-picker-model.js.map +1 -0
- package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
- package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
- package/dist/model-policy.d.ts +30 -3
- package/dist/model-policy.js +14 -1
- package/dist/native-previews.d.ts +28 -0
- package/dist/native-previews.js +82 -0
- package/dist/native-previews.js.map +1 -0
- package/dist/new-session-draft.d.ts +7 -0
- package/dist/new-session-draft.js +639 -0
- package/dist/new-session-draft.js.map +1 -0
- package/dist/notification-text.d.ts +27 -0
- package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
- package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
- package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
- package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
- package/dist/older-history.d.ts +3 -2
- package/dist/organization-model.d.ts +32 -0
- package/dist/organization-model.js +65 -0
- package/dist/organization-model.js.map +1 -0
- package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
- package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
- package/dist/plugin-details.d.ts +14 -0
- package/dist/plugin-discovery.d.ts +25 -0
- package/dist/preview-loading-paint.d.ts +20 -0
- package/dist/provider.d.ts +25 -2
- package/dist/queue-presentation-model.d.ts +72 -0
- package/dist/queue-presentation-model.js +38 -0
- package/dist/queue-presentation-model.js.map +1 -0
- package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
- package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
- package/dist/realtime/embedded-new-voice.d.ts +1 -0
- package/dist/realtime/embedded-voice.d.ts +1 -0
- package/dist/realtime/realtime-control.d.ts +4 -65
- package/dist/realtime/session-realtime.d.ts +78 -0
- package/dist/realtime.js +25 -1333
- package/dist/realtime.js.map +1 -1
- package/dist/sandbox-files-O27IPOZW.js +21 -0
- package/dist/sandbox-files-O27IPOZW.js.map +1 -0
- package/dist/sandbox-label-model.d.ts +30 -0
- package/dist/sandbox-label-model.js +20 -0
- package/dist/sandbox-label-model.js.map +1 -0
- package/dist/scrollbars.d.ts +1 -0
- package/dist/scrollbars.js +10 -0
- package/dist/scrollbars.js.map +1 -0
- package/dist/secret-reference-label.d.ts +14 -0
- package/dist/secrets-ui.d.ts +57 -0
- package/dist/session-agents-model.d.ts +10 -0
- package/dist/session-agents-model.js +25 -0
- package/dist/session-agents-model.js.map +1 -0
- package/dist/session-attention-model.d.ts +8 -0
- package/dist/session-attention-model.js +47 -0
- package/dist/session-attention-model.js.map +1 -0
- package/dist/session-auth-recommendation.d.ts +5 -0
- package/dist/session-capability-policy.d.ts +31 -0
- package/dist/session-feedback-model.d.ts +20 -0
- package/dist/session-feedback-model.js +56 -0
- package/dist/session-feedback-model.js.map +1 -0
- package/dist/session-list-model.d.ts +138 -0
- package/dist/session-list-model.js +274 -0
- package/dist/session-list-model.js.map +1 -0
- package/dist/session-realtime-7DJOIHQW.js +21 -0
- package/dist/session-realtime-7DJOIHQW.js.map +1 -0
- package/dist/session-realtime.d.ts +7 -0
- package/dist/session-realtime.js +19 -0
- package/dist/session-realtime.js.map +1 -0
- package/dist/session-status-model.d.ts +36 -0
- package/dist/session-ui.d.ts +39 -1
- package/dist/session-ui.js +126 -12
- package/dist/session-ui.js.map +1 -1
- package/dist/session.d.ts +8 -2
- package/dist/session.js +35 -20
- package/dist/site-snapshot.d.ts +14 -0
- package/dist/sites-ui.d.ts +24 -0
- package/dist/sites.d.ts +3 -0
- package/dist/sites.js +14 -0
- package/dist/sites.js.map +1 -0
- package/dist/skill-discovery.d.ts +47 -0
- package/dist/terminal.d.ts +8 -0
- package/dist/terminal.js +32 -0
- package/dist/terminal.js.map +1 -0
- package/dist/testing/session-scenarios.d.ts +10 -0
- package/dist/testing/session-scenarios.js +367 -0
- package/dist/testing/session-scenarios.js.map +1 -0
- package/dist/timeline/activity-rail.d.ts +11 -2
- package/dist/timeline/agent-identity.d.ts +30 -0
- package/dist/timeline/agent-row.d.ts +31 -0
- package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
- package/dist/timeline/compaction-copy.d.ts +46 -0
- package/dist/timeline/focus-sequence.d.ts +9 -0
- package/dist/timeline/genie-copy.d.ts +3 -0
- package/dist/timeline/genie-loading.d.ts +47 -0
- package/dist/timeline/index.d.ts +10 -5
- package/dist/timeline/knowledge-receipt.d.ts +17 -0
- package/dist/timeline/message-sender.d.ts +19 -0
- package/dist/timeline/notice-presentation.d.ts +13 -0
- package/dist/timeline/parsers.d.ts +11 -0
- package/dist/timeline/patch-apply-command.d.ts +18 -0
- package/dist/timeline/platform-activity-presentation.d.ts +21 -0
- package/dist/timeline/platform-activity-row.d.ts +1 -2
- package/dist/timeline/presented-image.d.ts +11 -0
- package/dist/timeline/projection.d.ts +31 -2
- package/dist/timeline/provider-logo.d.ts +15 -0
- package/dist/timeline/question-nav-model.d.ts +23 -0
- package/dist/timeline/registry.d.ts +12 -1
- package/dist/timeline/retained-image.d.ts +18 -0
- package/dist/timeline/retained-loaders.d.ts +27 -0
- package/dist/timeline/rolling-activity.d.ts +11 -0
- package/dist/timeline/screenshot-lightbox.d.ts +23 -1
- package/dist/timeline/session-usage-limit-row.d.ts +11 -0
- package/dist/timeline/shared.d.ts +4 -1
- package/dist/timeline/startup-dispatch-details.d.ts +5 -0
- package/dist/timeline/startup-preference.d.ts +3 -0
- package/dist/timeline/startup-timings.d.ts +4 -0
- package/dist/timeline/tool-display-name.d.ts +5 -2
- package/dist/timeline/tool-presentation.d.ts +172 -0
- package/dist/timeline/turn-summary-model.d.ts +95 -0
- package/dist/timeline/turn-summary.d.ts +20 -54
- package/dist/timeline/types.d.ts +179 -7
- package/dist/timeline/work-presentation.d.ts +60 -0
- package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
- package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
- package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
- package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
- package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
- package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
- package/dist/timeline-model.d.ts +29 -0
- package/dist/timeline-model.js +254 -0
- package/dist/timeline-model.js.map +1 -0
- package/dist/usage/allowance-copy.d.ts +25 -0
- package/dist/usage/session-usage-limit.d.ts +88 -0
- package/dist/usage/summary.d.ts +35 -0
- package/dist/usage.d.ts +17 -0
- package/dist/usage.js +1187 -0
- package/dist/usage.js.map +1 -0
- package/dist/voice-recording-owner.d.ts +7 -0
- package/package.json +106 -7
- package/src/approvals.ts +8 -1
- package/src/artifacts-spreadsheet.ts +1 -0
- package/src/artifacts.ts +44 -0
- package/src/assets/README.md +8 -0
- package/src/assets/gmail.ico +0 -0
- package/src/assets/outlook.ico +0 -0
- package/src/capability-catalog-row.tsx +94 -0
- package/src/capability-logo-fallback.ts +22 -0
- package/src/client.ts +20 -31
- package/src/commands/registry.ts +18 -15
- package/src/commands/types.ts +2 -0
- package/src/components/anthropic-mark.tsx +10 -0
- package/src/components/approval-surface.tsx +401 -138
- package/src/components/artifacts/artifact-chrome.tsx +413 -0
- package/src/components/artifacts/artifact-sandbox.tsx +193 -0
- package/src/components/artifacts/artifact-surface.tsx +40 -20
- package/src/components/artifacts/chat-interactive-block.tsx +260 -0
- package/src/components/artifacts/deferred-chat-media.tsx +67 -0
- package/src/components/artifacts/document-editor.tsx +141 -16
- package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
- package/src/components/artifacts/editable-artifact-view.tsx +197 -0
- package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
- package/src/components/artifacts/editable-document.tsx +37 -36
- package/src/components/artifacts/editable-presentation.tsx +36 -18
- package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
- package/src/components/artifacts/index.ts +45 -0
- package/src/components/artifacts/inline-html-document.ts +24 -0
- package/src/components/artifacts/latest-task-runner.ts +49 -0
- package/src/components/artifacts/presentation-editor.tsx +323 -67
- package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
- package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
- package/src/components/artifacts/site-view.tsx +121 -0
- package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
- package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
- package/src/components/artifacts/spreadsheet-download.tsx +109 -0
- package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
- package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
- package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
- package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
- package/src/components/artifacts/visualization-assets/base.css +1015 -0
- package/src/components/artifacts/visualization-assets/helpers.html +349 -0
- package/src/components/artifacts/visualization-assets.gen.ts +3 -0
- package/src/components/browser-select-control.tsx +312 -0
- package/src/components/browser-viewer.tsx +778 -318
- package/src/components/chat-composer.tsx +47 -5
- package/src/components/child-session-link.tsx +36 -0
- package/src/components/claude-mark.tsx +11 -0
- package/src/components/code-editor.tsx +13 -16
- package/src/components/composer-transcription-control.tsx +128 -30
- package/src/components/composer.tsx +404 -195
- package/src/components/computer-viewer.tsx +880 -253
- package/src/components/copy-button.tsx +13 -5
- package/src/components/desktop-viewer.tsx +1 -1
- package/src/components/enrollment-consent.tsx +1 -1
- package/src/components/enrollment-device-flow.tsx +1 -1
- package/src/components/file-browser.tsx +10 -14
- package/src/components/fleet-tile.tsx +5 -3
- package/src/components/generated-video-player.tsx +4 -2
- package/src/components/grok-mark.tsx +34 -0
- package/src/components/human-input-form.tsx +590 -283
- package/src/components/human-input-surface.tsx +11 -0
- package/src/components/interaction-intervention-banner.tsx +2 -2
- package/src/components/linkified-text.tsx +79 -0
- package/src/components/machine-card.tsx +35 -78
- package/src/components/machine-dock-bar.tsx +1 -1
- package/src/components/machine-input-display.ts +197 -3
- package/src/components/machines/agent-status-icon.tsx +31 -0
- package/src/components/machines/machine-detail.tsx +200 -31
- package/src/components/machines/machine-operation-policy.tsx +1 -1
- package/src/components/machines/machine-status.ts +241 -0
- package/src/components/machines-dashboard.tsx +2 -17
- package/src/components/markdown-table-layout.ts +143 -0
- package/src/components/markdown.tsx +466 -129
- package/src/components/message-timeline.tsx +2370 -667
- package/src/components/model-mark.tsx +102 -0
- package/src/components/model-picker.tsx +15 -4
- package/src/components/model-policy-picker-menu.tsx +371 -0
- package/src/components/model-policy-picker.tsx +252 -429
- package/src/components/new-conversation.tsx +221 -0
- package/src/components/open-geni-chat.tsx +309 -0
- package/src/components/open-geni-links.tsx +179 -0
- package/src/components/openrouter-mark.tsx +13 -0
- package/src/components/opper-mark.tsx +18 -0
- package/src/components/pierre-diff.tsx +41 -16
- package/src/components/pierre-file.tsx +35 -10
- package/src/components/preview-loading.tsx +109 -0
- package/src/components/provider-recovery-notice.tsx +49 -0
- package/src/components/queue-item-content.ts +14 -0
- package/src/components/queue-surface-implementation.tsx +51 -356
- package/src/components/queue-surface-state.tsx +3 -1
- package/src/components/rehype-secret-refs.ts +98 -0
- package/src/components/remark-soft-line-breaks.ts +166 -0
- package/src/components/sandbox-files.tsx +91 -15
- package/src/components/sandbox-terminal.tsx +84 -13
- package/src/components/sandbox-workspace.tsx +147 -51
- package/src/components/secret-question-field.tsx +324 -0
- package/src/components/secret-ref-chip.tsx +185 -0
- package/src/components/session-capability-frame.tsx +197 -0
- package/src/components/session-chrome.tsx +842 -251
- package/src/components/session-commands-panel.tsx +126 -0
- package/src/components/session-commands.tsx +18 -0
- package/src/components/session-connection-request.tsx +97 -0
- package/src/components/session-conversation.tsx +876 -0
- package/src/components/session-list.tsx +257 -0
- package/src/components/session-mcp-capability-card.tsx +680 -0
- package/src/components/session-proxy-scope.tsx +153 -0
- package/src/components/session-status.tsx +26 -17
- package/src/components/session-usage-limit-notice.tsx +174 -0
- package/src/components/timeline-anchor.tsx +119 -0
- package/src/components/timeline-annotation-chrome.tsx +196 -0
- package/src/components/timeline-annotation-layout.ts +268 -0
- package/src/components/timeline-annotation-markers.tsx +185 -0
- package/src/components/timeline-annotation-reveal-context.ts +9 -0
- package/src/components/timeline-annotation-selection.tsx +106 -54
- package/src/components/timeline-annotation-shared.ts +245 -0
- package/src/components/timeline-annotations-dialog.tsx +185 -128
- package/src/components/timeline-annotations.tsx +189 -45
- package/src/components/timeline-reading-progress.ts +80 -0
- package/src/components/timeline-search.tsx +168 -0
- package/src/components/timeline-settlement.ts +60 -0
- package/src/components/tool-action-review.tsx +650 -0
- package/src/components/tool-review-history.tsx +88 -0
- package/src/components/usage-limit-notice.tsx +179 -0
- package/src/components/usage-member-list.tsx +792 -0
- package/src/components/usage-meter.tsx +382 -0
- package/src/components/use-viewer-menu-dismiss.ts +33 -0
- package/src/components/user-message-body.tsx +27 -2
- package/src/components/workspace-dock.tsx +18 -1
- package/src/composer-messages.ts +150 -0
- package/src/composer-voice-events.ts +12 -0
- package/src/composer.ts +6 -1
- package/src/connect-account-identity.tsx +34 -0
- package/src/connect-accounts.tsx +233 -0
- package/src/connect-chooser.tsx +336 -0
- package/src/connect-panel.tsx +99 -0
- package/src/connect-setup.tsx +355 -0
- package/src/connect.ts +60 -0
- package/src/connection-assets.d.ts +4 -0
- package/src/connection-catalog.tsx +162 -0
- package/src/connection-discovery.tsx +238 -0
- package/src/connection-installed.tsx +51 -0
- package/src/connection-logo.tsx +37 -0
- package/src/connection-service-logo.tsx +55 -0
- package/src/connection-service-presentation.ts +46 -0
- package/src/connection-skeleton.tsx +16 -0
- package/src/connection-type-picker.tsx +36 -0
- package/src/conversation-timeline.ts +92 -0
- package/src/desktop.ts +24 -0
- package/src/device-authorization.tsx +98 -0
- package/src/diffs.ts +16 -0
- package/src/discovery-cache.ts +42 -0
- package/src/editor.ts +13 -0
- package/src/hooks/internal.ts +3 -2
- package/src/hooks/latest-question.ts +164 -0
- package/src/hooks/shared-machines-list.ts +34 -1
- package/src/hooks/shared-query.ts +721 -0
- package/src/hooks/use-attached-browsers.ts +1 -1
- package/src/hooks/use-auth-runs.ts +0 -27
- package/src/hooks/use-available-models.ts +2 -2
- package/src/hooks/use-browser-frame-stream.ts +19 -2
- package/src/hooks/use-browser-session.ts +680 -205
- package/src/hooks/use-browser-sessions.ts +32 -1
- package/src/hooks/use-client-config-flags.ts +118 -0
- package/src/hooks/use-codex-accounts.ts +247 -47
- package/src/hooks/use-composer.ts +227 -44
- package/src/hooks/use-computer-frame-stream.ts +25 -7
- package/src/hooks/use-computer-input-posture.ts +94 -0
- package/src/hooks/use-computer-session.ts +409 -95
- package/src/hooks/use-connect.ts +23 -0
- package/src/hooks/use-desktop-stream.ts +19 -28
- package/src/hooks/use-file-attachments.ts +80 -4
- package/src/hooks/use-goal.ts +79 -9
- package/src/hooks/use-last-started-turn-policy.ts +37 -11
- package/src/hooks/use-machines.ts +4 -0
- package/src/hooks/use-new-conversation.ts +374 -0
- package/src/hooks/use-new-session-draft.ts +813 -0
- package/src/hooks/use-realtime-voice-models.ts +46 -0
- package/src/hooks/use-sandbox-files.ts +68 -20
- package/src/hooks/use-session-background-commands.ts +22 -11
- package/src/hooks/use-session-capabilities.ts +3 -2
- package/src/hooks/use-session-conversation.ts +150 -0
- package/src/hooks/use-session-events.ts +531 -335
- package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
- package/src/hooks/use-session-model-account.ts +174 -0
- package/src/hooks/use-session.ts +30 -2
- package/src/hooks/use-slash-commands.ts +6 -11
- package/src/hooks/use-supergrok-accounts.ts +22 -8
- package/src/hooks/use-terminal-stream.ts +153 -27
- package/src/hooks/use-transcription.ts +6 -0
- package/src/hooks/use-turn-queue.ts +2 -1
- package/src/hooks/use-usage.ts +100 -0
- package/src/hooks/use-vaults.ts +153 -0
- package/src/hooks/use-video-artifact-playback.ts +1 -1
- package/src/hooks/use-voice-input.ts +127 -19
- package/src/hooks/use-workspace-capture.ts +3 -2
- package/src/hooks/use-workspace-edit.ts +23 -5
- package/src/hooks/use-workspace-sessions.ts +74 -7
- package/src/human-input-model.ts +359 -0
- package/src/identity-link-accounts.tsx +148 -0
- package/src/identity-link-consent.tsx +192 -0
- package/src/index.ts +262 -16
- package/src/interaction.ts +1 -0
- package/src/lib/clipboard.ts +29 -0
- package/src/lib/error-message.ts +37 -0
- package/src/lib/format.ts +205 -10
- package/src/lib/host-theme.ts +529 -0
- package/src/lib/interaction-errors.ts +15 -0
- package/src/lib/menu-styles.ts +44 -0
- package/src/lib/notify-observer.ts +15 -0
- package/src/lib/pierre-diffs-loader.ts +53 -0
- package/src/lib/provider-recovery.ts +243 -0
- package/src/lib/scrollbars.ts +30 -0
- package/src/lib/terminal-input-readiness.ts +51 -0
- package/src/lib/transient-retry.ts +99 -0
- package/src/lib/workbench-peers.ts +62 -0
- package/src/lib/xterm-theme.ts +23 -21
- package/src/mcp-connection-status.ts +35 -0
- package/src/model-mark-paths.ts +53 -0
- package/src/model-picker-model.ts +330 -0
- package/src/model-policy.ts +299 -74
- package/src/native-previews.ts +100 -0
- package/src/new-session-draft.ts +22 -0
- package/src/notification-text.ts +81 -0
- package/src/older-history.ts +22 -4
- package/src/organization-model.ts +118 -0
- package/src/plugin-details.tsx +185 -0
- package/src/plugin-discovery.tsx +196 -0
- package/src/preview-loading-paint.ts +68 -0
- package/src/provider.tsx +74 -15
- package/src/queue-presentation-model.ts +464 -0
- package/src/realtime/dropdown-menu.tsx +19 -12
- package/src/realtime/embedded-new-voice.tsx +1 -0
- package/src/realtime/embedded-voice.tsx +3 -0
- package/src/realtime/realtime-control.tsx +138 -550
- package/src/realtime/session-realtime.ts +566 -0
- package/src/sandbox-label-model.ts +53 -0
- package/src/scrollbars.ts +3 -0
- package/src/secret-reference-label.ts +43 -0
- package/src/secrets-ui.tsx +59 -0
- package/src/session-agents-model.ts +33 -0
- package/src/session-attention-model.ts +62 -0
- package/src/session-auth-recommendation.ts +48 -0
- package/src/session-capability-policy.ts +196 -0
- package/src/session-context.ts +3 -4
- package/src/session-feedback-model.ts +95 -0
- package/src/session-list-model.ts +434 -0
- package/src/session-realtime.ts +18 -0
- package/src/session-status-model.ts +99 -0
- package/src/session-ui.ts +98 -1
- package/src/session.ts +17 -1
- package/src/site-snapshot.ts +74 -0
- package/src/sites-ui.tsx +348 -0
- package/src/sites.ts +3 -0
- package/src/skill-discovery.tsx +208 -0
- package/src/terminal.ts +26 -0
- package/src/testing/session-scenarios.ts +404 -0
- package/src/timeline/activity-rail.tsx +242 -101
- package/src/timeline/agent-identity.tsx +84 -0
- package/src/timeline/agent-row.tsx +231 -0
- package/src/timeline/allowance-exhausted-row.tsx +86 -0
- package/src/timeline/compaction-copy.ts +115 -0
- package/src/timeline/fleet-decision-projection.ts +2 -1
- package/src/timeline/fleet-decision-row.tsx +1 -0
- package/src/timeline/focus-sequence.ts +44 -0
- package/src/timeline/genie-copy.ts +19 -0
- package/src/timeline/genie-loading.tsx +143 -0
- package/src/timeline/index.ts +30 -2
- package/src/timeline/knowledge-receipt.tsx +100 -0
- package/src/timeline/message-sender.tsx +71 -0
- package/src/timeline/notice-presentation.ts +48 -0
- package/src/timeline/parsers.ts +42 -2
- package/src/timeline/patch-apply-command.tsx +135 -0
- package/src/timeline/platform-activity-presentation.ts +166 -0
- package/src/timeline/platform-activity-row.tsx +15 -90
- package/src/timeline/presented-image.ts +63 -0
- package/src/timeline/projection.ts +1742 -76
- package/src/timeline/provider-logo.tsx +53 -0
- package/src/timeline/question-nav-model.ts +28 -0
- package/src/timeline/registry.ts +26 -4
- package/src/timeline/retained-image.ts +97 -0
- package/src/timeline/retained-loaders.ts +91 -0
- package/src/timeline/rolling-activity.tsx +80 -0
- package/src/timeline/screenshot-lightbox.tsx +228 -5
- package/src/timeline/session-usage-limit-row.tsx +42 -0
- package/src/timeline/shared.tsx +42 -15
- package/src/timeline/startup-dispatch-details.tsx +36 -0
- package/src/timeline/startup-preference.ts +33 -0
- package/src/timeline/startup-timings.tsx +145 -0
- package/src/timeline/tool-display-name.ts +19 -7
- package/src/timeline/tool-presentation.ts +1316 -0
- package/src/timeline/tool-renderers.tsx +835 -1138
- package/src/timeline/turn-summary-model.ts +343 -0
- package/src/timeline/turn-summary.tsx +272 -365
- package/src/timeline/types.ts +189 -6
- package/src/timeline/work-presentation.ts +189 -0
- package/src/timeline-model.ts +143 -0
- package/src/usage/allowance-copy.ts +64 -0
- package/src/usage/session-usage-limit.ts +266 -0
- package/src/usage/summary.ts +93 -0
- package/src/usage.ts +70 -0
- package/src/voice-recording-owner.ts +22 -0
- package/styles/compiled.css +2319 -748
- package/styles/connect.css +290 -0
- package/styles/connect.d.ts +1 -0
- package/styles/effective-tokens.css +1 -0
- package/styles/index.css +309 -9
- package/styles/responsive.css +99 -7
- package/styles/session-capability.css +44 -0
- package/styles/tokens.css +134 -66
- package/dist/browser-viewer-MKKFRRRV.js +0 -14
- package/dist/chunk-2DZVYHVO.js +0 -470
- package/dist/chunk-2DZVYHVO.js.map +0 -1
- package/dist/chunk-3AGBGTRT.js.map +0 -1
- package/dist/chunk-4MDLEHXL.js.map +0 -1
- package/dist/chunk-5YK2ZDIG.js.map +0 -1
- package/dist/chunk-7EAFGICR.js +0 -302
- package/dist/chunk-7EAFGICR.js.map +0 -1
- package/dist/chunk-ELIYWBZR.js.map +0 -1
- package/dist/chunk-H5YGYNXS.js.map +0 -1
- package/dist/chunk-HUIKIDM5.js.map +0 -1
- package/dist/chunk-ICA6R6TW.js.map +0 -1
- package/dist/chunk-IOLVN74D.js.map +0 -1
- package/dist/chunk-JAQ5K7W6.js.map +0 -1
- package/dist/chunk-JVYQRRC4.js.map +0 -1
- package/dist/chunk-KCGXPP5V.js.map +0 -1
- package/dist/chunk-KZ73RL76.js.map +0 -1
- package/dist/chunk-NEXLLTP4.js.map +0 -1
- package/dist/chunk-PEI6RANI.js.map +0 -1
- package/dist/chunk-VTOREEXF.js +0 -142
- package/dist/chunk-VTOREEXF.js.map +0 -1
- package/dist/chunk-WSK7G5LE.js +0 -170
- package/dist/chunk-WSK7G5LE.js.map +0 -1
- package/dist/chunk-X4A66EWZ.js +0 -223
- package/dist/chunk-X4A66EWZ.js.map +0 -1
- package/dist/chunk-XYRDDSXF.js.map +0 -1
- package/dist/chunk-YG4QEQF5.js +0 -9557
- package/dist/chunk-YG4QEQF5.js.map +0 -1
- package/dist/chunk-YVCHAQZY.js.map +0 -1
- package/dist/chunk-ZPBTI3TE.js.map +0 -1
- package/dist/computer-viewer-FWEZISW4.js +0 -16
- package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
- package/dist/hooks/use-environments.d.ts +0 -41
- package/dist/hooks/use-packs.d.ts +0 -32
- package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
- package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
- package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
- package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
- package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
- package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
- package/src/hooks/use-environments.ts +0 -182
- package/src/hooks/use-packs.ts +0 -157
- /package/dist/{browser-viewer-MKKFRRRV.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
- /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-4EUKJXUO.js.map} +0 -0
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Children,
|
|
3
|
+
createContext,
|
|
4
|
+
useContext,
|
|
3
5
|
isValidElement,
|
|
4
6
|
memo,
|
|
5
7
|
useEffect,
|
|
@@ -13,17 +15,40 @@ import {
|
|
|
13
15
|
import ReactMarkdown, {
|
|
14
16
|
defaultUrlTransform,
|
|
15
17
|
type Components,
|
|
18
|
+
type ExtraProps,
|
|
16
19
|
type UrlTransform,
|
|
17
20
|
} from "react-markdown";
|
|
18
21
|
import remarkGfm from "remark-gfm";
|
|
22
|
+
import { PanelsTopLeftIcon } from "lucide-react";
|
|
23
|
+
import { ActivityDisclosure } from "../timeline/shared";
|
|
19
24
|
import { cn } from "../lib/cn";
|
|
20
25
|
import { tableElementToTsv } from "../lib/clipboard";
|
|
21
26
|
import { prefersReducedMotion } from "../lib/motion";
|
|
22
27
|
import { MOTION_INSPECT_SCALE } from "../lib/motion-inspect";
|
|
23
28
|
import { CopyButton } from "./copy-button";
|
|
29
|
+
import { PreviewLoading } from "./preview-loading";
|
|
30
|
+
import type { observeMarkdownTableLayout } from "./markdown-table-layout";
|
|
31
|
+
import { remarkSoftLineBreaks } from "./remark-soft-line-breaks";
|
|
32
|
+
import { rehypeSecretRefs } from "./rehype-secret-refs";
|
|
33
|
+
import { mayContainSecretReference, SecretRefChip } from "./secret-ref-chip";
|
|
34
|
+
import { useSecretsUi } from "../secrets-ui";
|
|
24
35
|
import { softenStreamingMarkdown } from "./soften-streaming-markdown";
|
|
25
36
|
import { createStreamReveal, rehypeStreamReveal, type StreamReveal } from "./stream-reveal";
|
|
26
37
|
import { TooltipProvider } from "./tooltip";
|
|
38
|
+
import { searchMatchOffset, type TimelineSearchTarget } from "./timeline-search";
|
|
39
|
+
import {
|
|
40
|
+
parseOpenGeniLink,
|
|
41
|
+
parseSandboxLink,
|
|
42
|
+
parseRetainedFileReference,
|
|
43
|
+
isReservedOpenGeniLink,
|
|
44
|
+
openGeniLinkScheme,
|
|
45
|
+
type OpenGeniLinkTarget,
|
|
46
|
+
} from "@opengeni/sdk";
|
|
47
|
+
import {
|
|
48
|
+
chainLinkResolvers,
|
|
49
|
+
useOpenGeniLinkResolver,
|
|
50
|
+
type OpenGeniLinkResolver,
|
|
51
|
+
} from "./open-geni-links";
|
|
27
52
|
|
|
28
53
|
/**
|
|
29
54
|
* The default renderer for chat message bodies in {@link MessageTimeline}.
|
|
@@ -39,9 +64,35 @@ import { TooltipProvider } from "./tooltip";
|
|
|
39
64
|
* the tokens land. Consumers who want a different renderer can still pass
|
|
40
65
|
* `renderMessageText` to `MessageTimeline` to override this entirely.
|
|
41
66
|
*/
|
|
67
|
+
export type MarkdownInteractiveBlock = { kind: "html" | "site"; content: string };
|
|
68
|
+
const InteractiveContext = createContext<{
|
|
69
|
+
source: string;
|
|
70
|
+
streaming?: boolean | undefined;
|
|
71
|
+
render?: (block: MarkdownInteractiveBlock) => ReactNode;
|
|
72
|
+
renderImage?: (image: { src: string; alt: string }) => ReactNode;
|
|
73
|
+
suppressImages?: boolean;
|
|
74
|
+
}>({ source: "" });
|
|
75
|
+
|
|
42
76
|
export type MarkdownProps = {
|
|
77
|
+
/** Resolve a retained-file reference to the host's authenticated artifact page. */
|
|
78
|
+
artifactHref?: ((artifactId: string) => string) | undefined;
|
|
79
|
+
/** Reveals a bounded source excerpt; closing Find retains it until explicit restore. */
|
|
80
|
+
searchTarget?: TimelineSearchTarget | null | undefined;
|
|
81
|
+
renderImage?: ((image: { src: string; alt: string }) => ReactNode) | undefined;
|
|
82
|
+
/** Show alt text without loading image URLs (e.g. in search previews). */
|
|
83
|
+
suppressImages?: boolean | undefined;
|
|
84
|
+
/** Host opt-in for assistant-authored interactive fences. */
|
|
85
|
+
renderInteractiveBlock?: ((block: MarkdownInteractiveBlock) => ReactNode) | undefined;
|
|
43
86
|
children: string;
|
|
44
87
|
className?: string | undefined;
|
|
88
|
+
/**
|
|
89
|
+
* Render a single newline inside prose as a line break (`<br>`), the way chat
|
|
90
|
+
* apps show messages; CommonMark otherwise folds it into a space. Chat message
|
|
91
|
+
* bodies enable this. Leave it off for documents and other authored Markdown.
|
|
92
|
+
* Code (fenced and inline), lists, tables, and blank-line paragraphs are
|
|
93
|
+
* unaffected either way.
|
|
94
|
+
*/
|
|
95
|
+
softLineBreaks?: boolean | undefined;
|
|
45
96
|
/**
|
|
46
97
|
* While true, newly arrived source fades in through tip ink (`.og-stream-ink`):
|
|
47
98
|
* an age window over each append batch — fast streams keep a large soft band,
|
|
@@ -56,6 +107,13 @@ export type MarkdownProps = {
|
|
|
56
107
|
* exact decoded `sandbox:` payload; `line`, when present, is 1-based.
|
|
57
108
|
*/
|
|
58
109
|
onSandboxFile?: ((path: string, line?: number) => void | Promise<void>) | undefined;
|
|
110
|
+
/**
|
|
111
|
+
* Resolve Opengeni object links (`artifact:`, `sandbox:`, editable
|
|
112
|
+
* artifacts, Sites) to a host URL or action. Asked before any
|
|
113
|
+
* {@link OpenGeniLinkProvider} above this body; `artifactHref` and
|
|
114
|
+
* `onSandboxFile` still win for their own kinds.
|
|
115
|
+
*/
|
|
116
|
+
resolveLink?: OpenGeniLinkResolver | undefined;
|
|
59
117
|
};
|
|
60
118
|
|
|
61
119
|
/** Exact target path plus optional 1-based line from a markdown href. */
|
|
@@ -90,7 +148,7 @@ const baseComponents: Components = {
|
|
|
90
148
|
),
|
|
91
149
|
h4: ({ children, ...props }) => (
|
|
92
150
|
<h4
|
|
93
|
-
className="mt-4 mb-1.5 text-og-sm font-semibold uppercase tracking-[0.04em] text-og-fg
|
|
151
|
+
className="mt-4 mb-1.5 text-og-sm font-semibold uppercase tracking-[0.04em] text-og-fg first:mt-0"
|
|
94
152
|
{...props}
|
|
95
153
|
>
|
|
96
154
|
{children}
|
|
@@ -163,14 +221,14 @@ const baseComponents: Components = {
|
|
|
163
221
|
// the `pre` renderer), so a `code` reaching here is treated as inline.
|
|
164
222
|
code: ({ children, className: _className, ...props }) => (
|
|
165
223
|
<code
|
|
166
|
-
className="rounded-og-xs bg-og-surface-
|
|
224
|
+
className="rounded-og-xs bg-og-surface-2 px-1 py-0.5 font-og-mono text-og-sm text-og-fg"
|
|
167
225
|
{...props}
|
|
168
226
|
>
|
|
169
227
|
{children}
|
|
170
228
|
</code>
|
|
171
229
|
),
|
|
172
230
|
// Fenced code — quiet mono block (no card / no nested vertical scroll).
|
|
173
|
-
pre:
|
|
231
|
+
pre: InteractiveCodeBlock,
|
|
174
232
|
// Tables stay unboxed (hairline rules); hover reveals a TSV copy control.
|
|
175
233
|
table: ({ children, ...props }) => <MarkdownTable {...props}>{children}</MarkdownTable>,
|
|
176
234
|
thead: ({ children, ...props }) => <thead {...props}>{children}</thead>,
|
|
@@ -184,111 +242,201 @@ const baseComponents: Components = {
|
|
|
184
242
|
),
|
|
185
243
|
td: ({ children, ...props }) => (
|
|
186
244
|
<td
|
|
187
|
-
className="border-b border-og-border/70 px-0 py-1.5 pr-4 align-top text-og-fg-muted
|
|
245
|
+
className="border-b border-og-border/70 px-0 py-1.5 pr-4 align-top text-og-fg-muted"
|
|
188
246
|
{...props}
|
|
189
247
|
>
|
|
190
248
|
{children}
|
|
191
249
|
</td>
|
|
192
250
|
),
|
|
193
|
-
img:
|
|
194
|
-
src ? (
|
|
195
|
-
<img
|
|
196
|
-
alt={alt ?? ""}
|
|
197
|
-
src={src}
|
|
198
|
-
className="my-3 max-w-full rounded-og-md border border-og-border"
|
|
199
|
-
{...props}
|
|
200
|
-
/>
|
|
201
|
-
) : alt ? (
|
|
202
|
-
<span className="text-og-fg-subtle" aria-disabled="true">
|
|
203
|
-
{alt}
|
|
204
|
-
</span>
|
|
205
|
-
) : null,
|
|
251
|
+
img: MarkdownImage,
|
|
206
252
|
};
|
|
207
253
|
|
|
208
|
-
const MARKDOWN_LINK_CLASS =
|
|
209
|
-
|
|
254
|
+
const MARKDOWN_LINK_CLASS = "break-words font-medium og-link";
|
|
255
|
+
|
|
256
|
+
// Keep renderer component types stable: rebuilding them remounts paragraphs,
|
|
257
|
+
// destroys native selections, and resets embedded media on host updates.
|
|
258
|
+
const MarkdownLinkContext = createContext<
|
|
259
|
+
Pick<MarkdownProps, "onSandboxFile" | "artifactHref" | "resolveLink">
|
|
260
|
+
>({});
|
|
261
|
+
|
|
262
|
+
const UNAVAILABLE_LABEL: Record<Exclude<OpenGeniLinkTarget["kind"], "sandbox-file">, string> = {
|
|
263
|
+
file: "This file needs a workspace-aware host to open",
|
|
264
|
+
"editable-artifact": "This artifact needs a workspace-aware host to open",
|
|
265
|
+
site: "This Site needs a workspace-aware host to open",
|
|
266
|
+
};
|
|
210
267
|
|
|
211
|
-
function
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
268
|
+
function linkActionTitle(target: OpenGeniLinkTarget): string {
|
|
269
|
+
if (target.kind === "sandbox-file") {
|
|
270
|
+
return target.line !== null
|
|
271
|
+
? `Open ${target.path} at line ${target.line}`
|
|
272
|
+
: `Open ${target.path}`;
|
|
273
|
+
}
|
|
274
|
+
return target.kind === "file"
|
|
275
|
+
? "Open file"
|
|
276
|
+
: target.kind === "site"
|
|
277
|
+
? "Open Site"
|
|
278
|
+
: "Open artifact";
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/** A `rehypeSecretRefs` placeholder becomes a chip; every other span passes through. */
|
|
282
|
+
function MarkdownSpan({
|
|
283
|
+
node: _node,
|
|
284
|
+
children,
|
|
285
|
+
...props
|
|
286
|
+
}: ComponentPropsWithoutRef<"span"> & ExtraProps) {
|
|
287
|
+
const raw = (props as Record<string, unknown>)["data-og-secret-ref"];
|
|
288
|
+
if (typeof raw === "string") return <MarkdownSecretRef raw={raw}>{children}</MarkdownSecretRef>;
|
|
289
|
+
return <span {...props}>{children}</span>;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
function MarkdownSecretRef({ raw, children }: { raw: string; children?: ReactNode }) {
|
|
293
|
+
const ui = useSecretsUi();
|
|
294
|
+
const token = ui?.tokenize(raw).find((candidate) => candidate.type === "reference");
|
|
295
|
+
if (!token || token.type !== "reference") return <>{children}</>;
|
|
296
|
+
return <SecretRefChip reference={token.reference} />;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
const markdownComponents: Components = {
|
|
300
|
+
...baseComponents,
|
|
301
|
+
span: MarkdownSpan,
|
|
302
|
+
p: ({ children, node, ...props }) => {
|
|
303
|
+
const containsArtifact = node?.children.some(
|
|
304
|
+
(child) =>
|
|
305
|
+
child.type === "element" &&
|
|
306
|
+
child.tagName === "img" &&
|
|
307
|
+
typeof child.properties.src === "string" &&
|
|
308
|
+
retainedImageId(child.properties.src),
|
|
309
|
+
);
|
|
310
|
+
const Tag = containsArtifact ? "div" : "p";
|
|
311
|
+
return (
|
|
312
|
+
<Tag className="my-2.5 leading-7 first:mt-0 last:mb-0" {...props}>
|
|
313
|
+
{children}
|
|
314
|
+
</Tag>
|
|
315
|
+
);
|
|
316
|
+
},
|
|
317
|
+
a: ({ children, href, ...props }) => {
|
|
318
|
+
const { onSandboxFile, artifactHref, resolveLink } = useContext(MarkdownLinkContext);
|
|
319
|
+
const inherited = useOpenGeniLinkResolver();
|
|
320
|
+
const target = parseOpenGeniLink(href);
|
|
321
|
+
if (target) {
|
|
322
|
+
// Explicit per-kind props keep their historical precedence.
|
|
323
|
+
if (target.kind === "file" && target.workspaceId === null && artifactHref) {
|
|
324
|
+
const destination = defaultUrlTransform(artifactHref(target.fileId));
|
|
325
|
+
if (destination) {
|
|
326
|
+
return (
|
|
327
|
+
<a
|
|
328
|
+
className={MARKDOWN_LINK_CLASS}
|
|
329
|
+
href={destination}
|
|
330
|
+
target="_blank"
|
|
331
|
+
rel="noreferrer noopener"
|
|
332
|
+
>
|
|
333
|
+
{children}
|
|
334
|
+
</a>
|
|
335
|
+
);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
const resolution =
|
|
339
|
+
target.kind === "sandbox-file" && onSandboxFile
|
|
340
|
+
? { open: () => onSandboxFile(target.path, target.line ?? undefined) }
|
|
341
|
+
: chainLinkResolvers(resolveLink, inherited)?.(target);
|
|
342
|
+
const destination = resolution?.href ? defaultUrlTransform(resolution.href) : "";
|
|
343
|
+
if (destination) {
|
|
344
|
+
return (
|
|
345
|
+
<a
|
|
346
|
+
className={MARKDOWN_LINK_CLASS}
|
|
347
|
+
href={destination}
|
|
348
|
+
target="_blank"
|
|
349
|
+
rel="noreferrer noopener"
|
|
350
|
+
>
|
|
351
|
+
{children}
|
|
352
|
+
</a>
|
|
353
|
+
);
|
|
354
|
+
}
|
|
355
|
+
if (resolution?.open) {
|
|
217
356
|
return (
|
|
218
|
-
<
|
|
357
|
+
<ActionMarkdownLink title={linkActionTitle(target)} onOpen={resolution.open}>
|
|
219
358
|
{children}
|
|
220
|
-
</
|
|
359
|
+
</ActionMarkdownLink>
|
|
221
360
|
);
|
|
222
361
|
}
|
|
223
|
-
if (
|
|
362
|
+
if (target.kind === "sandbox-file") {
|
|
224
363
|
return (
|
|
225
364
|
<span
|
|
226
365
|
className="break-words font-medium text-og-fg-subtle underline decoration-dotted underline-offset-2"
|
|
227
366
|
aria-disabled="true"
|
|
228
|
-
title=
|
|
229
|
-
isSandboxHref(href)
|
|
230
|
-
? "This sandbox file reference is invalid"
|
|
231
|
-
: "This link is unavailable"
|
|
232
|
-
}
|
|
367
|
+
title="This sandbox file requires a session-aware handler"
|
|
233
368
|
>
|
|
234
369
|
{children}
|
|
235
370
|
</span>
|
|
236
371
|
);
|
|
237
372
|
}
|
|
373
|
+
// Never navigate: a console path resolves against the host origin and 404s.
|
|
238
374
|
return (
|
|
239
|
-
<
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
375
|
+
<span title={UNAVAILABLE_LABEL[target.kind]} data-og-link-unavailable={target.kind}>
|
|
376
|
+
{children} (artifact unavailable)
|
|
377
|
+
</span>
|
|
378
|
+
);
|
|
379
|
+
}
|
|
380
|
+
if (isReservedOpenGeniLink(href) || !href) {
|
|
381
|
+
return (
|
|
382
|
+
<span
|
|
383
|
+
className="break-words text-og-fg-subtle"
|
|
384
|
+
aria-disabled="true"
|
|
385
|
+
title={
|
|
386
|
+
isSandboxHref(href)
|
|
387
|
+
? "This sandbox file reference is invalid"
|
|
388
|
+
: "This link is unavailable"
|
|
389
|
+
}
|
|
245
390
|
>
|
|
246
|
-
{children}
|
|
247
|
-
</
|
|
391
|
+
{children} (link unavailable)
|
|
392
|
+
</span>
|
|
248
393
|
);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
|
|
394
|
+
}
|
|
395
|
+
return (
|
|
396
|
+
<a
|
|
397
|
+
className={MARKDOWN_LINK_CLASS}
|
|
398
|
+
target="_blank"
|
|
399
|
+
rel="noreferrer noopener"
|
|
400
|
+
href={href}
|
|
401
|
+
{...props}
|
|
402
|
+
>
|
|
403
|
+
{children}
|
|
404
|
+
</a>
|
|
405
|
+
);
|
|
406
|
+
},
|
|
407
|
+
};
|
|
252
408
|
|
|
253
|
-
function
|
|
254
|
-
|
|
255
|
-
|
|
409
|
+
function ActionMarkdownLink({
|
|
410
|
+
title,
|
|
411
|
+
onOpen,
|
|
256
412
|
children,
|
|
257
413
|
}: {
|
|
258
|
-
|
|
259
|
-
|
|
414
|
+
title: string;
|
|
415
|
+
onOpen: () => void | Promise<void>;
|
|
260
416
|
children: ReactNode;
|
|
261
417
|
}) {
|
|
262
418
|
const [state, setState] = useState<"idle" | "loading" | "error">("idle");
|
|
263
|
-
const { path, line } = location;
|
|
264
|
-
if (!onSandboxFile) {
|
|
265
|
-
return (
|
|
266
|
-
<span
|
|
267
|
-
className="break-words font-medium text-og-fg-subtle underline decoration-dotted underline-offset-2"
|
|
268
|
-
aria-disabled="true"
|
|
269
|
-
title="This sandbox file requires a session-aware handler"
|
|
270
|
-
>
|
|
271
|
-
{children}
|
|
272
|
-
</span>
|
|
273
|
-
);
|
|
274
|
-
}
|
|
275
|
-
const idleTitle = line !== null ? `Open ${path} at line ${line}` : `Open ${path}`;
|
|
276
419
|
return (
|
|
277
420
|
<button
|
|
278
421
|
type="button"
|
|
279
422
|
className={cn(
|
|
280
423
|
MARKDOWN_LINK_CLASS,
|
|
281
|
-
"inline-flex min-h-7 cursor-pointer items-center disabled:cursor-wait disabled:opacity-70 pointer-coarse:min-h-11",
|
|
424
|
+
"inline-flex min-h-7 cursor-pointer items-center aria-disabled:cursor-wait aria-disabled:opacity-70 pointer-coarse:min-h-11",
|
|
282
425
|
)}
|
|
283
|
-
disabled
|
|
426
|
+
// Not `disabled`: disabling the focused control drops focus to the page,
|
|
427
|
+
// so a host viewer could not return focus to the link that opened it.
|
|
428
|
+
aria-disabled={state === "loading" || undefined}
|
|
284
429
|
aria-busy={state === "loading"}
|
|
285
|
-
title={state === "error" ? "Couldn't open this file. Select to retry." :
|
|
430
|
+
title={state === "error" ? "Couldn't open this file. Select to retry." : title}
|
|
286
431
|
onClick={() => {
|
|
432
|
+
if (state === "loading") return;
|
|
287
433
|
setState("loading");
|
|
288
|
-
void Promise.resolve(
|
|
289
|
-
()
|
|
290
|
-
(
|
|
291
|
-
|
|
434
|
+
void Promise.resolve()
|
|
435
|
+
.then(onOpen)
|
|
436
|
+
.then(
|
|
437
|
+
() => setState("idle"),
|
|
438
|
+
() => setState("error"),
|
|
439
|
+
);
|
|
292
440
|
}}
|
|
293
441
|
>
|
|
294
442
|
{children}
|
|
@@ -297,44 +445,18 @@ function SandboxMarkdownLink({
|
|
|
297
445
|
);
|
|
298
446
|
}
|
|
299
447
|
|
|
300
|
-
const SANDBOX_SCHEME = "sandbox:";
|
|
301
|
-
const LEGACY_WORKSPACE_PREFIX = "/workspace/";
|
|
302
|
-
const TRAILING_LINE = /:([0-9]+)$/u;
|
|
303
|
-
const TRAILING_INVALID_LINE = /:-(?:[0-9]+)$|:[0-9]+-[0-9]+$/u;
|
|
304
|
-
const CONTROL_CHARACTER = /[\u0000-\u001f\u007f]/u;
|
|
305
|
-
|
|
306
448
|
function isSandboxHref(href: string | undefined): boolean {
|
|
307
|
-
return href
|
|
449
|
+
return openGeniLinkScheme(href) === "sandbox";
|
|
308
450
|
}
|
|
309
451
|
|
|
310
452
|
/**
|
|
311
|
-
* Parse an
|
|
453
|
+
* Parse an Opengeni `sandbox:` application href (plus the historical bare
|
|
312
454
|
* `/workspace/...` form). The decoded path is intentionally opaque here:
|
|
313
455
|
* target selection, path policy, and filesystem authority belong to the
|
|
314
456
|
* session-aware host and its FileSystem boundary.
|
|
315
457
|
*/
|
|
316
458
|
export function sandboxFileLocationFromHref(href: string | undefined): SandboxFileLocation | null {
|
|
317
|
-
|
|
318
|
-
const encodedLocation = isSandboxHref(href)
|
|
319
|
-
? href.slice(SANDBOX_SCHEME.length)
|
|
320
|
-
: href.startsWith(LEGACY_WORKSPACE_PREFIX)
|
|
321
|
-
? href
|
|
322
|
-
: null;
|
|
323
|
-
if (!encodedLocation || encodedLocation.includes("?") || encodedLocation.includes("#")) {
|
|
324
|
-
return null;
|
|
325
|
-
}
|
|
326
|
-
if (TRAILING_INVALID_LINE.test(encodedLocation)) return null;
|
|
327
|
-
const lineMatch = TRAILING_LINE.exec(encodedLocation);
|
|
328
|
-
const encodedPath = lineMatch ? encodedLocation.slice(0, -lineMatch[0].length) : encodedLocation;
|
|
329
|
-
const line = lineMatch?.[1] ? Number(lineMatch[1]) : null;
|
|
330
|
-
if (line !== null && (!Number.isSafeInteger(line) || line < 1)) return null;
|
|
331
|
-
if (!encodedPath) return null;
|
|
332
|
-
try {
|
|
333
|
-
const path = decodeURIComponent(encodedPath);
|
|
334
|
-
return path && !CONTROL_CHARACTER.test(path) ? { path, line } : null;
|
|
335
|
-
} catch {
|
|
336
|
-
return null;
|
|
337
|
-
}
|
|
459
|
+
return parseSandboxLink(href);
|
|
338
460
|
}
|
|
339
461
|
|
|
340
462
|
/** Return the exact decoded path for a supported sandbox-link href. */
|
|
@@ -342,8 +464,28 @@ export function sandboxFilePathFromHref(href: string | undefined): string | null
|
|
|
342
464
|
return sandboxFileLocationFromHref(href)?.path ?? null;
|
|
343
465
|
}
|
|
344
466
|
|
|
467
|
+
export function retainedImageId(src: string): string | null {
|
|
468
|
+
return parseRetainedFileReference(src);
|
|
469
|
+
}
|
|
470
|
+
function MarkdownImage({ src, alt }: ComponentPropsWithoutRef<"img">) {
|
|
471
|
+
const { renderImage, suppressImages } = useContext(InteractiveContext);
|
|
472
|
+
if (suppressImages)
|
|
473
|
+
return <span data-og-image-placeholder="">{alt || "Image"} (preview unavailable)</span>;
|
|
474
|
+
if (!src) return <span>{alt ?? "Image unavailable"}</span>;
|
|
475
|
+
if (retainedImageId(src))
|
|
476
|
+
return renderImage ? (
|
|
477
|
+
<>{renderImage({ src, alt: alt ?? "" })}</>
|
|
478
|
+
) : (
|
|
479
|
+
<span>{alt || "Image"} (preview unavailable)</span>
|
|
480
|
+
);
|
|
481
|
+
return <img src={src} alt={alt ?? ""} loading="lazy" className="my-3 max-w-full rounded-og-md" />;
|
|
482
|
+
}
|
|
483
|
+
|
|
345
484
|
const markdownUrlTransform: UrlTransform = (url, key, node) =>
|
|
346
|
-
key === "href" && node.tagName === "a" &&
|
|
485
|
+
(key === "href" && node.tagName === "a" && isReservedOpenGeniLink(url)) ||
|
|
486
|
+
(key === "src" && node.tagName === "img" && retainedImageId(url))
|
|
487
|
+
? url
|
|
488
|
+
: defaultUrlTransform(url);
|
|
347
489
|
|
|
348
490
|
/** How long after the stream ends the reveal pipeline stays for trailing animations. */
|
|
349
491
|
/** Trailing ink window after stream end — keep ≥ {@link INK_FADE_MS}. */
|
|
@@ -381,6 +523,58 @@ function fenceLanguage(children: ReactNode): string | null {
|
|
|
381
523
|
return found;
|
|
382
524
|
}
|
|
383
525
|
|
|
526
|
+
function InteractiveCodeBlock({ children, node }: ComponentPropsWithoutRef<"pre"> & ExtraProps) {
|
|
527
|
+
const { source, render, streaming } = useContext(InteractiveContext);
|
|
528
|
+
const language = fenceLanguage(children);
|
|
529
|
+
if (render && (language === "opengeni-html" || language === "opengeni-site")) {
|
|
530
|
+
const start = node?.position?.start.offset;
|
|
531
|
+
const end = node?.position?.end.offset;
|
|
532
|
+
const original =
|
|
533
|
+
start !== undefined && end !== undefined && end <= source.length
|
|
534
|
+
? source.slice(start, end)
|
|
535
|
+
: "";
|
|
536
|
+
const lines = original.trimEnd().split("\n");
|
|
537
|
+
const opening = lines[0]?.match(/^ {0,3}([\x60]{3,}|~{3,})/);
|
|
538
|
+
|
|
539
|
+
const closing = lines
|
|
540
|
+
.at(-1)
|
|
541
|
+
?.replace(/^\s*(?:>\s*)+/, "")
|
|
542
|
+
.trim();
|
|
543
|
+
const complete =
|
|
544
|
+
opening &&
|
|
545
|
+
lines.length > 1 &&
|
|
546
|
+
closing &&
|
|
547
|
+
closing.length >= opening[1]!.length &&
|
|
548
|
+
[...closing].every((c) => c === opening[1]![0]);
|
|
549
|
+
if (!complete) {
|
|
550
|
+
return (
|
|
551
|
+
<div role="status" aria-live="polite" aria-busy={streaming === true} className="my-3">
|
|
552
|
+
{streaming ? (
|
|
553
|
+
<PreviewLoading />
|
|
554
|
+
) : (
|
|
555
|
+
<ActivityDisclosure
|
|
556
|
+
icon={<PanelsTopLeftIcon aria-hidden className="size-3.5" />}
|
|
557
|
+
title="Preview incomplete"
|
|
558
|
+
running={false}
|
|
559
|
+
expandable={false}
|
|
560
|
+
preview="Generation stopped before the preview was ready."
|
|
561
|
+
/>
|
|
562
|
+
)}
|
|
563
|
+
</div>
|
|
564
|
+
);
|
|
565
|
+
}
|
|
566
|
+
return (
|
|
567
|
+
<>
|
|
568
|
+
{render({
|
|
569
|
+
kind: language === "opengeni-html" ? "html" : "site",
|
|
570
|
+
content: nodeText(children).replace(/\n$/, ""),
|
|
571
|
+
})}
|
|
572
|
+
</>
|
|
573
|
+
);
|
|
574
|
+
}
|
|
575
|
+
return <MarkdownCodeBlock>{children}</MarkdownCodeBlock>;
|
|
576
|
+
}
|
|
577
|
+
|
|
384
578
|
function MarkdownCodeBlock({ children }: { children?: ReactNode }) {
|
|
385
579
|
const code = nodeText(children).replace(/\n$/, "");
|
|
386
580
|
const language = fenceLanguage(children);
|
|
@@ -411,10 +605,41 @@ function MarkdownCodeBlock({ children }: { children?: ReactNode }) {
|
|
|
411
605
|
}
|
|
412
606
|
|
|
413
607
|
function MarkdownTable({ children, className, ...props }: ComponentPropsWithoutRef<"table">) {
|
|
414
|
-
const
|
|
608
|
+
const wrapperRef = useRef<HTMLDivElement>(null);
|
|
609
|
+
const tableRef = useRef<HTMLTableElement>(null);
|
|
610
|
+
const layoutRef = useRef<ReturnType<typeof observeMarkdownTableLayout>>(undefined);
|
|
611
|
+
useEffect(() => {
|
|
612
|
+
const wrapper = wrapperRef.current;
|
|
613
|
+
const table = tableRef.current;
|
|
614
|
+
if (!wrapper?.closest("[data-og-wide-table-message]") || !table) return;
|
|
615
|
+
let disposed = false;
|
|
616
|
+
// Ordinary tables remain usable even if this optional layout chunk fails.
|
|
617
|
+
void import("./markdown-table-layout")
|
|
618
|
+
.then(({ observeMarkdownTableLayout }) => {
|
|
619
|
+
if (!disposed) layoutRef.current = observeMarkdownTableLayout(wrapper, table);
|
|
620
|
+
})
|
|
621
|
+
.catch(() => {});
|
|
622
|
+
return () => {
|
|
623
|
+
disposed = true;
|
|
624
|
+
layoutRef.current?.disconnect();
|
|
625
|
+
layoutRef.current = undefined;
|
|
626
|
+
};
|
|
627
|
+
}, []);
|
|
628
|
+
// ReactMarkdown recreates table children even when only later prose changes.
|
|
629
|
+
// Remeasure genuine content changes without collapsing the expanded wrapper
|
|
630
|
+
// between cleanup and the asynchronous observer-module import on each update.
|
|
631
|
+
useEffect(() => {
|
|
632
|
+
layoutRef.current?.measure();
|
|
633
|
+
}, [children]);
|
|
415
634
|
return (
|
|
416
|
-
|
|
417
|
-
|
|
635
|
+
// Touch shows the copy action permanently at full touch size, so it sits
|
|
636
|
+
// under the table there instead of covering the right-aligned header.
|
|
637
|
+
<div
|
|
638
|
+
ref={wrapperRef}
|
|
639
|
+
data-og-table=""
|
|
640
|
+
className="group/copy relative mt-3 max-w-full first:mt-0 pointer-coarse:pb-11"
|
|
641
|
+
>
|
|
642
|
+
<div className="pointer-events-none absolute top-0 right-0 z-10 pointer-coarse:top-auto pointer-coarse:bottom-0">
|
|
418
643
|
<div className="pointer-events-auto">
|
|
419
644
|
<CopyButton
|
|
420
645
|
text={() => tableElementToTsv(tableRef.current)}
|
|
@@ -426,7 +651,12 @@ function MarkdownTable({ children, className, ...props }: ComponentPropsWithoutR
|
|
|
426
651
|
<div className="overflow-x-auto" tabIndex={0}>
|
|
427
652
|
<table
|
|
428
653
|
ref={tableRef}
|
|
429
|
-
className={cn(
|
|
654
|
+
className={cn(
|
|
655
|
+
// Leading `&` only: a trailing one (`tr:last-child>&`) under the scoped
|
|
656
|
+
// selector list needs `:is()`, which bundlers warn about for older targets.
|
|
657
|
+
"w-full min-w-0 border-collapse text-og-base [&_tr:last-child>td]:border-b-0",
|
|
658
|
+
className,
|
|
659
|
+
)}
|
|
430
660
|
{...props}
|
|
431
661
|
>
|
|
432
662
|
{children}
|
|
@@ -436,7 +666,26 @@ function MarkdownTable({ children, className, ...props }: ComponentPropsWithoutR
|
|
|
436
666
|
);
|
|
437
667
|
}
|
|
438
668
|
|
|
439
|
-
|
|
669
|
+
type RemarkPlugins = NonNullable<Parameters<typeof ReactMarkdown>[0]["remarkPlugins"]>;
|
|
670
|
+
const REMARK_PLUGINS: RemarkPlugins = [remarkGfm];
|
|
671
|
+
// Structural plugin types (see remark-soft-line-breaks.ts) need one cast at the seam.
|
|
672
|
+
const SOFT_LINE_BREAK_REMARK_PLUGINS = [
|
|
673
|
+
remarkGfm,
|
|
674
|
+
remarkSoftLineBreaks,
|
|
675
|
+
] as unknown as RemarkPlugins;
|
|
676
|
+
|
|
677
|
+
function MarkdownImpl({
|
|
678
|
+
children,
|
|
679
|
+
artifactHref,
|
|
680
|
+
className,
|
|
681
|
+
softLineBreaks = false,
|
|
682
|
+
streaming = false,
|
|
683
|
+
onSandboxFile,
|
|
684
|
+
renderInteractiveBlock,
|
|
685
|
+
renderImage,
|
|
686
|
+
resolveLink,
|
|
687
|
+
suppressImages,
|
|
688
|
+
}: MarkdownProps) {
|
|
440
689
|
// Tip-ink engine for THIS body: created on the first streaming render, kept
|
|
441
690
|
// through a short linger after the stream ends (so the last age window can
|
|
442
691
|
// finish), then dropped so settled bodies pay zero cost. Observing during
|
|
@@ -468,11 +717,23 @@ function MarkdownImpl({ children, className, streaming = false, onSandboxFile }:
|
|
|
468
717
|
hadRevealRef.current = true;
|
|
469
718
|
}
|
|
470
719
|
const revealActive = reveal !== null && (streaming || reveal.hasActive(now));
|
|
471
|
-
|
|
472
|
-
//
|
|
720
|
+
const secretsUi = useSecretsUi();
|
|
721
|
+
// Secret references become chip placeholders before the ink split, so a
|
|
722
|
+
// reference is never cut into ink spans. Without a host tokenizer, or when
|
|
723
|
+
// the text names no reference, the pipeline is unchanged.
|
|
724
|
+
const secretRefs =
|
|
725
|
+
secretsUi && mayContainSecretReference(children)
|
|
726
|
+
? [[rehypeSecretRefs, { tokenize: secretsUi.tokenize }]]
|
|
727
|
+
: [];
|
|
728
|
+
// The plugins walk the standard hast tree; structural local types keep the
|
|
729
|
+
// modules dependency-free, at the cost of this narrowing cast at the seam.
|
|
730
|
+
const rehypePluginList = [
|
|
731
|
+
...secretRefs,
|
|
732
|
+
...(revealActive && reveal !== null ? [[rehypeStreamReveal, { reveal, now }]] : []),
|
|
733
|
+
];
|
|
473
734
|
const rehypePlugins =
|
|
474
|
-
|
|
475
|
-
? (
|
|
735
|
+
rehypePluginList.length > 0
|
|
736
|
+
? (rehypePluginList as unknown as NonNullable<
|
|
476
737
|
Parameters<typeof ReactMarkdown>[0]["rehypePlugins"]
|
|
477
738
|
>)
|
|
478
739
|
: undefined;
|
|
@@ -525,32 +786,108 @@ function MarkdownImpl({ children, className, streaming = false, onSandboxFile }:
|
|
|
525
786
|
// fences don't snap to final GFM one commit before the crystallize morph.
|
|
526
787
|
// Reveal identity still tracks the true source (`children`).
|
|
527
788
|
const parseText = streaming || revealActive ? softenStreamingMarkdown(children) : children;
|
|
528
|
-
const
|
|
789
|
+
const linkContext = useMemo(
|
|
790
|
+
() => ({ onSandboxFile, artifactHref, resolveLink }),
|
|
791
|
+
[onSandboxFile, artifactHref, resolveLink],
|
|
792
|
+
);
|
|
793
|
+
|
|
794
|
+
const interactiveContext = useMemo(
|
|
795
|
+
() => ({
|
|
796
|
+
source: children,
|
|
797
|
+
streaming,
|
|
798
|
+
...(renderInteractiveBlock ? { render: renderInteractiveBlock } : {}),
|
|
799
|
+
...(renderImage ? { renderImage } : {}),
|
|
800
|
+
...(suppressImages ? { suppressImages } : {}),
|
|
801
|
+
}),
|
|
802
|
+
[children, streaming, renderInteractiveBlock, renderImage, suppressImages],
|
|
803
|
+
);
|
|
529
804
|
|
|
530
805
|
// `min-w-0` lets the prose shrink inside flex parents (message bubbles) so
|
|
531
806
|
// long links and code blocks wrap/scroll instead of forcing overflow.
|
|
532
807
|
return (
|
|
533
|
-
<
|
|
534
|
-
<
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
808
|
+
<MarkdownLinkContext.Provider value={linkContext}>
|
|
809
|
+
<InteractiveContext.Provider value={interactiveContext}>
|
|
810
|
+
<TooltipProvider delayDuration={400}>
|
|
811
|
+
<div
|
|
812
|
+
ref={bodyRef}
|
|
813
|
+
className={cn(
|
|
814
|
+
"og-markdown-body min-w-0 break-words",
|
|
815
|
+
settling && "og-markdown-settle",
|
|
816
|
+
className,
|
|
817
|
+
)}
|
|
818
|
+
>
|
|
819
|
+
<ReactMarkdown
|
|
820
|
+
remarkPlugins={softLineBreaks ? SOFT_LINE_BREAK_REMARK_PLUGINS : REMARK_PLUGINS}
|
|
821
|
+
rehypePlugins={rehypePlugins}
|
|
822
|
+
components={markdownComponents}
|
|
823
|
+
urlTransform={markdownUrlTransform}
|
|
824
|
+
>
|
|
825
|
+
{parseText}
|
|
826
|
+
</ReactMarkdown>
|
|
827
|
+
</div>
|
|
828
|
+
</TooltipProvider>
|
|
829
|
+
</InteractiveContext.Provider>
|
|
830
|
+
</MarkdownLinkContext.Provider>
|
|
552
831
|
);
|
|
553
832
|
}
|
|
554
833
|
|
|
555
834
|
/** Memoized so streaming re-renders of the parent don't re-parse settled bodies. */
|
|
556
|
-
export const Markdown = memo(
|
|
835
|
+
export const Markdown = memo(function SearchableMarkdown(props: MarkdownProps) {
|
|
836
|
+
const [retained, setRetained] = useState<{ text: string; target: TimelineSearchTarget } | null>(
|
|
837
|
+
null,
|
|
838
|
+
);
|
|
839
|
+
if (
|
|
840
|
+
props.searchTarget &&
|
|
841
|
+
(retained?.target !== props.searchTarget || retained.text !== props.children)
|
|
842
|
+
) {
|
|
843
|
+
setRetained({ text: props.children, target: props.searchTarget });
|
|
844
|
+
}
|
|
845
|
+
// Closing Find only removes the highlight. Retain the source window so a huge
|
|
846
|
+
// formatted message cannot replace it and unexpectedly move the reading point.
|
|
847
|
+
const target = props.searchTarget ?? (retained?.text === props.children ? retained.target : null);
|
|
848
|
+
if (!target) return <MarkdownImpl {...props} />;
|
|
849
|
+
const offset = searchMatchOffset(props.children, target);
|
|
850
|
+
if (offset < 0)
|
|
851
|
+
return props.searchTarget ? (
|
|
852
|
+
<div role="status">This match is no longer in the message source.</div>
|
|
853
|
+
) : (
|
|
854
|
+
<MarkdownImpl {...props} />
|
|
855
|
+
);
|
|
856
|
+
// Bound mounted text even for multi-megabyte messages. Do not split a UTF-16 pair
|
|
857
|
+
// at excerpt edges; the selected range itself is validated against the source.
|
|
858
|
+
let start = Math.max(0, offset - 240);
|
|
859
|
+
let end = Math.min(props.children.length, offset + target.query.length + 240);
|
|
860
|
+
if (start > 0 && /[\uDC00-\uDFFF]/.test(props.children[start]!)) start--;
|
|
861
|
+
if (end < props.children.length && /[\uDC00-\uDFFF]/.test(props.children[end]!)) end++;
|
|
862
|
+
const MatchTag = props.searchTarget ? "mark" : "span";
|
|
863
|
+
return (
|
|
864
|
+
<div className={cn("og-markdown-body min-w-0 break-words", props.className)}>
|
|
865
|
+
<div data-og-annotation-chrome="" className="text-xs opacity-70">
|
|
866
|
+
Match in message source · Excerpt stays in place when Find closes
|
|
867
|
+
<button
|
|
868
|
+
type="button"
|
|
869
|
+
disabled={!!props.searchTarget}
|
|
870
|
+
title={props.searchTarget ? "Close Find to show the formatted message" : undefined}
|
|
871
|
+
className="ml-2 inline-flex min-h-7 items-center rounded-og-sm px-1.5 text-og-xs font-medium text-og-fg-muted outline-hidden hover:text-og-fg focus-visible:ring-2 focus-visible:ring-og-accent/45 pointer-coarse:min-h-11 disabled:opacity-50"
|
|
872
|
+
onClick={() => setRetained(null)}
|
|
873
|
+
>
|
|
874
|
+
Show formatted message
|
|
875
|
+
</button>
|
|
876
|
+
</div>
|
|
877
|
+
<div style={{ whiteSpace: "pre-wrap", overflowWrap: "anywhere" }}>
|
|
878
|
+
{start > 0 ? "…" : ""}
|
|
879
|
+
{props.children.slice(start, offset)}
|
|
880
|
+
<MatchTag
|
|
881
|
+
data-og-search-occurrence={target.occurrence ?? 0}
|
|
882
|
+
data-og-search-sequence={target.sequence}
|
|
883
|
+
data-og-search-query={target.query}
|
|
884
|
+
data-og-search-offset={offset}
|
|
885
|
+
>
|
|
886
|
+
{props.children.slice(offset, offset + target.query.length)}
|
|
887
|
+
</MatchTag>
|
|
888
|
+
{props.children.slice(offset + target.query.length, end)}
|
|
889
|
+
{end < props.children.length ? "…" : ""}
|
|
890
|
+
</div>
|
|
891
|
+
</div>
|
|
892
|
+
);
|
|
893
|
+
});
|