@opengeni/react 1.0.1 → 1.0.2-canary.37191796234001
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 +651 -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-GTR5XQ7X.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-5UQPNLIO.js → chunk-23J2ZNXT.js} +4117 -3896
- package/dist/chunk-23J2ZNXT.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-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-CR7U7HAR.js +453 -0
- package/dist/chunk-CR7U7HAR.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-E3G7SAYZ.js +3124 -0
- package/dist/chunk-E3G7SAYZ.js.map +1 -0
- package/dist/chunk-ELCE5SXV.js +359 -0
- package/dist/chunk-ELCE5SXV.js.map +1 -0
- package/dist/chunk-ERGYJIBB.js +21 -0
- package/dist/chunk-ERGYJIBB.js.map +1 -0
- package/dist/chunk-FFA2OVOV.js +319 -0
- package/dist/chunk-FFA2OVOV.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-6KLX2RH5.js → chunk-H2NJQORO.js} +1069 -79
- package/dist/chunk-H2NJQORO.js.map +1 -0
- package/dist/chunk-I7IWRQLN.js +1608 -0
- package/dist/chunk-I7IWRQLN.js.map +1 -0
- package/dist/{chunk-HA46CYQK.js → chunk-IQUCRAT7.js} +792 -537
- package/dist/chunk-IQUCRAT7.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-JFNEV4LU.js +2733 -0
- package/dist/chunk-JFNEV4LU.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-C5ZPSSS5.js → chunk-NEXLLTP4.js} +2 -1
- package/dist/{chunk-C5ZPSSS5.js.map → chunk-NEXLLTP4.js.map} +1 -1
- package/dist/chunk-NZUI76EM.js +371 -0
- package/dist/chunk-NZUI76EM.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-IGC6A2ZI.js → chunk-Q5QBEZIQ.js} +777 -246
- package/dist/chunk-Q5QBEZIQ.js.map +1 -0
- package/dist/chunk-RHREZ7BO.js +11 -0
- package/dist/chunk-RHREZ7BO.js.map +1 -0
- package/dist/chunk-SCOTPE2I.js +589 -0
- package/dist/chunk-SCOTPE2I.js.map +1 -0
- package/dist/{chunk-B6WPZSTT.js → chunk-SJZDKVW2.js} +1331 -1163
- package/dist/chunk-SJZDKVW2.js.map +1 -0
- package/dist/chunk-TMJRG4YC.js +12803 -0
- package/dist/chunk-TMJRG4YC.js.map +1 -0
- 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-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-XOAMRDDK.js +481 -0
- package/dist/chunk-XOAMRDDK.js.map +1 -0
- package/dist/chunk-XUW2UWQM.js +299 -0
- package/dist/chunk-XUW2UWQM.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-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-LLOLUHVG.js → chunk-YWFG7ZX7.js} +1358 -2746
- package/dist/chunk-YWFG7ZX7.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 +55 -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 +86 -0
- package/dist/components/session-list.d.ts +36 -0
- package/dist/components/session-mcp-capability-card.d.ts +41 -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-ENHVAZ2Q.js +19 -0
- package/dist/computer-viewer-ENHVAZ2Q.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 +2237 -6200
- 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-755OW5DS.js +117 -0
- package/dist/latest-question-755OW5DS.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-PWRI7R2X.js +14 -0
- package/dist/model-policy-picker-menu-PWRI7R2X.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-BBC47SLD.js +20 -0
- package/dist/sandbox-files-BBC47SLD.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 +32 -3
- package/dist/timeline/types.d.ts +141 -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 +2498 -663
- 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 +319 -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 +512 -0
- package/src/components/session-list.tsx +250 -0
- package/src/components/session-mcp-capability-card.tsx +680 -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-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 +1 -0
- 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 +1600 -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 +208 -44
- package/src/timeline/types.ts +186 -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-GTR5XQ7X.js.map} +0 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { RetainedArtifactReference } from "@opengeni/sdk";
|
|
2
|
+
import type { ToolRendererProps } from "./registry.js";
|
|
3
|
+
type RetainedImageState = {
|
|
4
|
+
kind: "loading";
|
|
5
|
+
} | {
|
|
6
|
+
kind: "ready";
|
|
7
|
+
url: string;
|
|
8
|
+
} | {
|
|
9
|
+
kind: "unavailable";
|
|
10
|
+
label: string;
|
|
11
|
+
} | {
|
|
12
|
+
kind: "error";
|
|
13
|
+
message: string;
|
|
14
|
+
};
|
|
15
|
+
export { isRetainedImageContentType } from "./presented-image.js";
|
|
16
|
+
export declare function useRetainedImageObjectUrl(artifact: RetainedArtifactReference, load: ToolRendererProps["loadRetainedArtifact"]): RetainedImageState & {
|
|
17
|
+
retry: () => void;
|
|
18
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ToolRegistry } from "./registry.js";
|
|
2
|
+
import type { ActivityItem } from "./types.js";
|
|
3
|
+
/** One stable viewport; updates replace its content without moving the conversation. */
|
|
4
|
+
export declare function RollingActivity({ items, toolRegistry, previousItem, showCount, }: {
|
|
5
|
+
items: ActivityItem[];
|
|
6
|
+
/** The standalone item visible immediately before this reel mounted. */
|
|
7
|
+
previousItem?: ActivityItem | undefined;
|
|
8
|
+
toolRegistry?: ToolRegistry;
|
|
9
|
+
/** Show "+N earlier"; off when an enclosing status line already counts steps. */
|
|
10
|
+
showCount?: boolean;
|
|
11
|
+
}): import("react").JSX.Element | null;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
2
|
type LightboxController = {
|
|
3
|
-
open: (src: string, caption?: string, source?: HTMLElement | null, label?: string) => void;
|
|
3
|
+
open: (src: string, caption?: string, source?: HTMLElement | null, label?: string, downloadFilename?: string, controlLabels?: LightboxControlLabels, releaseSource?: () => void) => void;
|
|
4
|
+
};
|
|
5
|
+
export type LightboxControlLabels = {
|
|
6
|
+
download?: string | undefined;
|
|
7
|
+
close?: string | undefined;
|
|
4
8
|
};
|
|
5
9
|
/** Open the app-level screenshot lightbox. No-op outside a `LightboxProvider`. */
|
|
6
10
|
export declare function useLightbox(): LightboxController;
|
|
@@ -10,6 +14,11 @@ export declare function useLightbox(): LightboxController;
|
|
|
10
14
|
* (rather than a dead "Expand" button that announces an action it cannot do).
|
|
11
15
|
*/
|
|
12
16
|
export declare function useLightboxOptional(): LightboxController | null;
|
|
17
|
+
/** @internal Owns one optional retained lightbox source and releases it exactly once. */
|
|
18
|
+
export declare function createLightboxSourceOwner(): {
|
|
19
|
+
replace(release?: (() => void) | undefined): void;
|
|
20
|
+
release(): void;
|
|
21
|
+
};
|
|
13
22
|
/**
|
|
14
23
|
* The app-level screenshot lightbox. Render once near the timeline; renderers
|
|
15
24
|
* call `useLightbox().open(src)`.
|
|
@@ -23,4 +32,10 @@ export declare function useLightboxOptional(): LightboxController | null;
|
|
|
23
32
|
export declare function LightboxProvider({ children }: {
|
|
24
33
|
children: ReactNode;
|
|
25
34
|
}): import("react").JSX.Element;
|
|
35
|
+
/** @internal Exact controls rendered by an open screenshot lightbox. */
|
|
36
|
+
export declare function ScreenshotLightboxControls({ src, downloadFilename, controlLabels, }: {
|
|
37
|
+
src: string;
|
|
38
|
+
downloadFilename?: string | undefined;
|
|
39
|
+
controlLabels?: LightboxControlLabels | undefined;
|
|
40
|
+
}): import("react").JSX.Element;
|
|
26
41
|
export {};
|
|
@@ -14,6 +14,8 @@ export declare function ToolCallTruncationProvider({ value, children, }: {
|
|
|
14
14
|
children: ReactNode;
|
|
15
15
|
}): import("react").JSX.Element;
|
|
16
16
|
export type ActivityDisclosureProps = {
|
|
17
|
+
/** Override the rolling preview; null keeps rapidly streaming details out of the header. */
|
|
18
|
+
compactPreview?: ReactNode;
|
|
17
19
|
icon: ReactNode;
|
|
18
20
|
/** Icon tint. Defaults to the muted foreground; renderers pass accent/failed. */
|
|
19
21
|
iconTone?: "accent" | "failed" | "running" | "muted" | undefined;
|
|
@@ -67,7 +69,8 @@ export type ActivityDisclosureProps = {
|
|
|
67
69
|
* inline media, and at most one right-gutter settle chip. Compact by default;
|
|
68
70
|
* the body mounts only when expanded.
|
|
69
71
|
*/
|
|
70
|
-
export declare
|
|
72
|
+
export declare const CompactActivityContext: import("react").Context<boolean>;
|
|
73
|
+
export declare function ActivityDisclosure({ icon, iconTone: iconToneProp, title, titleMono, running, preview, compactPreview, media, chip: chipProp, failed, cancelled, expandable, defaultOpen, children, }: ActivityDisclosureProps): import("react").JSX.Element;
|
|
71
74
|
export declare function TermBlock({ command, workdir, output, live, tailLines, failed, }: {
|
|
72
75
|
/**
|
|
73
76
|
* The command shown in the prompt header. Pass `null` when the row title
|
|
@@ -114,12 +117,13 @@ export declare function MediaEmpty(): import("react").JSX.Element;
|
|
|
114
117
|
* Outside one it degrades to a plain, non-interactive image — never a dead
|
|
115
118
|
* "Expand" button that announces an action it cannot perform.
|
|
116
119
|
*/
|
|
117
|
-
export declare function Thumbnail({ src, caption, alt, expandLabel, lightboxLabel, }: {
|
|
120
|
+
export declare function Thumbnail({ src, caption, alt, expandLabel, lightboxLabel, downloadFilename, }: {
|
|
118
121
|
src: string;
|
|
119
122
|
caption?: string | undefined;
|
|
120
123
|
alt?: string;
|
|
121
124
|
expandLabel?: string | undefined;
|
|
122
125
|
lightboxLabel?: string | undefined;
|
|
126
|
+
downloadFilename?: string | undefined;
|
|
123
127
|
}): import("react").JSX.Element;
|
|
124
128
|
/**
|
|
125
129
|
* The expanded screenshot inside a tool body: a contained, clickable preview
|
|
@@ -127,10 +131,11 @@ export declare function Thumbnail({ src, caption, alt, expandLabel, lightboxLabe
|
|
|
127
131
|
* so it never breaks the row layout. Like {@link Thumbnail}, it degrades to a
|
|
128
132
|
* plain image outside a `LightboxProvider`.
|
|
129
133
|
*/
|
|
130
|
-
export declare function ScreenshotFigure({ src, caption, alt, expandLabel, lightboxLabel, }: {
|
|
134
|
+
export declare function ScreenshotFigure({ src, caption, alt, expandLabel, lightboxLabel, downloadFilename, }: {
|
|
131
135
|
src: string;
|
|
132
136
|
caption?: string | undefined;
|
|
133
137
|
alt?: string;
|
|
134
138
|
expandLabel?: string | undefined;
|
|
135
139
|
lightboxLabel?: string | undefined;
|
|
140
|
+
downloadFilename?: string | undefined;
|
|
136
141
|
}): import("react").JSX.Element;
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* and bare `session_create` resolve the same UI — without inventing previews
|
|
7
7
|
* from argument JSON.
|
|
8
8
|
*/
|
|
9
|
+
import type { ToolDisplayMetadata } from "@opengeni/sdk";
|
|
9
10
|
/** Leaf tool name after the first `__` server boundary (or the whole name). */
|
|
10
11
|
export declare function mcpToolLeaf(name: string): string;
|
|
11
12
|
/**
|
|
@@ -18,4 +19,4 @@ export declare function toolMatchesLeaf(wireName: string, leaf: string): boolean
|
|
|
18
19
|
* Readable label for a tool call ("session_create" / "opengeni__session_create"
|
|
19
20
|
* → "Session create"). Title-cases the first character of the leaf phrase.
|
|
20
21
|
*/
|
|
21
|
-
export declare function toolDisplayName(name: string): string;
|
|
22
|
+
export declare function toolDisplayName(name: string, display?: ToolDisplayMetadata): string;
|
|
@@ -56,15 +56,36 @@ type ReplaceTurnSummaryFacets = Readonly<{
|
|
|
56
56
|
}>;
|
|
57
57
|
export type TurnSummaryFacetConfiguration = ModifyTurnSummaryFacets | ReplaceTurnSummaryFacets;
|
|
58
58
|
export type TurnSummaryOptions = Readonly<{
|
|
59
|
+
/**
|
|
60
|
+
* Readable per-turn presentation. Assistant progress stays fully formatted;
|
|
61
|
+
* each turn has its own Working / Worked row and rolling latest step.
|
|
62
|
+
* Ordinary tip-follow and manual scrolling are unchanged.
|
|
63
|
+
*/
|
|
64
|
+
rolling?: boolean;
|
|
59
65
|
facets?: TurnSummaryFacetConfiguration;
|
|
60
66
|
}>;
|
|
67
|
+
/**
|
|
68
|
+
* Exchange status shown in place of the plain facet line. `working` and
|
|
69
|
+
* `waiting` run a live clock from `since`; `worked` shows the settled span.
|
|
70
|
+
*/
|
|
71
|
+
export type TurnSummaryStatus = Readonly<{
|
|
72
|
+
kind: "working" | "waiting" | "worked";
|
|
73
|
+
/** Replaces the default "Working" / "Waiting" wording. */
|
|
74
|
+
label?: string | undefined;
|
|
75
|
+
/** Live clock start for `working` and `waiting`. */
|
|
76
|
+
since?: string | undefined;
|
|
77
|
+
/** Settled span for `worked`. */
|
|
78
|
+
durationMs?: number | undefined;
|
|
79
|
+
/** Live step preview under the row while it is collapsed. */
|
|
80
|
+
preview?: ReactNode;
|
|
81
|
+
}>;
|
|
61
82
|
export type TurnSummaryProps = {
|
|
62
83
|
/** The activity items in the turn (used only to compute the facet counts). */
|
|
63
84
|
items: ActivityItem[];
|
|
64
85
|
/**
|
|
65
86
|
* The settled verdict — or absent for a completed CLUSTER of a still-running
|
|
66
|
-
* turn, which folds neutrally
|
|
67
|
-
*
|
|
87
|
+
* turn, which folds neutrally. Only unfinished activity inside this summary
|
|
88
|
+
* animates; the parent turn may still be composing a response elsewhere.
|
|
68
89
|
*/
|
|
69
90
|
outcome?: TurnOutcome | undefined;
|
|
70
91
|
/** A short failure reason shown inline on a failed chip (never hidden). */
|
|
@@ -73,6 +94,7 @@ export type TurnSummaryProps = {
|
|
|
73
94
|
durationMs?: number | undefined;
|
|
74
95
|
/** Start expanded. */
|
|
75
96
|
defaultOpen?: boolean | undefined;
|
|
97
|
+
liveHeader?: ReactNode;
|
|
76
98
|
/**
|
|
77
99
|
* A nested fold — a cluster or sub-turn INSIDE an already-expanded turn. It
|
|
78
100
|
* drops the bordered/filled chip and renders as a plain disclosure node on the
|
|
@@ -110,7 +132,14 @@ export type TurnSummaryProps = {
|
|
|
110
132
|
copyText?: string | undefined;
|
|
111
133
|
/** Adjacent compaction landmark count for the secondary chip facet. */
|
|
112
134
|
contextCompactionCount?: number | undefined;
|
|
135
|
+
/**
|
|
136
|
+
* Exchange status line (compact progress presentation). Replaces the state
|
|
137
|
+
* marker and the duration facet; a settled `worked` row reads as a separator.
|
|
138
|
+
*/
|
|
139
|
+
status?: TurnSummaryStatus | undefined;
|
|
113
140
|
/** The rendered activity rail revealed on expand. */
|
|
114
141
|
children: ReactNode;
|
|
115
142
|
};
|
|
116
|
-
export declare function TurnSummary({ items, outcome, failureText, durationMs, defaultOpen, bare, facets: facetConfiguration, settleFold, foldKey, copyText, contextCompactionCount, children, }: TurnSummaryProps): import("react").JSX.Element;
|
|
143
|
+
export declare function TurnSummary({ items, outcome, failureText, durationMs, defaultOpen, liveHeader, bare, facets: facetConfiguration, settleFold, foldKey, copyText, contextCompactionCount, status, children, }: TurnSummaryProps): import("react").JSX.Element;
|
|
144
|
+
/** Elapsed wall time with seconds below an hour: "14s", "2m 14s", "1h 05m". */
|
|
145
|
+
export declare function formatElapsed(durationMs: number): string;
|
package/dist/timeline/types.d.ts
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
import type { MediaGenerationResult, ResourceRef, SessionStatus, TimelineAnnotation, TimelineAnnotationSource, ToolAuthNeededPayload, ToolRef } from "@opengeni/sdk";
|
|
1
|
+
import type { AllowanceExhaustedRefusal, HumanInputQuestion, HumanInputResponse, MediaGenerationResult, ResourceRef, SessionStatus, TimelineAnnotation, TimelineAnnotationSource, ToolAuthNeededPayload, ToolRef, ToolDisplayMetadata } from "@opengeni/sdk";
|
|
2
2
|
export type TimelineAnnotationSourceDescriptor = Omit<TimelineAnnotationSource, "startOffset" | "endOffset" | "contextBefore" | "contextAfter"> & {
|
|
3
3
|
text: string;
|
|
4
4
|
};
|
|
5
5
|
export type UserMessageItem = {
|
|
6
6
|
kind: "user-message";
|
|
7
7
|
id: string;
|
|
8
|
+
/**
|
|
9
|
+
* Renderer-only identity shared by a locally acknowledged message and the
|
|
10
|
+
* durable event that replaces it. The canonical event id remains `id`; this
|
|
11
|
+
* key only prevents the optimistic-to-durable handoff from remounting and
|
|
12
|
+
* replaying the row entrance animation.
|
|
13
|
+
*/
|
|
14
|
+
reconciliationKey?: string | undefined;
|
|
8
15
|
text: string;
|
|
9
16
|
annotations?: TimelineAnnotation[] | undefined;
|
|
10
17
|
annotationSource?: TimelineAnnotationSourceDescriptor | undefined;
|
|
@@ -23,17 +30,51 @@ export type UserMessageItem = {
|
|
|
23
30
|
state: "sending" | "queued" | "failed";
|
|
24
31
|
error?: string | undefined;
|
|
25
32
|
onRetry?: (() => void) | undefined;
|
|
33
|
+
onEdit?: (() => void) | undefined;
|
|
26
34
|
onRemove?: (() => void) | undefined;
|
|
27
35
|
} | undefined;
|
|
28
36
|
};
|
|
37
|
+
export type HumanInputAnswerSummary = {
|
|
38
|
+
questionId: string;
|
|
39
|
+
label: string;
|
|
40
|
+
prompt: string;
|
|
41
|
+
values: string[];
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* One resolved structured question in the conversation. The live pending form
|
|
45
|
+
* is rendered at the timeline tip by the host; after settlement this item keeps
|
|
46
|
+
* both the agent's question and the human's answer visible as chat history.
|
|
47
|
+
*/
|
|
48
|
+
export type HumanInputItem = {
|
|
49
|
+
kind: "human-input";
|
|
50
|
+
id: string;
|
|
51
|
+
turnId: string | null;
|
|
52
|
+
requestId: string;
|
|
53
|
+
questions: HumanInputQuestion[];
|
|
54
|
+
response: HumanInputResponse;
|
|
55
|
+
answers: HumanInputAnswerSummary[];
|
|
56
|
+
occurredAt: string;
|
|
57
|
+
};
|
|
29
58
|
export type AgentMessageItem = {
|
|
30
59
|
kind: "agent-message";
|
|
31
60
|
id: string;
|
|
32
61
|
turnId: string | null;
|
|
33
62
|
text: string;
|
|
63
|
+
/**
|
|
64
|
+
* Assistant channel: provider-declared, or `commentary` when the model asked
|
|
65
|
+
* for tool work in the same response. Absent on legacy events and on
|
|
66
|
+
* undeclared final messages. Known from the first delta for Responses models.
|
|
67
|
+
*/
|
|
68
|
+
phase?: "commentary" | "final_answer" | undefined;
|
|
34
69
|
/** Still receiving deltas (no completed/turn-end seen yet). */
|
|
35
70
|
streaming: boolean;
|
|
36
71
|
occurredAt: string;
|
|
72
|
+
/**
|
|
73
|
+
* When the first streamed text arrived, kept once completion moves
|
|
74
|
+
* `occurredAt` to the completion time. Absent for a message that never
|
|
75
|
+
* streamed.
|
|
76
|
+
*/
|
|
77
|
+
startedAt?: string | undefined;
|
|
37
78
|
/** Available only after the canonical completed event lands. */
|
|
38
79
|
annotationSource?: TimelineAnnotationSourceDescriptor | undefined;
|
|
39
80
|
};
|
|
@@ -67,6 +108,7 @@ export type ToolCallItem = {
|
|
|
67
108
|
turnId: string | null;
|
|
68
109
|
callId: string | null;
|
|
69
110
|
name: string;
|
|
111
|
+
display?: ToolDisplayMetadata;
|
|
70
112
|
arguments: unknown;
|
|
71
113
|
output: unknown;
|
|
72
114
|
truncation?: ToolCallTruncation | null;
|
|
@@ -130,6 +172,22 @@ export type SandboxItem = {
|
|
|
130
172
|
status: "running" | "complete" | "failed" | "cancelled";
|
|
131
173
|
occurredAt: string;
|
|
132
174
|
};
|
|
175
|
+
export type StartupPhase = "queue" | "sandbox" | "rig" | "repository" | "files" | "tools" | "model_preparation" | "provider_first_byte";
|
|
176
|
+
/** A compact user-visible critical-path span reconstructed from durable events. */
|
|
177
|
+
export type StartupPhaseItem = {
|
|
178
|
+
kind: "startup-phase";
|
|
179
|
+
id: string;
|
|
180
|
+
turnId: string | null;
|
|
181
|
+
phase: StartupPhase;
|
|
182
|
+
status: "running" | "complete" | "failed" | "cancelled";
|
|
183
|
+
startedAt: string;
|
|
184
|
+
completedAt: string | null;
|
|
185
|
+
durationMs: number | null;
|
|
186
|
+
/** Sandbox origin and rig marker outcomes refine the settled label only. */
|
|
187
|
+
outcome: "created" | "restored" | "resumed" | "skipped" | null;
|
|
188
|
+
blockedReason?: "capture_in_progress" | "rotation_in_progress" | "provider_recovery_in_progress" | undefined;
|
|
189
|
+
occurredAt: string;
|
|
190
|
+
};
|
|
133
191
|
/**
|
|
134
192
|
* A first-party workspace-memory write the agent made mid-turn — a `memory.saved`
|
|
135
193
|
* (it committed a new preference / fact / procedure / decision / history) or a
|
|
@@ -139,6 +197,17 @@ export type SandboxItem = {
|
|
|
139
197
|
* `onMemoryClick` handler the row also deep-links to the record in its memory
|
|
140
198
|
* pane; without one it is non-interactive rich content.
|
|
141
199
|
*/
|
|
200
|
+
export type KnowledgeItem = {
|
|
201
|
+
kind: "knowledge";
|
|
202
|
+
id: string;
|
|
203
|
+
turnId: string | null;
|
|
204
|
+
status: "complete" | "failed";
|
|
205
|
+
outcome: "published" | "pending" | "rejected" | "archived" | "failed";
|
|
206
|
+
fileId?: string | undefined;
|
|
207
|
+
filename?: string | undefined;
|
|
208
|
+
entryId?: string | undefined;
|
|
209
|
+
occurredAt: string;
|
|
210
|
+
};
|
|
142
211
|
export type MemoryItem = {
|
|
143
212
|
kind: "memory";
|
|
144
213
|
id: string;
|
|
@@ -183,7 +252,7 @@ export type FleetDecisionItem = {
|
|
|
183
252
|
policyVersion: "adaptive-shadow-v1";
|
|
184
253
|
actualOutcome: "selected" | "waiting" | "none";
|
|
185
254
|
actualCandidateKey: string | null;
|
|
186
|
-
actualReason: "lease_reused" | "pin" | "rotation" | "active" | "all_capped" | "none";
|
|
255
|
+
actualReason: "lease_reused" | "pin" | "rotation" | "active" | "all_capped" | "allocator_disabled" | "none";
|
|
187
256
|
shadowOutcome: "selected" | "paced" | "none";
|
|
188
257
|
shadowCandidateKey: string | null;
|
|
189
258
|
shadowReason: "fenced_in_flight" | "fenced_candidate_missing" | "admission_paced" | "no_eligible_candidate" | "overlay_isolated_empty" | "best_score" | "affinity_best" | "hysteresis_hold";
|
|
@@ -204,12 +273,14 @@ export type SessionStatusItem = {
|
|
|
204
273
|
kind: "session-status";
|
|
205
274
|
id: string;
|
|
206
275
|
status: SessionStatus;
|
|
276
|
+
/** Presentation-only evidence that this historical attention state resumed. */
|
|
277
|
+
resolvedAt?: string;
|
|
207
278
|
occurredAt: string;
|
|
208
279
|
};
|
|
209
280
|
export type GoalItem = {
|
|
210
281
|
kind: "goal";
|
|
211
282
|
id: string;
|
|
212
|
-
action: "set" | "updated" | "completed" | "paused" | "resumed" | "cleared" | "continuation";
|
|
283
|
+
action: "set" | "updated" | "completed" | "paused" | "resumed" | "cleared" | "held" | "continuation";
|
|
213
284
|
text: string | null;
|
|
214
285
|
occurredAt: string;
|
|
215
286
|
};
|
|
@@ -218,6 +289,18 @@ export type NoticeItem = {
|
|
|
218
289
|
id: string;
|
|
219
290
|
tone: "waiting" | "cancelled" | "failed" | "input";
|
|
220
291
|
text: string;
|
|
292
|
+
/** Presentation-only evidence that a historical approval wait resumed. */
|
|
293
|
+
resolvedAt?: string;
|
|
294
|
+
/** A preserved turn-end outcome, not a claim about current session state. */
|
|
295
|
+
recordedOutcome?: true;
|
|
296
|
+
/**
|
|
297
|
+
* Recorded agent wait only: delegated worker sessions that had not reported
|
|
298
|
+
* back when the wait began. Best effort from the loaded history; absent when
|
|
299
|
+
* none are known.
|
|
300
|
+
*/
|
|
301
|
+
waitingAgents?: number;
|
|
302
|
+
/** Recorded agent wait only: when later input ended the wait. */
|
|
303
|
+
waitEndedAt?: string;
|
|
221
304
|
/** Optional evidence kept inspectable without overwhelming the main rail. */
|
|
222
305
|
details?: {
|
|
223
306
|
label: string;
|
|
@@ -227,6 +310,12 @@ export type NoticeItem = {
|
|
|
227
310
|
label: string;
|
|
228
311
|
url: string;
|
|
229
312
|
};
|
|
313
|
+
/**
|
|
314
|
+
* A usage ceiling refused further work. `text` keeps the canonical sentence
|
|
315
|
+
* for plain-text consumers; `MessageTimeline` renders this structured row
|
|
316
|
+
* (customizable with `renderAllowanceExhausted` / `allowanceExhaustedLabels`).
|
|
317
|
+
*/
|
|
318
|
+
allowance?: AllowanceExhaustedRefusal;
|
|
230
319
|
occurredAt: string;
|
|
231
320
|
};
|
|
232
321
|
/**
|
|
@@ -242,13 +331,25 @@ export type ContextCompactionItem = {
|
|
|
242
331
|
estimatedTokensBefore: number | null;
|
|
243
332
|
estimatedTokensAfter: number | null;
|
|
244
333
|
skipReason: string | null;
|
|
334
|
+
/**
|
|
335
|
+
* Present only for a `summarization_failed` skip where the provider
|
|
336
|
+
* definitively rejected the compaction request. Content-free identifiers.
|
|
337
|
+
*/
|
|
338
|
+
providerRejection: ContextCompactionProviderRejection | null;
|
|
245
339
|
/** Provider implementation id for debug disclosure only. */
|
|
246
340
|
implementation: string | null;
|
|
247
341
|
occurredAt: string;
|
|
248
342
|
};
|
|
343
|
+
export type ContextCompactionProviderRejection = {
|
|
344
|
+
httpStatus: number;
|
|
345
|
+
type: string | null;
|
|
346
|
+
code: string | null;
|
|
347
|
+
param: string | null;
|
|
348
|
+
requestId: string | null;
|
|
349
|
+
};
|
|
249
350
|
export type MachineInputMember = {
|
|
250
351
|
id: string;
|
|
251
|
-
kind: "scheduled_occurrence" | "goal_continuation" | "agent_message" | "agent_steer_instruction" | "child_terminal_result" | "media_generation_result";
|
|
352
|
+
kind: "scheduled_occurrence" | "goal_continuation" | "background_command_result" | "session_wait_timeout" | "agent_message" | "agent_steer_instruction" | "child_terminal_result" | "media_generation_result" | "child_requires_action" | "child_requires_action_resolved" | "child_paused" | "child_waiting_capacity" | "child_progress";
|
|
252
353
|
classification: "success" | "failure" | "action_required" | "info";
|
|
253
354
|
sourceId: string;
|
|
254
355
|
summary: string;
|
|
@@ -263,6 +364,8 @@ export type MachineInputBatchItem = {
|
|
|
263
364
|
id: string;
|
|
264
365
|
turnId: string | null;
|
|
265
366
|
members: MachineInputMember[];
|
|
367
|
+
/** Readable-turn presentation keeps machine payload prose inside the disclosure. */
|
|
368
|
+
compact?: boolean;
|
|
266
369
|
occurredAt: string;
|
|
267
370
|
};
|
|
268
371
|
/**
|
|
@@ -281,12 +384,17 @@ export type AuthNeededItem = {
|
|
|
281
384
|
turnId: string | null;
|
|
282
385
|
/** The runtime surface that requested recovery, when the event is an MCP auth signal. */
|
|
283
386
|
serverId: string | null;
|
|
387
|
+
/** Explicit recovery identity; never inferred from an opaque execution alias. */
|
|
388
|
+
canonicalServerId?: string | null;
|
|
389
|
+
connectionSubjectScope?: "workspace" | "subject" | null;
|
|
284
390
|
/** Durable event family that produced this notice. */
|
|
285
391
|
source?: "tool" | "credential" | "capability" | undefined;
|
|
286
392
|
/** The connection's registrable domain, e.g. "linear.app". */
|
|
287
393
|
providerDomain: string;
|
|
288
394
|
/** The lapsed connection to reconnect, when the row survived. */
|
|
289
395
|
connectionId: string | null;
|
|
396
|
+
/** Host-owned bindings must never be routed into OpenGeni's native reconnect flow. */
|
|
397
|
+
authoritySource?: ToolAuthNeededPayload["authoritySource"] | null | undefined;
|
|
290
398
|
reason: ToolAuthNeededPayload["reason"] | null;
|
|
291
399
|
/** Scopes the provider now needs; may inform the copy, never shown as a raw label. */
|
|
292
400
|
scopes: string[];
|
|
@@ -298,20 +406,35 @@ export type AuthNeededItem = {
|
|
|
298
406
|
authorizationUrl: string | null;
|
|
299
407
|
/** Agent-selected catalog recommendation. The host still owns authorization. */
|
|
300
408
|
capability?: NonNullable<ToolAuthNeededPayload["capability"]> | null | undefined;
|
|
409
|
+
/** Human-reviewed custom integration proposal. Never treated as catalog authority. */
|
|
410
|
+
setupRequest?: ToolAuthNeededPayload["setupRequest"] | null | undefined;
|
|
301
411
|
occurredAt: string;
|
|
302
412
|
};
|
|
303
413
|
export type TurnOutcome = "complete" | "failed" | "cancelled";
|
|
304
414
|
export type TurnEndItem = {
|
|
305
415
|
kind: "turn-end";
|
|
416
|
+
/** A durable Retry reopened this failed logical turn; its failure is history. */
|
|
417
|
+
resumedAt?: string;
|
|
418
|
+
/** Keep an existing answer visible when a recorded input wait ends without final output. */
|
|
419
|
+
preserveWaitResponse?: true;
|
|
306
420
|
id: string;
|
|
307
421
|
turnId: string | null;
|
|
308
422
|
outcome: TurnOutcome;
|
|
309
423
|
failureText: string | null;
|
|
310
424
|
occurredAt: string;
|
|
311
425
|
};
|
|
312
|
-
export type TimelineItem = UserMessageItem | AgentMessageItem | ReasoningItem | ToolCallItem | WorkerItem | WorkerCompletionItem | SandboxItem | SessionStatusItem | GoalItem | NoticeItem | ContextCompactionItem | MachineInputBatchItem | AuthNeededItem | MemoryItem | FleetDecisionItem | TurnEndItem
|
|
313
|
-
/**
|
|
314
|
-
|
|
426
|
+
export type TimelineItem = (UserMessageItem | HumanInputItem | AgentMessageItem | ReasoningItem | ToolCallItem | WorkerItem | WorkerCompletionItem | SandboxItem | StartupPhaseItem | SessionStatusItem | GoalItem | NoticeItem | ContextCompactionItem | MachineInputBatchItem | AuthNeededItem | MemoryItem | KnowledgeItem | FleetDecisionItem | TurnEndItem) & {
|
|
427
|
+
/** Durable identities, independent of renderer/reconciliation keys. */
|
|
428
|
+
sourceEvents?: readonly {
|
|
429
|
+
eventId: string;
|
|
430
|
+
sequence: number;
|
|
431
|
+
}[] | undefined;
|
|
432
|
+
};
|
|
433
|
+
/**
|
|
434
|
+
* Activity items cluster between chat messages (reasoning, tools, workers,
|
|
435
|
+
* sandbox, memory). Assistant prose is rendered separately.
|
|
436
|
+
*/
|
|
437
|
+
export type ActivityItem = ReasoningItem | ToolCallItem | WorkerItem | SandboxItem | StartupPhaseItem | MemoryItem | KnowledgeItem | FleetDecisionItem | AgentMessageItem;
|
|
315
438
|
export type TimelineGroup = {
|
|
316
439
|
kind: "item";
|
|
317
440
|
item: TimelineItem;
|
|
@@ -321,6 +444,17 @@ export type TimelineGroup = {
|
|
|
321
444
|
items: ActivityItem[];
|
|
322
445
|
outcome?: TurnOutcome;
|
|
323
446
|
failureText?: string;
|
|
447
|
+
/** One turn's chronological work history, including progress prose after settlement. */
|
|
448
|
+
work?: {
|
|
449
|
+
startedAt: string;
|
|
450
|
+
endedAt?: string;
|
|
451
|
+
responseStartedAt?: string;
|
|
452
|
+
waiting?: {
|
|
453
|
+
label: string;
|
|
454
|
+
since: string;
|
|
455
|
+
};
|
|
456
|
+
details: TimelineGroup[];
|
|
457
|
+
};
|
|
324
458
|
} | {
|
|
325
459
|
kind: "turn";
|
|
326
460
|
id: string;
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import {
|
|
2
|
+
annotationBoxIntersects,
|
|
3
|
+
annotationViewportBox,
|
|
4
|
+
layoutAnnotationBadges
|
|
5
|
+
} from "./chunk-ZYRGEKWS.js";
|
|
6
|
+
import {
|
|
7
|
+
annotatableText,
|
|
8
|
+
annotationDisplayOrdinal,
|
|
9
|
+
annotationHasNote,
|
|
10
|
+
buildQuoteRange,
|
|
11
|
+
cssEscapeAttribute,
|
|
12
|
+
matchingQuoteInSource,
|
|
13
|
+
occurrenceOffsets
|
|
14
|
+
} from "./chunk-447JLCBU.js";
|
|
15
|
+
import {
|
|
16
|
+
cn
|
|
17
|
+
} from "./chunk-22KP6LR5.js";
|
|
18
|
+
|
|
19
|
+
// src/components/timeline-annotation-markers.tsx
|
|
20
|
+
import { useLayoutEffect, useState } from "react";
|
|
21
|
+
import { createPortal } from "react-dom";
|
|
22
|
+
import { jsx } from "react/jsx-runtime";
|
|
23
|
+
function lastVisibleRect(range) {
|
|
24
|
+
try {
|
|
25
|
+
const rects = range.getClientRects();
|
|
26
|
+
for (let index = rects.length - 1; index >= 0; index--) {
|
|
27
|
+
const rect = rects.item(index);
|
|
28
|
+
if (rect && (rect.width > 0 || rect.height > 0)) return rect;
|
|
29
|
+
}
|
|
30
|
+
} catch {
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const bounding = range.getBoundingClientRect();
|
|
34
|
+
if (bounding.width > 0 || bounding.height > 0) return bounding;
|
|
35
|
+
} catch {
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
function occurrenceForAnnotation(sourceEl, annotation) {
|
|
40
|
+
const { text } = annotatableText(sourceEl);
|
|
41
|
+
const quote = matchingQuoteInSource(text, annotation.quote) ?? annotation.quote;
|
|
42
|
+
const offsets = occurrenceOffsets(text, quote);
|
|
43
|
+
if (offsets.length <= 1) return 0;
|
|
44
|
+
let best = 0;
|
|
45
|
+
let bestDistance = Number.POSITIVE_INFINITY;
|
|
46
|
+
offsets.forEach((offset, index) => {
|
|
47
|
+
const distance = Math.abs(offset - annotation.source.startOffset);
|
|
48
|
+
if (distance < bestDistance) {
|
|
49
|
+
best = index;
|
|
50
|
+
bestDistance = distance;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
return best;
|
|
54
|
+
}
|
|
55
|
+
function timelineScroller(root) {
|
|
56
|
+
if (root.matches("[data-og-timeline-scroller]")) return root;
|
|
57
|
+
const nested = root.querySelector("[data-og-timeline-scroller]");
|
|
58
|
+
return nested instanceof HTMLElement ? nested : root;
|
|
59
|
+
}
|
|
60
|
+
function currentAnnotationViewport(root) {
|
|
61
|
+
const scroller = timelineScroller(root);
|
|
62
|
+
const rect = scroller.getBoundingClientRect();
|
|
63
|
+
const scrollerBox = {
|
|
64
|
+
left: rect.left,
|
|
65
|
+
right: rect.right,
|
|
66
|
+
top: rect.top,
|
|
67
|
+
bottom: rect.bottom
|
|
68
|
+
};
|
|
69
|
+
return annotationViewportBox(window.innerWidth || 1024, window.innerHeight || 768, scrollerBox);
|
|
70
|
+
}
|
|
71
|
+
function sourceInTimeline(root, eventId) {
|
|
72
|
+
const source = root.querySelector(
|
|
73
|
+
`[data-og-annotation-source-key="${cssEscapeAttribute(eventId)}"]`
|
|
74
|
+
);
|
|
75
|
+
return source instanceof HTMLElement ? source : null;
|
|
76
|
+
}
|
|
77
|
+
function collectMarkers(root, annotations) {
|
|
78
|
+
if (!root) return [];
|
|
79
|
+
const viewport = currentAnnotationViewport(root);
|
|
80
|
+
const next = [];
|
|
81
|
+
for (const [index, annotation] of annotations.entries()) {
|
|
82
|
+
const source = sourceInTimeline(root, annotation.source.eventId);
|
|
83
|
+
if (!source) continue;
|
|
84
|
+
const quote = matchingQuoteInSource(annotatableText(source).text, annotation.quote) ?? annotation.quote;
|
|
85
|
+
const range = buildQuoteRange(source, quote, occurrenceForAnnotation(source, annotation));
|
|
86
|
+
if (!range) continue;
|
|
87
|
+
const rect = lastVisibleRect(range);
|
|
88
|
+
if (!rect) continue;
|
|
89
|
+
if (!annotationBoxIntersects(
|
|
90
|
+
{ left: rect.left, right: rect.right, top: rect.top, bottom: rect.bottom },
|
|
91
|
+
viewport
|
|
92
|
+
)) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
next.push({
|
|
96
|
+
id: annotation.id,
|
|
97
|
+
ordinal: annotationDisplayOrdinal(annotation, index),
|
|
98
|
+
left: rect.right,
|
|
99
|
+
top: rect.top,
|
|
100
|
+
incomplete: !annotationHasNote(annotation.note)
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return layoutAnnotationBadges(next, viewport);
|
|
104
|
+
}
|
|
105
|
+
function TimelineAnnotationMarkers({
|
|
106
|
+
annotations,
|
|
107
|
+
onSelect,
|
|
108
|
+
rootRef
|
|
109
|
+
}) {
|
|
110
|
+
const [markers, setMarkers] = useState([]);
|
|
111
|
+
useLayoutEffect(() => {
|
|
112
|
+
const root = rootRef.current;
|
|
113
|
+
if (!root || annotations.length === 0) {
|
|
114
|
+
setMarkers([]);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const update = () => setMarkers(collectMarkers(root, annotations));
|
|
118
|
+
update();
|
|
119
|
+
window.addEventListener("resize", update);
|
|
120
|
+
window.addEventListener("scroll", update, true);
|
|
121
|
+
const observer = typeof ResizeObserver === "function" ? new ResizeObserver(update) : null;
|
|
122
|
+
observer?.observe(root);
|
|
123
|
+
for (const annotation of annotations) {
|
|
124
|
+
const source = sourceInTimeline(root, annotation.source.eventId);
|
|
125
|
+
if (source) observer?.observe(source);
|
|
126
|
+
}
|
|
127
|
+
return () => {
|
|
128
|
+
window.removeEventListener("resize", update);
|
|
129
|
+
window.removeEventListener("scroll", update, true);
|
|
130
|
+
observer?.disconnect();
|
|
131
|
+
};
|
|
132
|
+
}, [annotations, rootRef]);
|
|
133
|
+
if (markers.length === 0 || typeof document === "undefined") return null;
|
|
134
|
+
return createPortal(
|
|
135
|
+
/* @__PURE__ */ jsx("div", { className: "og-root pointer-events-none fixed inset-0 z-[35]", children: markers.map((marker) => /* @__PURE__ */ jsx(
|
|
136
|
+
"button",
|
|
137
|
+
{
|
|
138
|
+
type: "button",
|
|
139
|
+
"data-og-annotation-badge": "",
|
|
140
|
+
"data-og-annotation-badge-ordinal": marker.ordinal,
|
|
141
|
+
style: { left: marker.left, top: marker.top, zIndex: marker.ordinal },
|
|
142
|
+
className: cn(
|
|
143
|
+
"pointer-events-auto absolute flex h-4 min-w-4 -translate-x-1/2 -translate-y-[110%] items-center justify-center rounded-full bg-og-accent px-0.5 text-[10px] font-semibold tabular-nums text-og-accent-fg shadow-sm outline-hidden select-none after:absolute after:-inset-2 after:content-[''] focus-visible:ring-2 focus-visible:ring-og-accent pointer-coarse:after:-inset-2.5",
|
|
144
|
+
marker.incomplete && "ring-1 ring-og-accent-fg/35"
|
|
145
|
+
),
|
|
146
|
+
"aria-label": `Annotation ${marker.ordinal}`,
|
|
147
|
+
onMouseDown: (event) => event.preventDefault(),
|
|
148
|
+
onClick: (event) => {
|
|
149
|
+
event.preventDefault();
|
|
150
|
+
event.stopPropagation();
|
|
151
|
+
onSelect?.(marker.id);
|
|
152
|
+
},
|
|
153
|
+
children: marker.ordinal
|
|
154
|
+
},
|
|
155
|
+
marker.id
|
|
156
|
+
)) }),
|
|
157
|
+
document.body
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
var timeline_annotation_markers_default = TimelineAnnotationMarkers;
|
|
161
|
+
export {
|
|
162
|
+
TimelineAnnotationMarkers,
|
|
163
|
+
timeline_annotation_markers_default as default
|
|
164
|
+
};
|
|
165
|
+
//# sourceMappingURL=timeline-annotation-markers-GNDHTGBD.js.map
|