@opengeni/react 3.1.0 → 3.1.2
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 +89 -11
- 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-BO2IWXVK.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-RGALCTWO.js → chunk-2I6R3GCZ.js} +4285 -3980
- package/dist/chunk-2I6R3GCZ.js.map +1 -0
- package/dist/{chunk-D3UIAJKY.js → chunk-2SFFYIH3.js} +1179 -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-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-OAM4WAAM.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-XXWH2JLC.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-OVB5WIG5.js +14064 -0
- package/dist/chunk-OVB5WIG5.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-MZ2G2XBA.js → chunk-V5ZUJT2T.js} +205 -45
- package/dist/chunk-V5ZUJT2T.js.map +1 -0
- package/dist/chunk-VIUEOHXY.js +394 -0
- package/dist/chunk-VIUEOHXY.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-YJFGAFBD.js → chunk-X5UVUIMF.js} +1892 -1223
- 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/fleet-tile.d.ts +2 -2
- 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 +41 -25
- 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/tip-follow.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 +28 -7
- 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 +22 -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 +2350 -6605
- 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 -1294
- 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/entrance.d.ts +13 -1
- 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 +107 -7
- package/src/accounts.tsx +116 -14
- 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 +189 -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 +9 -18
- 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 +2567 -728
- 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 +256 -412
- 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/tip-follow.ts +52 -0
- package/src/components/tool-action-review.tsx +650 -0
- package/src/components/tool-review-history.tsx +88 -0
- package/src/components/tooltip.tsx +38 -5
- package/src/components/usage-limit-notice.tsx +179 -0
- package/src/components/usage-member-list.tsx +792 -0
- package/src/components/usage-meter.tsx +382 -0
- package/src/components/use-viewer-menu-dismiss.ts +33 -0
- package/src/components/user-message-body.tsx +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 +21 -15
- 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 +276 -47
- 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 +107 -13
- package/src/hooks/use-last-started-turn-policy.ts +46 -14
- 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 +703 -382
- package/src/hooks/use-session-lineage.ts +20 -16
- 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 +53 -21
- 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 +97 -32
- 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 +213 -16
- 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 -501
- 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/entrance.tsx +28 -3
- package/src/timeline/fleet-decision-projection.ts +2 -1
- package/src/timeline/fleet-decision-row.tsx +1 -0
- package/src/timeline/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 +1746 -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-AEFHUYZK.js +0 -14
- package/dist/chunk-4MDLEHXL.js.map +0 -1
- package/dist/chunk-5YK2ZDIG.js.map +0 -1
- package/dist/chunk-D3UIAJKY.js.map +0 -1
- package/dist/chunk-ELIYWBZR.js.map +0 -1
- package/dist/chunk-H5YGYNXS.js.map +0 -1
- package/dist/chunk-HQVCKCLG.js +0 -9458
- package/dist/chunk-HQVCKCLG.js.map +0 -1
- package/dist/chunk-HUIKIDM5.js.map +0 -1
- package/dist/chunk-ICA6R6TW.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-LAKLF4PA.js +0 -141
- package/dist/chunk-LAKLF4PA.js.map +0 -1
- package/dist/chunk-MZ2G2XBA.js.map +0 -1
- package/dist/chunk-NEXLLTP4.js.map +0 -1
- package/dist/chunk-OAM4WAAM.js.map +0 -1
- package/dist/chunk-PEI6RANI.js.map +0 -1
- package/dist/chunk-RGALCTWO.js.map +0 -1
- package/dist/chunk-W6NFJXSA.js +0 -454
- package/dist/chunk-W6NFJXSA.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-XXWH2JLC.js.map +0 -1
- package/dist/chunk-YFKJ7VZH.js +0 -268
- package/dist/chunk-YFKJ7VZH.js.map +0 -1
- package/dist/chunk-YJFGAFBD.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-AEFHUYZK.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
- /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-BO2IWXVK.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>;
|
|
@@ -569,9 +643,17 @@ function reconcileOptimisticSendFromEvents(
|
|
|
569
643
|
);
|
|
570
644
|
const triggerEventId = operation.triggerEventId ?? accepted?.id ?? null;
|
|
571
645
|
const turnId = operation.turnId ?? promptTurnIdForTrigger(triggerEventId, events);
|
|
646
|
+
const acceptedRouting = promptRoutingFromAcceptedEvent(accepted ?? null);
|
|
647
|
+
const destination =
|
|
648
|
+
acceptedRouting === "queued_for_execution"
|
|
649
|
+
? "queue"
|
|
650
|
+
: acceptedRouting === "accepted_for_execution" || acceptedRouting === "accepted_for_steering"
|
|
651
|
+
? "chat"
|
|
652
|
+
: operation.destination;
|
|
572
653
|
const needsAdmissionUpdate =
|
|
573
654
|
accepted !== undefined &&
|
|
574
655
|
(operation.state !== "queued" ||
|
|
656
|
+
operation.destination !== destination ||
|
|
575
657
|
operation.triggerEventId !== triggerEventId ||
|
|
576
658
|
operation.turnId !== turnId ||
|
|
577
659
|
operation.error !== undefined ||
|
|
@@ -580,6 +662,7 @@ function reconcileOptimisticSendFromEvents(
|
|
|
580
662
|
? {
|
|
581
663
|
...operation,
|
|
582
664
|
state: "queued",
|
|
665
|
+
destination,
|
|
583
666
|
triggerEventId,
|
|
584
667
|
turnId,
|
|
585
668
|
error: undefined,
|
|
@@ -628,6 +711,7 @@ export function useComposer(
|
|
|
628
711
|
options: UseComposerOptions = {},
|
|
629
712
|
): ComposerControllerState {
|
|
630
713
|
const { client, workspaceId, registerSessionReconciler } = useEmbeddedSession(options);
|
|
714
|
+
const formatError = useErrorMessage();
|
|
631
715
|
const durableDrafts = options.draftPersistence !== "disabled";
|
|
632
716
|
if (!durableDrafts && !options.initialPolicy) {
|
|
633
717
|
throw new Error("useComposer requires initialPolicy when draft persistence is disabled");
|
|
@@ -637,7 +721,9 @@ export function useComposer(
|
|
|
637
721
|
const initialPendingOperation = restorePendingComposerOperation(pendingOperationKey);
|
|
638
722
|
const initialOptimisticSends = restoreOptimisticSendOperations(pendingOperationKey);
|
|
639
723
|
const initialShadow =
|
|
640
|
-
initialPendingOperation?.newerShadow ??
|
|
724
|
+
initialPendingOperation?.newerShadow ??
|
|
725
|
+
initialOptimisticSends.at(-1)?.newerShadow ??
|
|
726
|
+
initialComposerShadow(options.initialDraft);
|
|
641
727
|
const [value, setValue] = useState(() => initialShadow?.text ?? "");
|
|
642
728
|
const [annotations, setAnnotations] = useState<DraftTimelineAnnotation[]>(
|
|
643
729
|
() => initialShadow?.annotations ?? [],
|
|
@@ -666,6 +752,8 @@ export function useComposer(
|
|
|
666
752
|
const [acceptedControl, setAcceptedControl] = useState<EffectiveSessionControl | null>(null);
|
|
667
753
|
const [resuming, setResuming] = useState(false);
|
|
668
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);
|
|
669
757
|
const [draft, setDraft] = useState<ComposerDraft | null>(null);
|
|
670
758
|
const [draftLoading, setDraftLoading] = useState(Boolean(sessionId) && durableDrafts);
|
|
671
759
|
const [draftSaving, setDraftSaving] = useState(false);
|
|
@@ -697,6 +785,7 @@ export function useComposer(
|
|
|
697
785
|
const targetGeneration = useRef(0);
|
|
698
786
|
const draftReadGeneration = useRef(0);
|
|
699
787
|
const draftReadInFlightRef = useRef<string | null>(null);
|
|
788
|
+
const draftReadAbortRef = useRef<AbortController | null>(null);
|
|
700
789
|
const draftReadRetryRef = useRef<{
|
|
701
790
|
targetKey: string;
|
|
702
791
|
failures: number;
|
|
@@ -704,8 +793,18 @@ export function useComposer(
|
|
|
704
793
|
}>({ targetKey, failures: 0, timer: null });
|
|
705
794
|
const lastSavedSignature = useRef<string | null>(null);
|
|
706
795
|
const saveChain = useRef<Promise<void>>(Promise.resolve());
|
|
707
|
-
const onSent =
|
|
708
|
-
|
|
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
|
+
);
|
|
709
808
|
const onDeliveryErrorRef = useRef(options.onDeliveryError);
|
|
710
809
|
onDeliveryErrorRef.current = options.onDeliveryError;
|
|
711
810
|
useLayoutEffect(() => {
|
|
@@ -733,6 +832,8 @@ export function useComposer(
|
|
|
733
832
|
if (draftReadRetryRef.current.timer !== null) {
|
|
734
833
|
clearTimeout(draftReadRetryRef.current.timer);
|
|
735
834
|
}
|
|
835
|
+
draftReadAbortRef.current?.abort();
|
|
836
|
+
draftReadAbortRef.current = null;
|
|
736
837
|
draftReadRetryRef.current = { targetKey, failures: 0, timer: null };
|
|
737
838
|
targetKeyRef.current = targetKey;
|
|
738
839
|
targetGeneration.current += 1;
|
|
@@ -745,7 +846,9 @@ export function useComposer(
|
|
|
745
846
|
steeringSettlementEventsRef.current = [];
|
|
746
847
|
pendingClientEventId.current = pendingOperationRef.current?.input.clientEventId ?? null;
|
|
747
848
|
const shadow =
|
|
748
|
-
pendingOperationRef.current?.newerShadow ??
|
|
849
|
+
pendingOperationRef.current?.newerShadow ??
|
|
850
|
+
restoredOptimisticSends.at(-1)?.newerShadow ??
|
|
851
|
+
initialComposerShadow(options.initialDraft);
|
|
749
852
|
localEditRevision.current = shadow ? 1 : 0;
|
|
750
853
|
valueRef.current = shadow?.text ?? "";
|
|
751
854
|
annotationsRef.current = shadow?.annotations ?? [];
|
|
@@ -780,17 +883,30 @@ export function useComposer(
|
|
|
780
883
|
setAcceptedControl(null);
|
|
781
884
|
setResuming(false);
|
|
782
885
|
setError(null);
|
|
886
|
+
setDraftReadError(null);
|
|
783
887
|
setDraft(null);
|
|
784
888
|
setDraftLoading(Boolean(sessionId) && durableDrafts);
|
|
785
889
|
setDraftSaving(false);
|
|
786
890
|
setDraftConflict(null);
|
|
787
891
|
setRestoredResources(shadow?.resources ?? []);
|
|
788
|
-
}, [
|
|
892
|
+
}, [
|
|
893
|
+
durableDrafts,
|
|
894
|
+
options.initialPolicy,
|
|
895
|
+
options.initialDraft,
|
|
896
|
+
pendingOperationKey,
|
|
897
|
+
sessionId,
|
|
898
|
+
targetKey,
|
|
899
|
+
]);
|
|
789
900
|
useEffect(
|
|
790
901
|
() => () => {
|
|
791
902
|
if (draftReadRetryRef.current.timer !== null) {
|
|
792
903
|
clearTimeout(draftReadRetryRef.current.timer);
|
|
793
904
|
}
|
|
905
|
+
targetGeneration.current += 1;
|
|
906
|
+
draftReadGeneration.current += 1;
|
|
907
|
+
draftReadInFlightRef.current = null;
|
|
908
|
+
draftReadAbortRef.current?.abort();
|
|
909
|
+
draftReadAbortRef.current = null;
|
|
794
910
|
},
|
|
795
911
|
[],
|
|
796
912
|
);
|
|
@@ -901,6 +1017,7 @@ export function useComposer(
|
|
|
901
1017
|
if (targetKeyRef.current !== targetKey) return;
|
|
902
1018
|
if (!sessionId || !durableDrafts) {
|
|
903
1019
|
setDraftLoading(false);
|
|
1020
|
+
setDraftReadError(null);
|
|
904
1021
|
return;
|
|
905
1022
|
}
|
|
906
1023
|
let retry = draftReadRetryRef.current;
|
|
@@ -929,6 +1046,9 @@ export function useComposer(
|
|
|
929
1046
|
draftReadInFlightRef.current = targetKey;
|
|
930
1047
|
const generation = targetGeneration.current;
|
|
931
1048
|
const readTicket = ++draftReadGeneration.current;
|
|
1049
|
+
const requestAbort = new AbortController();
|
|
1050
|
+
draftReadAbortRef.current?.abort();
|
|
1051
|
+
draftReadAbortRef.current = requestAbort;
|
|
932
1052
|
const localAtStart = localEditRevision.current;
|
|
933
1053
|
const baseAtStart = draftRef.current;
|
|
934
1054
|
const policyAtStart = policyRef.current;
|
|
@@ -958,7 +1078,9 @@ export function useComposer(
|
|
|
958
1078
|
setDraftLoading(true);
|
|
959
1079
|
}
|
|
960
1080
|
try {
|
|
961
|
-
const fetched = await client.getComposerDraft(workspaceId, sessionId
|
|
1081
|
+
const fetched = await client.getComposerDraft(workspaceId, sessionId, {
|
|
1082
|
+
signal: requestAbort.signal,
|
|
1083
|
+
});
|
|
962
1084
|
if (
|
|
963
1085
|
generation !== targetGeneration.current ||
|
|
964
1086
|
targetKeyRef.current !== targetKey ||
|
|
@@ -969,6 +1091,8 @@ export function useComposer(
|
|
|
969
1091
|
if (retry.timer !== null) clearTimeout(retry.timer);
|
|
970
1092
|
retry.failures = 0;
|
|
971
1093
|
retry.timer = null;
|
|
1094
|
+
// Recovery also counts when the server returns the same draft revision.
|
|
1095
|
+
setDraftReadError(null);
|
|
972
1096
|
const currentRevision = draftRef.current?.revision ?? -1;
|
|
973
1097
|
// Reconnect and client-generation effects can legitimately ask for the
|
|
974
1098
|
// draft again. A same-revision response is not new authority: publishing
|
|
@@ -1021,12 +1145,20 @@ export function useComposer(
|
|
|
1021
1145
|
}
|
|
1022
1146
|
} catch (cause) {
|
|
1023
1147
|
if (
|
|
1148
|
+
!requestAbort.signal.aborted &&
|
|
1024
1149
|
generation === targetGeneration.current &&
|
|
1025
1150
|
targetKeyRef.current === targetKey &&
|
|
1026
1151
|
readTicket === draftReadGeneration.current
|
|
1027
1152
|
) {
|
|
1028
|
-
|
|
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
|
+
);
|
|
1029
1160
|
if (
|
|
1161
|
+
timedOut ||
|
|
1030
1162
|
cause instanceof TypeError ||
|
|
1031
1163
|
(cause && typeof cause === "object" && "retryable" in cause && cause.retryable === true)
|
|
1032
1164
|
) {
|
|
@@ -1049,6 +1181,9 @@ export function useComposer(
|
|
|
1049
1181
|
if (draftReadInFlightRef.current === targetKey) {
|
|
1050
1182
|
draftReadInFlightRef.current = null;
|
|
1051
1183
|
}
|
|
1184
|
+
if (draftReadAbortRef.current === requestAbort) {
|
|
1185
|
+
draftReadAbortRef.current = null;
|
|
1186
|
+
}
|
|
1052
1187
|
}
|
|
1053
1188
|
},
|
|
1054
1189
|
[client, durableDrafts, sessionId, targetKey, workspaceId],
|
|
@@ -1327,21 +1462,34 @@ export function useComposer(
|
|
|
1327
1462
|
optimisticProcessorBusyRef.current = true;
|
|
1328
1463
|
void (async () => {
|
|
1329
1464
|
let mutationFailureObserved = false;
|
|
1330
|
-
const markFailed = (
|
|
1465
|
+
const markFailed = (cause: unknown, outcomeUnknown: boolean): void => {
|
|
1331
1466
|
if (
|
|
1332
1467
|
targetKeyRef.current !== ownedTargetKey ||
|
|
1333
1468
|
targetGeneration.current !== ownedGeneration
|
|
1334
1469
|
) {
|
|
1335
1470
|
return;
|
|
1336
1471
|
}
|
|
1472
|
+
const problem = asError(cause);
|
|
1337
1473
|
replaceOptimisticSends((current) =>
|
|
1338
1474
|
current.map((candidate) =>
|
|
1339
1475
|
candidate.clientEventId === operation.clientEventId
|
|
1340
1476
|
? {
|
|
1341
1477
|
...candidate,
|
|
1342
1478
|
state: "failed",
|
|
1343
|
-
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),
|
|
1344
1488
|
outcomeUnknown,
|
|
1489
|
+
correlationId:
|
|
1490
|
+
problem instanceof OpenGeniApiError
|
|
1491
|
+
? problem.correlationId
|
|
1492
|
+
: candidate.correlationId,
|
|
1345
1493
|
}
|
|
1346
1494
|
: candidate,
|
|
1347
1495
|
),
|
|
@@ -1368,7 +1516,7 @@ export function useComposer(
|
|
|
1368
1516
|
// This read cannot settle the prior mutation in either direction.
|
|
1369
1517
|
// Preserve its exact key and uncertain status until reconciliation
|
|
1370
1518
|
// succeeds or that same mutation is actually replayed.
|
|
1371
|
-
markFailed(
|
|
1519
|
+
markFailed(cause, true);
|
|
1372
1520
|
return;
|
|
1373
1521
|
}
|
|
1374
1522
|
const reconciled = reconcileOptimisticSendFromEvents(operation, events);
|
|
@@ -1392,15 +1540,13 @@ export function useComposer(
|
|
|
1392
1540
|
return;
|
|
1393
1541
|
}
|
|
1394
1542
|
if (!operation.canRetry) {
|
|
1395
|
-
throw new
|
|
1396
|
-
"OpenGeni cannot safely retry this uncertain request after remount; reconcile the session before sending again.",
|
|
1397
|
-
);
|
|
1543
|
+
throw new ComposerReconciliationRequiredError();
|
|
1398
1544
|
}
|
|
1399
1545
|
}
|
|
1400
1546
|
let expectedDraftRevision: number | undefined;
|
|
1401
1547
|
if (durableDrafts && operation.draftPayload) {
|
|
1402
1548
|
if (!(await persistPayload(operation.draftPayload))) {
|
|
1403
|
-
throw new
|
|
1549
|
+
throw new ComposerStateError("The message draft could not be saved before delivery.");
|
|
1404
1550
|
}
|
|
1405
1551
|
expectedDraftRevision = draftRef.current?.revision;
|
|
1406
1552
|
}
|
|
@@ -1418,7 +1564,7 @@ export function useComposer(
|
|
|
1418
1564
|
let acceptedEvent: SessionEvent | null = null;
|
|
1419
1565
|
if (durableDrafts) {
|
|
1420
1566
|
if (!operation.draftPayload || expectedDraftRevision === undefined) {
|
|
1421
|
-
throw new
|
|
1567
|
+
throw new ComposerStateError("The durable composer draft is not ready for delivery.");
|
|
1422
1568
|
}
|
|
1423
1569
|
const result = await client
|
|
1424
1570
|
.submitComposerDraft(workspaceId, sessionId, {
|
|
@@ -1436,9 +1582,10 @@ export function useComposer(
|
|
|
1436
1582
|
...(wireInput.mcpCredentialUpdates
|
|
1437
1583
|
? { mcpCredentialUpdates: wireInput.mcpCredentialUpdates }
|
|
1438
1584
|
: {}),
|
|
1439
|
-
...(wireInput.
|
|
1440
|
-
? {
|
|
1585
|
+
...(wireInput.connectionAccounts
|
|
1586
|
+
? { connectionAccounts: wireInput.connectionAccounts }
|
|
1441
1587
|
: {}),
|
|
1588
|
+
|
|
1442
1589
|
...(wireInput.personalResourceAttachment
|
|
1443
1590
|
? { personalResourceAttachment: wireInput.personalResourceAttachment }
|
|
1444
1591
|
: {}),
|
|
@@ -1463,10 +1610,13 @@ export function useComposer(
|
|
|
1463
1610
|
) {
|
|
1464
1611
|
return;
|
|
1465
1612
|
}
|
|
1613
|
+
const acceptedRouting =
|
|
1614
|
+
acceptedResult?.routing ?? promptRoutingFromAcceptedEvent(acceptedEvent);
|
|
1466
1615
|
const acceptedDestination =
|
|
1467
|
-
|
|
1616
|
+
acceptedRouting === "queued_for_execution"
|
|
1468
1617
|
? "queue"
|
|
1469
|
-
:
|
|
1618
|
+
: acceptedRouting === "accepted_for_execution" ||
|
|
1619
|
+
acceptedRouting === "accepted_for_steering"
|
|
1470
1620
|
? "chat"
|
|
1471
1621
|
: operation.destination;
|
|
1472
1622
|
if (options.events === undefined && acceptedDestination === "chat") {
|
|
@@ -1505,14 +1655,14 @@ export function useComposer(
|
|
|
1505
1655
|
return;
|
|
1506
1656
|
}
|
|
1507
1657
|
const problem = asError(cause);
|
|
1508
|
-
onDeliveryErrorRef.current
|
|
1658
|
+
notifyComposerObserver(onDeliveryErrorRef.current, problem, operation.input, "send");
|
|
1509
1659
|
// Only an actual mutation replay can replace prior uncertainty with a
|
|
1510
1660
|
// definitive response. Local preparation failures remain retry-only.
|
|
1511
1661
|
const outcomeUnknown =
|
|
1512
1662
|
operation.outcomeUnknown && !mutationFailureObserved
|
|
1513
1663
|
? true
|
|
1514
1664
|
: isOutcomeUnknownError(cause);
|
|
1515
|
-
markFailed(
|
|
1665
|
+
markFailed(cause, outcomeUnknown);
|
|
1516
1666
|
} finally {
|
|
1517
1667
|
optimisticProcessorBusyRef.current = false;
|
|
1518
1668
|
if (targetKeyRef.current === ownedTargetKey) {
|
|
@@ -1524,6 +1674,7 @@ export function useComposer(
|
|
|
1524
1674
|
adoptDraftBase,
|
|
1525
1675
|
client,
|
|
1526
1676
|
durableDrafts,
|
|
1677
|
+
formatError,
|
|
1527
1678
|
markOptimisticAccepted,
|
|
1528
1679
|
loadDraft,
|
|
1529
1680
|
onSent,
|
|
@@ -1692,7 +1843,7 @@ export function useComposer(
|
|
|
1692
1843
|
input.reasoningEffort === undefined ||
|
|
1693
1844
|
input.latencyMode === undefined
|
|
1694
1845
|
) {
|
|
1695
|
-
throw new
|
|
1846
|
+
throw new ComposerStateError("The durable composer draft is not ready for delivery.");
|
|
1696
1847
|
}
|
|
1697
1848
|
const result = await client.submitComposerDraft(workspaceId, sessionId, {
|
|
1698
1849
|
text: input.text,
|
|
@@ -1709,9 +1860,7 @@ export function useComposer(
|
|
|
1709
1860
|
...(input.mcpCredentialUpdates
|
|
1710
1861
|
? { mcpCredentialUpdates: input.mcpCredentialUpdates }
|
|
1711
1862
|
: {}),
|
|
1712
|
-
...(input.
|
|
1713
|
-
? { connectionAuthorities: input.connectionAuthorities }
|
|
1714
|
-
: {}),
|
|
1863
|
+
...(input.connectionAccounts ? { connectionAccounts: input.connectionAccounts } : {}),
|
|
1715
1864
|
...(input.personalResourceAttachment
|
|
1716
1865
|
? { personalResourceAttachment: input.personalResourceAttachment }
|
|
1717
1866
|
: {}),
|
|
@@ -1799,11 +1948,7 @@ export function useComposer(
|
|
|
1799
1948
|
return true;
|
|
1800
1949
|
}
|
|
1801
1950
|
if (!pending.canRetry) {
|
|
1802
|
-
setError(
|
|
1803
|
-
new Error(
|
|
1804
|
-
"OpenGeni cannot safely retry this uncertain request after remount; reconcile the session before sending again.",
|
|
1805
|
-
),
|
|
1806
|
-
);
|
|
1951
|
+
setError(new ComposerReconciliationRequiredError());
|
|
1807
1952
|
return false;
|
|
1808
1953
|
}
|
|
1809
1954
|
try {
|
|
@@ -1823,7 +1968,12 @@ export function useComposer(
|
|
|
1823
1968
|
} catch (cause) {
|
|
1824
1969
|
const problem = asError(cause);
|
|
1825
1970
|
const outcomeUnknown = isOutcomeUnknownError(cause);
|
|
1826
|
-
|
|
1971
|
+
notifyComposerObserver(
|
|
1972
|
+
onDeliveryErrorRef.current,
|
|
1973
|
+
problem,
|
|
1974
|
+
pending.input,
|
|
1975
|
+
pending.delivery,
|
|
1976
|
+
);
|
|
1827
1977
|
if (!outcomeUnknown) {
|
|
1828
1978
|
clearPending();
|
|
1829
1979
|
keepSteering = false;
|
|
@@ -1926,7 +2076,12 @@ export function useComposer(
|
|
|
1926
2076
|
});
|
|
1927
2077
|
}
|
|
1928
2078
|
} catch (cause) {
|
|
1929
|
-
|
|
2079
|
+
notifyComposerObserver(
|
|
2080
|
+
onDeliveryErrorRef.current,
|
|
2081
|
+
asError(cause),
|
|
2082
|
+
operation.input,
|
|
2083
|
+
operation.delivery,
|
|
2084
|
+
);
|
|
1930
2085
|
if (!isOutcomeUnknownError(cause)) {
|
|
1931
2086
|
clearPending();
|
|
1932
2087
|
} else if (delivery === "steer") {
|
|
@@ -2097,6 +2252,7 @@ export function useComposer(
|
|
|
2097
2252
|
if (operation.outcomeUnknown) {
|
|
2098
2253
|
return { ...operation, state: "sending", error: undefined };
|
|
2099
2254
|
}
|
|
2255
|
+
if (operation.retryable === false) return operation;
|
|
2100
2256
|
const nextClientEventId = generateClientEventId();
|
|
2101
2257
|
const currentPersonalResourceAttachment = resolveSendExtras(
|
|
2102
2258
|
sendExtrasRef.current,
|
|
@@ -2126,6 +2282,7 @@ export function useComposer(
|
|
|
2126
2282
|
occurredAt: new Date().toISOString(),
|
|
2127
2283
|
state: "sending",
|
|
2128
2284
|
error: undefined,
|
|
2285
|
+
retryable: undefined,
|
|
2129
2286
|
outcomeUnknown: false,
|
|
2130
2287
|
canRetry: true,
|
|
2131
2288
|
};
|
|
@@ -2196,7 +2353,7 @@ export function useComposer(
|
|
|
2196
2353
|
targetKeyRef.current === ownedTargetKey &&
|
|
2197
2354
|
targetGeneration.current === ownedGeneration
|
|
2198
2355
|
) {
|
|
2199
|
-
setError(
|
|
2356
|
+
setError(normalizeError(cause));
|
|
2200
2357
|
}
|
|
2201
2358
|
} finally {
|
|
2202
2359
|
if (
|
|
@@ -2240,7 +2397,7 @@ export function useComposer(
|
|
|
2240
2397
|
targetKeyRef.current === ownedTargetKey &&
|
|
2241
2398
|
targetGeneration.current === ownedGeneration
|
|
2242
2399
|
) {
|
|
2243
|
-
setError(
|
|
2400
|
+
setError(normalizeError(cause));
|
|
2244
2401
|
}
|
|
2245
2402
|
} finally {
|
|
2246
2403
|
if (
|
|
@@ -2267,9 +2424,7 @@ export function useComposer(
|
|
|
2267
2424
|
(blocker) => blocker.kind === "workspace",
|
|
2268
2425
|
);
|
|
2269
2426
|
if (!client.setWorkspaceInferenceState) {
|
|
2270
|
-
throw new
|
|
2271
|
-
"@opengeni/react: workspace-scoped resume requires setWorkspaceInferenceState.",
|
|
2272
|
-
);
|
|
2427
|
+
throw new ComposerWorkspaceControlUnavailableError();
|
|
2273
2428
|
}
|
|
2274
2429
|
const clientEventId = generateClientEventId();
|
|
2275
2430
|
await replayOutcomeUnknown(() =>
|
|
@@ -2399,7 +2554,7 @@ export function useComposer(
|
|
|
2399
2554
|
const addAnnotation = useCallback(
|
|
2400
2555
|
(annotation: DraftTimelineAnnotation) => {
|
|
2401
2556
|
if (annotationsRef.current.length >= 12) {
|
|
2402
|
-
setError(new
|
|
2557
|
+
setError(new ComposerStateError("A message can include at most 12 timeline annotations."));
|
|
2403
2558
|
return;
|
|
2404
2559
|
}
|
|
2405
2560
|
const next = [...annotationsRef.current, annotation];
|
|
@@ -2430,6 +2585,20 @@ export function useComposer(
|
|
|
2430
2585
|
setAnnotationReviewTargetId(null);
|
|
2431
2586
|
}, []);
|
|
2432
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
|
+
|
|
2433
2602
|
const updatePolicy = useCallback(
|
|
2434
2603
|
(next: ComposerPolicy): void => {
|
|
2435
2604
|
if (targetKeyRef.current !== targetKey) return;
|
|
@@ -2518,6 +2687,42 @@ export function useComposer(
|
|
|
2518
2687
|
);
|
|
2519
2688
|
}, []);
|
|
2520
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
|
+
|
|
2521
2726
|
const resolveDraftConflict = useCallback(
|
|
2522
2727
|
async (choice: "keep_mine" | "use_remote"): Promise<void> => {
|
|
2523
2728
|
const ownedTargetKey = targetKey;
|
|
@@ -2595,6 +2800,7 @@ export function useComposer(
|
|
|
2595
2800
|
const clearError = useCallback(() => {
|
|
2596
2801
|
if (targetKeyRef.current !== targetKey) return;
|
|
2597
2802
|
setError(null);
|
|
2803
|
+
setDraftReadError(null);
|
|
2598
2804
|
setDraftConflict(null);
|
|
2599
2805
|
}, [targetKey]);
|
|
2600
2806
|
// `valueRef` is the synchronous composer authority. React state exists to
|
|
@@ -2615,10 +2821,15 @@ export function useComposer(
|
|
|
2615
2821
|
removeAnnotation,
|
|
2616
2822
|
annotationReviewTargetId: identityMatches ? annotationReviewTargetId : null,
|
|
2617
2823
|
clearAnnotationReviewTarget,
|
|
2824
|
+
requestAnnotationReview,
|
|
2618
2825
|
hasDraftContent,
|
|
2619
2826
|
send,
|
|
2620
2827
|
optimisticMessages: visibleOptimisticMessages,
|
|
2621
2828
|
retryOptimisticMessage,
|
|
2829
|
+
restoreOptimisticMessage:
|
|
2830
|
+
!draftLoading && !pendingOperationRef.current && !hasDraftContent()
|
|
2831
|
+
? restoreOptimisticMessage
|
|
2832
|
+
: undefined,
|
|
2622
2833
|
removeOptimisticMessage,
|
|
2623
2834
|
steer,
|
|
2624
2835
|
steering: visibleSteering,
|
|
@@ -2661,7 +2872,7 @@ export function useComposer(
|
|
|
2661
2872
|
resolveDraftConflict,
|
|
2662
2873
|
restoredResources: identityMatches ? restoredResources : [],
|
|
2663
2874
|
removeRestoredResource,
|
|
2664
|
-
error: identityMatches ? error : null,
|
|
2875
|
+
error: identityMatches ? (error ?? draftReadError) : null,
|
|
2665
2876
|
clearError,
|
|
2666
2877
|
};
|
|
2667
2878
|
}
|
|
@@ -2740,7 +2951,25 @@ async function replayOutcomeUnknown<T>(command: () => Promise<T>): Promise<T> {
|
|
|
2740
2951
|
}
|
|
2741
2952
|
|
|
2742
2953
|
function asError(cause: unknown): Error {
|
|
2743
|
-
return
|
|
2954
|
+
return normalizeError(cause);
|
|
2955
|
+
}
|
|
2956
|
+
|
|
2957
|
+
function promptRoutingFromAcceptedEvent(
|
|
2958
|
+
event: SessionEvent | null,
|
|
2959
|
+
): "accepted_for_execution" | "queued_for_execution" | "accepted_for_steering" | null {
|
|
2960
|
+
if (
|
|
2961
|
+
typeof event?.payload !== "object" ||
|
|
2962
|
+
event.payload === null ||
|
|
2963
|
+
Array.isArray(event.payload)
|
|
2964
|
+
) {
|
|
2965
|
+
return null;
|
|
2966
|
+
}
|
|
2967
|
+
const routing = (event.payload as Record<string, unknown>).routing;
|
|
2968
|
+
return routing === "accepted_for_execution" ||
|
|
2969
|
+
routing === "queued_for_execution" ||
|
|
2970
|
+
routing === "accepted_for_steering"
|
|
2971
|
+
? routing
|
|
2972
|
+
: null;
|
|
2744
2973
|
}
|
|
2745
2974
|
|
|
2746
2975
|
function isDraftConflictError(error: Error): boolean {
|