@opengeni/react 1.0.1 → 1.0.2-canary.37202341988001
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 +660 -21
- package/dist/accounts.d.ts +64 -0
- package/dist/accounts.js +822 -0
- package/dist/accounts.js.map +1 -0
- package/dist/approvals.d.ts +2 -1
- package/dist/artifacts-document.js +3 -2
- package/dist/artifacts-presentation.js +3 -2
- package/dist/artifacts-spreadsheet.js +2 -2
- package/dist/artifacts.d.ts +4 -1
- package/dist/artifacts.js +518 -42
- package/dist/artifacts.js.map +1 -1
- package/dist/browser-viewer-SHYKQRNX.js +16 -0
- package/dist/capability-catalog-row.d.ts +20 -0
- package/dist/capability-logo-fallback.d.ts +3 -0
- package/dist/chat-interactive-block-UGBTNB3L.js +11 -0
- package/dist/chat-interactive-block-UGBTNB3L.js.map +1 -0
- package/dist/chunk-26ZNDDLZ.js +453 -0
- package/dist/chunk-26ZNDDLZ.js.map +1 -0
- package/dist/chunk-3CTRFMAK.js +359 -0
- package/dist/chunk-3CTRFMAK.js.map +1 -0
- package/dist/chunk-447JLCBU.js +209 -0
- package/dist/chunk-447JLCBU.js.map +1 -0
- package/dist/chunk-4RVYOY4O.js +379 -0
- package/dist/chunk-4RVYOY4O.js.map +1 -0
- package/dist/chunk-5CVXZA3Y.js +292 -0
- package/dist/chunk-5CVXZA3Y.js.map +1 -0
- package/dist/chunk-5J4FOW6Q.js +108 -0
- package/dist/chunk-5J4FOW6Q.js.map +1 -0
- package/dist/chunk-742CZ3L3.js +481 -0
- package/dist/chunk-742CZ3L3.js.map +1 -0
- package/dist/chunk-A2PI6UMY.js +41 -0
- package/dist/chunk-A2PI6UMY.js.map +1 -0
- package/dist/{chunk-7WCLAEFV.js → chunk-A4UJB2MM.js} +37 -27
- package/dist/chunk-A4UJB2MM.js.map +1 -0
- package/dist/chunk-B3V6TG77.js +41 -0
- package/dist/chunk-B3V6TG77.js.map +1 -0
- package/dist/chunk-BRM6FVZA.js +302 -0
- package/dist/chunk-BRM6FVZA.js.map +1 -0
- package/dist/chunk-C5X5AJXK.js +182 -0
- package/dist/chunk-C5X5AJXK.js.map +1 -0
- package/dist/{chunk-6KLX2RH5.js → chunk-DO544OSV.js} +1075 -79
- package/dist/chunk-DO544OSV.js.map +1 -0
- package/dist/{chunk-R3AZOAB5.js → chunk-DYWBUX5Q.js} +29 -123
- package/dist/chunk-DYWBUX5Q.js.map +1 -0
- package/dist/{chunk-HA46CYQK.js → chunk-EESD3PY3.js} +792 -537
- package/dist/chunk-EESD3PY3.js.map +1 -0
- package/dist/{chunk-5UQPNLIO.js → chunk-EN3YTHKR.js} +4117 -3896
- package/dist/chunk-EN3YTHKR.js.map +1 -0
- package/dist/chunk-ERGYJIBB.js +21 -0
- package/dist/chunk-ERGYJIBB.js.map +1 -0
- package/dist/chunk-FZCP527Y.js +116 -0
- package/dist/chunk-FZCP527Y.js.map +1 -0
- package/dist/chunk-GIMRELBW.js +14 -0
- package/dist/chunk-GIMRELBW.js.map +1 -0
- package/dist/chunk-GYVRFZDY.js +2733 -0
- package/dist/chunk-GYVRFZDY.js.map +1 -0
- package/dist/{chunk-LLOLUHVG.js → chunk-HDJWDK7W.js} +1358 -2746
- package/dist/chunk-HDJWDK7W.js.map +1 -0
- package/dist/chunk-I7IWRQLN.js +1608 -0
- package/dist/chunk-I7IWRQLN.js.map +1 -0
- package/dist/chunk-IT4BJUGF.js +13055 -0
- package/dist/chunk-IT4BJUGF.js.map +1 -0
- package/dist/chunk-IWIDV7SB.js +1 -0
- package/dist/chunk-IWIDV7SB.js.map +1 -0
- package/dist/chunk-J2QWVSQY.js +312 -0
- package/dist/chunk-J2QWVSQY.js.map +1 -0
- package/dist/chunk-J6DBS4T3.js +371 -0
- package/dist/chunk-J6DBS4T3.js.map +1 -0
- package/dist/{chunk-B6WPZSTT.js → chunk-JIQYUGVL.js} +1331 -1163
- package/dist/chunk-JIQYUGVL.js.map +1 -0
- package/dist/chunk-JT4JW7BC.js +54 -0
- package/dist/chunk-JT4JW7BC.js.map +1 -0
- package/dist/chunk-K3HQAKQX.js +24 -0
- package/dist/chunk-K3HQAKQX.js.map +1 -0
- package/dist/{chunk-PEI6RANI.js → chunk-PNY3JKBJ.js} +309 -74
- package/dist/chunk-PNY3JKBJ.js.map +1 -0
- package/dist/chunk-RHREZ7BO.js +11 -0
- package/dist/chunk-RHREZ7BO.js.map +1 -0
- package/dist/chunk-RLUSC2WA.js +299 -0
- package/dist/chunk-RLUSC2WA.js.map +1 -0
- package/dist/{chunk-IGC6A2ZI.js → chunk-RSI7XYXL.js} +777 -246
- package/dist/chunk-RSI7XYXL.js.map +1 -0
- package/dist/chunk-SCOTPE2I.js +589 -0
- package/dist/chunk-SCOTPE2I.js.map +1 -0
- package/dist/{chunk-C5ZPSSS5.js → chunk-TKOTKRWY.js} +5 -4
- package/dist/{chunk-C5ZPSSS5.js.map → chunk-TKOTKRWY.js.map} +1 -1
- package/dist/chunk-TMYGL6X5.js +742 -0
- package/dist/chunk-TMYGL6X5.js.map +1 -0
- package/dist/chunk-UGLEYEMP.js +33 -0
- package/dist/chunk-UGLEYEMP.js.map +1 -0
- package/dist/chunk-UK4TINKT.js +27 -0
- package/dist/chunk-UK4TINKT.js.map +1 -0
- package/dist/chunk-UTRTG6LH.js +220 -0
- package/dist/chunk-UTRTG6LH.js.map +1 -0
- package/dist/chunk-WEHMPOXK.js +39 -0
- package/dist/chunk-WEHMPOXK.js.map +1 -0
- package/dist/chunk-WGXVEJO5.js +319 -0
- package/dist/chunk-WGXVEJO5.js.map +1 -0
- package/dist/chunk-WRHIZYZF.js +988 -0
- package/dist/chunk-WRHIZYZF.js.map +1 -0
- package/dist/{chunk-HUIKIDM5.js → chunk-WUISZ3WU.js} +223 -115
- package/dist/chunk-WUISZ3WU.js.map +1 -0
- package/dist/chunk-XCHWDJ22.js +107 -0
- package/dist/chunk-XCHWDJ22.js.map +1 -0
- package/dist/{chunk-KCGXPP5V.js → chunk-Y2PRMYLC.js} +11 -6
- package/dist/chunk-Y2PRMYLC.js.map +1 -0
- package/dist/chunk-YBXQDQFX.js +1772 -0
- package/dist/chunk-YBXQDQFX.js.map +1 -0
- package/dist/chunk-YM2DE7BQ.js +3124 -0
- package/dist/chunk-YM2DE7BQ.js.map +1 -0
- package/dist/{chunk-KZ73RL76.js → chunk-YQEAA6LT.js} +7 -3
- package/dist/chunk-YQEAA6LT.js.map +1 -0
- package/dist/chunk-YV4L3ILF.js +9 -0
- package/dist/chunk-YV4L3ILF.js.map +1 -0
- package/dist/chunk-ZYRGEKWS.js +216 -0
- package/dist/chunk-ZYRGEKWS.js.map +1 -0
- package/dist/client.d.ts +7 -4
- package/dist/clipboard.js +1 -0
- package/dist/commands/types.d.ts +2 -0
- package/dist/components/anthropic-mark.d.ts +3 -0
- package/dist/components/approval-surface.d.ts +15 -0
- package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
- package/dist/components/artifacts/artifact-sandbox.d.ts +27 -0
- package/dist/components/artifacts/artifact-surface.d.ts +3 -1
- 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 +46 -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 +2 -1
- package/dist/components/artifacts/index.d.ts +8 -1
- 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 +48 -3
- package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
- package/dist/components/artifacts/site-view.d.ts +23 -0
- package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -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 +10 -1
- package/dist/components/chat-composer.d.ts +21 -3
- package/dist/components/child-session-link.d.ts +5 -0
- package/dist/components/claude-mark.d.ts +3 -0
- package/dist/components/code-editor.d.ts +1 -4
- package/dist/components/composer.d.ts +45 -4
- package/dist/components/computer-viewer.d.ts +4 -1
- package/dist/components/copy-button.d.ts +3 -1
- package/dist/components/desktop-viewer.d.ts +1 -1
- package/dist/components/enrollment-consent.d.ts +6 -3
- package/dist/components/file-browser.d.ts +10 -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 +21 -2
- package/dist/components/human-input-surface.d.ts +6 -3
- package/dist/components/machine-card.d.ts +4 -1
- package/dist/components/machines/machine-detail.d.ts +4 -1
- package/dist/components/machines/machine-operation-policy.d.ts +11 -0
- package/dist/components/machines-dashboard.d.ts +3 -1
- package/dist/components/markdown-table-layout.d.ts +12 -0
- package/dist/components/markdown.d.ts +47 -3
- package/dist/components/message-timeline.d.ts +72 -9
- 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 +62 -13
- package/dist/components/open-geni-chat.d.ts +58 -0
- package/dist/components/open-geni-links.d.ts +68 -0
- package/dist/components/openrouter-mark.d.ts +6 -0
- package/dist/components/pierre-file.d.ts +1 -1
- package/dist/components/preview-loading.d.ts +2 -0
- package/dist/components/queue-item-content.d.ts +9 -0
- package/dist/components/sandbox-files.d.ts +13 -2
- package/dist/components/sandbox-workspace.d.ts +43 -3
- package/dist/components/session-capability-frame.d.ts +35 -0
- package/dist/components/session-chrome.d.ts +66 -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 +89 -0
- package/dist/components/session-list.d.ts +36 -0
- package/dist/components/session-mcp-capability-card.d.ts +41 -0
- package/dist/components/session-proxy-scope.d.ts +21 -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/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/components/workspace-dock.d.ts +6 -2
- package/dist/composer.d.ts +5 -4
- package/dist/composer.js +15 -9
- package/dist/computer-viewer-6SRGWRUX.js +19 -0
- package/dist/computer-viewer-6SRGWRUX.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 +16 -0
- package/dist/connect.d.ts +21 -0
- package/dist/connect.js +2129 -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 +26 -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 +14 -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 +21 -0
- package/dist/editor.js.map +1 -0
- package/dist/embedded-session-client.d.ts +23 -0
- package/dist/file-node-visibility.d.ts +15 -0
- package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-YZ3ZKWMM.js} +2 -1
- package/dist/fleet-decision-row-YZ3ZKWMM.js.map +1 -0
- package/dist/hooks/channel-cache.d.ts +23 -0
- package/dist/hooks/latest-question.d.ts +25 -0
- package/dist/hooks/shared-machines-list.d.ts +14 -0
- package/dist/hooks/use-attached-browsers.d.ts +2 -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-channels.d.ts +1 -0
- package/dist/hooks/use-codex-accounts.d.ts +25 -7
- package/dist/hooks/use-composer.d.ts +45 -9
- 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 +2 -0
- package/dist/hooks/use-connect.d.ts +22 -0
- package/dist/hooks/use-desktop-stream.d.ts +1 -1
- package/dist/hooks/use-file-attachments.d.ts +21 -2
- package/dist/hooks/use-machine-chip.d.ts +3 -3
- package/dist/hooks/use-machines.d.ts +19 -1
- package/dist/hooks/use-sandbox-files.d.ts +5 -1
- package/dist/hooks/use-session-background-commands.d.ts +14 -0
- package/dist/hooks/use-session-events.d.ts +30 -8
- package/dist/hooks/use-session-lineage.d.ts +4 -0
- package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
- package/dist/hooks/use-session.d.ts +6 -0
- package/dist/hooks/use-turn-queue.d.ts +12 -0
- package/dist/hooks/use-usage.d.ts +40 -0
- package/dist/hooks/use-workspace-edit.d.ts +4 -0
- package/dist/hooks/use-workspace-sessions.d.ts +27 -5
- package/dist/human-input.d.ts +3 -1
- package/dist/identity-link-accounts.d.ts +11 -0
- package/dist/identity-link-consent.d.ts +18 -0
- package/dist/index.d.ts +60 -17
- package/dist/index.js +2238 -6201
- package/dist/index.js.map +1 -1
- package/dist/interaction.d.ts +1 -1
- package/dist/interaction.js +35 -184
- package/dist/interaction.js.map +1 -1
- package/dist/latest-question-HTRIS4KJ.js +117 -0
- package/dist/latest-question-HTRIS4KJ.js.map +1 -0
- package/dist/lib/error-message.d.ts +7 -0
- package/dist/lib/format.d.ts +36 -2
- package/dist/lib/host-theme.d.ts +70 -0
- package/dist/lib/interaction-errors.d.ts +6 -0
- package/dist/lib/menu-styles.d.ts +22 -0
- package/dist/lib/pierre-diffs-loader.d.ts +20 -0
- package/dist/lib/workbench-peers.d.ts +36 -0
- package/dist/lib/xterm-theme.d.ts +7 -5
- package/dist/machines.d.ts +4 -2
- package/dist/machines.js +14 -4
- package/dist/markdown-table-layout-QXSLK4BY.js +106 -0
- package/dist/markdown-table-layout-QXSLK4BY.js.map +1 -0
- package/dist/mcp-connection-status.d.ts +14 -0
- package/dist/model-policy-picker-menu-M54ISBMN.js +14 -0
- package/dist/model-policy-picker-menu-M54ISBMN.js.map +1 -0
- package/dist/model-policy.d.ts +19 -3
- package/dist/model-policy.js +9 -1
- package/dist/older-history.d.ts +30 -0
- package/dist/platform-activity-row-627BFZ46.js +182 -0
- package/dist/platform-activity-row-627BFZ46.js.map +1 -0
- package/dist/plugin-details.d.ts +14 -0
- package/dist/plugin-discovery.d.ts +25 -0
- package/dist/provider.d.ts +13 -1
- package/dist/{queue-surface-implementation-2KVJTYXH.js → queue-surface-implementation-ZHFI5JBP.js} +131 -44
- package/dist/queue-surface-implementation-ZHFI5JBP.js.map +1 -0
- package/dist/realtime/realtime-control.d.ts +6 -3
- package/dist/realtime.js +133 -74
- package/dist/realtime.js.map +1 -1
- package/dist/sandbox-files-GORZOUUJ.js +20 -0
- package/dist/sandbox-files-GORZOUUJ.js.map +1 -0
- package/dist/session-auth-recommendation.d.ts +5 -0
- package/dist/session-capability-policy.d.ts +12 -0
- package/dist/session-ui.d.ts +30 -2
- package/dist/session-ui.js +85 -7
- package/dist/session-ui.js.map +1 -1
- package/dist/session.d.ts +8 -2
- package/dist/session.js +30 -19
- package/dist/sites-ui.d.ts +34 -0
- package/dist/sites.d.ts +3 -0
- package/dist/sites.js +11 -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 +31 -0
- package/dist/terminal.js.map +1 -0
- package/dist/timeline/activity-rail.d.ts +11 -2
- package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
- package/dist/timeline/compaction-copy.d.ts +10 -0
- package/dist/timeline/entrance.d.ts +13 -1
- package/dist/timeline/genie-loading.d.ts +34 -0
- package/dist/timeline/index.d.ts +6 -2
- package/dist/timeline/knowledge-receipt.d.ts +17 -0
- package/dist/timeline/platform-activity-row.d.ts +14 -0
- package/dist/timeline/presented-image.d.ts +6 -0
- package/dist/timeline/projection.d.ts +31 -2
- package/dist/timeline/registry.d.ts +2 -0
- package/dist/timeline/retained-image.d.ts +18 -0
- package/dist/timeline/rolling-activity.d.ts +11 -0
- package/dist/timeline/screenshot-lightbox.d.ts +16 -1
- package/dist/timeline/shared.d.ts +8 -3
- 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 +2 -1
- package/dist/timeline/turn-summary.d.ts +34 -3
- package/dist/timeline/types.d.ts +147 -7
- package/dist/timeline-annotation-markers-GNDHTGBD.js +165 -0
- package/dist/timeline-annotation-markers-GNDHTGBD.js.map +1 -0
- package/dist/timeline-annotation-selection-DMLMM2TX.js +241 -0
- package/dist/timeline-annotation-selection-DMLMM2TX.js.map +1 -0
- package/dist/timeline-annotations-dialog-ELRDBHTS.js +273 -0
- package/dist/timeline-annotations-dialog-ELRDBHTS.js.map +1 -0
- package/dist/types/machines.d.ts +2 -2
- package/dist/usage/allowance-copy.d.ts +25 -0
- package/dist/usage/summary.d.ts +35 -0
- package/dist/usage.d.ts +13 -0
- package/dist/usage.js +1074 -0
- package/dist/usage.js.map +1 -0
- package/package.json +44 -4
- package/src/accounts.tsx +1072 -0
- package/src/approvals.ts +8 -1
- package/src/artifacts.ts +42 -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 +22 -13
- 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 +171 -37
- package/src/components/artifacts/artifact-chrome.tsx +413 -0
- package/src/components/artifacts/artifact-sandbox.tsx +185 -0
- package/src/components/artifacts/artifact-surface.tsx +39 -19
- 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 +187 -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 +5 -2
- package/src/components/artifacts/index.ts +44 -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 +338 -5
- package/src/components/artifacts/session-artifact-viewer.tsx +376 -0
- package/src/components/artifacts/site-view.tsx +116 -0
- package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
- package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
- package/src/components/artifacts/spreadsheet-grid.tsx +12 -13
- 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 +1054 -314
- package/src/components/chat-composer.tsx +131 -85
- package/src/components/child-session-link.tsx +27 -0
- package/src/components/claude-mark.tsx +10 -0
- package/src/components/code-editor.tsx +13 -16
- package/src/components/composer-transcription-control.tsx +7 -5
- package/src/components/composer.tsx +376 -49
- package/src/components/computer-viewer.tsx +1041 -329
- package/src/components/copy-button.tsx +13 -5
- package/src/components/desktop-viewer.tsx +1 -1
- package/src/components/enrollment-consent.tsx +65 -7
- package/src/components/enrollment-device-flow.tsx +1 -1
- package/src/components/file-browser.tsx +158 -34
- package/src/components/fleet-tile.tsx +8 -16
- package/src/components/generated-video-player.tsx +4 -2
- package/src/components/grok-mark.tsx +33 -0
- package/src/components/human-input-form.tsx +455 -114
- package/src/components/human-input-surface.tsx +18 -7
- package/src/components/interaction-intervention-banner.tsx +2 -2
- package/src/components/machine-card.tsx +119 -4
- package/src/components/machine-dock-bar.tsx +1 -1
- package/src/components/machine-input-display.ts +23 -2
- package/src/components/machines/machine-detail.tsx +52 -2
- package/src/components/machines/machine-operation-policy.tsx +179 -0
- package/src/components/machines-dashboard.tsx +8 -17
- package/src/components/markdown-table-layout.ts +132 -0
- package/src/components/markdown.tsx +473 -44
- package/src/components/message-timeline.tsx +2754 -665
- package/src/components/model-mark.tsx +90 -0
- package/src/components/model-picker.tsx +15 -4
- package/src/components/model-policy-picker-menu.tsx +424 -0
- package/src/components/model-policy-picker.tsx +337 -381
- package/src/components/open-geni-chat.tsx +338 -0
- package/src/components/open-geni-links.tsx +179 -0
- package/src/components/openrouter-mark.tsx +13 -0
- package/src/components/pierre-diff.tsx +41 -16
- package/src/components/pierre-file.tsx +36 -11
- package/src/components/preview-loading.tsx +154 -0
- package/src/components/queue-item-content.ts +14 -0
- package/src/components/queue-surface-implementation.tsx +132 -42
- package/src/components/queue-surface-state.tsx +3 -1
- package/src/components/sandbox-files.tsx +267 -35
- package/src/components/sandbox-terminal.tsx +48 -11
- package/src/components/sandbox-workspace.tsx +337 -135
- package/src/components/session-capability-frame.tsx +192 -0
- package/src/components/session-chrome.tsx +1027 -328
- 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 +526 -0
- package/src/components/session-list.tsx +250 -0
- package/src/components/session-mcp-capability-card.tsx +680 -0
- package/src/components/session-proxy-scope.tsx +92 -0
- package/src/components/session-status.tsx +1 -1
- 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 +70 -7
- 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 +194 -49
- package/src/components/workspace-dock.tsx +141 -175
- 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 +307 -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 +235 -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/embedded-session-client.ts +104 -0
- package/src/file-node-visibility.ts +66 -0
- package/src/hooks/channel-cache.ts +104 -0
- package/src/hooks/internal.ts +3 -2
- package/src/hooks/latest-question.ts +164 -0
- package/src/hooks/shared-machines-list.ts +239 -0
- package/src/hooks/use-attached-browsers.ts +5 -1
- package/src/hooks/use-available-models.ts +20 -14
- package/src/hooks/use-browser-frame-stream.ts +25 -3
- package/src/hooks/use-browser-session.ts +271 -71
- package/src/hooks/use-browser-sessions.ts +7 -1
- package/src/hooks/use-channels.ts +32 -10
- package/src/hooks/use-codex-accounts.ts +78 -21
- package/src/hooks/use-composer.ts +1034 -320
- package/src/hooks/use-computer-frame-stream.ts +39 -16
- package/src/hooks/use-computer-input-posture.ts +94 -0
- package/src/hooks/use-computer-session.ts +110 -32
- package/src/hooks/use-computer-sessions.ts +8 -1
- package/src/hooks/use-connect.ts +23 -0
- package/src/hooks/use-desktop-stream.ts +19 -28
- package/src/hooks/use-file-attachments.ts +118 -10
- package/src/hooks/use-goal.ts +36 -9
- package/src/hooks/use-human-input.ts +31 -4
- package/src/hooks/use-last-started-turn-policy.ts +15 -13
- package/src/hooks/use-machine-chip.ts +23 -6
- package/src/hooks/use-machines.ts +104 -6
- package/src/hooks/use-sandbox-files.ts +253 -150
- package/src/hooks/use-sandbox-git.ts +58 -29
- package/src/hooks/use-session-background-commands.ts +67 -0
- package/src/hooks/use-session-capabilities.ts +21 -2
- package/src/hooks/use-session-events.ts +759 -433
- package/src/hooks/use-session-lineage.ts +28 -6
- package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
- package/src/hooks/use-session.ts +75 -16
- package/src/hooks/use-slash-commands.ts +6 -11
- package/src/hooks/use-turn-queue.ts +113 -13
- package/src/hooks/use-usage.ts +100 -0
- package/src/hooks/use-video-artifact-playback.ts +1 -1
- package/src/hooks/use-voice-input.ts +12 -1
- 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 +99 -11
- package/src/human-input.ts +12 -1
- package/src/identity-link-accounts.tsx +148 -0
- package/src/identity-link-consent.tsx +192 -0
- package/src/index.ts +157 -12
- package/src/interaction.ts +1 -0
- package/src/lib/error-message.ts +37 -0
- package/src/lib/format.ts +150 -14
- package/src/lib/host-theme.ts +511 -0
- package/src/lib/interaction-errors.ts +33 -0
- package/src/lib/menu-styles.ts +44 -0
- package/src/lib/pierre-diffs-loader.ts +53 -0
- package/src/lib/workbench-peers.ts +62 -0
- package/src/lib/xterm-theme.ts +23 -21
- package/src/machines.ts +9 -1
- package/src/mcp-connection-status.ts +35 -0
- package/src/model-policy.ts +223 -69
- package/src/older-history.ts +87 -0
- package/src/plugin-details.tsx +185 -0
- package/src/plugin-discovery.tsx +196 -0
- package/src/provider.tsx +55 -14
- package/src/realtime/dropdown-menu.tsx +19 -12
- package/src/realtime/realtime-control.tsx +133 -46
- package/src/session-auth-recommendation.ts +48 -0
- package/src/session-capability-policy.ts +83 -0
- package/src/session-context.ts +4 -3
- package/src/session-ui.ts +66 -2
- package/src/session.ts +18 -1
- package/src/sites-ui.tsx +402 -0
- package/src/sites.ts +3 -0
- package/src/skill-discovery.tsx +208 -0
- package/src/terminal.ts +26 -0
- package/src/timeline/activity-rail.tsx +171 -80
- package/src/timeline/allowance-exhausted-row.tsx +86 -0
- package/src/timeline/compaction-copy.ts +42 -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/genie-loading.tsx +136 -0
- package/src/timeline/index.ts +11 -0
- package/src/timeline/knowledge-receipt.tsx +100 -0
- package/src/timeline/parsers.ts +2 -2
- package/src/timeline/platform-activity-row.tsx +216 -0
- package/src/timeline/presented-image.ts +49 -0
- package/src/timeline/projection.ts +1609 -84
- package/src/timeline/registry.ts +15 -3
- package/src/timeline/retained-image.ts +97 -0
- package/src/timeline/rolling-activity.tsx +92 -0
- package/src/timeline/screenshot-lightbox.tsx +115 -17
- package/src/timeline/shared.tsx +47 -15
- package/src/timeline/startup-preference.ts +33 -0
- package/src/timeline/startup-timings.tsx +145 -0
- package/src/timeline/tool-display-name.ts +8 -6
- package/src/timeline/tool-renderers.tsx +497 -128
- package/src/timeline/turn-summary.tsx +218 -44
- package/src/timeline/types.ts +192 -7
- package/src/types/machines.ts +10 -0
- package/src/usage/allowance-copy.ts +64 -0
- package/src/usage/summary.ts +93 -0
- package/src/usage.ts +50 -0
- package/styles/compiled.css +2098 -757
- package/styles/connect.css +284 -0
- package/styles/connect.d.ts +1 -0
- package/styles/effective-tokens.css +1 -0
- package/styles/index.css +201 -9
- package/styles/responsive.css +27 -1
- package/styles/session-capability.css +44 -0
- package/styles/tokens.css +135 -65
- package/dist/chunk-5UQPNLIO.js.map +0 -1
- package/dist/chunk-6KLX2RH5.js.map +0 -1
- package/dist/chunk-7WCLAEFV.js.map +0 -1
- package/dist/chunk-B6WPZSTT.js.map +0 -1
- package/dist/chunk-FK6VG4LL.js +0 -90
- package/dist/chunk-FK6VG4LL.js.map +0 -1
- package/dist/chunk-HA46CYQK.js.map +0 -1
- package/dist/chunk-HUIKIDM5.js.map +0 -1
- package/dist/chunk-IGC6A2ZI.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-LLOLUHVG.js.map +0 -1
- package/dist/chunk-MKPIAGVL.js +0 -465
- package/dist/chunk-MKPIAGVL.js.map +0 -1
- package/dist/chunk-PEI6RANI.js.map +0 -1
- package/dist/chunk-R3AZOAB5.js.map +0 -1
- package/dist/chunk-WSK7G5LE.js +0 -170
- package/dist/chunk-WSK7G5LE.js.map +0 -1
- package/dist/chunk-XBZWOM2K.js +0 -218
- package/dist/chunk-XBZWOM2K.js.map +0 -1
- package/dist/chunk-Y7OEDUJ5.js +0 -8810
- package/dist/chunk-Y7OEDUJ5.js.map +0 -1
- package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
- package/dist/hooks/use-packs.d.ts +0 -32
- package/dist/interactive-workbench-viewers-TOHBXJEE.js +0 -15
- package/dist/queue-surface-implementation-2KVJTYXH.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-packs.ts +0 -157
- /package/dist/{interactive-workbench-viewers-TOHBXJEE.js.map → browser-viewer-SHYKQRNX.js.map} +0 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import type { EditableArtifactResource } from "@opengeni/sdk/artifacts";
|
|
2
|
+
import {
|
|
3
|
+
createBrowserEditableArtifactSession,
|
|
4
|
+
type CreateBrowserEditableArtifactSessionOptions,
|
|
5
|
+
type EditableArtifactBrowserRuntime,
|
|
6
|
+
type EditableArtifactCacheAuthority,
|
|
7
|
+
type EditableArtifactModality,
|
|
8
|
+
} from "@opengeni/sdk/editable-artifacts";
|
|
9
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
10
|
+
|
|
11
|
+
import {
|
|
12
|
+
ArtifactLoading,
|
|
13
|
+
ArtifactProblem,
|
|
14
|
+
artifactLoadErrorView,
|
|
15
|
+
useArtifactLabels,
|
|
16
|
+
type ArtifactLoadErrorView,
|
|
17
|
+
} from "./artifact-chrome";
|
|
18
|
+
import { EditableArtifactWorkbenchHost } from "./editable-artifact-workbench";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The browser kernels an editor needs, one per modality, plus the host-built
|
|
22
|
+
* Worker URL (for Vite: `@opengeni/sdk/editable-artifacts/worker?worker&url`).
|
|
23
|
+
* Kernels come from `@opengeni/artifact-kernel-wasm-{document,spreadsheet,presentation}`.
|
|
24
|
+
*/
|
|
25
|
+
export type EditableArtifactRuntimes = Readonly<{
|
|
26
|
+
document: Omit<EditableArtifactBrowserRuntime, "workerUrl" | "workerFactory">;
|
|
27
|
+
spreadsheet: Omit<EditableArtifactBrowserRuntime, "workerUrl" | "workerFactory">;
|
|
28
|
+
presentation: Omit<EditableArtifactBrowserRuntime, "workerUrl" | "workerFactory">;
|
|
29
|
+
workerUrl: string;
|
|
30
|
+
applicationOrigin?: string | undefined;
|
|
31
|
+
/** Loopback development only. */
|
|
32
|
+
allowInsecureDevelopmentAssets?: boolean | undefined;
|
|
33
|
+
}>;
|
|
34
|
+
|
|
35
|
+
/** Everything needed to open one artifact for the current principal. */
|
|
36
|
+
export type OpenedEditableArtifact = Readonly<{
|
|
37
|
+
artifact: EditableArtifactResource;
|
|
38
|
+
authority: EditableArtifactCacheAuthority;
|
|
39
|
+
replicaId: string;
|
|
40
|
+
}>;
|
|
41
|
+
|
|
42
|
+
export type EditableArtifactViewProps = Readonly<{
|
|
43
|
+
/** Absolute API (or session proxy) base the live transport talks to. */
|
|
44
|
+
baseUrl: URL;
|
|
45
|
+
workspaceId: string;
|
|
46
|
+
artifactId: string;
|
|
47
|
+
/** Resolve metadata, cache authority, and replica; called again on retry. */
|
|
48
|
+
open: (signal: AbortSignal) => Promise<OpenedEditableArtifact>;
|
|
49
|
+
runtimes: EditableArtifactRuntimes;
|
|
50
|
+
transport?: CreateBrowserEditableArtifactSessionOptions["transport"];
|
|
51
|
+
/** Show the editor's own title header (hosts with their own header hide it). */
|
|
52
|
+
showHeader?: boolean | undefined;
|
|
53
|
+
/** Re-open when this changes (for example the host's credential version). */
|
|
54
|
+
authorityKey?: string | undefined;
|
|
55
|
+
describeError?: ((error: unknown) => ArtifactLoadErrorView) | undefined;
|
|
56
|
+
onTitle?: ((title: string) => void) | undefined;
|
|
57
|
+
/** Loading copy; defaults to the `opening` label. */
|
|
58
|
+
loadingLabel?: string | undefined;
|
|
59
|
+
}>;
|
|
60
|
+
|
|
61
|
+
type LoadState =
|
|
62
|
+
| Readonly<{ key: string | null; kind: "loading" }>
|
|
63
|
+
| Readonly<{ key: string; kind: "ready"; value: OpenedEditableArtifact }>
|
|
64
|
+
| Readonly<{ key: string; kind: "error"; error: unknown }>;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* One editable document, spreadsheet, or presentation with its first-party
|
|
68
|
+
* editor. The console dock/page and embedding hosts supply only data access.
|
|
69
|
+
*/
|
|
70
|
+
export function EditableArtifactView({
|
|
71
|
+
baseUrl,
|
|
72
|
+
workspaceId,
|
|
73
|
+
artifactId,
|
|
74
|
+
open,
|
|
75
|
+
runtimes,
|
|
76
|
+
transport,
|
|
77
|
+
showHeader = true,
|
|
78
|
+
authorityKey,
|
|
79
|
+
describeError,
|
|
80
|
+
onTitle,
|
|
81
|
+
loadingLabel,
|
|
82
|
+
}: EditableArtifactViewProps) {
|
|
83
|
+
const [loadEpoch, setLoadEpoch] = useState(0);
|
|
84
|
+
const labels = useArtifactLabels();
|
|
85
|
+
const loadKey = JSON.stringify([artifactId, authorityKey, baseUrl.href, workspaceId, loadEpoch]);
|
|
86
|
+
const [state, setState] = useState<LoadState>({ key: null, kind: "loading" });
|
|
87
|
+
const current = state.key === loadKey ? state : null;
|
|
88
|
+
const openRef = useRef(open);
|
|
89
|
+
openRef.current = open;
|
|
90
|
+
const onTitleRef = useRef(onTitle);
|
|
91
|
+
onTitleRef.current = onTitle;
|
|
92
|
+
useEffect(() => {
|
|
93
|
+
const abort = new AbortController();
|
|
94
|
+
setState({ key: loadKey, kind: "loading" });
|
|
95
|
+
void openRef
|
|
96
|
+
.current(abort.signal)
|
|
97
|
+
.then((value) => {
|
|
98
|
+
if (abort.signal.aborted) return;
|
|
99
|
+
setState({ key: loadKey, kind: "ready", value });
|
|
100
|
+
onTitleRef.current?.(value.artifact.title);
|
|
101
|
+
})
|
|
102
|
+
.catch((error: unknown) => {
|
|
103
|
+
if (!abort.signal.aborted) setState({ key: loadKey, kind: "error", error });
|
|
104
|
+
});
|
|
105
|
+
return () => abort.abort();
|
|
106
|
+
}, [loadKey]);
|
|
107
|
+
|
|
108
|
+
const ready = current?.kind === "ready" ? current.value : null;
|
|
109
|
+
const transportRef = useRef(transport);
|
|
110
|
+
transportRef.current = transport;
|
|
111
|
+
const sessionKey = useMemo(
|
|
112
|
+
() =>
|
|
113
|
+
ready
|
|
114
|
+
? JSON.stringify({
|
|
115
|
+
baseUrl: baseUrl.href,
|
|
116
|
+
authorityKey,
|
|
117
|
+
workspaceId,
|
|
118
|
+
artifact: { id: ready.artifact.id, modality: ready.artifact.modality },
|
|
119
|
+
authority: ready.authority,
|
|
120
|
+
replicaId: ready.replicaId,
|
|
121
|
+
workerUrl: runtimes.workerUrl,
|
|
122
|
+
})
|
|
123
|
+
: "",
|
|
124
|
+
[authorityKey, baseUrl.href, ready, runtimes.workerUrl, workspaceId],
|
|
125
|
+
);
|
|
126
|
+
const createSession = useCallback(() => {
|
|
127
|
+
if (!ready) throw new Error("Artifact is not open");
|
|
128
|
+
return createBrowserEditableArtifactSession({
|
|
129
|
+
baseUrl,
|
|
130
|
+
workspaceId,
|
|
131
|
+
artifact: ready.artifact,
|
|
132
|
+
storageAuthority: ready.authority,
|
|
133
|
+
replicaId: ready.replicaId,
|
|
134
|
+
runtime: {
|
|
135
|
+
...runtimeFor(runtimes, ready.artifact.modality),
|
|
136
|
+
workerUrl: runtimes.workerUrl,
|
|
137
|
+
...(runtimes.applicationOrigin ? { applicationOrigin: runtimes.applicationOrigin } : {}),
|
|
138
|
+
...(runtimes.allowInsecureDevelopmentAssets
|
|
139
|
+
? { allowInsecureDevelopmentAssets: true }
|
|
140
|
+
: {}),
|
|
141
|
+
},
|
|
142
|
+
...(transportRef.current ? { transport: transportRef.current } : {}),
|
|
143
|
+
});
|
|
144
|
+
}, [baseUrl, ready, runtimes, workspaceId]);
|
|
145
|
+
|
|
146
|
+
if (!current || current.kind === "loading")
|
|
147
|
+
return <ArtifactLoading label={loadingLabel ?? labels.opening} />;
|
|
148
|
+
if (current.kind === "error") {
|
|
149
|
+
return (
|
|
150
|
+
<ArtifactProblem
|
|
151
|
+
view={
|
|
152
|
+
describeError
|
|
153
|
+
? describeError(current.error)
|
|
154
|
+
: artifactLoadErrorView(current.error, "editable", labels)
|
|
155
|
+
}
|
|
156
|
+
onRetry={() => setLoadEpoch((value) => value + 1)}
|
|
157
|
+
/>
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
const { artifact } = current.value;
|
|
161
|
+
const surface = { title: artifact.title, showHeader };
|
|
162
|
+
return (
|
|
163
|
+
<div className="h-full min-h-0 bg-og-bg text-og-fg">
|
|
164
|
+
<EditableArtifactWorkbenchHost
|
|
165
|
+
sessionKey={sessionKey}
|
|
166
|
+
createSession={createSession}
|
|
167
|
+
document={surface}
|
|
168
|
+
spreadsheet={surface}
|
|
169
|
+
presentation={surface}
|
|
170
|
+
/>
|
|
171
|
+
</div>
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function runtimeFor(
|
|
176
|
+
runtimes: EditableArtifactRuntimes,
|
|
177
|
+
modality: EditableArtifactModality,
|
|
178
|
+
): Omit<EditableArtifactBrowserRuntime, "workerUrl" | "workerFactory"> {
|
|
179
|
+
switch (modality) {
|
|
180
|
+
case "document":
|
|
181
|
+
return runtimes.document;
|
|
182
|
+
case "spreadsheet":
|
|
183
|
+
return runtimes.spreadsheet;
|
|
184
|
+
case "presentation":
|
|
185
|
+
return runtimes.presentation;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
} from "@opengeni/sdk/editable-artifacts";
|
|
7
7
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
8
8
|
|
|
9
|
+
import { useArtifactLabels } from "./artifact-chrome";
|
|
9
10
|
import { EditableArtifactMessage } from "./editable-artifact-ui";
|
|
10
11
|
import {
|
|
11
12
|
EditableDocumentArtifactSurface,
|
|
@@ -133,6 +134,7 @@ export function EditableArtifactWorkbenchHost({
|
|
|
133
134
|
}, [retryEpoch, sessionKey]);
|
|
134
135
|
|
|
135
136
|
const retry = useCallback(() => setRetryEpoch((value) => value + 1), []);
|
|
137
|
+
const labels = useArtifactLabels();
|
|
136
138
|
const currentError = state.key === sessionKey ? state.error : null;
|
|
137
139
|
if (state.key === sessionKey && state.session) {
|
|
138
140
|
return (
|
|
@@ -146,9 +148,10 @@ export function EditableArtifactWorkbenchHost({
|
|
|
146
148
|
}
|
|
147
149
|
return (
|
|
148
150
|
<EditableArtifactMessage
|
|
149
|
-
title={currentError ?
|
|
150
|
-
detail={currentError?.message ??
|
|
151
|
+
title={currentError ? labels.editableErrors.transient.title : labels.opening}
|
|
152
|
+
detail={currentError?.message ?? labels.startingEditor}
|
|
151
153
|
retry={currentError ? retry : undefined}
|
|
154
|
+
retryLabel={labels.retry}
|
|
152
155
|
/>
|
|
153
156
|
);
|
|
154
157
|
}
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
type EditableArtifactSession,
|
|
10
10
|
} from "@opengeni/sdk/editable-artifacts";
|
|
11
11
|
import { type ReactNode, useCallback, useEffect, useRef, useState } from "react";
|
|
12
|
+
import { useLatestTaskRunner } from "./latest-task-runner";
|
|
12
13
|
|
|
13
14
|
import {
|
|
14
15
|
DocumentProjectionArtifactSurface,
|
|
@@ -70,6 +71,7 @@ type DocumentCommandState = {
|
|
|
70
71
|
export function EditableDocumentArtifactSurface({
|
|
71
72
|
session,
|
|
72
73
|
title,
|
|
74
|
+
showHeader,
|
|
73
75
|
subtitle,
|
|
74
76
|
readOnly = false,
|
|
75
77
|
onCommit,
|
|
@@ -86,6 +88,7 @@ export function EditableDocumentArtifactSurface({
|
|
|
86
88
|
error: null,
|
|
87
89
|
});
|
|
88
90
|
const loadGeneration = useRef(0);
|
|
91
|
+
const scheduleLoad = useLatestTaskRunner(session);
|
|
89
92
|
const commandStateRef = useRef<DocumentCommandState | null>(null);
|
|
90
93
|
if (commandStateRef.current?.session !== session) {
|
|
91
94
|
commandStateRef.current = {
|
|
@@ -106,45 +109,41 @@ export function EditableDocumentArtifactSurface({
|
|
|
106
109
|
? { ...current, loading: true, error: null }
|
|
107
110
|
: { session, projection: null, loading: true, error: null },
|
|
108
111
|
);
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
error: asEditableArtifactError(cause, "Could not open this document"),
|
|
141
|
-
});
|
|
142
|
-
},
|
|
143
|
-
);
|
|
112
|
+
const superseded = () =>
|
|
113
|
+
cancelled ||
|
|
114
|
+
generation !== loadGeneration.current ||
|
|
115
|
+
commandStateRef.current !== commandState;
|
|
116
|
+
scheduleLoad(async () => {
|
|
117
|
+
if (superseded()) return;
|
|
118
|
+
await composeDocumentEditorProjection(session).then(
|
|
119
|
+
(projection) => {
|
|
120
|
+
if (superseded()) return;
|
|
121
|
+
const nextParagraphText = paragraphTextById(projection);
|
|
122
|
+
for (const [localId, canonicalId] of commandState.optimisticParagraphIds) {
|
|
123
|
+
if (nextParagraphText.has(canonicalId)) continue;
|
|
124
|
+
const optimisticText =
|
|
125
|
+
commandState.paragraphText.get(canonicalId) ??
|
|
126
|
+
commandState.paragraphText.get(localId);
|
|
127
|
+
if (optimisticText !== undefined) nextParagraphText.set(canonicalId, optimisticText);
|
|
128
|
+
}
|
|
129
|
+
commandState.paragraphText = nextParagraphText;
|
|
130
|
+
setState({ session, projection, loading: false, error: null });
|
|
131
|
+
},
|
|
132
|
+
(cause) => {
|
|
133
|
+
if (superseded()) return;
|
|
134
|
+
setState({
|
|
135
|
+
session,
|
|
136
|
+
projection: null,
|
|
137
|
+
loading: false,
|
|
138
|
+
error: asEditableArtifactError(cause, "Could not open this document"),
|
|
139
|
+
});
|
|
140
|
+
},
|
|
141
|
+
);
|
|
142
|
+
});
|
|
144
143
|
return () => {
|
|
145
144
|
cancelled = true;
|
|
146
145
|
};
|
|
147
|
-
}, [commandState, invalidator, retryEpoch, session]);
|
|
146
|
+
}, [commandState, invalidator, retryEpoch, scheduleLoad, session]);
|
|
148
147
|
|
|
149
148
|
const refresh = useCallback(() => setRetryEpoch((value) => value + 1), []);
|
|
150
149
|
const writable = !readOnly && view.writable;
|
|
@@ -260,6 +259,7 @@ export function EditableDocumentArtifactSurface({
|
|
|
260
259
|
<DocumentProjectionArtifactSurface
|
|
261
260
|
{...surfaceProps}
|
|
262
261
|
title={title}
|
|
262
|
+
showHeader={showHeader}
|
|
263
263
|
subtitle={
|
|
264
264
|
subtitle ??
|
|
265
265
|
`${projection.blocks.length} block${projection.blocks.length === 1 ? "" : "s"}${writable ? "" : " · Read only"}`
|
|
@@ -274,6 +274,7 @@ export function EditableDocumentArtifactSurface({
|
|
|
274
274
|
<ArtifactSurface
|
|
275
275
|
modality="document"
|
|
276
276
|
title={title}
|
|
277
|
+
showHeader={showHeader}
|
|
277
278
|
subtitle={subtitle ?? status}
|
|
278
279
|
busy={!accessRevoked && !state.error}
|
|
279
280
|
className={surfaceProps.className}
|
|
@@ -33,6 +33,7 @@ import {
|
|
|
33
33
|
type PresentationSlideProjection,
|
|
34
34
|
} from "./presentation-editor";
|
|
35
35
|
import { ArtifactSurface } from "./artifact-surface";
|
|
36
|
+
import { useLatestTaskRunner } from "./latest-task-runner";
|
|
36
37
|
import {
|
|
37
38
|
asEditableArtifactError,
|
|
38
39
|
editableArtifactAccessRevoked,
|
|
@@ -62,7 +63,7 @@ const DEFAULT_PRESENTATION_TEXT_STYLE: PresentationArtifactTextStyle = Object.fr
|
|
|
62
63
|
|
|
63
64
|
export type EditablePresentationArtifactSurfaceProps = Omit<
|
|
64
65
|
PresentationProjectionArtifactSurfaceProps,
|
|
65
|
-
"projection" | "commit" | "readOnly" | "busy" | "subtitle"
|
|
66
|
+
"projection" | "commit" | "readOnly" | "busy" | "subtitle" | "authoringBlockedReason"
|
|
66
67
|
> & {
|
|
67
68
|
session: EditableArtifactSession;
|
|
68
69
|
subtitle?: ReactNode | undefined;
|
|
@@ -89,6 +90,7 @@ type PresentationProjectionState = {
|
|
|
89
90
|
export function EditablePresentationArtifactSurface({
|
|
90
91
|
session,
|
|
91
92
|
title = "Presentation",
|
|
93
|
+
showHeader,
|
|
92
94
|
subtitle,
|
|
93
95
|
readOnly = false,
|
|
94
96
|
onCommit,
|
|
@@ -104,31 +106,35 @@ export function EditablePresentationArtifactSurface({
|
|
|
104
106
|
error: null,
|
|
105
107
|
});
|
|
106
108
|
const loadGeneration = useRef(0);
|
|
109
|
+
const scheduleLoad = useLatestTaskRunner(session);
|
|
107
110
|
const sceneNodes = useRef(new Map<string, PresentationArtifactEditorSceneNode>());
|
|
108
111
|
|
|
109
112
|
useEffect(() => {
|
|
110
113
|
const generation = ++loadGeneration.current;
|
|
111
114
|
let cancelled = false;
|
|
112
115
|
setState((current) => ({ ...current, loading: true, error: null }));
|
|
113
|
-
|
|
114
|
-
(
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
116
|
+
scheduleLoad(async () => {
|
|
117
|
+
if (cancelled || generation !== loadGeneration.current) return;
|
|
118
|
+
await composePresentationEditorProjection(session).then(
|
|
119
|
+
(composed) => {
|
|
120
|
+
if (cancelled || generation !== loadGeneration.current) return;
|
|
121
|
+
sceneNodes.current = new Map(composed.sceneNodes);
|
|
122
|
+
setState({ composed, loading: false, error: null });
|
|
123
|
+
},
|
|
124
|
+
(cause) => {
|
|
125
|
+
if (cancelled || generation !== loadGeneration.current) return;
|
|
126
|
+
setState({
|
|
127
|
+
composed: null,
|
|
128
|
+
loading: false,
|
|
129
|
+
error: asEditableArtifactError(cause, "Could not open this presentation"),
|
|
130
|
+
});
|
|
131
|
+
},
|
|
132
|
+
);
|
|
133
|
+
});
|
|
128
134
|
return () => {
|
|
129
135
|
cancelled = true;
|
|
130
136
|
};
|
|
131
|
-
}, [invalidator, retryEpoch, session]);
|
|
137
|
+
}, [invalidator, retryEpoch, scheduleLoad, session]);
|
|
132
138
|
|
|
133
139
|
const refresh = useCallback(() => setRetryEpoch((value) => value + 1), []);
|
|
134
140
|
const writable = !readOnly && view.writable;
|
|
@@ -137,6 +143,7 @@ export function EditablePresentationArtifactSurface({
|
|
|
137
143
|
const composed = state.composed;
|
|
138
144
|
if (!composed) throw new Error("Presentation projection is not ready");
|
|
139
145
|
if (!writable) throw new Error("This presentation is read only");
|
|
146
|
+
if (view.authoringBlockedReason) throw new Error("An earlier change must settle first");
|
|
140
147
|
if (
|
|
141
148
|
commit.revision !== undefined &&
|
|
142
149
|
String(commit.revision) !== String(composed.projection.revision)
|
|
@@ -256,7 +263,15 @@ export function EditablePresentationArtifactSurface({
|
|
|
256
263
|
notifyPresentationCommit(onCommit, onCommandError, commit);
|
|
257
264
|
refresh();
|
|
258
265
|
},
|
|
259
|
-
[
|
|
266
|
+
[
|
|
267
|
+
onCommandError,
|
|
268
|
+
onCommit,
|
|
269
|
+
refresh,
|
|
270
|
+
session,
|
|
271
|
+
state.composed,
|
|
272
|
+
view.authoringBlockedReason,
|
|
273
|
+
writable,
|
|
274
|
+
],
|
|
260
275
|
);
|
|
261
276
|
|
|
262
277
|
const projection = state.composed?.projection ?? null;
|
|
@@ -266,6 +281,7 @@ export function EditablePresentationArtifactSurface({
|
|
|
266
281
|
<PresentationProjectionArtifactSurface
|
|
267
282
|
{...surfaceProps}
|
|
268
283
|
title={title}
|
|
284
|
+
showHeader={showHeader}
|
|
269
285
|
subtitle={
|
|
270
286
|
subtitle ??
|
|
271
287
|
`${projection.slides.length} slide${projection.slides.length === 1 ? "" : "s"}${writable ? "" : " · Read only"}`
|
|
@@ -273,6 +289,7 @@ export function EditablePresentationArtifactSurface({
|
|
|
273
289
|
projection={projection}
|
|
274
290
|
commit={writable ? applyCommit : undefined}
|
|
275
291
|
readOnly={!writable}
|
|
292
|
+
authoringBlockedReason={view.authoringBlockedReason}
|
|
276
293
|
busy={state.loading}
|
|
277
294
|
onCommandError={onCommandError}
|
|
278
295
|
/>
|
|
@@ -280,6 +297,7 @@ export function EditablePresentationArtifactSurface({
|
|
|
280
297
|
<ArtifactSurface
|
|
281
298
|
modality="presentation"
|
|
282
299
|
title={title}
|
|
300
|
+
showHeader={showHeader}
|
|
283
301
|
subtitle={subtitle ?? status}
|
|
284
302
|
actions={surfaceProps.actions}
|
|
285
303
|
busy={!accessRevoked && !state.error}
|
|
@@ -62,6 +62,7 @@ export type EditableSpreadsheetArtifactSurfaceProps = Omit<
|
|
|
62
62
|
"metadataRevision" | "sheet"
|
|
63
63
|
> & {
|
|
64
64
|
title?: string | undefined;
|
|
65
|
+
showHeader?: boolean | undefined;
|
|
65
66
|
subtitle?: ReactNode | undefined;
|
|
66
67
|
actions?: ReactNode | undefined;
|
|
67
68
|
initialSheetId?: string | undefined;
|
|
@@ -311,6 +312,7 @@ export function EditableSpreadsheetGrid({
|
|
|
311
312
|
export function EditableSpreadsheetArtifactSurface({
|
|
312
313
|
session,
|
|
313
314
|
title = "Workbook",
|
|
315
|
+
showHeader,
|
|
314
316
|
subtitle,
|
|
315
317
|
actions,
|
|
316
318
|
initialSheetId,
|
|
@@ -392,6 +394,7 @@ export function EditableSpreadsheetArtifactSurface({
|
|
|
392
394
|
<ArtifactSurface
|
|
393
395
|
modality="spreadsheet"
|
|
394
396
|
title={title}
|
|
397
|
+
showHeader={showHeader}
|
|
395
398
|
subtitle={
|
|
396
399
|
subtitle ??
|
|
397
400
|
(accessRevoked
|
|
@@ -429,7 +432,7 @@ export function EditableSpreadsheetArtifactSurface({
|
|
|
429
432
|
type="button"
|
|
430
433
|
onClick={() => void addSheet()}
|
|
431
434
|
disabled={creatingSheet}
|
|
432
|
-
className="mt-3 rounded-og-sm bg-og-
|
|
435
|
+
className="mt-3 rounded-og-sm border border-og-primary-border bg-og-primary text-og-primary-fg px-3 py-1.5 text-og-sm font-medium hover:bg-og-primary-hover outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent disabled:opacity-50"
|
|
433
436
|
>
|
|
434
437
|
{creatingSheet ? "Adding…" : "Add worksheet"}
|
|
435
438
|
</button>
|
|
@@ -651,7 +654,7 @@ function spreadsheetCellInput(
|
|
|
651
654
|
input: string,
|
|
652
655
|
kind: SpreadsheetCommit["kind"],
|
|
653
656
|
): SpreadsheetCellInput {
|
|
654
|
-
if (kind === "formula") return { formula: input
|
|
657
|
+
if (kind === "formula") return { formula: input };
|
|
655
658
|
if (input === "") return null;
|
|
656
659
|
const normalized = input.trim();
|
|
657
660
|
if (/^(?:true|false)$/i.test(normalized)) return normalized.toLowerCase() === "true";
|
|
@@ -1,3 +1,44 @@
|
|
|
1
|
+
export {
|
|
2
|
+
ArtifactBadge,
|
|
3
|
+
ArtifactLabelsProvider,
|
|
4
|
+
DEFAULT_ARTIFACT_LABELS,
|
|
5
|
+
useArtifactLabels,
|
|
6
|
+
type ArtifactLabels,
|
|
7
|
+
ArtifactButton,
|
|
8
|
+
ArtifactLoading,
|
|
9
|
+
ArtifactProblem,
|
|
10
|
+
ArtifactSelect,
|
|
11
|
+
ArtifactViewerHeader,
|
|
12
|
+
artifactKindIcon,
|
|
13
|
+
artifactKindSubtitle,
|
|
14
|
+
artifactLoadErrorMessage,
|
|
15
|
+
artifactLoadErrorView,
|
|
16
|
+
type ArtifactKind,
|
|
17
|
+
type ArtifactLoadErrorKind,
|
|
18
|
+
type ArtifactLoadErrorView,
|
|
19
|
+
} from "./artifact-chrome";
|
|
20
|
+
export { ArtifactSandbox, type ArtifactSandboxProps } from "./artifact-sandbox";
|
|
21
|
+
export { DeferredChatMedia } from "./deferred-chat-media";
|
|
22
|
+
export {
|
|
23
|
+
ChatInteractiveBlock,
|
|
24
|
+
type ChatInteractiveBlockProps,
|
|
25
|
+
type SiteSnapshotClient,
|
|
26
|
+
type SiteToolBridgeFactory,
|
|
27
|
+
type SiteToolScope,
|
|
28
|
+
} from "./chat-interactive-block";
|
|
29
|
+
export { SiteView, type SiteViewProps } from "./site-view";
|
|
30
|
+
export {
|
|
31
|
+
EditableArtifactView,
|
|
32
|
+
type EditableArtifactRuntimes,
|
|
33
|
+
type EditableArtifactViewProps,
|
|
34
|
+
type OpenedEditableArtifact,
|
|
35
|
+
} from "./editable-artifact-view";
|
|
36
|
+
export {
|
|
37
|
+
SessionArtifactViewer,
|
|
38
|
+
type SessionArtifactTarget,
|
|
39
|
+
type SessionArtifactViewerLabels,
|
|
40
|
+
type SessionArtifactViewerProps,
|
|
41
|
+
} from "./session-artifact-viewer";
|
|
1
42
|
export {
|
|
2
43
|
ArtifactSurface,
|
|
3
44
|
type ArtifactModality,
|
|
@@ -6,7 +47,10 @@ export {
|
|
|
6
47
|
export {
|
|
7
48
|
PUBLISHED_HTML_ARTIFACT_IFRAME_SANDBOX,
|
|
8
49
|
PublishedHtmlArtifactFrame,
|
|
50
|
+
openGeniSiteBridgePortFromBootstrap,
|
|
51
|
+
publishedHtmlArtifactDocument,
|
|
9
52
|
type PublishedHtmlArtifactFrameProps,
|
|
53
|
+
type PublishedHtmlArtifactToolBridge,
|
|
10
54
|
} from "./published-html-artifact-frame";
|
|
11
55
|
export {
|
|
12
56
|
SpreadsheetArtifactSurface,
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { VISUALIZATION_CSS, VISUALIZATION_HELPERS } from "./visualization-assets.gen";
|
|
2
|
+
|
|
3
|
+
/** Conversation styling/helpers only. Rendering and tool transport remain in the Site frame. */
|
|
4
|
+
export function inlineHtmlDocument(fragment: string): string {
|
|
5
|
+
return (
|
|
6
|
+
'<!doctype html><html><head><meta name="viewport" content="width=device-width,initial-scale=1"><style>' +
|
|
7
|
+
VISUALIZATION_CSS +
|
|
8
|
+
"</style><style>html,body{margin:0;min-height:0}body{padding:16px;box-sizing:border-box}</style></head><body>" +
|
|
9
|
+
fragment +
|
|
10
|
+
VISUALIZATION_HELPERS +
|
|
11
|
+
`<script>
|
|
12
|
+
(()=>{
|
|
13
|
+
window.addEventListener('message',event=>{
|
|
14
|
+
if(event.source!==parent||event.data?.type!=='opengeni.preview.theme')return;
|
|
15
|
+
if(event.data.theme==='light'||event.data.theme==='dark')document.documentElement.style.colorScheme=event.data.theme;
|
|
16
|
+
previous=0;resize();
|
|
17
|
+
});
|
|
18
|
+
let previous=0;
|
|
19
|
+
const resize=()=>{const height=Math.ceil(document.body.getBoundingClientRect().height);if(height!==previous){previous=height;parent.postMessage({type:'opengeni.preview.height',height},'*')}};
|
|
20
|
+
new ResizeObserver(resize).observe(document.body);resize();
|
|
21
|
+
})();
|
|
22
|
+
</script></body></html>`
|
|
23
|
+
);
|
|
24
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { useRef } from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Runs one task at a time; a task scheduled while another runs replaces any
|
|
5
|
+
* task still waiting, so only the newest request starts next. Editors use it
|
|
6
|
+
* for projection loads: replaying a long history emits one revision per
|
|
7
|
+
* committed transaction, and composing a projection for each of them at once
|
|
8
|
+
* would overrun the artifact Worker's bounded request queue.
|
|
9
|
+
*/
|
|
10
|
+
export function createLatestTaskRunner(): (task: () => Promise<void>) => void {
|
|
11
|
+
let running = false;
|
|
12
|
+
let waiting: (() => Promise<void>) | null = null;
|
|
13
|
+
const drain = async () => {
|
|
14
|
+
running = true;
|
|
15
|
+
try {
|
|
16
|
+
while (waiting) {
|
|
17
|
+
const task = waiting;
|
|
18
|
+
waiting = null;
|
|
19
|
+
try {
|
|
20
|
+
await task();
|
|
21
|
+
} catch {
|
|
22
|
+
// Tasks settle their own errors; one failure must not stall the next.
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
} finally {
|
|
26
|
+
running = false;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
return (task) => {
|
|
30
|
+
waiting = task;
|
|
31
|
+
if (!running) void drain();
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* One runner per artifact session. A composition still pending on a replaced
|
|
37
|
+
* session (for example one whose Worker stopped answering) must never hold up
|
|
38
|
+
* the next session's first load, so the runner is scoped to the session object
|
|
39
|
+
* rather than to the component.
|
|
40
|
+
*/
|
|
41
|
+
export function useLatestTaskRunner(session: object): (task: () => Promise<void>) => void {
|
|
42
|
+
const runner = useRef<{ session: object; schedule: (task: () => Promise<void>) => void } | null>(
|
|
43
|
+
null,
|
|
44
|
+
);
|
|
45
|
+
if (runner.current?.session !== session) {
|
|
46
|
+
runner.current = { session, schedule: createLatestTaskRunner() };
|
|
47
|
+
}
|
|
48
|
+
return runner.current.schedule;
|
|
49
|
+
}
|