@opengeni/react 3.3.2 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +769 -22
- package/dist/accounts.js +2 -0
- package/dist/accounts.js.map +1 -1
- package/dist/approvals.d.ts +2 -1
- package/dist/artifacts-document.js +5 -3
- package/dist/artifacts-presentation.js +5 -3
- package/dist/artifacts-spreadsheet.d.ts +1 -1
- package/dist/artifacts-spreadsheet.js +5 -3
- package/dist/artifacts.d.ts +5 -1
- package/dist/artifacts.js +536 -42
- package/dist/artifacts.js.map +1 -1
- package/dist/browser-viewer-ZWR6MWJ7.js +19 -0
- package/dist/capability-catalog-row.d.ts +20 -0
- package/dist/capability-logo-fallback.d.ts +3 -0
- package/dist/chat-interactive-block-4EUKJXUO.js +14 -0
- package/dist/chunk-2DDJ6YH6.js +41 -0
- package/dist/chunk-2DDJ6YH6.js.map +1 -0
- package/dist/chunk-2HVLQ26H.js +183 -0
- package/dist/chunk-2HVLQ26H.js.map +1 -0
- package/dist/{chunk-XYRDDSXF.js → chunk-2I6R3GCZ.js} +4285 -3980
- package/dist/chunk-2I6R3GCZ.js.map +1 -0
- package/dist/{chunk-JAQ5K7W6.js → chunk-2SFFYIH3.js} +1178 -166
- package/dist/chunk-2SFFYIH3.js.map +1 -0
- package/dist/chunk-3PVDYTTB.js +24 -0
- package/dist/chunk-3PVDYTTB.js.map +1 -0
- package/dist/chunk-3RJKUVCA.js +14068 -0
- package/dist/chunk-3RJKUVCA.js.map +1 -0
- package/dist/chunk-3UZCWK46.js +298 -0
- package/dist/chunk-3UZCWK46.js.map +1 -0
- package/dist/chunk-47CKUXTW.js +293 -0
- package/dist/chunk-47CKUXTW.js.map +1 -0
- package/dist/chunk-4QYP6QUI.js +109 -0
- package/dist/chunk-4QYP6QUI.js.map +1 -0
- package/dist/chunk-5EY26VZ7.js +1053 -0
- package/dist/chunk-5EY26VZ7.js.map +1 -0
- package/dist/chunk-5I4VRWBB.js +56 -0
- package/dist/chunk-5I4VRWBB.js.map +1 -0
- package/dist/chunk-5WOR7UCL.js +191 -0
- package/dist/chunk-5WOR7UCL.js.map +1 -0
- package/dist/chunk-5YJLGOM5.js +51 -0
- package/dist/chunk-5YJLGOM5.js.map +1 -0
- package/dist/chunk-6JFN3OWG.js +386 -0
- package/dist/chunk-6JFN3OWG.js.map +1 -0
- package/dist/chunk-7QJT5O4S.js +35 -0
- package/dist/chunk-7QJT5O4S.js.map +1 -0
- package/dist/chunk-A55KV72M.js +402 -0
- package/dist/chunk-A55KV72M.js.map +1 -0
- package/dist/chunk-ADWCLI4G.js +2028 -0
- package/dist/chunk-ADWCLI4G.js.map +1 -0
- package/dist/chunk-B27E3V37.js +29 -0
- package/dist/chunk-B27E3V37.js.map +1 -0
- package/dist/chunk-B7TC2A33.js +83 -0
- package/dist/chunk-B7TC2A33.js.map +1 -0
- package/dist/chunk-BLL56F7R.js +385 -0
- package/dist/chunk-BLL56F7R.js.map +1 -0
- package/dist/chunk-BOFEQC6K.js +162 -0
- package/dist/chunk-BOFEQC6K.js.map +1 -0
- package/dist/chunk-CM7LVUKC.js +35 -0
- package/dist/chunk-CM7LVUKC.js.map +1 -0
- package/dist/chunk-CORUP6JB.js +122 -0
- package/dist/chunk-CORUP6JB.js.map +1 -0
- package/dist/chunk-CSX5FFKZ.js +35 -0
- package/dist/chunk-CSX5FFKZ.js.map +1 -0
- package/dist/chunk-EGVHJKGJ.js +3125 -0
- package/dist/chunk-EGVHJKGJ.js.map +1 -0
- package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
- package/dist/chunk-G76LSA76.js.map +1 -0
- package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
- package/dist/chunk-GQMRL52F.js.map +1 -0
- package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
- package/dist/chunk-GUUXOISA.js.map +1 -0
- package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
- package/dist/chunk-I7X2P4FU.js.map +1 -0
- package/dist/chunk-IGFZFLI2.js +1390 -0
- package/dist/chunk-IGFZFLI2.js.map +1 -0
- package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
- package/dist/chunk-IMSUVYQB.js.map +1 -0
- package/dist/chunk-IOYHDEP3.js +38 -0
- package/dist/chunk-IOYHDEP3.js.map +1 -0
- package/dist/chunk-IZV5FTJC.js +55 -0
- package/dist/chunk-IZV5FTJC.js.map +1 -0
- package/dist/chunk-KF33GTWN.js +343 -0
- package/dist/chunk-KF33GTWN.js.map +1 -0
- package/dist/chunk-KSGQ5ODA.js +457 -0
- package/dist/chunk-KSGQ5ODA.js.map +1 -0
- package/dist/{chunk-ZPBTI3TE.js → chunk-KZC6QRNR.js} +1513 -697
- package/dist/chunk-KZC6QRNR.js.map +1 -0
- package/dist/chunk-LJUMYUBO.js +218 -0
- package/dist/chunk-LJUMYUBO.js.map +1 -0
- package/dist/chunk-LSW2OJVV.js +380 -0
- package/dist/chunk-LSW2OJVV.js.map +1 -0
- package/dist/chunk-M357MHH3.js +2 -0
- package/dist/chunk-M357MHH3.js.map +1 -0
- package/dist/chunk-MK2TQO4Y.js +24 -0
- package/dist/chunk-MK2TQO4Y.js.map +1 -0
- package/dist/chunk-N7S72EXK.js +25 -0
- package/dist/chunk-N7S72EXK.js.map +1 -0
- package/dist/{chunk-YVCHAQZY.js → chunk-NKMYZFHA.js} +616 -621
- package/dist/chunk-NKMYZFHA.js.map +1 -0
- package/dist/chunk-NX4ADH73.js +14 -0
- package/dist/chunk-NX4ADH73.js.map +1 -0
- package/dist/chunk-O7F6UJO4.js +71 -0
- package/dist/chunk-O7F6UJO4.js.map +1 -0
- package/dist/chunk-OYQQJL3J.js +16 -0
- package/dist/chunk-OYQQJL3J.js.map +1 -0
- package/dist/{chunk-H5YGYNXS.js → chunk-P4BNUO57.js} +60 -17
- package/dist/chunk-P4BNUO57.js.map +1 -0
- package/dist/{chunk-JVYQRRC4.js → chunk-PEHTX3V7.js} +21 -1
- package/dist/chunk-PEHTX3V7.js.map +1 -0
- package/dist/chunk-PMV53IMM.js +26 -0
- package/dist/chunk-PMV53IMM.js.map +1 -0
- package/dist/{chunk-KCGXPP5V.js → chunk-PYEOPA4M.js} +13 -7
- package/dist/chunk-PYEOPA4M.js.map +1 -0
- package/dist/{chunk-KZ73RL76.js → chunk-QHUE7E4N.js} +8 -3
- package/dist/chunk-QHUE7E4N.js.map +1 -0
- package/dist/chunk-QV3DJVRZ.js +11 -0
- package/dist/chunk-QV3DJVRZ.js.map +1 -0
- package/dist/chunk-R5SBNG7S.js +810 -0
- package/dist/chunk-R5SBNG7S.js.map +1 -0
- package/dist/chunk-RI42H5IU.js +326 -0
- package/dist/chunk-RI42H5IU.js.map +1 -0
- package/dist/chunk-S2QH6EZ5.js +211 -0
- package/dist/chunk-S2QH6EZ5.js.map +1 -0
- package/dist/chunk-SHLZMAJN.js +304 -0
- package/dist/chunk-SHLZMAJN.js.map +1 -0
- package/dist/chunk-TGXK4BAZ.js +293 -0
- package/dist/chunk-TGXK4BAZ.js.map +1 -0
- package/dist/{chunk-5YK2ZDIG.js → chunk-TNEZNMSN.js} +4 -10
- package/dist/chunk-TNEZNMSN.js.map +1 -0
- package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
- package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
- package/dist/chunk-UNJPZGNK.js +63 -0
- package/dist/chunk-UNJPZGNK.js.map +1 -0
- package/dist/{chunk-IOLVN74D.js → chunk-V5ZUJT2T.js} +175 -42
- package/dist/chunk-V5ZUJT2T.js.map +1 -0
- package/dist/chunk-WBJY57A3.js +402 -0
- package/dist/chunk-WBJY57A3.js.map +1 -0
- package/dist/chunk-WIUKB3LD.js +1911 -0
- package/dist/chunk-WIUKB3LD.js.map +1 -0
- package/dist/{chunk-ICA6R6TW.js → chunk-WNN7NO2N.js} +1451 -355
- package/dist/chunk-WNN7NO2N.js.map +1 -0
- package/dist/{chunk-3AGBGTRT.js → chunk-X5UVUIMF.js} +1712 -1174
- package/dist/chunk-X5UVUIMF.js.map +1 -0
- package/dist/chunk-XDA5QJE7.js +402 -0
- package/dist/chunk-XDA5QJE7.js.map +1 -0
- package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
- package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
- package/dist/chunk-XHF7OYAN.js +1150 -0
- package/dist/chunk-XHF7OYAN.js.map +1 -0
- package/dist/chunk-YSRBFJMQ.js +43 -0
- package/dist/chunk-YSRBFJMQ.js.map +1 -0
- package/dist/chunk-ZOZAPAUO.js +174 -0
- package/dist/chunk-ZOZAPAUO.js.map +1 -0
- package/dist/chunk-ZQV5W7YC.js +809 -0
- package/dist/chunk-ZQV5W7YC.js.map +1 -0
- package/dist/chunk-ZUWF4NF7.js +13 -0
- package/dist/chunk-ZUWF4NF7.js.map +1 -0
- package/dist/client.d.ts +16 -7
- package/dist/clipboard.js +3 -1
- package/dist/commands/types.d.ts +2 -0
- package/dist/components/anthropic-mark.d.ts +3 -0
- package/dist/components/approval-surface.d.ts +19 -6
- package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
- package/dist/components/artifacts/artifact-sandbox.d.ts +30 -0
- package/dist/components/artifacts/artifact-surface.d.ts +4 -2
- package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
- package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
- package/dist/components/artifacts/document-editor.d.ts +4 -2
- package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
- package/dist/components/artifacts/editable-artifact-view.d.ts +48 -0
- package/dist/components/artifacts/editable-document.d.ts +1 -1
- package/dist/components/artifacts/editable-presentation.d.ts +2 -2
- package/dist/components/artifacts/editable-spreadsheet.d.ts +8 -3
- package/dist/components/artifacts/index.d.ts +9 -2
- package/dist/components/artifacts/inline-html-document.d.ts +2 -0
- package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
- package/dist/components/artifacts/presentation-editor.d.ts +6 -2
- package/dist/components/artifacts/published-html-artifact-frame.d.ts +23 -3
- package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
- package/dist/components/artifacts/site-view.d.ts +26 -0
- package/dist/components/artifacts/spreadsheet-command-queue.d.ts +20 -0
- package/dist/components/artifacts/spreadsheet-download.d.ts +7 -0
- package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
- package/dist/components/artifacts/spreadsheet-grid.d.ts +10 -3
- package/dist/components/artifacts/spreadsheet-resize.d.ts +50 -0
- package/dist/components/artifacts/spreadsheet-submissions.d.ts +9 -0
- package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
- package/dist/components/browser-select-control.d.ts +16 -0
- package/dist/components/browser-viewer.d.ts +11 -2
- package/dist/components/chat-composer.d.ts +21 -3
- package/dist/components/child-session-link.d.ts +9 -0
- package/dist/components/claude-mark.d.ts +3 -0
- package/dist/components/code-editor.d.ts +1 -4
- package/dist/components/composer-transcription-control.d.ts +7 -0
- package/dist/components/composer.d.ts +34 -67
- package/dist/components/computer-viewer.d.ts +1 -1
- package/dist/components/copy-button.d.ts +3 -1
- package/dist/components/desktop-viewer.d.ts +1 -1
- package/dist/components/grok-mark.d.ts +26 -0
- package/dist/components/human-input-form.d.ts +28 -32
- package/dist/components/human-input-surface.d.ts +7 -2
- package/dist/components/linkified-text.d.ts +18 -0
- package/dist/components/machine-input-display.d.ts +22 -1
- package/dist/components/machines/agent-status-icon.d.ts +6 -0
- package/dist/components/machines/machine-detail.d.ts +7 -1
- package/dist/components/machines/machine-status.d.ts +48 -0
- package/dist/components/markdown-table-layout.d.ts +18 -0
- package/dist/components/markdown.d.ts +37 -4
- package/dist/components/message-timeline.d.ts +86 -7
- package/dist/components/model-mark.d.ts +29 -0
- package/dist/components/model-policy-picker-menu.d.ts +9 -0
- package/dist/components/model-policy-picker.d.ts +35 -28
- package/dist/components/new-conversation.d.ts +32 -0
- package/dist/components/open-geni-chat.d.ts +73 -0
- package/dist/components/open-geni-links.d.ts +68 -0
- package/dist/components/openrouter-mark.d.ts +6 -0
- package/dist/components/opper-mark.d.ts +7 -0
- package/dist/components/preview-loading.d.ts +2 -0
- package/dist/components/provider-recovery-notice.d.ts +16 -0
- package/dist/components/queue-item-content.d.ts +9 -0
- package/dist/components/rehype-secret-refs.d.ts +23 -0
- package/dist/components/remark-soft-line-breaks.d.ts +38 -0
- package/dist/components/sandbox-files.d.ts +3 -1
- package/dist/components/sandbox-workspace.d.ts +18 -0
- package/dist/components/secret-question-field.d.ts +31 -0
- package/dist/components/secret-ref-chip.d.ts +35 -0
- package/dist/components/session-capability-frame.d.ts +37 -0
- package/dist/components/session-chrome.d.ts +57 -8
- package/dist/components/session-commands-panel.d.ts +6 -0
- package/dist/components/session-commands.d.ts +6 -0
- package/dist/components/session-connection-request.d.ts +8 -0
- package/dist/components/session-conversation.d.ts +157 -0
- package/dist/components/session-list.d.ts +39 -0
- package/dist/components/session-mcp-capability-card.d.ts +41 -0
- package/dist/components/session-proxy-scope.d.ts +35 -0
- package/dist/components/session-status.d.ts +4 -1
- package/dist/components/session-usage-limit-notice.d.ts +39 -0
- package/dist/components/timeline-anchor.d.ts +24 -0
- package/dist/components/timeline-annotation-chrome.d.ts +25 -0
- package/dist/components/timeline-annotation-layout.d.ts +42 -0
- package/dist/components/timeline-annotation-markers.d.ts +8 -0
- package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
- package/dist/components/timeline-annotation-shared.d.ts +31 -0
- package/dist/components/timeline-annotations-dialog.d.ts +3 -2
- package/dist/components/timeline-annotations.d.ts +13 -3
- package/dist/components/timeline-reading-progress.d.ts +11 -0
- package/dist/components/timeline-search.d.ts +34 -0
- package/dist/components/timeline-settlement.d.ts +16 -0
- package/dist/components/tool-action-review.d.ts +47 -0
- package/dist/components/tool-review-history.d.ts +25 -0
- package/dist/components/usage-limit-notice.d.ts +49 -0
- package/dist/components/usage-member-list.d.ts +91 -0
- package/dist/components/usage-meter.d.ts +73 -0
- package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
- package/dist/components/user-message-body.d.ts +10 -1
- package/dist/composer-messages.d.ts +74 -0
- package/dist/composer-messages.js +9 -0
- package/dist/composer-messages.js.map +1 -0
- package/dist/composer-voice-events.d.ts +8 -0
- package/dist/composer.d.ts +5 -4
- package/dist/composer.js +26 -13
- package/dist/computer-viewer-GMLDXPON.js +20 -0
- package/dist/computer-viewer-GMLDXPON.js.map +1 -0
- package/dist/connect-account-identity.d.ts +8 -0
- package/dist/connect-accounts.d.ts +15 -0
- package/dist/connect-chooser.d.ts +18 -0
- package/dist/connect-panel.d.ts +18 -0
- package/dist/connect-setup.d.ts +18 -0
- package/dist/connect.d.ts +21 -0
- package/dist/connect.js +2149 -0
- package/dist/connect.js.map +1 -0
- package/dist/connection-catalog.d.ts +38 -0
- package/dist/connection-discovery.d.ts +12 -0
- package/dist/connection-installed.d.ts +17 -0
- package/dist/connection-logo.d.ts +9 -0
- package/dist/connection-service-logo.d.ts +8 -0
- package/dist/connection-service-presentation.d.ts +13 -0
- package/dist/connection-skeleton.d.ts +5 -0
- package/dist/connection-type-picker.d.ts +6 -0
- package/dist/conversation-timeline.d.ts +5 -0
- package/dist/desktop.d.ts +7 -0
- package/dist/desktop.js +27 -0
- package/dist/desktop.js.map +1 -0
- package/dist/device-authorization.d.ts +23 -0
- package/dist/diffs.d.ts +8 -0
- package/dist/diffs.js +15 -0
- package/dist/diffs.js.map +1 -0
- package/dist/discovery-cache.d.ts +5 -0
- package/dist/editor.d.ts +7 -0
- package/dist/editor.js +22 -0
- package/dist/editor.js.map +1 -0
- package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
- package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
- package/dist/embedded-voice-RPHPYVBT.js +18 -0
- package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
- package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
- package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
- package/dist/hooks/latest-question.d.ts +25 -0
- package/dist/hooks/shared-machines-list.d.ts +4 -0
- package/dist/hooks/shared-query.d.ts +113 -0
- package/dist/hooks/use-attached-browsers.d.ts +1 -1
- package/dist/hooks/use-auth-runs.d.ts +1 -4
- package/dist/hooks/use-available-models.d.ts +1 -1
- package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
- package/dist/hooks/use-browser-session.d.ts +12 -1
- package/dist/hooks/use-client-config-flags.d.ts +49 -0
- package/dist/hooks/use-codex-accounts.d.ts +59 -10
- package/dist/hooks/use-composer.d.ts +24 -2
- package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
- package/dist/hooks/use-computer-input-posture.d.ts +13 -0
- package/dist/hooks/use-computer-session.d.ts +4 -0
- package/dist/hooks/use-connect.d.ts +23 -0
- package/dist/hooks/use-desktop-stream.d.ts +1 -1
- package/dist/hooks/use-file-attachments.d.ts +12 -0
- package/dist/hooks/use-goal.d.ts +2 -1
- package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
- package/dist/hooks/use-new-conversation.d.ts +56 -0
- package/dist/hooks/use-new-session-draft.d.ts +74 -0
- package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
- package/dist/hooks/use-sandbox-files.d.ts +4 -1
- package/dist/hooks/use-session-conversation.d.ts +49 -0
- package/dist/hooks/use-session-events.d.ts +26 -5
- package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
- package/dist/hooks/use-session-model-account.d.ts +48 -0
- package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
- package/dist/hooks/use-terminal-stream.d.ts +11 -5
- package/dist/hooks/use-usage.d.ts +40 -0
- package/dist/hooks/use-vaults.d.ts +53 -0
- package/dist/hooks/use-voice-input.d.ts +8 -1
- package/dist/hooks/use-workspace-edit.d.ts +4 -0
- package/dist/hooks/use-workspace-sessions.d.ts +24 -5
- package/dist/human-input-model.d.ts +122 -0
- package/dist/identity-link-accounts.d.ts +11 -0
- package/dist/identity-link-consent.d.ts +18 -0
- package/dist/index.d.ts +82 -20
- package/dist/index.js +2340 -6603
- package/dist/index.js.map +1 -1
- package/dist/interaction.d.ts +1 -1
- package/dist/interaction.js +14 -24
- package/dist/interaction.js.map +1 -1
- package/dist/latest-question-R77KWSUP.js +118 -0
- package/dist/latest-question-R77KWSUP.js.map +1 -0
- package/dist/lib/clipboard.d.ts +7 -0
- package/dist/lib/error-message.d.ts +7 -0
- package/dist/lib/format.d.ts +58 -4
- package/dist/lib/host-theme.d.ts +77 -0
- package/dist/lib/interaction-errors.d.ts +3 -0
- package/dist/lib/menu-styles.d.ts +22 -0
- package/dist/lib/notify-observer.d.ts +2 -0
- package/dist/lib/pierre-diffs-loader.d.ts +20 -0
- package/dist/lib/provider-recovery.d.ts +55 -0
- package/dist/lib/scrollbars.d.ts +11 -0
- package/dist/lib/terminal-input-readiness.d.ts +11 -0
- package/dist/lib/transient-retry.d.ts +25 -0
- package/dist/lib/workbench-peers.d.ts +36 -0
- package/dist/lib/xterm-theme.d.ts +7 -5
- package/dist/machines.js +9 -5
- package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
- package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
- package/dist/mcp-connection-status.d.ts +14 -0
- package/dist/model-mark-paths.d.ts +34 -0
- package/dist/model-mark-paths.js +16 -0
- package/dist/model-mark-paths.js.map +1 -0
- package/dist/model-picker-model.d.ts +111 -0
- package/dist/model-picker-model.js +25 -0
- package/dist/model-picker-model.js.map +1 -0
- package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
- package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
- package/dist/model-policy.d.ts +30 -3
- package/dist/model-policy.js +14 -1
- package/dist/native-previews.d.ts +28 -0
- package/dist/native-previews.js +82 -0
- package/dist/native-previews.js.map +1 -0
- package/dist/new-session-draft.d.ts +7 -0
- package/dist/new-session-draft.js +639 -0
- package/dist/new-session-draft.js.map +1 -0
- package/dist/notification-text.d.ts +27 -0
- package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
- package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
- package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
- package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
- package/dist/older-history.d.ts +3 -2
- package/dist/organization-model.d.ts +32 -0
- package/dist/organization-model.js +65 -0
- package/dist/organization-model.js.map +1 -0
- package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
- package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
- package/dist/plugin-details.d.ts +14 -0
- package/dist/plugin-discovery.d.ts +25 -0
- package/dist/preview-loading-paint.d.ts +20 -0
- package/dist/provider.d.ts +25 -2
- package/dist/queue-presentation-model.d.ts +72 -0
- package/dist/queue-presentation-model.js +38 -0
- package/dist/queue-presentation-model.js.map +1 -0
- package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
- package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
- package/dist/realtime/embedded-new-voice.d.ts +1 -0
- package/dist/realtime/embedded-voice.d.ts +1 -0
- package/dist/realtime/realtime-control.d.ts +4 -65
- package/dist/realtime/session-realtime.d.ts +78 -0
- package/dist/realtime.js +25 -1333
- package/dist/realtime.js.map +1 -1
- package/dist/sandbox-files-O27IPOZW.js +21 -0
- package/dist/sandbox-files-O27IPOZW.js.map +1 -0
- package/dist/sandbox-label-model.d.ts +30 -0
- package/dist/sandbox-label-model.js +20 -0
- package/dist/sandbox-label-model.js.map +1 -0
- package/dist/scrollbars.d.ts +1 -0
- package/dist/scrollbars.js +10 -0
- package/dist/scrollbars.js.map +1 -0
- package/dist/secret-reference-label.d.ts +14 -0
- package/dist/secrets-ui.d.ts +57 -0
- package/dist/session-agents-model.d.ts +10 -0
- package/dist/session-agents-model.js +25 -0
- package/dist/session-agents-model.js.map +1 -0
- package/dist/session-attention-model.d.ts +8 -0
- package/dist/session-attention-model.js +47 -0
- package/dist/session-attention-model.js.map +1 -0
- package/dist/session-auth-recommendation.d.ts +5 -0
- package/dist/session-capability-policy.d.ts +31 -0
- package/dist/session-feedback-model.d.ts +20 -0
- package/dist/session-feedback-model.js +56 -0
- package/dist/session-feedback-model.js.map +1 -0
- package/dist/session-list-model.d.ts +138 -0
- package/dist/session-list-model.js +274 -0
- package/dist/session-list-model.js.map +1 -0
- package/dist/session-realtime-7DJOIHQW.js +21 -0
- package/dist/session-realtime-7DJOIHQW.js.map +1 -0
- package/dist/session-realtime.d.ts +7 -0
- package/dist/session-realtime.js +19 -0
- package/dist/session-realtime.js.map +1 -0
- package/dist/session-status-model.d.ts +36 -0
- package/dist/session-ui.d.ts +39 -1
- package/dist/session-ui.js +126 -12
- package/dist/session-ui.js.map +1 -1
- package/dist/session.d.ts +8 -2
- package/dist/session.js +35 -20
- package/dist/site-snapshot.d.ts +14 -0
- package/dist/sites-ui.d.ts +24 -0
- package/dist/sites.d.ts +3 -0
- package/dist/sites.js +14 -0
- package/dist/sites.js.map +1 -0
- package/dist/skill-discovery.d.ts +47 -0
- package/dist/terminal.d.ts +8 -0
- package/dist/terminal.js +32 -0
- package/dist/terminal.js.map +1 -0
- package/dist/testing/session-scenarios.d.ts +10 -0
- package/dist/testing/session-scenarios.js +367 -0
- package/dist/testing/session-scenarios.js.map +1 -0
- package/dist/timeline/activity-rail.d.ts +11 -2
- package/dist/timeline/agent-identity.d.ts +30 -0
- package/dist/timeline/agent-row.d.ts +31 -0
- package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
- package/dist/timeline/compaction-copy.d.ts +46 -0
- package/dist/timeline/focus-sequence.d.ts +9 -0
- package/dist/timeline/genie-copy.d.ts +3 -0
- package/dist/timeline/genie-loading.d.ts +47 -0
- package/dist/timeline/index.d.ts +10 -5
- package/dist/timeline/knowledge-receipt.d.ts +17 -0
- package/dist/timeline/message-sender.d.ts +19 -0
- package/dist/timeline/notice-presentation.d.ts +13 -0
- package/dist/timeline/parsers.d.ts +11 -0
- package/dist/timeline/patch-apply-command.d.ts +18 -0
- package/dist/timeline/platform-activity-presentation.d.ts +21 -0
- package/dist/timeline/platform-activity-row.d.ts +1 -2
- package/dist/timeline/presented-image.d.ts +11 -0
- package/dist/timeline/projection.d.ts +31 -2
- package/dist/timeline/provider-logo.d.ts +15 -0
- package/dist/timeline/question-nav-model.d.ts +23 -0
- package/dist/timeline/registry.d.ts +12 -1
- package/dist/timeline/retained-image.d.ts +18 -0
- package/dist/timeline/retained-loaders.d.ts +27 -0
- package/dist/timeline/rolling-activity.d.ts +11 -0
- package/dist/timeline/screenshot-lightbox.d.ts +23 -1
- package/dist/timeline/session-usage-limit-row.d.ts +11 -0
- package/dist/timeline/shared.d.ts +4 -1
- package/dist/timeline/startup-dispatch-details.d.ts +5 -0
- package/dist/timeline/startup-preference.d.ts +3 -0
- package/dist/timeline/startup-timings.d.ts +4 -0
- package/dist/timeline/tool-display-name.d.ts +5 -2
- package/dist/timeline/tool-presentation.d.ts +172 -0
- package/dist/timeline/turn-summary-model.d.ts +95 -0
- package/dist/timeline/turn-summary.d.ts +20 -54
- package/dist/timeline/types.d.ts +179 -7
- package/dist/timeline/work-presentation.d.ts +60 -0
- package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
- package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
- package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
- package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
- package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
- package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
- package/dist/timeline-model.d.ts +29 -0
- package/dist/timeline-model.js +254 -0
- package/dist/timeline-model.js.map +1 -0
- package/dist/usage/allowance-copy.d.ts +25 -0
- package/dist/usage/session-usage-limit.d.ts +88 -0
- package/dist/usage/summary.d.ts +35 -0
- package/dist/usage.d.ts +17 -0
- package/dist/usage.js +1187 -0
- package/dist/usage.js.map +1 -0
- package/dist/voice-recording-owner.d.ts +7 -0
- package/package.json +106 -7
- package/src/approvals.ts +8 -1
- package/src/artifacts-spreadsheet.ts +1 -0
- package/src/artifacts.ts +44 -0
- package/src/assets/README.md +8 -0
- package/src/assets/gmail.ico +0 -0
- package/src/assets/outlook.ico +0 -0
- package/src/capability-catalog-row.tsx +94 -0
- package/src/capability-logo-fallback.ts +22 -0
- package/src/client.ts +20 -31
- package/src/commands/registry.ts +18 -15
- package/src/commands/types.ts +2 -0
- package/src/components/anthropic-mark.tsx +10 -0
- package/src/components/approval-surface.tsx +401 -138
- package/src/components/artifacts/artifact-chrome.tsx +413 -0
- package/src/components/artifacts/artifact-sandbox.tsx +193 -0
- package/src/components/artifacts/artifact-surface.tsx +40 -20
- package/src/components/artifacts/chat-interactive-block.tsx +260 -0
- package/src/components/artifacts/deferred-chat-media.tsx +67 -0
- package/src/components/artifacts/document-editor.tsx +141 -16
- package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
- package/src/components/artifacts/editable-artifact-view.tsx +197 -0
- package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
- package/src/components/artifacts/editable-document.tsx +37 -36
- package/src/components/artifacts/editable-presentation.tsx +36 -18
- package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
- package/src/components/artifacts/index.ts +45 -0
- package/src/components/artifacts/inline-html-document.ts +24 -0
- package/src/components/artifacts/latest-task-runner.ts +49 -0
- package/src/components/artifacts/presentation-editor.tsx +323 -67
- package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
- package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
- package/src/components/artifacts/site-view.tsx +121 -0
- package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
- package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
- package/src/components/artifacts/spreadsheet-download.tsx +109 -0
- package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
- package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
- package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
- package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
- package/src/components/artifacts/visualization-assets/base.css +1015 -0
- package/src/components/artifacts/visualization-assets/helpers.html +349 -0
- package/src/components/artifacts/visualization-assets.gen.ts +3 -0
- package/src/components/browser-select-control.tsx +312 -0
- package/src/components/browser-viewer.tsx +778 -318
- package/src/components/chat-composer.tsx +47 -5
- package/src/components/child-session-link.tsx +36 -0
- package/src/components/claude-mark.tsx +11 -0
- package/src/components/code-editor.tsx +13 -16
- package/src/components/composer-transcription-control.tsx +128 -30
- package/src/components/composer.tsx +404 -195
- package/src/components/computer-viewer.tsx +880 -253
- package/src/components/copy-button.tsx +13 -5
- package/src/components/desktop-viewer.tsx +1 -1
- package/src/components/enrollment-consent.tsx +1 -1
- package/src/components/enrollment-device-flow.tsx +1 -1
- package/src/components/file-browser.tsx +10 -14
- package/src/components/fleet-tile.tsx +5 -3
- package/src/components/generated-video-player.tsx +4 -2
- package/src/components/grok-mark.tsx +34 -0
- package/src/components/human-input-form.tsx +590 -283
- package/src/components/human-input-surface.tsx +11 -0
- package/src/components/interaction-intervention-banner.tsx +2 -2
- package/src/components/linkified-text.tsx +79 -0
- package/src/components/machine-card.tsx +35 -78
- package/src/components/machine-dock-bar.tsx +1 -1
- package/src/components/machine-input-display.ts +197 -3
- package/src/components/machines/agent-status-icon.tsx +31 -0
- package/src/components/machines/machine-detail.tsx +200 -31
- package/src/components/machines/machine-operation-policy.tsx +1 -1
- package/src/components/machines/machine-status.ts +241 -0
- package/src/components/machines-dashboard.tsx +2 -17
- package/src/components/markdown-table-layout.ts +143 -0
- package/src/components/markdown.tsx +466 -129
- package/src/components/message-timeline.tsx +2370 -667
- package/src/components/model-mark.tsx +102 -0
- package/src/components/model-picker.tsx +15 -4
- package/src/components/model-policy-picker-menu.tsx +371 -0
- package/src/components/model-policy-picker.tsx +252 -429
- package/src/components/new-conversation.tsx +221 -0
- package/src/components/open-geni-chat.tsx +309 -0
- package/src/components/open-geni-links.tsx +179 -0
- package/src/components/openrouter-mark.tsx +13 -0
- package/src/components/opper-mark.tsx +18 -0
- package/src/components/pierre-diff.tsx +41 -16
- package/src/components/pierre-file.tsx +35 -10
- package/src/components/preview-loading.tsx +109 -0
- package/src/components/provider-recovery-notice.tsx +49 -0
- package/src/components/queue-item-content.ts +14 -0
- package/src/components/queue-surface-implementation.tsx +51 -356
- package/src/components/queue-surface-state.tsx +3 -1
- package/src/components/rehype-secret-refs.ts +98 -0
- package/src/components/remark-soft-line-breaks.ts +166 -0
- package/src/components/sandbox-files.tsx +91 -15
- package/src/components/sandbox-terminal.tsx +84 -13
- package/src/components/sandbox-workspace.tsx +147 -51
- package/src/components/secret-question-field.tsx +324 -0
- package/src/components/secret-ref-chip.tsx +185 -0
- package/src/components/session-capability-frame.tsx +197 -0
- package/src/components/session-chrome.tsx +842 -251
- package/src/components/session-commands-panel.tsx +126 -0
- package/src/components/session-commands.tsx +18 -0
- package/src/components/session-connection-request.tsx +97 -0
- package/src/components/session-conversation.tsx +876 -0
- package/src/components/session-list.tsx +257 -0
- package/src/components/session-mcp-capability-card.tsx +680 -0
- package/src/components/session-proxy-scope.tsx +153 -0
- package/src/components/session-status.tsx +26 -17
- package/src/components/session-usage-limit-notice.tsx +174 -0
- package/src/components/timeline-anchor.tsx +119 -0
- package/src/components/timeline-annotation-chrome.tsx +196 -0
- package/src/components/timeline-annotation-layout.ts +268 -0
- package/src/components/timeline-annotation-markers.tsx +185 -0
- package/src/components/timeline-annotation-reveal-context.ts +9 -0
- package/src/components/timeline-annotation-selection.tsx +106 -54
- package/src/components/timeline-annotation-shared.ts +245 -0
- package/src/components/timeline-annotations-dialog.tsx +185 -128
- package/src/components/timeline-annotations.tsx +189 -45
- package/src/components/timeline-reading-progress.ts +80 -0
- package/src/components/timeline-search.tsx +168 -0
- package/src/components/timeline-settlement.ts +60 -0
- package/src/components/tool-action-review.tsx +650 -0
- package/src/components/tool-review-history.tsx +88 -0
- package/src/components/usage-limit-notice.tsx +179 -0
- package/src/components/usage-member-list.tsx +792 -0
- package/src/components/usage-meter.tsx +382 -0
- package/src/components/use-viewer-menu-dismiss.ts +33 -0
- package/src/components/user-message-body.tsx +27 -2
- package/src/components/workspace-dock.tsx +18 -1
- package/src/composer-messages.ts +150 -0
- package/src/composer-voice-events.ts +12 -0
- package/src/composer.ts +6 -1
- package/src/connect-account-identity.tsx +34 -0
- package/src/connect-accounts.tsx +233 -0
- package/src/connect-chooser.tsx +336 -0
- package/src/connect-panel.tsx +99 -0
- package/src/connect-setup.tsx +355 -0
- package/src/connect.ts +60 -0
- package/src/connection-assets.d.ts +4 -0
- package/src/connection-catalog.tsx +162 -0
- package/src/connection-discovery.tsx +238 -0
- package/src/connection-installed.tsx +51 -0
- package/src/connection-logo.tsx +37 -0
- package/src/connection-service-logo.tsx +55 -0
- package/src/connection-service-presentation.ts +46 -0
- package/src/connection-skeleton.tsx +16 -0
- package/src/connection-type-picker.tsx +36 -0
- package/src/conversation-timeline.ts +92 -0
- package/src/desktop.ts +24 -0
- package/src/device-authorization.tsx +98 -0
- package/src/diffs.ts +16 -0
- package/src/discovery-cache.ts +42 -0
- package/src/editor.ts +13 -0
- package/src/hooks/internal.ts +3 -2
- package/src/hooks/latest-question.ts +164 -0
- package/src/hooks/shared-machines-list.ts +34 -1
- package/src/hooks/shared-query.ts +721 -0
- package/src/hooks/use-attached-browsers.ts +1 -1
- package/src/hooks/use-auth-runs.ts +0 -27
- package/src/hooks/use-available-models.ts +2 -2
- package/src/hooks/use-browser-frame-stream.ts +19 -2
- package/src/hooks/use-browser-session.ts +680 -205
- package/src/hooks/use-browser-sessions.ts +32 -1
- package/src/hooks/use-client-config-flags.ts +118 -0
- package/src/hooks/use-codex-accounts.ts +247 -47
- package/src/hooks/use-composer.ts +227 -44
- package/src/hooks/use-computer-frame-stream.ts +25 -7
- package/src/hooks/use-computer-input-posture.ts +94 -0
- package/src/hooks/use-computer-session.ts +409 -95
- package/src/hooks/use-connect.ts +23 -0
- package/src/hooks/use-desktop-stream.ts +19 -28
- package/src/hooks/use-file-attachments.ts +80 -4
- package/src/hooks/use-goal.ts +79 -9
- package/src/hooks/use-last-started-turn-policy.ts +37 -11
- package/src/hooks/use-machines.ts +4 -0
- package/src/hooks/use-new-conversation.ts +374 -0
- package/src/hooks/use-new-session-draft.ts +813 -0
- package/src/hooks/use-realtime-voice-models.ts +46 -0
- package/src/hooks/use-sandbox-files.ts +68 -20
- package/src/hooks/use-session-background-commands.ts +22 -11
- package/src/hooks/use-session-capabilities.ts +3 -2
- package/src/hooks/use-session-conversation.ts +150 -0
- package/src/hooks/use-session-events.ts +531 -335
- package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
- package/src/hooks/use-session-model-account.ts +174 -0
- package/src/hooks/use-session.ts +30 -2
- package/src/hooks/use-slash-commands.ts +6 -11
- package/src/hooks/use-supergrok-accounts.ts +22 -8
- package/src/hooks/use-terminal-stream.ts +153 -27
- package/src/hooks/use-transcription.ts +6 -0
- package/src/hooks/use-turn-queue.ts +2 -1
- package/src/hooks/use-usage.ts +100 -0
- package/src/hooks/use-vaults.ts +153 -0
- package/src/hooks/use-video-artifact-playback.ts +1 -1
- package/src/hooks/use-voice-input.ts +127 -19
- package/src/hooks/use-workspace-capture.ts +3 -2
- package/src/hooks/use-workspace-edit.ts +23 -5
- package/src/hooks/use-workspace-sessions.ts +74 -7
- package/src/human-input-model.ts +359 -0
- package/src/identity-link-accounts.tsx +148 -0
- package/src/identity-link-consent.tsx +192 -0
- package/src/index.ts +262 -16
- package/src/interaction.ts +1 -0
- package/src/lib/clipboard.ts +29 -0
- package/src/lib/error-message.ts +37 -0
- package/src/lib/format.ts +205 -10
- package/src/lib/host-theme.ts +529 -0
- package/src/lib/interaction-errors.ts +15 -0
- package/src/lib/menu-styles.ts +44 -0
- package/src/lib/notify-observer.ts +15 -0
- package/src/lib/pierre-diffs-loader.ts +53 -0
- package/src/lib/provider-recovery.ts +243 -0
- package/src/lib/scrollbars.ts +30 -0
- package/src/lib/terminal-input-readiness.ts +51 -0
- package/src/lib/transient-retry.ts +99 -0
- package/src/lib/workbench-peers.ts +62 -0
- package/src/lib/xterm-theme.ts +23 -21
- package/src/mcp-connection-status.ts +35 -0
- package/src/model-mark-paths.ts +53 -0
- package/src/model-picker-model.ts +330 -0
- package/src/model-policy.ts +299 -74
- package/src/native-previews.ts +100 -0
- package/src/new-session-draft.ts +22 -0
- package/src/notification-text.ts +81 -0
- package/src/older-history.ts +22 -4
- package/src/organization-model.ts +118 -0
- package/src/plugin-details.tsx +185 -0
- package/src/plugin-discovery.tsx +196 -0
- package/src/preview-loading-paint.ts +68 -0
- package/src/provider.tsx +74 -15
- package/src/queue-presentation-model.ts +464 -0
- package/src/realtime/dropdown-menu.tsx +19 -12
- package/src/realtime/embedded-new-voice.tsx +1 -0
- package/src/realtime/embedded-voice.tsx +3 -0
- package/src/realtime/realtime-control.tsx +138 -550
- package/src/realtime/session-realtime.ts +566 -0
- package/src/sandbox-label-model.ts +53 -0
- package/src/scrollbars.ts +3 -0
- package/src/secret-reference-label.ts +43 -0
- package/src/secrets-ui.tsx +59 -0
- package/src/session-agents-model.ts +33 -0
- package/src/session-attention-model.ts +62 -0
- package/src/session-auth-recommendation.ts +48 -0
- package/src/session-capability-policy.ts +196 -0
- package/src/session-context.ts +3 -4
- package/src/session-feedback-model.ts +95 -0
- package/src/session-list-model.ts +434 -0
- package/src/session-realtime.ts +18 -0
- package/src/session-status-model.ts +99 -0
- package/src/session-ui.ts +98 -1
- package/src/session.ts +17 -1
- package/src/site-snapshot.ts +74 -0
- package/src/sites-ui.tsx +348 -0
- package/src/sites.ts +3 -0
- package/src/skill-discovery.tsx +208 -0
- package/src/terminal.ts +26 -0
- package/src/testing/session-scenarios.ts +404 -0
- package/src/timeline/activity-rail.tsx +242 -101
- package/src/timeline/agent-identity.tsx +84 -0
- package/src/timeline/agent-row.tsx +231 -0
- package/src/timeline/allowance-exhausted-row.tsx +86 -0
- package/src/timeline/compaction-copy.ts +115 -0
- package/src/timeline/fleet-decision-projection.ts +2 -1
- package/src/timeline/fleet-decision-row.tsx +1 -0
- package/src/timeline/focus-sequence.ts +44 -0
- package/src/timeline/genie-copy.ts +19 -0
- package/src/timeline/genie-loading.tsx +143 -0
- package/src/timeline/index.ts +30 -2
- package/src/timeline/knowledge-receipt.tsx +100 -0
- package/src/timeline/message-sender.tsx +71 -0
- package/src/timeline/notice-presentation.ts +48 -0
- package/src/timeline/parsers.ts +42 -2
- package/src/timeline/patch-apply-command.tsx +135 -0
- package/src/timeline/platform-activity-presentation.ts +166 -0
- package/src/timeline/platform-activity-row.tsx +15 -90
- package/src/timeline/presented-image.ts +63 -0
- package/src/timeline/projection.ts +1742 -76
- package/src/timeline/provider-logo.tsx +53 -0
- package/src/timeline/question-nav-model.ts +28 -0
- package/src/timeline/registry.ts +26 -4
- package/src/timeline/retained-image.ts +97 -0
- package/src/timeline/retained-loaders.ts +91 -0
- package/src/timeline/rolling-activity.tsx +80 -0
- package/src/timeline/screenshot-lightbox.tsx +228 -5
- package/src/timeline/session-usage-limit-row.tsx +42 -0
- package/src/timeline/shared.tsx +42 -15
- package/src/timeline/startup-dispatch-details.tsx +36 -0
- package/src/timeline/startup-preference.ts +33 -0
- package/src/timeline/startup-timings.tsx +145 -0
- package/src/timeline/tool-display-name.ts +19 -7
- package/src/timeline/tool-presentation.ts +1316 -0
- package/src/timeline/tool-renderers.tsx +835 -1138
- package/src/timeline/turn-summary-model.ts +343 -0
- package/src/timeline/turn-summary.tsx +272 -365
- package/src/timeline/types.ts +189 -6
- package/src/timeline/work-presentation.ts +189 -0
- package/src/timeline-model.ts +143 -0
- package/src/usage/allowance-copy.ts +64 -0
- package/src/usage/session-usage-limit.ts +266 -0
- package/src/usage/summary.ts +93 -0
- package/src/usage.ts +70 -0
- package/src/voice-recording-owner.ts +22 -0
- package/styles/compiled.css +2319 -748
- package/styles/connect.css +290 -0
- package/styles/connect.d.ts +1 -0
- package/styles/effective-tokens.css +1 -0
- package/styles/index.css +309 -9
- package/styles/responsive.css +99 -7
- package/styles/session-capability.css +44 -0
- package/styles/tokens.css +134 -66
- package/dist/browser-viewer-MKKFRRRV.js +0 -14
- package/dist/chunk-2DZVYHVO.js +0 -470
- package/dist/chunk-2DZVYHVO.js.map +0 -1
- package/dist/chunk-3AGBGTRT.js.map +0 -1
- package/dist/chunk-4MDLEHXL.js.map +0 -1
- package/dist/chunk-5YK2ZDIG.js.map +0 -1
- package/dist/chunk-7EAFGICR.js +0 -302
- package/dist/chunk-7EAFGICR.js.map +0 -1
- package/dist/chunk-ELIYWBZR.js.map +0 -1
- package/dist/chunk-H5YGYNXS.js.map +0 -1
- package/dist/chunk-HUIKIDM5.js.map +0 -1
- package/dist/chunk-ICA6R6TW.js.map +0 -1
- package/dist/chunk-IOLVN74D.js.map +0 -1
- package/dist/chunk-JAQ5K7W6.js.map +0 -1
- package/dist/chunk-JVYQRRC4.js.map +0 -1
- package/dist/chunk-KCGXPP5V.js.map +0 -1
- package/dist/chunk-KZ73RL76.js.map +0 -1
- package/dist/chunk-NEXLLTP4.js.map +0 -1
- package/dist/chunk-PEI6RANI.js.map +0 -1
- package/dist/chunk-VTOREEXF.js +0 -142
- package/dist/chunk-VTOREEXF.js.map +0 -1
- package/dist/chunk-WSK7G5LE.js +0 -170
- package/dist/chunk-WSK7G5LE.js.map +0 -1
- package/dist/chunk-X4A66EWZ.js +0 -223
- package/dist/chunk-X4A66EWZ.js.map +0 -1
- package/dist/chunk-XYRDDSXF.js.map +0 -1
- package/dist/chunk-YG4QEQF5.js +0 -9557
- package/dist/chunk-YG4QEQF5.js.map +0 -1
- package/dist/chunk-YVCHAQZY.js.map +0 -1
- package/dist/chunk-ZPBTI3TE.js.map +0 -1
- package/dist/computer-viewer-FWEZISW4.js +0 -16
- package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
- package/dist/hooks/use-environments.d.ts +0 -41
- package/dist/hooks/use-packs.d.ts +0 -32
- package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
- package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
- package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
- package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
- package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
- package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
- package/src/hooks/use-environments.ts +0 -182
- package/src/hooks/use-packs.ts +0 -157
- /package/dist/{browser-viewer-MKKFRRRV.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
- /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-4EUKJXUO.js.map} +0 -0
package/src/timeline/index.ts
CHANGED
|
@@ -26,6 +26,7 @@ export {
|
|
|
26
26
|
toolDisplayName,
|
|
27
27
|
toolMatchesLeaf,
|
|
28
28
|
} from "./projection";
|
|
29
|
+
export type { GroupTimelineOptions } from "./projection";
|
|
29
30
|
|
|
30
31
|
// item types
|
|
31
32
|
export type {
|
|
@@ -41,7 +42,10 @@ export type {
|
|
|
41
42
|
MachineInputBatchItem,
|
|
42
43
|
MachineInputMember,
|
|
43
44
|
MemoryItem,
|
|
45
|
+
MessageSender,
|
|
46
|
+
KnowledgeItem,
|
|
44
47
|
NoticeItem,
|
|
48
|
+
SessionUsageLimitStop,
|
|
45
49
|
ReasoningItem,
|
|
46
50
|
SandboxItem,
|
|
47
51
|
StartupPhase,
|
|
@@ -59,9 +63,20 @@ export type {
|
|
|
59
63
|
|
|
60
64
|
// renderer registry
|
|
61
65
|
export { createToolRegistry, rawTypeOf } from "./registry";
|
|
66
|
+
export {
|
|
67
|
+
createSessionRetainedScreenshotLoader,
|
|
68
|
+
createWorkspaceRetainedArtifactLoader,
|
|
69
|
+
createWorkspaceRetainedVideoLoader,
|
|
70
|
+
} from "./retained-loaders";
|
|
71
|
+
export type {
|
|
72
|
+
RetainedArtifactLoaderClient,
|
|
73
|
+
RetainedScreenshotLoaderClient,
|
|
74
|
+
RetainedVideoLoaderClient,
|
|
75
|
+
} from "./retained-loaders";
|
|
62
76
|
export type {
|
|
63
77
|
CreateToolRegistryOptions,
|
|
64
78
|
RetainedArtifactLoader,
|
|
79
|
+
RetainedArtifactLoadOptions,
|
|
65
80
|
RetainedScreenshotLoader,
|
|
66
81
|
VideoArtifactPlaybackLoader,
|
|
67
82
|
ToolRegistry,
|
|
@@ -91,8 +106,17 @@ export {
|
|
|
91
106
|
export type { ActivityDisclosureProps, DisclosureChip } from "./shared";
|
|
92
107
|
|
|
93
108
|
// screenshot lightbox
|
|
94
|
-
export {
|
|
95
|
-
|
|
109
|
+
export {
|
|
110
|
+
LightboxProvider,
|
|
111
|
+
useLightbox,
|
|
112
|
+
useLightboxGalleryItem,
|
|
113
|
+
useLightboxOptional,
|
|
114
|
+
} from "./screenshot-lightbox";
|
|
115
|
+
export type {
|
|
116
|
+
LightboxControlLabels,
|
|
117
|
+
LightboxGalleryEntry,
|
|
118
|
+
LightboxGalleryImage,
|
|
119
|
+
} from "./screenshot-lightbox";
|
|
96
120
|
|
|
97
121
|
// disclosure defaults (opt-in initial-open seed; for screenshot/test instrumentation)
|
|
98
122
|
export { DisclosureDefaultsProvider, useForcedDefaultOpen } from "./disclosure-context";
|
|
@@ -118,6 +142,7 @@ export type {
|
|
|
118
142
|
TurnSummaryFacetResult,
|
|
119
143
|
TurnSummaryOptions,
|
|
120
144
|
TurnSummaryProps,
|
|
145
|
+
TurnSummaryStatus,
|
|
121
146
|
} from "./turn-summary";
|
|
122
147
|
|
|
123
148
|
// parsers (pure, reusable by custom renderers)
|
|
@@ -139,3 +164,6 @@ export {
|
|
|
139
164
|
v4aToGitFileDiff,
|
|
140
165
|
} from "./parsers";
|
|
141
166
|
export type { ApplyPatchOperation } from "./parsers";
|
|
167
|
+
|
|
168
|
+
export { KnowledgeActivityProvider } from "./knowledge-receipt";
|
|
169
|
+
export type { KnowledgeActivityActions } from "./knowledge-receipt";
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { createContext, useContext, useState, type ReactNode } from "react";
|
|
2
|
+
import { BrainCircuitIcon } from "lucide-react";
|
|
3
|
+
import { ActivityDisclosure, BodyNote } from "./shared";
|
|
4
|
+
|
|
5
|
+
export type KnowledgeActivityActions = {
|
|
6
|
+
onInspect?: ((entryId: string) => void) | undefined;
|
|
7
|
+
onRetryFile?: ((fileId: string) => Promise<boolean | void>) | undefined;
|
|
8
|
+
retryDisabled?: boolean | undefined;
|
|
9
|
+
};
|
|
10
|
+
const KnowledgeActions = createContext<KnowledgeActivityActions>({});
|
|
11
|
+
export function KnowledgeActivityProvider({
|
|
12
|
+
children,
|
|
13
|
+
...actions
|
|
14
|
+
}: KnowledgeActivityActions & { children: ReactNode }) {
|
|
15
|
+
return <KnowledgeActions.Provider value={actions}>{children}</KnowledgeActions.Provider>;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** A saved/pending result never opens or blocks the human-input surface. */
|
|
19
|
+
export function KnowledgeReceiptRow(props: {
|
|
20
|
+
outcome: "published" | "pending" | "rejected" | "archived" | "failed";
|
|
21
|
+
entryId?: string | undefined;
|
|
22
|
+
fileId?: string | undefined;
|
|
23
|
+
title?: string | undefined;
|
|
24
|
+
source?: boolean | undefined;
|
|
25
|
+
}) {
|
|
26
|
+
const actions = useContext(KnowledgeActions);
|
|
27
|
+
const [retrying, setRetrying] = useState(false);
|
|
28
|
+
const [retrySent, setRetrySent] = useState(false);
|
|
29
|
+
const [error, setError] = useState<string | null>(null);
|
|
30
|
+
const label =
|
|
31
|
+
props.outcome === "pending"
|
|
32
|
+
? "Knowledge saved for review"
|
|
33
|
+
: props.outcome === "failed"
|
|
34
|
+
? "Source preparation failed"
|
|
35
|
+
: props.outcome === "rejected"
|
|
36
|
+
? "Source remains rejected"
|
|
37
|
+
: props.outcome === "archived"
|
|
38
|
+
? "Knowledge archived"
|
|
39
|
+
: props.source
|
|
40
|
+
? "Source saved to Knowledge"
|
|
41
|
+
: "Saved to Knowledge";
|
|
42
|
+
const actionClass =
|
|
43
|
+
"rounded-og-sm px-1 py-0.5 text-og-sm text-og-fg-muted hover:text-og-fg focus-visible:outline-2 focus-visible:outline-og-accent disabled:opacity-50";
|
|
44
|
+
return (
|
|
45
|
+
<ActivityDisclosure
|
|
46
|
+
icon={<BrainCircuitIcon className="size-3.5" />}
|
|
47
|
+
iconTone="muted"
|
|
48
|
+
title={label}
|
|
49
|
+
preview={props.title}
|
|
50
|
+
>
|
|
51
|
+
{props.outcome === "pending" ? (
|
|
52
|
+
<BodyNote>
|
|
53
|
+
Saved in Needs review. This task continues; future tasks can use it after approval.
|
|
54
|
+
</BodyNote>
|
|
55
|
+
) : null}
|
|
56
|
+
{props.outcome === "failed" ? (
|
|
57
|
+
<BodyNote>
|
|
58
|
+
The original file remains attached. Searchable text has not been retained.
|
|
59
|
+
</BodyNote>
|
|
60
|
+
) : null}
|
|
61
|
+
{props.outcome === "rejected" ? (
|
|
62
|
+
<BodyNote>Processing the file again leaves the review decision unchanged.</BodyNote>
|
|
63
|
+
) : null}
|
|
64
|
+
{props.entryId && actions.onInspect ? (
|
|
65
|
+
<button
|
|
66
|
+
className={actionClass}
|
|
67
|
+
type="button"
|
|
68
|
+
onClick={() => actions.onInspect?.(props.entryId!)}
|
|
69
|
+
>
|
|
70
|
+
{props.outcome === "pending" ? "Review in Knowledge" : "View in Knowledge"}
|
|
71
|
+
</button>
|
|
72
|
+
) : null}
|
|
73
|
+
{props.outcome === "failed" && props.fileId && actions.onRetryFile ? (
|
|
74
|
+
<button
|
|
75
|
+
className={actionClass}
|
|
76
|
+
type="button"
|
|
77
|
+
disabled={retrying || retrySent || actions.retryDisabled}
|
|
78
|
+
onClick={() => {
|
|
79
|
+
setRetrying(true);
|
|
80
|
+
setError(null);
|
|
81
|
+
void actions.onRetryFile!(props.fileId!)
|
|
82
|
+
.then((sent) => {
|
|
83
|
+
if (sent !== false) setRetrySent(true);
|
|
84
|
+
else setError("Could not start the retry. Try again when the chat is ready.");
|
|
85
|
+
})
|
|
86
|
+
.catch(() => setError("Could not start the retry. Please try again."))
|
|
87
|
+
.finally(() => setRetrying(false));
|
|
88
|
+
}}
|
|
89
|
+
>
|
|
90
|
+
{retrying ? "Starting retry…" : retrySent ? "Retry requested" : "Retry preparation"}
|
|
91
|
+
</button>
|
|
92
|
+
) : null}
|
|
93
|
+
{error ? (
|
|
94
|
+
<p role="alert" className="text-og-sm">
|
|
95
|
+
{error}
|
|
96
|
+
</p>
|
|
97
|
+
) : null}
|
|
98
|
+
</ActivityDisclosure>
|
|
99
|
+
);
|
|
100
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { createContext, useContext, type ReactNode } from "react";
|
|
2
|
+
|
|
3
|
+
import { cn } from "../lib/cn";
|
|
4
|
+
import type { MessageSender, UserMessageItem } from "./types";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Draws who sent a person's message. The host decides: return null for the
|
|
8
|
+
* viewer's own messages, or when it has no identity to show for a sender.
|
|
9
|
+
*/
|
|
10
|
+
export type RenderMessageSender = (sender: MessageSender, item: UserMessageItem) => ReactNode;
|
|
11
|
+
|
|
12
|
+
export const MessageSenderContext = createContext<RenderMessageSender | undefined>(undefined);
|
|
13
|
+
|
|
14
|
+
/** The sender line above a message bubble, when the host draws one. */
|
|
15
|
+
export function MessageSenderSlot({ item }: { item: UserMessageItem }) {
|
|
16
|
+
const render = useContext(MessageSenderContext);
|
|
17
|
+
if (!render || !item.sender) return null;
|
|
18
|
+
const content = render(item.sender, item);
|
|
19
|
+
if (content === null || content === undefined || content === false) return null;
|
|
20
|
+
return <div className="flex max-w-full min-w-0 justify-end px-1">{content}</div>;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function initials(name: string): string {
|
|
24
|
+
const isEmail = name.includes("@");
|
|
25
|
+
const words = name
|
|
26
|
+
.replace(/@.*$/u, "")
|
|
27
|
+
.split(/[\s._-]+/u)
|
|
28
|
+
.filter(Boolean);
|
|
29
|
+
// "Kari Nordmann" → KN; "ola.normann.x@example.com" → ON.
|
|
30
|
+
const picked = words.length > 1 ? [words[0]!, isEmail ? words[1]! : words.at(-1)!] : words;
|
|
31
|
+
const letters = picked.map((word) => Array.from(word)[0] ?? "").join("");
|
|
32
|
+
return letters.toUpperCase() || "?";
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** A small avatar and a name, for {@link RenderMessageSender}. */
|
|
36
|
+
export function MessageSenderLabel({
|
|
37
|
+
name,
|
|
38
|
+
avatarUrl,
|
|
39
|
+
className,
|
|
40
|
+
}: {
|
|
41
|
+
name: string;
|
|
42
|
+
/** A same-origin or otherwise allowed image; initials are shown without one. */
|
|
43
|
+
avatarUrl?: string | null | undefined;
|
|
44
|
+
className?: string | undefined;
|
|
45
|
+
}) {
|
|
46
|
+
return (
|
|
47
|
+
<span
|
|
48
|
+
className={cn(
|
|
49
|
+
"inline-flex max-w-full min-w-0 items-center gap-1.5 text-og-xs text-og-fg-muted",
|
|
50
|
+
className,
|
|
51
|
+
)}
|
|
52
|
+
>
|
|
53
|
+
{avatarUrl ? (
|
|
54
|
+
<img
|
|
55
|
+
src={avatarUrl}
|
|
56
|
+
alt=""
|
|
57
|
+
className="size-4 shrink-0 rounded-full object-cover"
|
|
58
|
+
referrerPolicy="no-referrer"
|
|
59
|
+
/>
|
|
60
|
+
) : (
|
|
61
|
+
<span
|
|
62
|
+
aria-hidden="true"
|
|
63
|
+
className="inline-flex size-4 shrink-0 items-center justify-center rounded-full bg-og-surface-2 text-[10px] leading-none font-semibold text-og-fg-muted"
|
|
64
|
+
>
|
|
65
|
+
{initials(name)}
|
|
66
|
+
</span>
|
|
67
|
+
)}
|
|
68
|
+
<span className="min-w-0 truncate font-medium">{name}</span>
|
|
69
|
+
</span>
|
|
70
|
+
);
|
|
71
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { formatClockTime } from "../lib/format";
|
|
2
|
+
import { formatElapsed } from "./turn-summary-model";
|
|
3
|
+
import type { NoticeItem } from "./types";
|
|
4
|
+
import { durationBetween } from "./work-presentation";
|
|
5
|
+
|
|
6
|
+
/** An approval notice the person has since answered. */
|
|
7
|
+
export function noticeIsResolvedApproval(item: Pick<NoticeItem, "text" | "resolvedAt">): boolean {
|
|
8
|
+
return Boolean(item.resolvedAt && item.text.startsWith("Approval needed"));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** A resolved approval notice reads as history. */
|
|
12
|
+
export function noticeDisplayText(item: Pick<NoticeItem, "text" | "resolvedAt">): string {
|
|
13
|
+
return noticeIsResolvedApproval(item) ? "You responded to this approval." : item.text;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** Notice pill tone: failures stay red, an open wait keeps the waiting hue. */
|
|
17
|
+
export function noticeTone(
|
|
18
|
+
item: Pick<NoticeItem, "tone" | "resolvedAt">,
|
|
19
|
+
): "failed" | "waiting" | "neutral" {
|
|
20
|
+
return item.tone === "failed"
|
|
21
|
+
? "failed"
|
|
22
|
+
: item.tone === "waiting" && !item.resolvedAt
|
|
23
|
+
? "waiting"
|
|
24
|
+
: "neutral";
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Plain-text summary of a recorded agent wait, as web's quiet disclosure reads
|
|
29
|
+
* it: "Waited for 2 agents · 3m 5s" once later input ended the wait, otherwise
|
|
30
|
+
* "Waiting · since 10:32" (with the date on a later day).
|
|
31
|
+
*/
|
|
32
|
+
export function recordedWaitSummaryText(
|
|
33
|
+
item: Pick<NoticeItem, "occurredAt" | "waitingAgents" | "waitEndedAt">,
|
|
34
|
+
now: Date = new Date(),
|
|
35
|
+
): string {
|
|
36
|
+
const agents = item.waitingAgents ?? 0;
|
|
37
|
+
const target = agents > 0 ? ` for ${agents} ${agents === 1 ? "agent" : "agents"}` : "";
|
|
38
|
+
const waitedMs = item.waitEndedAt
|
|
39
|
+
? durationBetween(item.occurredAt, item.waitEndedAt)
|
|
40
|
+
: undefined;
|
|
41
|
+
if (waitedMs !== undefined) return `Waited${target} · ${formatElapsed(waitedMs)}`;
|
|
42
|
+
const started = new Date(item.occurredAt);
|
|
43
|
+
const since =
|
|
44
|
+
started.toDateString() === now.toDateString()
|
|
45
|
+
? formatClockTime(item.occurredAt)
|
|
46
|
+
: started.toLocaleString(undefined, { dateStyle: "medium", timeStyle: "short" });
|
|
47
|
+
return `${item.waitEndedAt ? "Waited" : "Waiting"}${target} · since ${since}`;
|
|
48
|
+
}
|
package/src/timeline/parsers.ts
CHANGED
|
@@ -566,8 +566,8 @@ export function retainedScreenshotMetadata(out: unknown): RetainedArtifactMetada
|
|
|
566
566
|
if (!value.available) {
|
|
567
567
|
return typeof value.reason === "string" ? (value as unknown as RetainedArtifactMetadata) : null;
|
|
568
568
|
}
|
|
569
|
-
return value.kind === "computer_screenshot" &&
|
|
570
|
-
|
|
569
|
+
return (value.kind === "computer_screenshot" || value.kind === "browser_screenshot") &&
|
|
570
|
+
["image/png", "image/jpeg", "image/webp"].includes(String(value.contentType)) &&
|
|
571
571
|
typeof value.originalBytes === "number" &&
|
|
572
572
|
typeof value.sha256 === "string" &&
|
|
573
573
|
value.dimensions !== null &&
|
|
@@ -584,6 +584,46 @@ export function generatedImageReceipt(out: unknown): GeneratedImageReceipt | nul
|
|
|
584
584
|
return parseGeneratedImageReceipt(out);
|
|
585
585
|
}
|
|
586
586
|
|
|
587
|
+
/**
|
|
588
|
+
* Images a tool result returned that the platform retained, plus the result
|
|
589
|
+
* without them, so its text renders as usual. Any tool's result content can
|
|
590
|
+
* carry these receipts in place of its image blocks.
|
|
591
|
+
*/
|
|
592
|
+
export function retainedToolResultImages(out: unknown): {
|
|
593
|
+
images: Extract<RetainedArtifactMetadata, { available: true }>[];
|
|
594
|
+
output: unknown;
|
|
595
|
+
} {
|
|
596
|
+
const parsed =
|
|
597
|
+
typeof out === "string" && (out.startsWith("{") || out.startsWith("["))
|
|
598
|
+
? tryParseJson(out)
|
|
599
|
+
: out;
|
|
600
|
+
const split = (entries: unknown[]) => {
|
|
601
|
+
const images: Extract<RetainedArtifactMetadata, { available: true }>[] = [];
|
|
602
|
+
const rest = entries.filter((entry) => {
|
|
603
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) return true;
|
|
604
|
+
const receipt = retainedScreenshotMetadata(entry);
|
|
605
|
+
if (!receipt?.available) return true;
|
|
606
|
+
images.push(receipt);
|
|
607
|
+
return false;
|
|
608
|
+
});
|
|
609
|
+
return { images, rest };
|
|
610
|
+
};
|
|
611
|
+
if (Array.isArray(parsed)) {
|
|
612
|
+
const { images, rest } = split(parsed);
|
|
613
|
+
return images.length ? { images, output: rest } : { images, output: out };
|
|
614
|
+
}
|
|
615
|
+
if (parsed && typeof parsed === "object") {
|
|
616
|
+
const record = parsed as Record<string, unknown>;
|
|
617
|
+
if (Array.isArray(record.content)) {
|
|
618
|
+
const { images, rest } = split(record.content);
|
|
619
|
+
return images.length
|
|
620
|
+
? { images, output: { ...record, content: rest } }
|
|
621
|
+
: { images, output: out };
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
return { images: [], output: out };
|
|
625
|
+
}
|
|
626
|
+
|
|
587
627
|
export type TimelineMediaPreview = {
|
|
588
628
|
type: "media_preview";
|
|
589
629
|
mediaType: string;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import type { RetainedArtifactReference } from "@opengeni/sdk";
|
|
2
|
+
import { CheckIcon, TerminalIcon } from "lucide-react";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { copyPendingTextToClipboard } from "../lib/clipboard";
|
|
5
|
+
import type { RetainedArtifactLoader } from "./registry";
|
|
6
|
+
|
|
7
|
+
export { isPatchFilename } from "./presented-image";
|
|
8
|
+
|
|
9
|
+
/** POSIX single-quote one argument so the URL reaches curl unchanged. */
|
|
10
|
+
function shellQuote(value: string): string {
|
|
11
|
+
return `'${value.replaceAll("'", `'\\''`)}'`;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** One command that downloads this patch and applies it in the current folder. */
|
|
15
|
+
export function patchApplyCommand(url: string): string {
|
|
16
|
+
return `curl -fsSL ${shellQuote(url)} | git apply`;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** "5 minutes" from the signed URL's expiry; the default download URL lifetime otherwise. */
|
|
20
|
+
export function applyCommandLifetime(expiresAt: string | undefined, now = Date.now()): string {
|
|
21
|
+
const expires = expiresAt ? Date.parse(expiresAt) : Number.NaN;
|
|
22
|
+
const minutes = Number.isFinite(expires) ? Math.round((expires - now) / 60_000) : 5;
|
|
23
|
+
if (minutes <= 1) return "1 minute";
|
|
24
|
+
return `${minutes} minutes`;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
type ApplyState =
|
|
28
|
+
| { kind: "idle" }
|
|
29
|
+
| { kind: "loading" }
|
|
30
|
+
| { kind: "copied"; lifetime: string }
|
|
31
|
+
| { kind: "manual"; command: string; lifetime: string }
|
|
32
|
+
| { kind: "unavailable" }
|
|
33
|
+
| { kind: "error" };
|
|
34
|
+
|
|
35
|
+
const BUTTON_CLASS =
|
|
36
|
+
"inline-flex items-center gap-1.5 rounded-og-sm border border-og-border px-2.5 py-1.5 text-og-sm font-medium text-og-fg transition-colors hover:border-og-border-strong hover:bg-og-surface-2 disabled:cursor-wait disabled:opacity-60";
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* "Copy command to apply these changes": mints the existing short-lived,
|
|
40
|
+
* authenticated download URL for this published patch (the same authority as
|
|
41
|
+
* Download) and copies `curl -fsSL '<url>' | git apply`. The URL is minted on
|
|
42
|
+
* click, so the copied command works for the URL's lifetime only.
|
|
43
|
+
*/
|
|
44
|
+
export function PatchApplyCommand({
|
|
45
|
+
artifact,
|
|
46
|
+
filename,
|
|
47
|
+
load,
|
|
48
|
+
}: {
|
|
49
|
+
artifact: RetainedArtifactReference;
|
|
50
|
+
filename: string;
|
|
51
|
+
load: RetainedArtifactLoader | undefined;
|
|
52
|
+
}) {
|
|
53
|
+
const [state, setState] = useState<ApplyState>({ kind: "idle" });
|
|
54
|
+
|
|
55
|
+
const copy = async () => {
|
|
56
|
+
if (!load) {
|
|
57
|
+
setState({ kind: "unavailable" });
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
setState({ kind: "loading" });
|
|
61
|
+
let lifetime = "5 minutes";
|
|
62
|
+
// Start the URL request inside the click so the clipboard write may wait for it.
|
|
63
|
+
const command = load(artifact, new AbortController().signal, { prefer: "url" }).then(
|
|
64
|
+
(source) => {
|
|
65
|
+
if (!source || source instanceof Uint8Array) throw new UnavailableError();
|
|
66
|
+
lifetime = applyCommandLifetime(source.expiresAt);
|
|
67
|
+
return patchApplyCommand(source.url);
|
|
68
|
+
},
|
|
69
|
+
);
|
|
70
|
+
const copied = copyPendingTextToClipboard(command);
|
|
71
|
+
try {
|
|
72
|
+
const text = await command;
|
|
73
|
+
if (await copied) setState({ kind: "copied", lifetime });
|
|
74
|
+
else setState({ kind: "manual", command: text, lifetime });
|
|
75
|
+
} catch (failure) {
|
|
76
|
+
setState({ kind: failure instanceof UnavailableError ? "unavailable" : "error" });
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const label =
|
|
81
|
+
state.kind === "loading"
|
|
82
|
+
? "Preparing…"
|
|
83
|
+
: state.kind === "copied"
|
|
84
|
+
? "Copied"
|
|
85
|
+
: state.kind === "error"
|
|
86
|
+
? "Try again"
|
|
87
|
+
: "Copy command to apply these changes";
|
|
88
|
+
|
|
89
|
+
return (
|
|
90
|
+
<div className="flex min-w-0 flex-col gap-1.5">
|
|
91
|
+
<div>
|
|
92
|
+
<button
|
|
93
|
+
type="button"
|
|
94
|
+
onClick={() => void copy()}
|
|
95
|
+
disabled={state.kind === "loading"}
|
|
96
|
+
className={BUTTON_CLASS}
|
|
97
|
+
>
|
|
98
|
+
{state.kind === "copied" ? (
|
|
99
|
+
<CheckIcon className="size-3.5" aria-hidden />
|
|
100
|
+
) : (
|
|
101
|
+
<TerminalIcon className="size-3.5" aria-hidden />
|
|
102
|
+
)}
|
|
103
|
+
{label}
|
|
104
|
+
</button>
|
|
105
|
+
</div>
|
|
106
|
+
<p className="m-0 text-og-xs leading-relaxed text-og-fg-muted" role="status">
|
|
107
|
+
{state.kind === "copied"
|
|
108
|
+
? `Copied. Paste it in a terminal in your project folder and press Enter. The link in it expires in ${state.lifetime}.`
|
|
109
|
+
: state.kind === "manual"
|
|
110
|
+
? `Copy this command, then run it in your project folder. The link in it expires in ${state.lifetime}.`
|
|
111
|
+
: state.kind === "unavailable"
|
|
112
|
+
? `Download ${filename}, then run git apply ${filename} in your project folder.`
|
|
113
|
+
: state.kind === "error"
|
|
114
|
+
? "Couldn't prepare the command. Try again, or download the file and run git apply."
|
|
115
|
+
: "Runs git apply in your project folder. Works on macOS, Linux and Git Bash."}
|
|
116
|
+
</p>
|
|
117
|
+
{state.kind === "manual" ? (
|
|
118
|
+
<input
|
|
119
|
+
readOnly
|
|
120
|
+
value={state.command}
|
|
121
|
+
aria-label="Command to apply these changes"
|
|
122
|
+
onFocus={(event) => event.currentTarget.select()}
|
|
123
|
+
className="w-full min-w-0 rounded-og-sm border border-og-border bg-og-surface-2 px-2 py-1.5 font-mono text-og-xs text-og-fg"
|
|
124
|
+
/>
|
|
125
|
+
) : null}
|
|
126
|
+
</div>
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
class UnavailableError extends Error {
|
|
131
|
+
constructor() {
|
|
132
|
+
super("A download URL is unavailable here");
|
|
133
|
+
this.name = "UnavailableError";
|
|
134
|
+
}
|
|
135
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { SandboxItem, StartupPhaseItem, WorkerItem } from "./types";
|
|
2
|
+
|
|
3
|
+
/* Pure titles and durations for platform activity rows (startup phases and
|
|
4
|
+
sandbox operations), shared by DOM and non-DOM renderers. */
|
|
5
|
+
|
|
6
|
+
export function sandboxRowTitle(item: SandboxItem, displayName: (name: string) => string): string {
|
|
7
|
+
if (item.name === "sandbox.provision") {
|
|
8
|
+
return startupPhaseTitle(
|
|
9
|
+
"sandbox",
|
|
10
|
+
item.status === "cancelled" ? "complete" : item.status,
|
|
11
|
+
item.origin ?? null,
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
return displayName(item.name);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function startupPhaseTitle(
|
|
18
|
+
phase: StartupPhaseItem["phase"],
|
|
19
|
+
status: StartupPhaseItem["status"],
|
|
20
|
+
outcome: StartupPhaseItem["outcome"],
|
|
21
|
+
): string {
|
|
22
|
+
if (status === "complete" && phase === "sandbox" && outcome && outcome !== "skipped") {
|
|
23
|
+
return `Sandbox ${outcome === "resumed" ? "reattached" : outcome}`;
|
|
24
|
+
}
|
|
25
|
+
if (status === "complete" && phase === "rig" && outcome === "skipped") {
|
|
26
|
+
return "Sandbox Environment already ready";
|
|
27
|
+
}
|
|
28
|
+
const statusIndex =
|
|
29
|
+
status === "running" ? 0 : status === "failed" ? 1 : status === "cancelled" ? 2 : 3;
|
|
30
|
+
return STARTUP_PHASE_TITLES[phase][statusIndex];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export const STARTUP_WAIT_TITLES: Record<NonNullable<StartupPhaseItem["blockedReason"]>, string> = {
|
|
34
|
+
capture_in_progress: "Waiting for sandbox checkpoint",
|
|
35
|
+
rotation_in_progress: "Waiting for sandbox rotation",
|
|
36
|
+
provider_recovery_in_progress: "Waiting for sandbox recovery",
|
|
37
|
+
compaction_required: "Compacting conversation first",
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const STARTUP_PHASE_TITLES: Record<
|
|
41
|
+
StartupPhaseItem["phase"],
|
|
42
|
+
readonly [string, string, string, string]
|
|
43
|
+
> = {
|
|
44
|
+
queue: [
|
|
45
|
+
"Waiting for a worker",
|
|
46
|
+
"Worker startup failed",
|
|
47
|
+
"Worker wait interrupted",
|
|
48
|
+
"Worker started",
|
|
49
|
+
],
|
|
50
|
+
sandbox: [
|
|
51
|
+
"Starting sandbox",
|
|
52
|
+
"Sandbox didn’t start",
|
|
53
|
+
"Sandbox startup interrupted",
|
|
54
|
+
"Sandbox ready",
|
|
55
|
+
],
|
|
56
|
+
rig: [
|
|
57
|
+
"Setting up sandbox environment",
|
|
58
|
+
"Sandbox Environment setup failed",
|
|
59
|
+
"Sandbox Environment setup interrupted",
|
|
60
|
+
"Sandbox Environment ready",
|
|
61
|
+
],
|
|
62
|
+
repository: [
|
|
63
|
+
"Preparing repository",
|
|
64
|
+
"Repository preparation failed",
|
|
65
|
+
"Repository preparation interrupted",
|
|
66
|
+
"Repository ready",
|
|
67
|
+
],
|
|
68
|
+
files: [
|
|
69
|
+
"Preparing files",
|
|
70
|
+
"File preparation failed",
|
|
71
|
+
"File preparation interrupted",
|
|
72
|
+
"Files ready",
|
|
73
|
+
],
|
|
74
|
+
tools: [
|
|
75
|
+
"Connecting tools",
|
|
76
|
+
"Tool connection failed",
|
|
77
|
+
"Tool connection interrupted",
|
|
78
|
+
"Tools ready",
|
|
79
|
+
],
|
|
80
|
+
model_preparation: [
|
|
81
|
+
"Preparing runtime and model request",
|
|
82
|
+
"Runtime/model preparation failed",
|
|
83
|
+
"Runtime/model preparation interrupted",
|
|
84
|
+
"Model request dispatched",
|
|
85
|
+
],
|
|
86
|
+
provider_first_byte: [
|
|
87
|
+
"Waiting for model",
|
|
88
|
+
"Model didn’t respond",
|
|
89
|
+
"Model wait interrupted",
|
|
90
|
+
"Model started responding",
|
|
91
|
+
],
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export function startupDuration(durationMs: number | null): string | null {
|
|
95
|
+
if (durationMs === null || !Number.isFinite(durationMs) || durationMs < 0) return null;
|
|
96
|
+
if (durationMs < 1_000) return `${Math.round(durationMs)}ms`;
|
|
97
|
+
if (durationMs < 60_000) return `${(durationMs / 1_000).toFixed(1)}s`;
|
|
98
|
+
const minutes = Math.floor(durationMs / 60_000);
|
|
99
|
+
const seconds = Math.round((durationMs % 60_000) / 1_000);
|
|
100
|
+
return `${minutes}m ${String(seconds).padStart(2, "0")}s`;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* A title that names an agent: the words around the name stay quiet and the
|
|
105
|
+
* name carries the emphasis. `name` is null when no title is known, and
|
|
106
|
+
* `text` is then the generic fallback.
|
|
107
|
+
*/
|
|
108
|
+
export type AgentTitleParts = {
|
|
109
|
+
before: string;
|
|
110
|
+
name: string | null;
|
|
111
|
+
after: string;
|
|
112
|
+
text: string;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
export function namedAgentTitle(
|
|
116
|
+
name: string | null | undefined,
|
|
117
|
+
before: string,
|
|
118
|
+
after: string,
|
|
119
|
+
fallback: string,
|
|
120
|
+
): AgentTitleParts {
|
|
121
|
+
const trimmed = name?.trim() ? name.trim() : null;
|
|
122
|
+
return trimmed
|
|
123
|
+
? { before, name: trimmed, after, text: `${before}${trimmed}${after}` }
|
|
124
|
+
: { before: "", name: null, after: "", text: fallback };
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** The worker step title for a spawn or message, by status, naming the agent when known. */
|
|
128
|
+
export function workerRowTitleParts(
|
|
129
|
+
item: Pick<WorkerItem, "action" | "status">,
|
|
130
|
+
name?: string | null,
|
|
131
|
+
): AgentTitleParts {
|
|
132
|
+
const fallback = workerRowTitle(item);
|
|
133
|
+
const spawn = item.action === "spawn";
|
|
134
|
+
switch (item.status) {
|
|
135
|
+
case "running":
|
|
136
|
+
return namedAgentTitle(name, spawn ? "Spawning " : "Messaging ", "", fallback);
|
|
137
|
+
case "failed":
|
|
138
|
+
return namedAgentTitle(name, spawn ? "Couldn't spawn " : "Couldn't message ", "", fallback);
|
|
139
|
+
case "cancelled":
|
|
140
|
+
return namedAgentTitle(name, spawn ? "Spawning " : "Messaging ", "", fallback);
|
|
141
|
+
default:
|
|
142
|
+
return namedAgentTitle(name, spawn ? "Spawned " : "Messaged ", "", fallback);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/** The generic worker step title for a spawn or message, by status. */
|
|
147
|
+
export function workerRowTitle(item: Pick<WorkerItem, "action" | "status">): string {
|
|
148
|
+
const running = item.status === "running";
|
|
149
|
+
const failed = item.status === "failed";
|
|
150
|
+
const cancelled = item.status === "cancelled";
|
|
151
|
+
return item.action === "spawn"
|
|
152
|
+
? running
|
|
153
|
+
? "Spawning worker"
|
|
154
|
+
: failed
|
|
155
|
+
? "Worker spawn failed"
|
|
156
|
+
: cancelled
|
|
157
|
+
? "Worker interrupted"
|
|
158
|
+
: "Worker spawned"
|
|
159
|
+
: running
|
|
160
|
+
? "Messaging worker"
|
|
161
|
+
: failed
|
|
162
|
+
? "Worker message failed"
|
|
163
|
+
: cancelled
|
|
164
|
+
? "Worker interrupted"
|
|
165
|
+
: "Worker messaged";
|
|
166
|
+
}
|