@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
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
type EffectiveControlResumeOption,
|
|
6
6
|
type EffectiveSessionControl,
|
|
7
7
|
type LatencyMode,
|
|
8
|
-
|
|
8
|
+
OpenGeniApiError,
|
|
9
9
|
type ReasoningEffort,
|
|
10
10
|
type ResourceRef,
|
|
11
11
|
type SaveComposerDraftRequest,
|
|
@@ -15,6 +15,16 @@ import {
|
|
|
15
15
|
} from "@opengeni/sdk";
|
|
16
16
|
import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
17
17
|
import { useEmbeddedSession, type EmbeddedSessionClientOverride } from "../session-context";
|
|
18
|
+
import {
|
|
19
|
+
COMPOSER_MODEL_UNAVAILABLE_MESSAGE,
|
|
20
|
+
ComposerReconciliationRequiredError,
|
|
21
|
+
ComposerStateError,
|
|
22
|
+
ComposerWorkspaceControlUnavailableError,
|
|
23
|
+
composerSubmissionCanRetry,
|
|
24
|
+
composerSubmissionErrorMessage,
|
|
25
|
+
} from "../lib/format";
|
|
26
|
+
import { normalizeError, useErrorMessage } from "../lib/error-message";
|
|
27
|
+
import { notifyObserver as notifyComposerObserver } from "../lib/notify-observer";
|
|
18
28
|
import { useSessionEventTrigger, type SessionEventFeedOptions } from "./internal";
|
|
19
29
|
|
|
20
30
|
export type ComposerPolicy = {
|
|
@@ -28,11 +38,19 @@ export type ComposerSendExtras = Omit<
|
|
|
28
38
|
"text" | "clientEventId" | "annotations" | "model" | "reasoningEffort" | "latencyMode"
|
|
29
39
|
>;
|
|
30
40
|
|
|
41
|
+
/** Unsent local content handed off from a new-conversation composer. */
|
|
42
|
+
export type InitialComposerDraft = {
|
|
43
|
+
text: string;
|
|
44
|
+
resources?: ResourceRef[] | undefined;
|
|
45
|
+
annotations?: DraftTimelineAnnotation[] | undefined;
|
|
46
|
+
policy?: ComposerPolicy | undefined;
|
|
47
|
+
};
|
|
48
|
+
|
|
31
49
|
export type UseComposerOptions = EmbeddedSessionClientOverride &
|
|
32
50
|
SessionEventFeedOptions & {
|
|
33
|
-
/** Called synchronously after
|
|
51
|
+
/** Called synchronously after local submission. Observer errors never change delivery. */
|
|
34
52
|
onSubmitted?: ((text: string, input: SendMessageInput) => void) | undefined;
|
|
35
|
-
/** Called with the
|
|
53
|
+
/** Called with the accepted wire input. Observer errors never turn acceptance into failure. */
|
|
36
54
|
onSent?: ((text: string, input: SendMessageInput) => void) | undefined;
|
|
37
55
|
/** Called with the exact wire input after a delivery failure. */
|
|
38
56
|
onDeliveryError?:
|
|
@@ -57,6 +75,13 @@ export type UseComposerOptions = EmbeddedSessionClientOverride &
|
|
|
57
75
|
draftPersistence?: "durable" | "disabled" | undefined;
|
|
58
76
|
/** Required explicit authority when durable draft persistence is disabled. */
|
|
59
77
|
initialPolicy?: ComposerPolicy | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Seed local unsent content once when this session is mounted/selected.
|
|
80
|
+
* The real server draft still supplies the revision used for persistence.
|
|
81
|
+
* A retained uncertain submission takes precedence over this handoff.
|
|
82
|
+
* An empty seed does not erase an existing server draft.
|
|
83
|
+
*/
|
|
84
|
+
initialDraft?: InitialComposerDraft | undefined;
|
|
60
85
|
};
|
|
61
86
|
|
|
62
87
|
type ComposerDraftShadow = {
|
|
@@ -66,6 +91,19 @@ type ComposerDraftShadow = {
|
|
|
66
91
|
policy?: ComposerPolicy | undefined;
|
|
67
92
|
};
|
|
68
93
|
|
|
94
|
+
function initialComposerShadow(
|
|
95
|
+
seed: InitialComposerDraft | undefined,
|
|
96
|
+
): ComposerDraftShadow | undefined {
|
|
97
|
+
if (!seed || (!seed.text && !seed.resources?.length && !seed.annotations?.length && !seed.policy))
|
|
98
|
+
return undefined;
|
|
99
|
+
return {
|
|
100
|
+
text: seed.text,
|
|
101
|
+
resources: [...(seed.resources ?? [])],
|
|
102
|
+
annotations: cloneAnnotations(seed.annotations ?? []),
|
|
103
|
+
...(seed.policy ? { policy: { ...seed.policy } } : {}),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
69
107
|
type PendingComposerOperation = {
|
|
70
108
|
delivery: "send" | "steer";
|
|
71
109
|
input: SendMessageInput;
|
|
@@ -97,6 +135,10 @@ export type ComposerOptimisticMessage = {
|
|
|
97
135
|
triggerEventId?: string | null | undefined;
|
|
98
136
|
appliedQueueVersion?: number | null | undefined;
|
|
99
137
|
error?: string | undefined;
|
|
138
|
+
/** Bounded support reference retained independently of display copy across remounts. */
|
|
139
|
+
correlationId?: string | undefined;
|
|
140
|
+
/** False for a definitive refusal that requires changing payment or allowance settings. */
|
|
141
|
+
retryable?: boolean | undefined;
|
|
100
142
|
outcomeUnknown?: boolean | undefined;
|
|
101
143
|
};
|
|
102
144
|
|
|
@@ -182,15 +224,43 @@ function restoreOptimisticSendOperations(key: string | null): OptimisticSendOper
|
|
|
182
224
|
operation.state === "sending" || operation.state === "queued"
|
|
183
225
|
? true
|
|
184
226
|
: operation.outcomeUnknown,
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
227
|
+
correlationId: restoredCorrelationId(operation.correlationId),
|
|
228
|
+
error: restoredErrorReference(
|
|
229
|
+
operation.correlationId,
|
|
230
|
+
hasMcpCredentialUpdates && (operation.state === "sending" || operation.outcomeUnknown)
|
|
231
|
+
? composerSubmissionErrorMessage(new ComposerReconciliationRequiredError())
|
|
232
|
+
: operation.state === "sending"
|
|
233
|
+
? "Delivery was interrupted; retry to reconcile this message."
|
|
234
|
+
: operation.outcomeUnknown
|
|
235
|
+
? "The request could not be confirmed. Check its status before retrying."
|
|
236
|
+
: operation.error
|
|
237
|
+
? composerSubmissionErrorMessage(new Error(operation.error))
|
|
238
|
+
: undefined,
|
|
239
|
+
),
|
|
240
|
+
retryable:
|
|
241
|
+
operation.state === "sending" || operation.outcomeUnknown
|
|
242
|
+
? true
|
|
243
|
+
: (operation.retryable ??
|
|
244
|
+
(operation.error ? composerSubmissionCanRetry(new Error(operation.error)) : true)),
|
|
189
245
|
input: operation.input,
|
|
190
246
|
canRetry: !hasMcpCredentialUpdates,
|
|
191
247
|
}));
|
|
192
248
|
}
|
|
193
249
|
|
|
250
|
+
function restoredCorrelationId(value: unknown): string | undefined {
|
|
251
|
+
return typeof value === "string" && /^[\w.:-]{1,128}$/u.test(value) ? value : undefined;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
function restoredErrorReference(
|
|
255
|
+
reference: unknown,
|
|
256
|
+
message: string | undefined,
|
|
257
|
+
): string | undefined {
|
|
258
|
+
const correlationId = restoredCorrelationId(reference);
|
|
259
|
+
return message && correlationId && message !== COMPOSER_MODEL_UNAVAILABLE_MESSAGE
|
|
260
|
+
? `${message} Reference: ${correlationId}.`
|
|
261
|
+
: message;
|
|
262
|
+
}
|
|
263
|
+
|
|
194
264
|
function rememberOptimisticSendOperations(
|
|
195
265
|
key: string | null,
|
|
196
266
|
operations: OptimisticSendOperation[],
|
|
@@ -424,6 +494,8 @@ export type ComposerState = {
|
|
|
424
494
|
/** Newly captured annotation the review surface should focus. */
|
|
425
495
|
annotationReviewTargetId?: string | null | undefined;
|
|
426
496
|
clearAnnotationReviewTarget?: (() => void) | undefined;
|
|
497
|
+
/** Focus an annotation, or the first incomplete note when omitted. */
|
|
498
|
+
requestAnnotationReview?: ((id?: string) => void) | undefined;
|
|
427
499
|
/** Read the current draft synchronously before a destructive replacement. */
|
|
428
500
|
hasDraftContent: () => boolean;
|
|
429
501
|
/** Append the draft behind prompts already visible in the queue. */
|
|
@@ -431,6 +503,8 @@ export type ComposerState = {
|
|
|
431
503
|
/** Locally acknowledged ordinary sends awaiting durable timeline reconciliation. */
|
|
432
504
|
optimisticMessages?: ComposerOptimisticMessage[] | undefined;
|
|
433
505
|
retryOptimisticMessage?: ((clientEventId: string) => void) | undefined;
|
|
506
|
+
/** Move a definitively refused message into an empty composer without resending it. */
|
|
507
|
+
restoreOptimisticMessage?: ((clientEventId: string) => void) | undefined;
|
|
434
508
|
removeOptimisticMessage?: ((clientEventId: string) => void) | undefined;
|
|
435
509
|
/** Supersede current direction with the draft. */
|
|
436
510
|
steer: (text?: string) => Promise<boolean>;
|
|
@@ -637,6 +711,7 @@ export function useComposer(
|
|
|
637
711
|
options: UseComposerOptions = {},
|
|
638
712
|
): ComposerControllerState {
|
|
639
713
|
const { client, workspaceId, registerSessionReconciler } = useEmbeddedSession(options);
|
|
714
|
+
const formatError = useErrorMessage();
|
|
640
715
|
const durableDrafts = options.draftPersistence !== "disabled";
|
|
641
716
|
if (!durableDrafts && !options.initialPolicy) {
|
|
642
717
|
throw new Error("useComposer requires initialPolicy when draft persistence is disabled");
|
|
@@ -646,7 +721,9 @@ export function useComposer(
|
|
|
646
721
|
const initialPendingOperation = restorePendingComposerOperation(pendingOperationKey);
|
|
647
722
|
const initialOptimisticSends = restoreOptimisticSendOperations(pendingOperationKey);
|
|
648
723
|
const initialShadow =
|
|
649
|
-
initialPendingOperation?.newerShadow ??
|
|
724
|
+
initialPendingOperation?.newerShadow ??
|
|
725
|
+
initialOptimisticSends.at(-1)?.newerShadow ??
|
|
726
|
+
initialComposerShadow(options.initialDraft);
|
|
650
727
|
const [value, setValue] = useState(() => initialShadow?.text ?? "");
|
|
651
728
|
const [annotations, setAnnotations] = useState<DraftTimelineAnnotation[]>(
|
|
652
729
|
() => initialShadow?.annotations ?? [],
|
|
@@ -675,6 +752,8 @@ export function useComposer(
|
|
|
675
752
|
const [acceptedControl, setAcceptedControl] = useState<EffectiveSessionControl | null>(null);
|
|
676
753
|
const [resuming, setResuming] = useState(false);
|
|
677
754
|
const [error, setError] = useState<Error | null>(null);
|
|
755
|
+
// Background draft reads recover independently of Send/Steer/control failures.
|
|
756
|
+
const [draftReadError, setDraftReadError] = useState<Error | null>(null);
|
|
678
757
|
const [draft, setDraft] = useState<ComposerDraft | null>(null);
|
|
679
758
|
const [draftLoading, setDraftLoading] = useState(Boolean(sessionId) && durableDrafts);
|
|
680
759
|
const [draftSaving, setDraftSaving] = useState(false);
|
|
@@ -714,8 +793,18 @@ export function useComposer(
|
|
|
714
793
|
}>({ targetKey, failures: 0, timer: null });
|
|
715
794
|
const lastSavedSignature = useRef<string | null>(null);
|
|
716
795
|
const saveChain = useRef<Promise<void>>(Promise.resolve());
|
|
717
|
-
const onSent =
|
|
718
|
-
|
|
796
|
+
const onSent = useCallback(
|
|
797
|
+
(text: string, input: SendMessageInput) => {
|
|
798
|
+
notifyComposerObserver(options.onSent, text, input);
|
|
799
|
+
},
|
|
800
|
+
[options.onSent],
|
|
801
|
+
);
|
|
802
|
+
const onSubmitted = useCallback(
|
|
803
|
+
(text: string, input: SendMessageInput) => {
|
|
804
|
+
notifyComposerObserver(options.onSubmitted, text, input);
|
|
805
|
+
},
|
|
806
|
+
[options.onSubmitted],
|
|
807
|
+
);
|
|
719
808
|
const onDeliveryErrorRef = useRef(options.onDeliveryError);
|
|
720
809
|
onDeliveryErrorRef.current = options.onDeliveryError;
|
|
721
810
|
useLayoutEffect(() => {
|
|
@@ -757,7 +846,9 @@ export function useComposer(
|
|
|
757
846
|
steeringSettlementEventsRef.current = [];
|
|
758
847
|
pendingClientEventId.current = pendingOperationRef.current?.input.clientEventId ?? null;
|
|
759
848
|
const shadow =
|
|
760
|
-
pendingOperationRef.current?.newerShadow ??
|
|
849
|
+
pendingOperationRef.current?.newerShadow ??
|
|
850
|
+
restoredOptimisticSends.at(-1)?.newerShadow ??
|
|
851
|
+
initialComposerShadow(options.initialDraft);
|
|
761
852
|
localEditRevision.current = shadow ? 1 : 0;
|
|
762
853
|
valueRef.current = shadow?.text ?? "";
|
|
763
854
|
annotationsRef.current = shadow?.annotations ?? [];
|
|
@@ -792,12 +883,20 @@ export function useComposer(
|
|
|
792
883
|
setAcceptedControl(null);
|
|
793
884
|
setResuming(false);
|
|
794
885
|
setError(null);
|
|
886
|
+
setDraftReadError(null);
|
|
795
887
|
setDraft(null);
|
|
796
888
|
setDraftLoading(Boolean(sessionId) && durableDrafts);
|
|
797
889
|
setDraftSaving(false);
|
|
798
890
|
setDraftConflict(null);
|
|
799
891
|
setRestoredResources(shadow?.resources ?? []);
|
|
800
|
-
}, [
|
|
892
|
+
}, [
|
|
893
|
+
durableDrafts,
|
|
894
|
+
options.initialPolicy,
|
|
895
|
+
options.initialDraft,
|
|
896
|
+
pendingOperationKey,
|
|
897
|
+
sessionId,
|
|
898
|
+
targetKey,
|
|
899
|
+
]);
|
|
801
900
|
useEffect(
|
|
802
901
|
() => () => {
|
|
803
902
|
if (draftReadRetryRef.current.timer !== null) {
|
|
@@ -918,6 +1017,7 @@ export function useComposer(
|
|
|
918
1017
|
if (targetKeyRef.current !== targetKey) return;
|
|
919
1018
|
if (!sessionId || !durableDrafts) {
|
|
920
1019
|
setDraftLoading(false);
|
|
1020
|
+
setDraftReadError(null);
|
|
921
1021
|
return;
|
|
922
1022
|
}
|
|
923
1023
|
let retry = draftReadRetryRef.current;
|
|
@@ -991,6 +1091,8 @@ export function useComposer(
|
|
|
991
1091
|
if (retry.timer !== null) clearTimeout(retry.timer);
|
|
992
1092
|
retry.failures = 0;
|
|
993
1093
|
retry.timer = null;
|
|
1094
|
+
// Recovery also counts when the server returns the same draft revision.
|
|
1095
|
+
setDraftReadError(null);
|
|
994
1096
|
const currentRevision = draftRef.current?.revision ?? -1;
|
|
995
1097
|
// Reconnect and client-generation effects can legitimately ask for the
|
|
996
1098
|
// draft again. A same-revision response is not new authority: publishing
|
|
@@ -1043,12 +1145,20 @@ export function useComposer(
|
|
|
1043
1145
|
}
|
|
1044
1146
|
} catch (cause) {
|
|
1045
1147
|
if (
|
|
1148
|
+
!requestAbort.signal.aborted &&
|
|
1046
1149
|
generation === targetGeneration.current &&
|
|
1047
1150
|
targetKeyRef.current === targetKey &&
|
|
1048
1151
|
readTicket === draftReadGeneration.current
|
|
1049
1152
|
) {
|
|
1050
|
-
|
|
1153
|
+
const problem = asError(cause);
|
|
1154
|
+
const timedOut = problem.name === "TimeoutError";
|
|
1155
|
+
setDraftReadError(
|
|
1156
|
+
timedOut
|
|
1157
|
+
? new ComposerStateError("Draft sync timed out. Retrying…", { cause })
|
|
1158
|
+
: problem,
|
|
1159
|
+
);
|
|
1051
1160
|
if (
|
|
1161
|
+
timedOut ||
|
|
1052
1162
|
cause instanceof TypeError ||
|
|
1053
1163
|
(cause && typeof cause === "object" && "retryable" in cause && cause.retryable === true)
|
|
1054
1164
|
) {
|
|
@@ -1352,21 +1462,34 @@ export function useComposer(
|
|
|
1352
1462
|
optimisticProcessorBusyRef.current = true;
|
|
1353
1463
|
void (async () => {
|
|
1354
1464
|
let mutationFailureObserved = false;
|
|
1355
|
-
const markFailed = (
|
|
1465
|
+
const markFailed = (cause: unknown, outcomeUnknown: boolean): void => {
|
|
1356
1466
|
if (
|
|
1357
1467
|
targetKeyRef.current !== ownedTargetKey ||
|
|
1358
1468
|
targetGeneration.current !== ownedGeneration
|
|
1359
1469
|
) {
|
|
1360
1470
|
return;
|
|
1361
1471
|
}
|
|
1472
|
+
const problem = asError(cause);
|
|
1362
1473
|
replaceOptimisticSends((current) =>
|
|
1363
1474
|
current.map((candidate) =>
|
|
1364
1475
|
candidate.clientEventId === operation.clientEventId
|
|
1365
1476
|
? {
|
|
1366
1477
|
...candidate,
|
|
1367
1478
|
state: "failed",
|
|
1368
|
-
error:
|
|
1479
|
+
error: formatError(
|
|
1480
|
+
cause,
|
|
1481
|
+
outcomeUnknown &&
|
|
1482
|
+
!isOutcomeUnknownError(problem) &&
|
|
1483
|
+
!(problem instanceof ComposerReconciliationRequiredError)
|
|
1484
|
+
? `The request could not be confirmed. Check its status before retrying.${problem instanceof OpenGeniApiError && problem.correlationId ? ` Reference: ${problem.correlationId}.` : ""}`
|
|
1485
|
+
: composerSubmissionErrorMessage(problem),
|
|
1486
|
+
),
|
|
1487
|
+
retryable: outcomeUnknown || composerSubmissionCanRetry(problem),
|
|
1369
1488
|
outcomeUnknown,
|
|
1489
|
+
correlationId:
|
|
1490
|
+
problem instanceof OpenGeniApiError
|
|
1491
|
+
? problem.correlationId
|
|
1492
|
+
: candidate.correlationId,
|
|
1370
1493
|
}
|
|
1371
1494
|
: candidate,
|
|
1372
1495
|
),
|
|
@@ -1393,7 +1516,7 @@ export function useComposer(
|
|
|
1393
1516
|
// This read cannot settle the prior mutation in either direction.
|
|
1394
1517
|
// Preserve its exact key and uncertain status until reconciliation
|
|
1395
1518
|
// succeeds or that same mutation is actually replayed.
|
|
1396
|
-
markFailed(
|
|
1519
|
+
markFailed(cause, true);
|
|
1397
1520
|
return;
|
|
1398
1521
|
}
|
|
1399
1522
|
const reconciled = reconcileOptimisticSendFromEvents(operation, events);
|
|
@@ -1417,15 +1540,13 @@ export function useComposer(
|
|
|
1417
1540
|
return;
|
|
1418
1541
|
}
|
|
1419
1542
|
if (!operation.canRetry) {
|
|
1420
|
-
throw new
|
|
1421
|
-
"OpenGeni cannot safely retry this uncertain request after remount; reconcile the session before sending again.",
|
|
1422
|
-
);
|
|
1543
|
+
throw new ComposerReconciliationRequiredError();
|
|
1423
1544
|
}
|
|
1424
1545
|
}
|
|
1425
1546
|
let expectedDraftRevision: number | undefined;
|
|
1426
1547
|
if (durableDrafts && operation.draftPayload) {
|
|
1427
1548
|
if (!(await persistPayload(operation.draftPayload))) {
|
|
1428
|
-
throw new
|
|
1549
|
+
throw new ComposerStateError("The message draft could not be saved before delivery.");
|
|
1429
1550
|
}
|
|
1430
1551
|
expectedDraftRevision = draftRef.current?.revision;
|
|
1431
1552
|
}
|
|
@@ -1443,7 +1564,7 @@ export function useComposer(
|
|
|
1443
1564
|
let acceptedEvent: SessionEvent | null = null;
|
|
1444
1565
|
if (durableDrafts) {
|
|
1445
1566
|
if (!operation.draftPayload || expectedDraftRevision === undefined) {
|
|
1446
|
-
throw new
|
|
1567
|
+
throw new ComposerStateError("The durable composer draft is not ready for delivery.");
|
|
1447
1568
|
}
|
|
1448
1569
|
const result = await client
|
|
1449
1570
|
.submitComposerDraft(workspaceId, sessionId, {
|
|
@@ -1461,9 +1582,10 @@ export function useComposer(
|
|
|
1461
1582
|
...(wireInput.mcpCredentialUpdates
|
|
1462
1583
|
? { mcpCredentialUpdates: wireInput.mcpCredentialUpdates }
|
|
1463
1584
|
: {}),
|
|
1464
|
-
...(wireInput.
|
|
1465
|
-
? {
|
|
1585
|
+
...(wireInput.connectionAccounts
|
|
1586
|
+
? { connectionAccounts: wireInput.connectionAccounts }
|
|
1466
1587
|
: {}),
|
|
1588
|
+
|
|
1467
1589
|
...(wireInput.personalResourceAttachment
|
|
1468
1590
|
? { personalResourceAttachment: wireInput.personalResourceAttachment }
|
|
1469
1591
|
: {}),
|
|
@@ -1533,14 +1655,14 @@ export function useComposer(
|
|
|
1533
1655
|
return;
|
|
1534
1656
|
}
|
|
1535
1657
|
const problem = asError(cause);
|
|
1536
|
-
onDeliveryErrorRef.current
|
|
1658
|
+
notifyComposerObserver(onDeliveryErrorRef.current, problem, operation.input, "send");
|
|
1537
1659
|
// Only an actual mutation replay can replace prior uncertainty with a
|
|
1538
1660
|
// definitive response. Local preparation failures remain retry-only.
|
|
1539
1661
|
const outcomeUnknown =
|
|
1540
1662
|
operation.outcomeUnknown && !mutationFailureObserved
|
|
1541
1663
|
? true
|
|
1542
1664
|
: isOutcomeUnknownError(cause);
|
|
1543
|
-
markFailed(
|
|
1665
|
+
markFailed(cause, outcomeUnknown);
|
|
1544
1666
|
} finally {
|
|
1545
1667
|
optimisticProcessorBusyRef.current = false;
|
|
1546
1668
|
if (targetKeyRef.current === ownedTargetKey) {
|
|
@@ -1552,6 +1674,7 @@ export function useComposer(
|
|
|
1552
1674
|
adoptDraftBase,
|
|
1553
1675
|
client,
|
|
1554
1676
|
durableDrafts,
|
|
1677
|
+
formatError,
|
|
1555
1678
|
markOptimisticAccepted,
|
|
1556
1679
|
loadDraft,
|
|
1557
1680
|
onSent,
|
|
@@ -1720,7 +1843,7 @@ export function useComposer(
|
|
|
1720
1843
|
input.reasoningEffort === undefined ||
|
|
1721
1844
|
input.latencyMode === undefined
|
|
1722
1845
|
) {
|
|
1723
|
-
throw new
|
|
1846
|
+
throw new ComposerStateError("The durable composer draft is not ready for delivery.");
|
|
1724
1847
|
}
|
|
1725
1848
|
const result = await client.submitComposerDraft(workspaceId, sessionId, {
|
|
1726
1849
|
text: input.text,
|
|
@@ -1737,9 +1860,7 @@ export function useComposer(
|
|
|
1737
1860
|
...(input.mcpCredentialUpdates
|
|
1738
1861
|
? { mcpCredentialUpdates: input.mcpCredentialUpdates }
|
|
1739
1862
|
: {}),
|
|
1740
|
-
...(input.
|
|
1741
|
-
? { connectionAuthorities: input.connectionAuthorities }
|
|
1742
|
-
: {}),
|
|
1863
|
+
...(input.connectionAccounts ? { connectionAccounts: input.connectionAccounts } : {}),
|
|
1743
1864
|
...(input.personalResourceAttachment
|
|
1744
1865
|
? { personalResourceAttachment: input.personalResourceAttachment }
|
|
1745
1866
|
: {}),
|
|
@@ -1827,11 +1948,7 @@ export function useComposer(
|
|
|
1827
1948
|
return true;
|
|
1828
1949
|
}
|
|
1829
1950
|
if (!pending.canRetry) {
|
|
1830
|
-
setError(
|
|
1831
|
-
new Error(
|
|
1832
|
-
"OpenGeni cannot safely retry this uncertain request after remount; reconcile the session before sending again.",
|
|
1833
|
-
),
|
|
1834
|
-
);
|
|
1951
|
+
setError(new ComposerReconciliationRequiredError());
|
|
1835
1952
|
return false;
|
|
1836
1953
|
}
|
|
1837
1954
|
try {
|
|
@@ -1851,7 +1968,12 @@ export function useComposer(
|
|
|
1851
1968
|
} catch (cause) {
|
|
1852
1969
|
const problem = asError(cause);
|
|
1853
1970
|
const outcomeUnknown = isOutcomeUnknownError(cause);
|
|
1854
|
-
|
|
1971
|
+
notifyComposerObserver(
|
|
1972
|
+
onDeliveryErrorRef.current,
|
|
1973
|
+
problem,
|
|
1974
|
+
pending.input,
|
|
1975
|
+
pending.delivery,
|
|
1976
|
+
);
|
|
1855
1977
|
if (!outcomeUnknown) {
|
|
1856
1978
|
clearPending();
|
|
1857
1979
|
keepSteering = false;
|
|
@@ -1954,7 +2076,12 @@ export function useComposer(
|
|
|
1954
2076
|
});
|
|
1955
2077
|
}
|
|
1956
2078
|
} catch (cause) {
|
|
1957
|
-
|
|
2079
|
+
notifyComposerObserver(
|
|
2080
|
+
onDeliveryErrorRef.current,
|
|
2081
|
+
asError(cause),
|
|
2082
|
+
operation.input,
|
|
2083
|
+
operation.delivery,
|
|
2084
|
+
);
|
|
1958
2085
|
if (!isOutcomeUnknownError(cause)) {
|
|
1959
2086
|
clearPending();
|
|
1960
2087
|
} else if (delivery === "steer") {
|
|
@@ -2125,6 +2252,7 @@ export function useComposer(
|
|
|
2125
2252
|
if (operation.outcomeUnknown) {
|
|
2126
2253
|
return { ...operation, state: "sending", error: undefined };
|
|
2127
2254
|
}
|
|
2255
|
+
if (operation.retryable === false) return operation;
|
|
2128
2256
|
const nextClientEventId = generateClientEventId();
|
|
2129
2257
|
const currentPersonalResourceAttachment = resolveSendExtras(
|
|
2130
2258
|
sendExtrasRef.current,
|
|
@@ -2154,6 +2282,7 @@ export function useComposer(
|
|
|
2154
2282
|
occurredAt: new Date().toISOString(),
|
|
2155
2283
|
state: "sending",
|
|
2156
2284
|
error: undefined,
|
|
2285
|
+
retryable: undefined,
|
|
2157
2286
|
outcomeUnknown: false,
|
|
2158
2287
|
canRetry: true,
|
|
2159
2288
|
};
|
|
@@ -2224,7 +2353,7 @@ export function useComposer(
|
|
|
2224
2353
|
targetKeyRef.current === ownedTargetKey &&
|
|
2225
2354
|
targetGeneration.current === ownedGeneration
|
|
2226
2355
|
) {
|
|
2227
|
-
setError(
|
|
2356
|
+
setError(normalizeError(cause));
|
|
2228
2357
|
}
|
|
2229
2358
|
} finally {
|
|
2230
2359
|
if (
|
|
@@ -2268,7 +2397,7 @@ export function useComposer(
|
|
|
2268
2397
|
targetKeyRef.current === ownedTargetKey &&
|
|
2269
2398
|
targetGeneration.current === ownedGeneration
|
|
2270
2399
|
) {
|
|
2271
|
-
setError(
|
|
2400
|
+
setError(normalizeError(cause));
|
|
2272
2401
|
}
|
|
2273
2402
|
} finally {
|
|
2274
2403
|
if (
|
|
@@ -2295,9 +2424,7 @@ export function useComposer(
|
|
|
2295
2424
|
(blocker) => blocker.kind === "workspace",
|
|
2296
2425
|
);
|
|
2297
2426
|
if (!client.setWorkspaceInferenceState) {
|
|
2298
|
-
throw new
|
|
2299
|
-
"@opengeni/react: workspace-scoped resume requires setWorkspaceInferenceState.",
|
|
2300
|
-
);
|
|
2427
|
+
throw new ComposerWorkspaceControlUnavailableError();
|
|
2301
2428
|
}
|
|
2302
2429
|
const clientEventId = generateClientEventId();
|
|
2303
2430
|
await replayOutcomeUnknown(() =>
|
|
@@ -2427,7 +2554,7 @@ export function useComposer(
|
|
|
2427
2554
|
const addAnnotation = useCallback(
|
|
2428
2555
|
(annotation: DraftTimelineAnnotation) => {
|
|
2429
2556
|
if (annotationsRef.current.length >= 12) {
|
|
2430
|
-
setError(new
|
|
2557
|
+
setError(new ComposerStateError("A message can include at most 12 timeline annotations."));
|
|
2431
2558
|
return;
|
|
2432
2559
|
}
|
|
2433
2560
|
const next = [...annotationsRef.current, annotation];
|
|
@@ -2458,6 +2585,20 @@ export function useComposer(
|
|
|
2458
2585
|
setAnnotationReviewTargetId(null);
|
|
2459
2586
|
}, []);
|
|
2460
2587
|
|
|
2588
|
+
const requestAnnotationReview = useCallback((id?: string) => {
|
|
2589
|
+
const current = annotationsRef.current;
|
|
2590
|
+
if (current.length === 0) {
|
|
2591
|
+
setAnnotationReviewTargetId(null);
|
|
2592
|
+
return;
|
|
2593
|
+
}
|
|
2594
|
+
if (id && current.some((annotation) => annotation.id === id)) {
|
|
2595
|
+
setAnnotationReviewTargetId(id);
|
|
2596
|
+
return;
|
|
2597
|
+
}
|
|
2598
|
+
const incomplete = current.find((annotation) => annotation.note.trim().length === 0);
|
|
2599
|
+
setAnnotationReviewTargetId(incomplete?.id ?? current[0]!.id);
|
|
2600
|
+
}, []);
|
|
2601
|
+
|
|
2461
2602
|
const updatePolicy = useCallback(
|
|
2462
2603
|
(next: ComposerPolicy): void => {
|
|
2463
2604
|
if (targetKeyRef.current !== targetKey) return;
|
|
@@ -2546,6 +2687,42 @@ export function useComposer(
|
|
|
2546
2687
|
);
|
|
2547
2688
|
}, []);
|
|
2548
2689
|
|
|
2690
|
+
const restoreOptimisticMessage = useCallback(
|
|
2691
|
+
(clientEventId: string): void => {
|
|
2692
|
+
if (
|
|
2693
|
+
targetKeyRef.current !== targetKey ||
|
|
2694
|
+
draftLoading ||
|
|
2695
|
+
pendingOperationRef.current ||
|
|
2696
|
+
hasDraftContent()
|
|
2697
|
+
)
|
|
2698
|
+
return;
|
|
2699
|
+
const operation = optimisticSendsRef.current.find(
|
|
2700
|
+
(candidate) => candidate.clientEventId === clientEventId,
|
|
2701
|
+
);
|
|
2702
|
+
if (!operation || operation.state !== "failed" || operation.outcomeUnknown) return;
|
|
2703
|
+
// Restoring is a new draft edit, not a retry. Keep the user's current model
|
|
2704
|
+
// selection and never copy credentials from the old rejected request.
|
|
2705
|
+
localEditRevision.current += 1;
|
|
2706
|
+
valueRef.current = operation.text;
|
|
2707
|
+
restoredResourcesRef.current = [...operation.resources];
|
|
2708
|
+
annotationsRef.current = cloneAnnotations(operation.annotations);
|
|
2709
|
+
setValue(operation.text);
|
|
2710
|
+
setRestoredResources(restoredResourcesRef.current);
|
|
2711
|
+
setAnnotations(annotationsRef.current);
|
|
2712
|
+
setError(null);
|
|
2713
|
+
setOptimisticDraftShadow({
|
|
2714
|
+
text: operation.text,
|
|
2715
|
+
resources: restoredResourcesRef.current,
|
|
2716
|
+
annotations: annotationsRef.current,
|
|
2717
|
+
policy: policyRef.current ?? undefined,
|
|
2718
|
+
});
|
|
2719
|
+
replaceOptimisticSends((current) =>
|
|
2720
|
+
current.filter((candidate) => candidate.clientEventId !== clientEventId),
|
|
2721
|
+
);
|
|
2722
|
+
},
|
|
2723
|
+
[draftLoading, hasDraftContent, replaceOptimisticSends, setOptimisticDraftShadow, targetKey],
|
|
2724
|
+
);
|
|
2725
|
+
|
|
2549
2726
|
const resolveDraftConflict = useCallback(
|
|
2550
2727
|
async (choice: "keep_mine" | "use_remote"): Promise<void> => {
|
|
2551
2728
|
const ownedTargetKey = targetKey;
|
|
@@ -2623,6 +2800,7 @@ export function useComposer(
|
|
|
2623
2800
|
const clearError = useCallback(() => {
|
|
2624
2801
|
if (targetKeyRef.current !== targetKey) return;
|
|
2625
2802
|
setError(null);
|
|
2803
|
+
setDraftReadError(null);
|
|
2626
2804
|
setDraftConflict(null);
|
|
2627
2805
|
}, [targetKey]);
|
|
2628
2806
|
// `valueRef` is the synchronous composer authority. React state exists to
|
|
@@ -2643,10 +2821,15 @@ export function useComposer(
|
|
|
2643
2821
|
removeAnnotation,
|
|
2644
2822
|
annotationReviewTargetId: identityMatches ? annotationReviewTargetId : null,
|
|
2645
2823
|
clearAnnotationReviewTarget,
|
|
2824
|
+
requestAnnotationReview,
|
|
2646
2825
|
hasDraftContent,
|
|
2647
2826
|
send,
|
|
2648
2827
|
optimisticMessages: visibleOptimisticMessages,
|
|
2649
2828
|
retryOptimisticMessage,
|
|
2829
|
+
restoreOptimisticMessage:
|
|
2830
|
+
!draftLoading && !pendingOperationRef.current && !hasDraftContent()
|
|
2831
|
+
? restoreOptimisticMessage
|
|
2832
|
+
: undefined,
|
|
2650
2833
|
removeOptimisticMessage,
|
|
2651
2834
|
steer,
|
|
2652
2835
|
steering: visibleSteering,
|
|
@@ -2689,7 +2872,7 @@ export function useComposer(
|
|
|
2689
2872
|
resolveDraftConflict,
|
|
2690
2873
|
restoredResources: identityMatches ? restoredResources : [],
|
|
2691
2874
|
removeRestoredResource,
|
|
2692
|
-
error: identityMatches ? error : null,
|
|
2875
|
+
error: identityMatches ? (error ?? draftReadError) : null,
|
|
2693
2876
|
clearError,
|
|
2694
2877
|
};
|
|
2695
2878
|
}
|
|
@@ -2768,7 +2951,7 @@ async function replayOutcomeUnknown<T>(command: () => Promise<T>): Promise<T> {
|
|
|
2768
2951
|
}
|
|
2769
2952
|
|
|
2770
2953
|
function asError(cause: unknown): Error {
|
|
2771
|
-
return
|
|
2954
|
+
return normalizeError(cause);
|
|
2772
2955
|
}
|
|
2773
2956
|
|
|
2774
2957
|
function promptRoutingFromAcceptedEvent(
|
|
@@ -57,7 +57,12 @@ export type UseComputerFrameStreamResult = {
|
|
|
57
57
|
frame: ComputerFrame | null;
|
|
58
58
|
attachment: Pick<
|
|
59
59
|
ComputerSessionAttachment,
|
|
60
|
-
|
|
60
|
+
| "computerSessionId"
|
|
61
|
+
| "controllerGeneration"
|
|
62
|
+
| "targetId"
|
|
63
|
+
| "inputAllowed"
|
|
64
|
+
| "stream"
|
|
65
|
+
| "expiresAt"
|
|
61
66
|
> | null;
|
|
62
67
|
error: Error | null;
|
|
63
68
|
reconnect: () => void;
|
|
@@ -159,9 +164,19 @@ export function useComputerFrameStream(
|
|
|
159
164
|
pendingFrame = null;
|
|
160
165
|
};
|
|
161
166
|
|
|
167
|
+
const clearRecoveryTimers = () => {
|
|
168
|
+
if (reconnectTimer) clearTimeout(reconnectTimer);
|
|
169
|
+
if (expiryTimer) clearTimeout(expiryTimer);
|
|
170
|
+
reconnectTimer = null;
|
|
171
|
+
expiryTimer = null;
|
|
172
|
+
};
|
|
173
|
+
|
|
162
174
|
const scheduleReconnect = () => {
|
|
163
175
|
if (disposed || reconnectTimer) return;
|
|
164
|
-
if (failures >= MAX_AUTOMATIC_RECONNECTS_WITHOUT_A_FRAME)
|
|
176
|
+
if (failures >= MAX_AUTOMATIC_RECONNECTS_WITHOUT_A_FRAME) {
|
|
177
|
+
clearRecoveryTimers();
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
165
180
|
const delay = Math.min(5_000, 250 * 2 ** Math.min(failures, 5));
|
|
166
181
|
failures += 1;
|
|
167
182
|
setResult((current) => ({ ...current, state: "reconnecting" }));
|
|
@@ -177,6 +192,7 @@ export function useComputerFrameStream(
|
|
|
177
192
|
setResult((current) => ({ ...current, state: "error", error }));
|
|
178
193
|
clearSocket();
|
|
179
194
|
if (reconnectAutomatically) scheduleReconnect();
|
|
195
|
+
else clearRecoveryTimers();
|
|
180
196
|
};
|
|
181
197
|
|
|
182
198
|
const onOpen = (source: ComputerFrameWebSocket) => {
|
|
@@ -295,8 +311,7 @@ export function useComputerFrameStream(
|
|
|
295
311
|
|
|
296
312
|
const onClose = (source: ComputerFrameWebSocket) => {
|
|
297
313
|
if (disposed || source !== socket) return;
|
|
298
|
-
|
|
299
|
-
scheduleReconnect();
|
|
314
|
+
fail(new Error("Desktop view lost connection."));
|
|
300
315
|
};
|
|
301
316
|
|
|
302
317
|
const connectSocket = () => {
|
|
@@ -356,7 +371,7 @@ export function useComputerFrameStream(
|
|
|
356
371
|
expiresInSeconds: 120,
|
|
357
372
|
...(streamRef.current ? { stream: streamRef.current } : {}),
|
|
358
373
|
},
|
|
359
|
-
{ signal: attachmentAbort.signal },
|
|
374
|
+
{ signal: attachmentAbort.signal, timeoutMs: 15_000 },
|
|
360
375
|
);
|
|
361
376
|
if (disposed) return;
|
|
362
377
|
if (
|
|
@@ -366,6 +381,9 @@ export function useComputerFrameStream(
|
|
|
366
381
|
throw new Error("desktop attachment does not match the requested resource");
|
|
367
382
|
}
|
|
368
383
|
controllerGeneration = attachment.controllerGeneration;
|
|
384
|
+
// A fresh attachment owns a new producer whose sequence can restart.
|
|
385
|
+
// Transport reconnects reuse the attachment and retain their sequence fence.
|
|
386
|
+
latestRef.current = { key: "", sequence: -1 };
|
|
369
387
|
activeAttachment = attachment;
|
|
370
388
|
activeStream = attachment.stream;
|
|
371
389
|
attachmentExpiresAt = Date.parse(attachment.expiresAt);
|
|
@@ -378,6 +396,7 @@ export function useComputerFrameStream(
|
|
|
378
396
|
computerSessionId: attachment.computerSessionId,
|
|
379
397
|
controllerGeneration: attachment.controllerGeneration,
|
|
380
398
|
targetId: attachment.targetId,
|
|
399
|
+
inputAllowed: attachment.inputAllowed,
|
|
381
400
|
stream: attachment.stream,
|
|
382
401
|
expiresAt: attachment.expiresAt,
|
|
383
402
|
},
|
|
@@ -406,8 +425,7 @@ export function useComputerFrameStream(
|
|
|
406
425
|
disposed = true;
|
|
407
426
|
pendingFrame = null;
|
|
408
427
|
attachmentAbort.abort();
|
|
409
|
-
|
|
410
|
-
if (expiryTimer) clearTimeout(expiryTimer);
|
|
428
|
+
clearRecoveryTimers();
|
|
411
429
|
clearSocket(true);
|
|
412
430
|
};
|
|
413
431
|
}, [client, enabled, nonce, options.computerSessionId, options.targetId, workspaceId]);
|