@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
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
} from "../voice-recording-store";
|
|
12
12
|
import {
|
|
13
13
|
acquireDefaultVoiceRecordingOwnerLease,
|
|
14
|
+
liveVoiceRecordingOwnerIds,
|
|
14
15
|
type VoiceRecordingOwnerLease,
|
|
15
16
|
} from "../voice-recording-owner";
|
|
16
17
|
import { appendFinalTranscript } from "./use-transcription";
|
|
@@ -65,6 +66,10 @@ export type UseVoiceInputResult = {
|
|
|
65
66
|
stream: MediaStream | null;
|
|
66
67
|
recordingId: string | null;
|
|
67
68
|
durationSeconds: number;
|
|
69
|
+
/** Wall-clock start of the current capture (epoch ms), or null when not recording. */
|
|
70
|
+
recordingStartedAt: number | null;
|
|
71
|
+
/** Capture stops and transcribes automatically after this many seconds. */
|
|
72
|
+
maxRecordingSeconds: number | null;
|
|
68
73
|
locallySaved: boolean;
|
|
69
74
|
hasRecoverableRecording: boolean;
|
|
70
75
|
savedTranscript: string | null;
|
|
@@ -75,7 +80,10 @@ export type UseVoiceInputResult = {
|
|
|
75
80
|
retry: () => void;
|
|
76
81
|
/** Explicitly insert a durably saved transcript whose prior handoff may be uncertain. */
|
|
77
82
|
insertSavedTranscript: () => Promise<void>;
|
|
78
|
-
/**
|
|
83
|
+
/**
|
|
84
|
+
* Cancel active work without losing speech: a recording longer than a few
|
|
85
|
+
* seconds and any stopped/transcribing recording stay locally recoverable.
|
|
86
|
+
*/
|
|
79
87
|
cancel: () => void;
|
|
80
88
|
/** Intentionally delete the current durable recording. */
|
|
81
89
|
discard: () => Promise<void>;
|
|
@@ -85,6 +93,8 @@ export const VOICE_RECORDING_TIMESLICE_MILLISECONDS = 5_000;
|
|
|
85
93
|
export const VOICE_RECORDING_OWNER_HEARTBEAT_MILLISECONDS = 5_000;
|
|
86
94
|
export const VOICE_RECORDING_OWNER_STALE_MILLISECONDS = 30_000;
|
|
87
95
|
export const VOICE_RECORDING_CLIENT_MAX_DURATION_SECONDS = 600;
|
|
96
|
+
// Cancel deletes only an accidental start; anything longer is kept for the user.
|
|
97
|
+
const VOICE_RECORDING_DISCARD_ON_CANCEL_MAX_MILLISECONDS = 3_000;
|
|
88
98
|
export const VOICE_RECORDING_RESUMABLE_CLIENT_MAX_DURATION_SECONDS = 8 * 60 * 60;
|
|
89
99
|
export const VOICE_RECORDING_RECOVERY_STATUS_POLL_MILLISECONDS = 2_000;
|
|
90
100
|
export const VOICE_RECORDING_RECOVERY_MAX_MUTATION_DELAY_MILLISECONDS = 30_000;
|
|
@@ -159,10 +169,14 @@ export function useVoiceInput({
|
|
|
159
169
|
const recorderRef = useRef<MediaRecorder | null>(null);
|
|
160
170
|
const streamRef = useRef<MediaStream | null>(null);
|
|
161
171
|
const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
172
|
+
// Cancel/Escape/voice takeover keep a real dictation instead of deleting it.
|
|
173
|
+
const holdOnStopRef = useRef(false);
|
|
174
|
+
const recordingStartedAtRef = useRef(0);
|
|
162
175
|
const automaticRetryTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
163
176
|
const automaticRetryAttemptRef = useRef(0);
|
|
164
177
|
const ownerHeartbeatTimerRef = useRef<ReturnType<typeof setInterval> | null>(null);
|
|
165
178
|
const controllerRef = useRef<AbortController | null>(null);
|
|
179
|
+
const disabledRef = useRef(disabled);
|
|
166
180
|
const valueRef = useRef(value);
|
|
167
181
|
const storeRef = useRef<VoiceRecordingStore | null>(null);
|
|
168
182
|
const storePromiseRef = useRef<Promise<VoiceRecordingStore> | null>(null);
|
|
@@ -176,6 +190,7 @@ export function useVoiceInput({
|
|
|
176
190
|
const statusRef = useRef(status);
|
|
177
191
|
valueRef.current = value;
|
|
178
192
|
statusRef.current = status;
|
|
193
|
+
disabledRef.current = disabled;
|
|
179
194
|
workspaceIdRef.current = workspaceId;
|
|
180
195
|
|
|
181
196
|
const ensureOwnerId = useCallback(async (): Promise<string> => {
|
|
@@ -319,15 +334,31 @@ export function useVoiceInput({
|
|
|
319
334
|
generation === generationRef.current && workspaceIdRef.current === workspaceId;
|
|
320
335
|
const [store, ownerId] = await Promise.all([ensureStore(), ensureOwnerId()]);
|
|
321
336
|
if (!active()) return;
|
|
322
|
-
const
|
|
337
|
+
const heartbeatStaleBefore = new Date(
|
|
323
338
|
readNow().getTime() - VOICE_RECORDING_OWNER_STALE_MILLISECONDS,
|
|
324
339
|
).toISOString();
|
|
325
|
-
await store
|
|
340
|
+
await store
|
|
341
|
+
.cleanupHandedOffManifests({ ownerId, staleBefore: heartbeatStaleBefore })
|
|
342
|
+
.catch(() => undefined);
|
|
326
343
|
if (!active()) return;
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
344
|
+
// A closed or crashed tab releases its owner lock at once: recover its
|
|
345
|
+
// recording now rather than after the heartbeat window (the user who
|
|
346
|
+
// reopens the app right away must still see their dictation).
|
|
347
|
+
const liveOwners =
|
|
348
|
+
createOwnerIdRef.current === undefined ? await liveVoiceRecordingOwnerIds() : null;
|
|
349
|
+
if (!active()) return;
|
|
350
|
+
const staleBefore = liveOwners ? readNow().toISOString() : heartbeatStaleBefore;
|
|
351
|
+
const manifests = (
|
|
352
|
+
await store.listRecoverableManifests(workspaceId, { ownerId, staleBefore })
|
|
353
|
+
).filter(
|
|
354
|
+
(manifest) =>
|
|
355
|
+
!liveOwners ||
|
|
356
|
+
!manifest.ownerId ||
|
|
357
|
+
manifest.ownerId === ownerId ||
|
|
358
|
+
!liveOwners.has(manifest.ownerId) ||
|
|
359
|
+
!manifest.ownerHeartbeatAt ||
|
|
360
|
+
manifest.ownerHeartbeatAt <= heartbeatStaleBefore,
|
|
361
|
+
);
|
|
331
362
|
if (!active()) return;
|
|
332
363
|
for (const candidate of manifests) {
|
|
333
364
|
try {
|
|
@@ -351,14 +382,20 @@ export function useVoiceInput({
|
|
|
351
382
|
}
|
|
352
383
|
rememberManifest(claimed);
|
|
353
384
|
beginOwnerHeartbeat(claimed);
|
|
385
|
+
const transcriptReady =
|
|
386
|
+
claimed.finalizationState === "transcript-ready" && claimed.transcriptText !== null;
|
|
354
387
|
setStatus(
|
|
355
|
-
|
|
388
|
+
transcriptReady
|
|
356
389
|
? "transcript-ready"
|
|
357
390
|
: claimed.recoveryMode === "automatic"
|
|
358
391
|
? "retrying"
|
|
359
392
|
: "recovered",
|
|
360
393
|
);
|
|
361
|
-
|
|
394
|
+
// An append-mode transcript may already be in the draft (the page
|
|
395
|
+
// closed between appending and recording the handoff).
|
|
396
|
+
setError(
|
|
397
|
+
transcriptReady && candidate.handoffMode === "append" ? "handoff_uncertain" : null,
|
|
398
|
+
);
|
|
362
399
|
return;
|
|
363
400
|
} catch (reason) {
|
|
364
401
|
if (reason instanceof VoiceRecordingOwnedError) continue;
|
|
@@ -462,12 +499,21 @@ export function useVoiceInput({
|
|
|
462
499
|
|
|
463
500
|
automaticRetryAttemptRef.current = 0;
|
|
464
501
|
if (ready.handoffMode === "explicit") {
|
|
502
|
+
// Never appended: offer an explicit insert, not an "already inserted?" warning.
|
|
465
503
|
setStatus("transcript-ready");
|
|
466
|
-
setError(
|
|
504
|
+
setError(null);
|
|
467
505
|
focusInput();
|
|
468
506
|
return;
|
|
469
507
|
}
|
|
470
508
|
|
|
509
|
+
// Session creation can disable the composer while a recording is
|
|
510
|
+
// transcribing. Keep the durable transcript for explicit insertion
|
|
511
|
+
// later; never append text after Send captured its visible snapshot.
|
|
512
|
+
if (disabledRef.current) {
|
|
513
|
+
setStatus("transcript-ready");
|
|
514
|
+
return;
|
|
515
|
+
}
|
|
516
|
+
|
|
471
517
|
const next = appendFinalTranscript(valueRef.current, response.text);
|
|
472
518
|
if (next !== valueRef.current) {
|
|
473
519
|
valueRef.current = next;
|
|
@@ -814,6 +860,15 @@ export function useVoiceInput({
|
|
|
814
860
|
await preserveForRetry(retained, attemptCaptureLimitError, generation);
|
|
815
861
|
return;
|
|
816
862
|
}
|
|
863
|
+
if (holdOnStopRef.current) {
|
|
864
|
+
holdOnStopRef.current = false;
|
|
865
|
+
const retained = await updateManifestBestEffort(stopped, {
|
|
866
|
+
recoveryMode: "manual",
|
|
867
|
+
handoffMode: "explicit",
|
|
868
|
+
});
|
|
869
|
+
await preserveForRetry(retained, null, generation);
|
|
870
|
+
return;
|
|
871
|
+
}
|
|
817
872
|
await finalizePersistedRecording(generation);
|
|
818
873
|
});
|
|
819
874
|
};
|
|
@@ -822,6 +877,8 @@ export function useVoiceInput({
|
|
|
822
877
|
resolveCaptureSettledRef.current = resolve;
|
|
823
878
|
});
|
|
824
879
|
attemptRecordingStartedAt = readNow().getTime();
|
|
880
|
+
recordingStartedAtRef.current = attemptRecordingStartedAt;
|
|
881
|
+
holdOnStopRef.current = false;
|
|
825
882
|
recorder.start(VOICE_RECORDING_TIMESLICE_MILLISECONDS);
|
|
826
883
|
recorderStarted = true;
|
|
827
884
|
setStatus("recording");
|
|
@@ -944,6 +1001,7 @@ export function useVoiceInput({
|
|
|
944
1001
|
const insertSavedTranscript = useCallback(async (): Promise<void> => {
|
|
945
1002
|
const manifest = manifestRef.current;
|
|
946
1003
|
if (
|
|
1004
|
+
disabledRef.current ||
|
|
947
1005
|
!manifest ||
|
|
948
1006
|
manifest.workspaceId !== workspaceId ||
|
|
949
1007
|
manifest.finalizationState !== "transcript-ready" ||
|
|
@@ -955,7 +1013,7 @@ export function useVoiceInput({
|
|
|
955
1013
|
controllerRef.current?.abort();
|
|
956
1014
|
controllerRef.current = null;
|
|
957
1015
|
const store = await ensureStore();
|
|
958
|
-
if (generation !== generationRef.current) return;
|
|
1016
|
+
if (generation !== generationRef.current || disabledRef.current) return;
|
|
959
1017
|
const next = appendFinalTranscript(valueRef.current, manifest.transcriptText);
|
|
960
1018
|
if (next !== valueRef.current) {
|
|
961
1019
|
valueRef.current = next;
|
|
@@ -1058,7 +1116,27 @@ export function useVoiceInput({
|
|
|
1058
1116
|
]);
|
|
1059
1117
|
|
|
1060
1118
|
const cancel = useCallback(() => {
|
|
1061
|
-
if (status === "recording"
|
|
1119
|
+
if (status === "recording") {
|
|
1120
|
+
const recorder = recorderRef.current;
|
|
1121
|
+
const elapsed = readNow().getTime() - recordingStartedAtRef.current;
|
|
1122
|
+
if (
|
|
1123
|
+
recorder &&
|
|
1124
|
+
recorder.state !== "inactive" &&
|
|
1125
|
+
elapsed >= VOICE_RECORDING_DISCARD_ON_CANCEL_MAX_MILLISECONDS
|
|
1126
|
+
) {
|
|
1127
|
+
// Never delete real speech on Cancel/Escape: stop, keep it locally, and
|
|
1128
|
+
// let the user transcribe or explicitly discard it.
|
|
1129
|
+
if (timerRef.current) clearTimeout(timerRef.current);
|
|
1130
|
+
timerRef.current = null;
|
|
1131
|
+
holdOnStopRef.current = true;
|
|
1132
|
+
setStatus("saving");
|
|
1133
|
+
recorder.stop();
|
|
1134
|
+
return;
|
|
1135
|
+
}
|
|
1136
|
+
void discard();
|
|
1137
|
+
return;
|
|
1138
|
+
}
|
|
1139
|
+
if (status === "requesting-permission") {
|
|
1062
1140
|
void discard();
|
|
1063
1141
|
return;
|
|
1064
1142
|
}
|
|
@@ -1082,7 +1160,7 @@ export function useVoiceInput({
|
|
|
1082
1160
|
await preserveForRetry(retained, null, generation);
|
|
1083
1161
|
});
|
|
1084
1162
|
}
|
|
1085
|
-
}, [discard, preserveForRetry, status, updateManifestBestEffort]);
|
|
1163
|
+
}, [discard, preserveForRetry, readNow, status, updateManifestBestEffort]);
|
|
1086
1164
|
|
|
1087
1165
|
useEffect(() => {
|
|
1088
1166
|
const current = manifestRef.current;
|
|
@@ -1145,6 +1223,8 @@ export function useVoiceInput({
|
|
|
1145
1223
|
const onKeyDown = (event: KeyboardEvent) => {
|
|
1146
1224
|
if (
|
|
1147
1225
|
event.key === "Escape" &&
|
|
1226
|
+
// A dialog, menu, or popover that handled Escape owns it.
|
|
1227
|
+
!event.defaultPrevented &&
|
|
1148
1228
|
(status === "requesting-permission" ||
|
|
1149
1229
|
status === "recording" ||
|
|
1150
1230
|
status === "saving" ||
|
|
@@ -1168,6 +1248,19 @@ export function useVoiceInput({
|
|
|
1168
1248
|
automaticRetryTimerRef.current = null;
|
|
1169
1249
|
const manifest = manifestRef.current;
|
|
1170
1250
|
const ownerReady = ownerIdPromiseRef.current;
|
|
1251
|
+
const knownOwnerId = ownerIdRef.current;
|
|
1252
|
+
const ownerLease = ownerLeaseRef.current;
|
|
1253
|
+
const closingStore = storeRef.current;
|
|
1254
|
+
const ownsClosingStore = ownsStoreRef.current;
|
|
1255
|
+
// Detach synchronously: a remount of this instance (React StrictMode,
|
|
1256
|
+
// keyed re-render) must open a fresh store and owner instead of reusing
|
|
1257
|
+
// the connection this cleanup is about to close.
|
|
1258
|
+
storeRef.current = null;
|
|
1259
|
+
storePromiseRef.current = null;
|
|
1260
|
+
ownerIdRef.current = null;
|
|
1261
|
+
ownerIdPromiseRef.current = null;
|
|
1262
|
+
ownerLeaseRef.current = null;
|
|
1263
|
+
manifestRef.current = null;
|
|
1171
1264
|
stopOwnerHeartbeat();
|
|
1172
1265
|
const recorder = recorderRef.current;
|
|
1173
1266
|
let captureSettled = persistenceQueueRef.current;
|
|
@@ -1179,9 +1272,8 @@ export function useVoiceInput({
|
|
|
1179
1272
|
void captureSettled
|
|
1180
1273
|
.catch(() => undefined)
|
|
1181
1274
|
.then(async () => {
|
|
1182
|
-
const ownerId =
|
|
1183
|
-
|
|
1184
|
-
const store = storeRef.current;
|
|
1275
|
+
const ownerId = knownOwnerId ?? (ownerReady ? await ownerReady.catch(() => null) : null);
|
|
1276
|
+
const store = closingStore;
|
|
1185
1277
|
if (store && manifest && ownerId) {
|
|
1186
1278
|
const wasProcessing =
|
|
1187
1279
|
statusRef.current === "saving" ||
|
|
@@ -1210,12 +1302,11 @@ export function useVoiceInput({
|
|
|
1210
1302
|
)
|
|
1211
1303
|
.catch(() => undefined);
|
|
1212
1304
|
}
|
|
1213
|
-
if (
|
|
1305
|
+
if (ownsClosingStore) await store?.close();
|
|
1214
1306
|
})
|
|
1215
1307
|
.catch(() => undefined)
|
|
1216
1308
|
.finally(() => {
|
|
1217
|
-
|
|
1218
|
-
ownerLeaseRef.current = null;
|
|
1309
|
+
ownerLease?.release();
|
|
1219
1310
|
});
|
|
1220
1311
|
},
|
|
1221
1312
|
[clearCaptureRuntime, readNow, stopOwnerHeartbeat],
|
|
@@ -1228,6 +1319,17 @@ export function useVoiceInput({
|
|
|
1228
1319
|
stream,
|
|
1229
1320
|
recordingId,
|
|
1230
1321
|
durationSeconds,
|
|
1322
|
+
recordingStartedAt: status === "recording" ? recordingStartedAtRef.current || null : null,
|
|
1323
|
+
maxRecordingSeconds: capability
|
|
1324
|
+
? Math.min(
|
|
1325
|
+
capability.resumable && isResumableVoiceInputClient(client)
|
|
1326
|
+
? capability.resumable.maxDurationSeconds
|
|
1327
|
+
: capability.maxDurationSeconds,
|
|
1328
|
+
capability.resumable && isResumableVoiceInputClient(client)
|
|
1329
|
+
? VOICE_RECORDING_RESUMABLE_CLIENT_MAX_DURATION_SECONDS
|
|
1330
|
+
: VOICE_RECORDING_CLIENT_MAX_DURATION_SECONDS,
|
|
1331
|
+
)
|
|
1332
|
+
: null,
|
|
1231
1333
|
locallySaved,
|
|
1232
1334
|
hasRecoverableRecording: manifestRef.current !== null && status !== "recording",
|
|
1233
1335
|
savedTranscript:
|
|
@@ -1492,6 +1594,12 @@ function errorCode(error: unknown): string {
|
|
|
1492
1594
|
}
|
|
1493
1595
|
|
|
1494
1596
|
function isRetryableVoiceInputError(error: unknown): boolean {
|
|
1597
|
+
if (
|
|
1598
|
+
["insufficient_credits", "allowance_exhausted", "monthly_model_cost_limit"].includes(
|
|
1599
|
+
errorCode(error),
|
|
1600
|
+
)
|
|
1601
|
+
)
|
|
1602
|
+
return false;
|
|
1495
1603
|
if (error instanceof OpenGeniApiError) {
|
|
1496
1604
|
return error.retryable && error.status !== 409;
|
|
1497
1605
|
}
|
|
@@ -194,8 +194,9 @@ export function useWorkspaceCapture(
|
|
|
194
194
|
return;
|
|
195
195
|
}
|
|
196
196
|
setDegradedReason(null);
|
|
197
|
-
//
|
|
198
|
-
//
|
|
197
|
+
// Expose metadata while a large signed manifest downloads. Consumers
|
|
198
|
+
// must distinguish this pending count from a resolved capture; zero
|
|
199
|
+
// working-tree files can still have committed-only branch changes.
|
|
199
200
|
setFileCount(res.stats.fileCount);
|
|
200
201
|
// Exactly one of manifest / manifestUrl is non-null (M2 contract). The inline
|
|
201
202
|
// manifest is the <200ms common case; a >2MB manifest is a signed URL hop.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { FileSystemRouteIdentity } from "@opengeni/sdk";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
2
3
|
import { useOpenGeni, type ClientOverride } from "../provider";
|
|
3
4
|
import { sandboxAcceptsLiveIo } from "../lib/sandbox-liveness";
|
|
4
5
|
|
|
@@ -39,6 +40,9 @@ export type UseWorkspaceEditOptions = ClientOverride & {
|
|
|
39
40
|
path?: string | null | undefined;
|
|
40
41
|
/** The capture-served content loaded into the editor — the flush base (C2). */
|
|
41
42
|
baseContent?: string | null | undefined;
|
|
43
|
+
/** Exact capability identity for the selected filesystem route. A route/root
|
|
44
|
+
* change discards the buffered edit and makes stale flushes fail retryably. */
|
|
45
|
+
route?: FileSystemRouteIdentity | undefined;
|
|
42
46
|
/** `capabilities.liveness` — "warm" | "draining" | "cold". Drives the flush. */
|
|
43
47
|
liveness?: string | undefined;
|
|
44
48
|
/** True while the host is actively warming the box (attach in flight, not warm
|
|
@@ -95,9 +99,18 @@ export function useWorkspaceEdit(
|
|
|
95
99
|
const { client, workspaceId } = useOpenGeni(options);
|
|
96
100
|
const path = options.path ?? null;
|
|
97
101
|
const baseContent = options.baseContent ?? null;
|
|
102
|
+
const routeEpoch = options.route?.epoch;
|
|
103
|
+
const routeRoot = options.route?.root;
|
|
104
|
+
const route = useMemo<FileSystemRouteIdentity | undefined>(
|
|
105
|
+
() =>
|
|
106
|
+
routeEpoch !== undefined && routeRoot !== undefined
|
|
107
|
+
? { epoch: routeEpoch, root: routeRoot }
|
|
108
|
+
: undefined,
|
|
109
|
+
[routeEpoch, routeRoot],
|
|
110
|
+
);
|
|
98
111
|
const live = isLive(options.liveness);
|
|
99
112
|
const offline = options.offline === true;
|
|
100
|
-
const identityKey = `${workspaceId}\u0000${sessionId ?? ""}\u0000${path ?? ""}`;
|
|
113
|
+
const identityKey = `${workspaceId}\u0000${sessionId ?? ""}\u0000${path ?? ""}\u0000${routeEpoch ?? ""}\u0000${routeRoot ?? ""}`;
|
|
101
114
|
|
|
102
115
|
const [buffer, setBuffer] = useState<string | null>(null);
|
|
103
116
|
const [wantsWarm, setWantsWarm] = useState(false);
|
|
@@ -178,7 +191,7 @@ export function useWorkspaceEdit(
|
|
|
178
191
|
const liveRead = await client.fsRead(
|
|
179
192
|
workspaceId,
|
|
180
193
|
sessionId,
|
|
181
|
-
{ path },
|
|
194
|
+
{ path, ...(route ? { route } : {}) },
|
|
182
195
|
{ signal: readAbort.signal },
|
|
183
196
|
);
|
|
184
197
|
if (readAbortRef.current === readAbort) readAbortRef.current = null;
|
|
@@ -190,7 +203,12 @@ export function useWorkspaceEdit(
|
|
|
190
203
|
return;
|
|
191
204
|
}
|
|
192
205
|
}
|
|
193
|
-
await client.fsWrite(workspaceId, sessionId, {
|
|
206
|
+
await client.fsWrite(workspaceId, sessionId, {
|
|
207
|
+
path,
|
|
208
|
+
content,
|
|
209
|
+
overwrite: true,
|
|
210
|
+
...(route ? { route } : {}),
|
|
211
|
+
});
|
|
194
212
|
if (identityGenerationRef.current !== identityGeneration) return;
|
|
195
213
|
setConflict(null);
|
|
196
214
|
setFlush("flushed");
|
|
@@ -207,7 +225,7 @@ export function useWorkspaceEdit(
|
|
|
207
225
|
}
|
|
208
226
|
}
|
|
209
227
|
},
|
|
210
|
-
[client, workspaceId, sessionId, path, baseContent, stateIdentity, identityKey],
|
|
228
|
+
[client, workspaceId, sessionId, path, baseContent, route, stateIdentity, identityKey],
|
|
211
229
|
);
|
|
212
230
|
|
|
213
231
|
// Auto-flush once the box is warm and a buffer is pending (the wake completed).
|
|
@@ -1,16 +1,28 @@
|
|
|
1
|
-
import type { Session } from "@opengeni/sdk";
|
|
1
|
+
import type { Session, SessionListEntry, SessionListTotals } from "@opengeni/sdk";
|
|
2
2
|
import { useCallback, useEffect, useRef } from "react";
|
|
3
3
|
import { useOpenGeni, type ClientOverride } from "../provider";
|
|
4
4
|
import { usePolledValue } from "./internal";
|
|
5
5
|
|
|
6
6
|
export type UseWorkspaceSessionsOptions = ClientOverride & {
|
|
7
|
+
includeTotals?: boolean | undefined;
|
|
8
|
+
needsYouOnly?: boolean | undefined;
|
|
9
|
+
/** Only read-only sessions moved to the idle-session archive. */
|
|
10
|
+
contentArchivedOnly?: boolean | undefined;
|
|
11
|
+
/** Only workstreams the signed-in person started or messaged. */
|
|
12
|
+
mineOnly?: boolean | undefined;
|
|
13
|
+
/** Compact list records; detail reads remain full sessions. */
|
|
14
|
+
projection?: "summary" | undefined;
|
|
7
15
|
limit?: number | undefined;
|
|
8
16
|
parentSessionId?: string | null | undefined;
|
|
9
17
|
cursor?: string | undefined;
|
|
10
18
|
search?: string | undefined;
|
|
11
19
|
/** Return only the complete personal pinned projection. */
|
|
12
20
|
pinsOnly?: boolean | undefined;
|
|
21
|
+
/** Skip pinned details when the pinned section is loaded separately. */
|
|
22
|
+
includePinned?: boolean | undefined;
|
|
13
23
|
archivedOnly?: boolean | undefined;
|
|
24
|
+
sortBy?: "updatedAt" | "createdAt" | "name" | undefined;
|
|
25
|
+
archiveStatus?: "active" | "archived" | "all" | undefined;
|
|
14
26
|
/** Refresh interval (ms) for fleet/manager views. Off by default. */
|
|
15
27
|
pollIntervalMs?: number | undefined;
|
|
16
28
|
enabled?: boolean | undefined;
|
|
@@ -18,16 +30,17 @@ export type UseWorkspaceSessionsOptions = ClientOverride & {
|
|
|
18
30
|
beginRead?: (() => number) | undefined;
|
|
19
31
|
};
|
|
20
32
|
|
|
21
|
-
export type UseWorkspaceSessionsResult = {
|
|
33
|
+
export type UseWorkspaceSessionsResult<T extends Session | SessionListEntry = Session> = {
|
|
22
34
|
/**
|
|
23
35
|
* All visible rows, with pins first. This preserves the pre-pinning hook
|
|
24
36
|
* contract for consumers that only read `sessions`.
|
|
25
37
|
*/
|
|
26
|
-
sessions:
|
|
38
|
+
sessions: T[];
|
|
27
39
|
/** The complete personal pinned section, also present in `sessions`. */
|
|
28
|
-
pinned:
|
|
40
|
+
pinned: T[];
|
|
29
41
|
/** True when the server omitted older pins from its bounded pinned section. */
|
|
30
42
|
pinnedTruncated: boolean;
|
|
43
|
+
totals: SessionListTotals | null;
|
|
31
44
|
nextCursor: string | null;
|
|
32
45
|
loading: boolean;
|
|
33
46
|
error: Error | null;
|
|
@@ -39,28 +52,53 @@ export type UseWorkspaceSessionsResult = {
|
|
|
39
52
|
};
|
|
40
53
|
|
|
41
54
|
/** List the workspace's sessions — the data behind fleet and manager views. */
|
|
55
|
+
export function useWorkspaceSessions(
|
|
56
|
+
options: UseWorkspaceSessionsOptions & { projection: "summary" },
|
|
57
|
+
): UseWorkspaceSessionsResult<SessionListEntry>;
|
|
58
|
+
export function useWorkspaceSessions(
|
|
59
|
+
options?: UseWorkspaceSessionsOptions & { projection?: undefined },
|
|
60
|
+
): UseWorkspaceSessionsResult;
|
|
61
|
+
export function useWorkspaceSessions(
|
|
62
|
+
options: UseWorkspaceSessionsOptions,
|
|
63
|
+
): UseWorkspaceSessionsResult<Session | SessionListEntry>;
|
|
42
64
|
export function useWorkspaceSessions(
|
|
43
65
|
options: UseWorkspaceSessionsOptions = {},
|
|
44
|
-
): UseWorkspaceSessionsResult {
|
|
66
|
+
): UseWorkspaceSessionsResult<Session | SessionListEntry> {
|
|
45
67
|
const { client, workspaceId } = useOpenGeni(options);
|
|
68
|
+
const projection = options.projection;
|
|
69
|
+
const includeTotals = options.includeTotals;
|
|
70
|
+
const needsYouOnly = options.needsYouOnly;
|
|
71
|
+
const contentArchivedOnly = options.contentArchivedOnly;
|
|
72
|
+
const mineOnly = options.mineOnly;
|
|
46
73
|
const limit = options.limit;
|
|
47
74
|
const parentSessionId = options.parentSessionId;
|
|
48
75
|
const cursor = options.cursor;
|
|
49
76
|
const search = options.search;
|
|
50
77
|
const pinsOnly = options.pinsOnly;
|
|
78
|
+
const includePinned = options.includePinned;
|
|
51
79
|
const archivedOnly = options.archivedOnly;
|
|
80
|
+
const sortBy = options.sortBy;
|
|
81
|
+
const archiveStatus = options.archiveStatus;
|
|
52
82
|
const enabled = options.enabled ?? true;
|
|
53
83
|
const nextReadRevision = useRef(0);
|
|
54
84
|
const nextReadGeneration = useRef(0);
|
|
55
85
|
const beginRead = options.beginRead;
|
|
56
86
|
const queryKey = [
|
|
57
87
|
workspaceId,
|
|
88
|
+
projection ?? "full",
|
|
89
|
+
includeTotals ? "totals" : "",
|
|
90
|
+
needsYouOnly ? "needs-you" : "",
|
|
91
|
+
contentArchivedOnly ? "read-only" : "",
|
|
92
|
+
mineOnly ? "mine" : "",
|
|
58
93
|
limit ?? "",
|
|
59
94
|
parentSessionId === null ? "null" : (parentSessionId ?? ""),
|
|
60
95
|
cursor ?? "",
|
|
61
96
|
search ?? "",
|
|
62
97
|
pinsOnly ? "1" : "",
|
|
98
|
+
includePinned === false ? "no-pins" : "",
|
|
63
99
|
archivedOnly ? "archived" : "active",
|
|
100
|
+
sortBy ?? "",
|
|
101
|
+
archiveStatus ?? "",
|
|
64
102
|
].join("\u0000");
|
|
65
103
|
const previousQueryKey = useRef(queryKey);
|
|
66
104
|
const queryKeyTransition = previousQueryKey.current !== queryKey;
|
|
@@ -70,15 +108,35 @@ export function useWorkspaceSessions(
|
|
|
70
108
|
const load = useCallback(
|
|
71
109
|
async (signal?: AbortSignal) => {
|
|
72
110
|
const readGeneration = beginRead?.() ?? ++nextReadGeneration.current;
|
|
73
|
-
const
|
|
111
|
+
const query = {
|
|
112
|
+
...(includeTotals ? { includeTotals: true } : {}),
|
|
113
|
+
...(needsYouOnly ? { needsYouOnly: true } : {}),
|
|
114
|
+
...(contentArchivedOnly ? { contentArchivedOnly: true } : {}),
|
|
115
|
+
...(mineOnly ? { mineOnly: true } : {}),
|
|
74
116
|
...(limit !== undefined ? { limit } : {}),
|
|
75
117
|
...(parentSessionId !== undefined ? { parentSessionId } : {}),
|
|
76
118
|
...(cursor !== undefined ? { cursor } : {}),
|
|
77
119
|
...(search !== undefined ? { search } : {}),
|
|
78
120
|
...(pinsOnly ? { pinsOnly: true } : {}),
|
|
121
|
+
...(includePinned === false ? { includePinned: false } : {}),
|
|
79
122
|
...(archivedOnly ? { archivedOnly: true } : {}),
|
|
123
|
+
...(sortBy ? { sortBy } : {}),
|
|
124
|
+
...(archiveStatus ? { archiveStatus } : {}),
|
|
80
125
|
signal,
|
|
81
|
-
}
|
|
126
|
+
};
|
|
127
|
+
const page =
|
|
128
|
+
projection === "summary"
|
|
129
|
+
? client.listSessionSummaryPage
|
|
130
|
+
? await client.listSessionSummaryPage(workspaceId, query)
|
|
131
|
+
: await client.listSessionPage(workspaceId, query).then(async (full) => {
|
|
132
|
+
const { sessionListEntry } = await import("@opengeni/sdk/session-list-entries");
|
|
133
|
+
return {
|
|
134
|
+
...full,
|
|
135
|
+
pinned: full.pinned.map(sessionListEntry),
|
|
136
|
+
sessions: full.sessions.map(sessionListEntry),
|
|
137
|
+
};
|
|
138
|
+
})
|
|
139
|
+
: await client.listSessionPage(workspaceId, query);
|
|
82
140
|
return {
|
|
83
141
|
queryKey,
|
|
84
142
|
page,
|
|
@@ -90,12 +148,20 @@ export function useWorkspaceSessions(
|
|
|
90
148
|
beginRead,
|
|
91
149
|
client,
|
|
92
150
|
workspaceId,
|
|
151
|
+
projection,
|
|
152
|
+
includeTotals,
|
|
153
|
+
needsYouOnly,
|
|
154
|
+
contentArchivedOnly,
|
|
155
|
+
mineOnly,
|
|
93
156
|
limit,
|
|
94
157
|
parentSessionId,
|
|
95
158
|
cursor,
|
|
96
159
|
search,
|
|
97
160
|
pinsOnly,
|
|
161
|
+
includePinned,
|
|
98
162
|
archivedOnly,
|
|
163
|
+
sortBy,
|
|
164
|
+
archiveStatus,
|
|
99
165
|
queryKey,
|
|
100
166
|
],
|
|
101
167
|
);
|
|
@@ -116,6 +182,7 @@ export function useWorkspaceSessions(
|
|
|
116
182
|
sessions: [...pinned, ...ordinary],
|
|
117
183
|
pinned,
|
|
118
184
|
pinnedTruncated: page?.pinnedTruncated ?? false,
|
|
185
|
+
totals: page?.totals ?? null,
|
|
119
186
|
nextCursor: page?.nextCursor ?? null,
|
|
120
187
|
// `usePolledValue` clears the old data and starts the new request in an
|
|
121
188
|
// effect. During that query-key transition render, its old loading flag
|