@opengeni/react 0.46.1 → 0.52.1
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 +158 -14
- package/dist/artifacts-document.d.ts +3 -0
- package/dist/artifacts-document.js +17 -0
- package/dist/artifacts-document.js.map +1 -0
- package/dist/artifacts-presentation.d.ts +3 -0
- package/dist/artifacts-presentation.js +17 -0
- package/dist/artifacts-presentation.js.map +1 -0
- package/dist/artifacts-spreadsheet.d.ts +3 -0
- package/dist/artifacts-spreadsheet.js +17 -0
- package/dist/artifacts-spreadsheet.js.map +1 -0
- package/dist/artifacts.d.ts +2 -0
- package/dist/artifacts.js +170 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/chunk-6BBWWOOU.js +82 -0
- package/dist/chunk-6BBWWOOU.js.map +1 -0
- package/dist/{chunk-HFO4ERGQ.js → chunk-724BW4TW.js} +586 -35
- package/dist/chunk-724BW4TW.js.map +1 -0
- package/dist/chunk-7I2KB3OK.js +3895 -0
- package/dist/chunk-7I2KB3OK.js.map +1 -0
- package/dist/chunk-7WCLAEFV.js +2828 -0
- package/dist/chunk-7WCLAEFV.js.map +1 -0
- package/dist/{chunk-U3CSCMWA.js → chunk-FK6VG4LL.js} +9 -13
- package/dist/chunk-FK6VG4LL.js.map +1 -0
- package/dist/{chunk-SRFUT2ZU.js → chunk-FWS3KC3Z.js} +120 -64
- package/dist/chunk-FWS3KC3Z.js.map +1 -0
- package/dist/{chunk-EKZH6IDG.js → chunk-HDBG7XGO.js} +62 -1
- package/dist/chunk-HDBG7XGO.js.map +1 -0
- package/dist/chunk-HUIKIDM5.js +2148 -0
- package/dist/chunk-HUIKIDM5.js.map +1 -0
- package/dist/{chunk-LGVMUIRV.js → chunk-JAGDUCZQ.js} +1053 -390
- package/dist/chunk-JAGDUCZQ.js.map +1 -0
- package/dist/{chunk-LWR4MXSS.js → chunk-JR3QFY6B.js} +420 -35
- package/dist/chunk-JR3QFY6B.js.map +1 -0
- package/dist/chunk-JVYQRRC4.js +53 -0
- package/dist/chunk-JVYQRRC4.js.map +1 -0
- package/dist/chunk-KCGXPP5V.js +157 -0
- package/dist/chunk-KCGXPP5V.js.map +1 -0
- package/dist/{chunk-EB67J347.js → chunk-KZ73RL76.js} +111 -31
- package/dist/chunk-KZ73RL76.js.map +1 -0
- package/dist/chunk-PEI6RANI.js +3234 -0
- package/dist/chunk-PEI6RANI.js.map +1 -0
- package/dist/{chunk-3PB7MIT6.js → chunk-ROIRTM37.js} +220 -72
- package/dist/chunk-ROIRTM37.js.map +1 -0
- package/dist/chunk-VZTQ73XT.js +86 -0
- package/dist/chunk-VZTQ73XT.js.map +1 -0
- package/dist/{chunk-VCBFUSUZ.js → chunk-WSK7G5LE.js} +72 -4
- package/dist/chunk-WSK7G5LE.js.map +1 -0
- package/dist/{chunk-FGZUCXZF.js → chunk-WYA65Y3F.js} +16 -16
- package/dist/chunk-WYA65Y3F.js.map +1 -0
- package/dist/{chunk-6EDV6YFE.js → chunk-X4S56Y2H.js} +147 -35
- package/dist/chunk-X4S56Y2H.js.map +1 -0
- package/dist/client.d.ts +7 -1
- package/dist/clipboard.d.ts +1 -0
- package/dist/clipboard.js +7 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/commands/index.d.ts +3 -3
- package/dist/commands/registry.d.ts +1 -1
- package/dist/commands/types.d.ts +1 -1
- package/dist/components/approval-surface.d.ts +2 -2
- package/dist/components/artifacts/artifact-surface.d.ts +18 -0
- package/dist/components/artifacts/document-editor.d.ts +172 -0
- package/dist/components/artifacts/editable-artifact-ui.d.ts +13 -0
- package/dist/components/artifacts/editable-artifact-workbench.d.ts +49 -0
- package/dist/components/artifacts/editable-document.d.ts +24 -0
- package/dist/components/artifacts/editable-presentation.d.ts +24 -0
- package/dist/components/artifacts/editable-spreadsheet.d.ts +32 -0
- package/dist/components/artifacts/index.d.ts +8 -0
- package/dist/components/artifacts/presentation-editor.d.ts +297 -0
- package/dist/components/artifacts/spreadsheet-canvas.d.ts +120 -0
- package/dist/components/artifacts/spreadsheet-grid.d.ts +113 -0
- package/dist/components/browser-viewer.d.ts +29 -0
- package/dist/components/chat-composer.d.ts +13 -8
- package/dist/components/code-editor.d.ts +25 -3
- package/dist/components/command-palette.d.ts +2 -2
- package/dist/components/composer-transcription-control.d.ts +4 -2
- package/dist/components/composer.d.ts +29 -15
- package/dist/components/computer-viewer.d.ts +23 -0
- package/dist/components/copy-button.d.ts +2 -2
- package/dist/components/desktop-viewer.d.ts +25 -21
- package/dist/components/diff-view.d.ts +1 -1
- package/dist/components/enrollment-consent.d.ts +1 -1
- package/dist/components/enrollment-device-flow.d.ts +1 -1
- package/dist/components/file-browser.d.ts +2 -2
- package/dist/components/fleet-tile.d.ts +1 -1
- package/dist/components/generated-video-player.d.ts +10 -0
- package/dist/components/human-input-form.d.ts +1 -1
- package/dist/components/human-input-surface.d.ts +2 -2
- package/dist/components/interactive-workbench-viewers.d.ts +2 -0
- package/dist/components/machine-card.d.ts +2 -2
- package/dist/components/machine-dock-bar.d.ts +3 -3
- package/dist/components/machine-health-pill.d.ts +2 -2
- package/dist/components/machine-input-display.d.ts +1 -1
- package/dist/components/machine-metrics.d.ts +2 -2
- package/dist/components/machine-status-pill.d.ts +4 -4
- package/dist/components/machines/health.d.ts +1 -1
- package/dist/components/machines/machine-detail.d.ts +5 -3
- package/dist/components/machines/metric-history-chart.d.ts +1 -1
- package/dist/components/machines/metric-sparkline.d.ts +2 -2
- package/dist/components/machines/series.d.ts +2 -2
- package/dist/components/machines-dashboard.d.ts +5 -5
- package/dist/components/markdown.d.ts +1 -1
- package/dist/components/message-timeline.d.ts +22 -5
- package/dist/components/model-picker.d.ts +2 -2
- package/dist/components/model-policy-picker.d.ts +7 -7
- package/dist/components/pierre-diff.d.ts +1 -1
- package/dist/components/pierre-file.d.ts +1 -1
- package/dist/components/queue-draft-policy.d.ts +1 -1
- package/dist/components/queue-surface-implementation.d.ts +3 -3
- package/dist/components/queue-surface-state.d.ts +4 -4
- package/dist/components/queue-surface.d.ts +5 -5
- package/dist/components/sandbox-files.d.ts +5 -5
- package/dist/components/sandbox-terminal.d.ts +50 -4
- package/dist/components/sandbox-workspace.d.ts +30 -10
- package/dist/components/session-chrome.d.ts +4 -4
- package/dist/components/session-status.d.ts +2 -2
- package/dist/components/timeline-annotation-selection.d.ts +9 -0
- package/dist/components/timeline-annotations-dialog.d.ts +16 -0
- package/dist/components/timeline-annotations.d.ts +13 -0
- package/dist/components/tooltip.d.ts +4 -4
- package/dist/components/user-message-body.d.ts +2 -2
- package/dist/components/workbench-changes.d.ts +2 -2
- package/dist/components/workspace-dock.d.ts +3 -1
- package/dist/composer.d.ts +11 -11
- package/dist/composer.js +7 -7
- package/dist/hooks/internal.d.ts +7 -1
- package/dist/hooks/use-attached-browsers.d.ts +21 -0
- package/dist/hooks/use-available-models.d.ts +2 -2
- package/dist/hooks/use-billing-usage.d.ts +1 -1
- package/dist/hooks/use-browser-frame-stream.d.ts +28 -0
- package/dist/hooks/use-browser-identities.d.ts +26 -0
- package/dist/hooks/use-browser-session.d.ts +28 -0
- package/dist/hooks/use-browser-sessions.d.ts +32 -0
- package/dist/hooks/use-codex-accounts.d.ts +3 -3
- package/dist/hooks/use-composer.d.ts +36 -9
- package/dist/hooks/use-computer-frame-stream.d.ts +24 -0
- package/dist/hooks/use-computer-session.d.ts +28 -0
- package/dist/hooks/use-computer-sessions.d.ts +28 -0
- package/dist/hooks/use-desktop-stream.d.ts +1 -1
- package/dist/hooks/use-environments.d.ts +11 -5
- package/dist/hooks/use-file-attachments.d.ts +1 -1
- package/dist/hooks/use-goal.d.ts +2 -2
- package/dist/hooks/use-human-input.d.ts +2 -2
- package/dist/hooks/use-last-started-turn-policy.d.ts +2 -2
- package/dist/hooks/use-machine-chip.d.ts +2 -2
- package/dist/hooks/use-machines.d.ts +10 -3
- package/dist/hooks/use-packs.d.ts +7 -2
- package/dist/hooks/use-rigs.d.ts +1 -1
- package/dist/hooks/use-sandbox-files.d.ts +25 -4
- package/dist/hooks/use-sandbox-git.d.ts +13 -5
- package/dist/hooks/use-sandbox-terminal.d.ts +1 -1
- package/dist/hooks/use-scheduled-tasks.d.ts +1 -1
- package/dist/hooks/use-session-capabilities.d.ts +5 -4
- package/dist/hooks/use-session-control.d.ts +1 -1
- package/dist/hooks/use-session-events.d.ts +2 -2
- package/dist/hooks/use-session-lineage.d.ts +1 -1
- package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
- package/dist/hooks/use-session.d.ts +2 -2
- package/dist/hooks/use-slash-commands.d.ts +1 -1
- package/dist/hooks/use-terminal-stream.d.ts +8 -2
- package/dist/hooks/use-transcription.d.ts +2 -2
- package/dist/hooks/use-turn-queue.d.ts +2 -2
- package/dist/hooks/use-video-artifact-playback.d.ts +9 -0
- package/dist/hooks/use-voice-input.d.ts +6 -4
- package/dist/hooks/use-workspace-capture.d.ts +1 -1
- package/dist/hooks/use-workspace-edit.d.ts +1 -1
- package/dist/hooks/use-workspace-sessions.d.ts +1 -1
- package/dist/hooks/use-workspaces.d.ts +1 -1
- package/dist/index.d.ts +158 -154
- package/dist/index.js +1718 -908
- package/dist/index.js.map +1 -1
- package/dist/interaction.d.ts +23 -0
- package/dist/interaction.js +36 -0
- package/dist/interaction.js.map +1 -0
- package/dist/interactive-workbench-viewers-KHNOHWQE.js +13 -0
- package/dist/interactive-workbench-viewers-KHNOHWQE.js.map +1 -0
- package/dist/lib/composer-responsive-context.d.ts +9 -0
- package/dist/lib/relay-wire.d.ts +4 -0
- package/dist/lib/sandbox-liveness.d.ts +9 -0
- package/dist/lib/terminal-capability.d.ts +5 -0
- package/dist/lib/use-portal-token-style.d.ts +14 -3
- package/dist/lib/xterm-theme.d.ts +1 -1
- package/dist/machines.d.ts +30 -30
- package/dist/machines.js +3 -3
- package/dist/provider.d.ts +4 -4
- package/dist/{queue-surface-implementation-J4XJFKRW.js → queue-surface-implementation-2KVJTYXH.js} +117 -64
- package/dist/queue-surface-implementation-2KVJTYXH.js.map +1 -0
- package/dist/realtime/dropdown-menu.d.ts +8 -8
- package/dist/realtime/realtime-control.d.ts +15 -6
- package/dist/realtime.d.ts +4 -4
- package/dist/realtime.js +30 -33
- package/dist/realtime.js.map +1 -1
- package/dist/session-context.d.ts +19 -1
- package/dist/session-ui.d.ts +14 -14
- package/dist/session-ui.js +6 -5
- package/dist/session.d.ts +28 -28
- package/dist/session.js +5 -5
- package/dist/timeline/activity-rail.d.ts +6 -3
- package/dist/timeline/disclosure-context.d.ts +1 -1
- package/dist/timeline/fleet-decision-projection.d.ts +1 -1
- package/dist/timeline/fleet-decision-row.d.ts +3 -3
- package/dist/timeline/index.d.ts +19 -19
- package/dist/timeline/parsers.d.ts +6 -3
- package/dist/timeline/projection.d.ts +3 -3
- package/dist/timeline/registry.d.ts +10 -1
- package/dist/timeline/screenshot-lightbox.d.ts +2 -2
- package/dist/timeline/shared.d.ts +21 -10
- package/dist/timeline/tool-diff.d.ts +2 -2
- package/dist/timeline/tool-renderers.d.ts +1 -1
- package/dist/timeline/turn-summary.d.ts +3 -3
- package/dist/timeline/types.d.ts +42 -2
- package/dist/timeline-annotation-selection-3L7LHGG2.js +187 -0
- package/dist/timeline-annotation-selection-3L7LHGG2.js.map +1 -0
- package/dist/timeline-annotations-dialog-U7EVLR75.js +196 -0
- package/dist/timeline-annotations-dialog-U7EVLR75.js.map +1 -0
- package/dist/voice-recording-store.d.ts +8 -2
- package/package.json +52 -7
- package/src/artifacts-document.ts +31 -0
- package/src/artifacts-presentation.ts +36 -0
- package/src/artifacts-spreadsheet.ts +21 -0
- package/src/artifacts.ts +86 -0
- package/src/client.ts +90 -1
- package/src/clipboard.ts +2 -0
- package/src/components/artifacts/artifact-surface.tsx +93 -0
- package/src/components/artifacts/document-editor.tsx +2255 -0
- package/src/components/artifacts/editable-artifact-ui.tsx +89 -0
- package/src/components/artifacts/editable-artifact-workbench.tsx +203 -0
- package/src/components/artifacts/editable-document.tsx +657 -0
- package/src/components/artifacts/editable-presentation.tsx +1020 -0
- package/src/components/artifacts/editable-spreadsheet.tsx +733 -0
- package/src/components/artifacts/index.ts +99 -0
- package/src/components/artifacts/presentation-editor.tsx +3148 -0
- package/src/components/artifacts/spreadsheet-canvas.ts +799 -0
- package/src/components/artifacts/spreadsheet-grid.tsx +2129 -0
- package/src/components/browser-viewer.tsx +1592 -0
- package/src/components/chat-composer.tsx +25 -2
- package/src/components/code-editor.tsx +90 -31
- package/src/components/command-palette.tsx +1 -1
- package/src/components/composer-transcription-control.tsx +51 -22
- package/src/components/composer.tsx +49 -23
- package/src/components/computer-viewer.tsx +1139 -0
- package/src/components/copy-button.tsx +1 -1
- package/src/components/desktop-viewer.tsx +103 -75
- package/src/components/file-browser.tsx +39 -17
- package/src/components/generated-video-player.tsx +89 -0
- package/src/components/human-input-form.tsx +2 -2
- package/src/components/interactive-workbench-viewers.ts +2 -0
- package/src/components/machine-card.tsx +1 -1
- package/src/components/machine-input-display.ts +3 -0
- package/src/components/machines/machine-detail.tsx +39 -15
- package/src/components/machines-dashboard.tsx +7 -6
- package/src/components/message-timeline.tsx +327 -37
- package/src/components/model-picker.tsx +2 -2
- package/src/components/model-policy-picker.tsx +16 -15
- package/src/components/queue-surface-implementation.tsx +135 -75
- package/src/components/queue-surface-state.tsx +2 -2
- package/src/components/sandbox-files.tsx +142 -62
- package/src/components/sandbox-terminal.tsx +119 -35
- package/src/components/sandbox-workspace.tsx +394 -228
- package/src/components/session-chrome.tsx +67 -27
- package/src/components/timeline-annotation-selection.tsx +221 -0
- package/src/components/timeline-annotations-dialog.tsx +213 -0
- package/src/components/timeline-annotations.tsx +84 -0
- package/src/components/tooltip.tsx +13 -16
- package/src/components/user-message-body.tsx +1 -1
- package/src/components/workbench-changes.tsx +192 -35
- package/src/components/workspace-dock.tsx +13 -5
- package/src/composer.ts +3 -0
- package/src/hooks/internal.ts +132 -38
- package/src/hooks/use-attached-browsers.ts +152 -0
- package/src/hooks/use-browser-frame-stream.ts +316 -0
- package/src/hooks/use-browser-identities.ts +225 -0
- package/src/hooks/use-browser-session.ts +476 -0
- package/src/hooks/use-browser-sessions.ts +281 -0
- package/src/hooks/use-codex-accounts.ts +4 -4
- package/src/hooks/use-composer.ts +769 -24
- package/src/hooks/use-computer-frame-stream.ts +311 -0
- package/src/hooks/use-computer-session.ts +442 -0
- package/src/hooks/use-computer-sessions.ts +245 -0
- package/src/hooks/use-environments.ts +24 -5
- package/src/hooks/use-file-attachments.ts +70 -32
- package/src/hooks/use-goal.ts +17 -5
- package/src/hooks/use-machine-chip.ts +5 -3
- package/src/hooks/use-machines.ts +79 -3
- package/src/hooks/use-packs.ts +51 -0
- package/src/hooks/use-sandbox-files.ts +382 -88
- package/src/hooks/use-sandbox-git.ts +208 -46
- package/src/hooks/use-sandbox-terminal.ts +3 -2
- package/src/hooks/use-session-capabilities.ts +94 -70
- package/src/hooks/use-session-events.ts +18 -4
- package/src/hooks/use-terminal-stream.ts +102 -23
- package/src/hooks/use-transcription.ts +4 -14
- package/src/hooks/use-turn-queue.ts +17 -5
- package/src/hooks/use-video-artifact-playback.ts +28 -0
- package/src/hooks/use-voice-input.ts +163 -19
- package/src/hooks/use-windowed-sections.ts +9 -7
- package/src/hooks/use-workspace-edit.ts +2 -1
- package/src/index.ts +21 -6
- package/src/interaction.ts +71 -0
- package/src/lib/composer-responsive-context.ts +15 -0
- package/src/lib/relay-wire.ts +4 -0
- package/src/lib/sandbox-liveness.ts +11 -0
- package/src/lib/terminal-capability.ts +10 -0
- package/src/lib/use-portal-token-style.ts +60 -15
- package/src/provider.tsx +52 -7
- package/src/realtime/dropdown-menu.tsx +15 -19
- package/src/realtime/realtime-control.tsx +16 -5
- package/src/session-context.ts +90 -0
- package/src/timeline/activity-rail.tsx +31 -6
- package/src/timeline/index.ts +4 -1
- package/src/timeline/parsers.ts +46 -20
- package/src/timeline/projection.ts +233 -13
- package/src/timeline/registry.ts +19 -0
- package/src/timeline/screenshot-lightbox.tsx +30 -9
- package/src/timeline/shared.tsx +59 -11
- package/src/timeline/tool-renderers.tsx +421 -24
- package/src/timeline/turn-summary.tsx +2 -2
- package/src/timeline/types.ts +58 -2
- package/src/voice-recording-store.ts +15 -0
- package/styles/compiled.css +5298 -0
- package/styles/compiled.d.ts +2 -0
- package/styles/effective-tokens.css +27 -0
- package/styles/index.css +18 -0
- package/styles/responsive.css +208 -0
- package/styles/responsive.d.ts +2 -0
- package/styles/tokens.css +50 -17
- package/dist/chunk-3PB7MIT6.js.map +0 -1
- package/dist/chunk-6EDV6YFE.js.map +0 -1
- package/dist/chunk-EB67J347.js.map +0 -1
- package/dist/chunk-EKZH6IDG.js.map +0 -1
- package/dist/chunk-FGZUCXZF.js.map +0 -1
- package/dist/chunk-HFO4ERGQ.js.map +0 -1
- package/dist/chunk-JB5725BI.js +0 -48
- package/dist/chunk-JB5725BI.js.map +0 -1
- package/dist/chunk-LGVMUIRV.js.map +0 -1
- package/dist/chunk-LWR4MXSS.js.map +0 -1
- package/dist/chunk-SRFUT2ZU.js.map +0 -1
- package/dist/chunk-U3CSCMWA.js.map +0 -1
- package/dist/chunk-VCBFUSUZ.js.map +0 -1
- package/dist/fleet-decision-projection-SLNZMS42.js +0 -241
- package/dist/fleet-decision-projection-SLNZMS42.js.map +0 -1
- package/dist/queue-surface-implementation-J4XJFKRW.js.map +0 -1
|
@@ -1,15 +1,16 @@
|
|
|
1
|
+
import {
|
|
2
|
+
formatBytes,
|
|
3
|
+
formatRelativeTime
|
|
4
|
+
} from "./chunk-LAKLF4PA.js";
|
|
1
5
|
import {
|
|
2
6
|
useMutationRunner,
|
|
7
|
+
usePageLiveActivity,
|
|
3
8
|
usePolledValue
|
|
4
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-KZ73RL76.js";
|
|
5
10
|
import {
|
|
6
11
|
OpenGeniContext,
|
|
7
12
|
useOpenGeni
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import {
|
|
10
|
-
formatBytes,
|
|
11
|
-
formatRelativeTime
|
|
12
|
-
} from "./chunk-LAKLF4PA.js";
|
|
13
|
+
} from "./chunk-HDBG7XGO.js";
|
|
13
14
|
import {
|
|
14
15
|
cn
|
|
15
16
|
} from "./chunk-22KP6LR5.js";
|
|
@@ -533,7 +534,7 @@ function MachineCard({
|
|
|
533
534
|
className: cn(
|
|
534
535
|
"og-root group relative flex flex-col gap-3 overflow-hidden rounded-og-lg border border-og-border",
|
|
535
536
|
"bg-og-surface-1 p-4 shadow-og-sm transition-colors",
|
|
536
|
-
openable && "cursor-pointer hover:border-og-border-strong focus-visible:border-og-accent/60 focus-visible:outline-
|
|
537
|
+
openable && "cursor-pointer hover:border-og-border-strong focus-visible:border-og-accent/60 focus-visible:outline-hidden",
|
|
537
538
|
machine.active && "border-og-accent/40",
|
|
538
539
|
className
|
|
539
540
|
),
|
|
@@ -886,7 +887,14 @@ function MetricHistoryChart({
|
|
|
886
887
|
}
|
|
887
888
|
|
|
888
889
|
// src/components/machines/machine-detail.tsx
|
|
889
|
-
import {
|
|
890
|
+
import {
|
|
891
|
+
ArrowLeftIcon,
|
|
892
|
+
CpuIcon as CpuIcon2,
|
|
893
|
+
LaptopIcon as LaptopIcon2,
|
|
894
|
+
RadioIcon,
|
|
895
|
+
ServerIcon as ServerIcon2,
|
|
896
|
+
Trash2Icon
|
|
897
|
+
} from "lucide-react";
|
|
890
898
|
|
|
891
899
|
// src/components/machines/series.ts
|
|
892
900
|
var METRIC_WINDOWS = ["15m", "1h", "6h", "24h"];
|
|
@@ -985,6 +993,7 @@ function MachineDetail({
|
|
|
985
993
|
onWindowChange,
|
|
986
994
|
loadingSeries,
|
|
987
995
|
onBack,
|
|
996
|
+
onRemove,
|
|
988
997
|
now = Date.now(),
|
|
989
998
|
className
|
|
990
999
|
}) {
|
|
@@ -1015,20 +1024,36 @@ function MachineDetail({
|
|
|
1015
1024
|
machine.arch
|
|
1016
1025
|
] })
|
|
1017
1026
|
] }),
|
|
1018
|
-
/* @__PURE__ */
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1027
|
+
/* @__PURE__ */ jsxs7("div", { className: "flex shrink-0 items-center gap-2", children: [
|
|
1028
|
+
onRemove && machine.enrollmentId && !machine.isSessionGroup ? /* @__PURE__ */ jsxs7(
|
|
1029
|
+
"button",
|
|
1030
|
+
{
|
|
1031
|
+
type: "button",
|
|
1032
|
+
"data-remove-machine": true,
|
|
1033
|
+
"aria-label": `Remove machine ${machine.name}`,
|
|
1034
|
+
onClick: () => onRemove(machine),
|
|
1035
|
+
className: "inline-flex min-h-9 items-center gap-1.5 rounded-og-sm border border-og-status-failed/40 px-2.5 py-1 font-medium text-og-xs text-og-status-failed transition-colors hover:bg-og-status-failed/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-og-status-failed/50 pointer-coarse:min-h-11",
|
|
1036
|
+
children: [
|
|
1037
|
+
/* @__PURE__ */ jsx7(Trash2Icon, { className: "size-3.5", "aria-hidden": true }),
|
|
1038
|
+
/* @__PURE__ */ jsx7("span", { className: "hidden sm:inline", children: "Remove machine" })
|
|
1039
|
+
]
|
|
1040
|
+
}
|
|
1041
|
+
) : null,
|
|
1042
|
+
/* @__PURE__ */ jsx7("div", { className: "flex items-center gap-0.5 rounded-og-md border border-og-border bg-og-surface-1 p-0.5", children: METRIC_WINDOWS.map((w) => /* @__PURE__ */ jsx7(
|
|
1043
|
+
"button",
|
|
1044
|
+
{
|
|
1045
|
+
type: "button",
|
|
1046
|
+
onClick: () => onWindowChange(w),
|
|
1047
|
+
"data-active": w === window2,
|
|
1048
|
+
className: cn(
|
|
1049
|
+
"rounded-og-sm px-2 py-1 font-og-mono text-og-xs transition-colors",
|
|
1050
|
+
w === window2 ? "bg-og-surface-3 text-og-fg shadow-og-sm" : "text-og-fg-subtle hover:text-og-fg-muted"
|
|
1051
|
+
),
|
|
1052
|
+
children: w
|
|
1053
|
+
},
|
|
1054
|
+
w
|
|
1055
|
+
)) })
|
|
1056
|
+
] })
|
|
1032
1057
|
] }),
|
|
1033
1058
|
/* @__PURE__ */ jsxs7(
|
|
1034
1059
|
"div",
|
|
@@ -1144,7 +1169,7 @@ function EmptyState({ onEnroll }) {
|
|
|
1144
1169
|
/* @__PURE__ */ jsx8("span", { className: "flex size-10 items-center justify-center rounded-full bg-og-surface-2 text-og-fg-subtle", children: /* @__PURE__ */ jsx8(LaptopIcon3, { className: "size-5", "aria-hidden": true }) }),
|
|
1145
1170
|
/* @__PURE__ */ jsxs8("div", { className: "space-y-1", children: [
|
|
1146
1171
|
/* @__PURE__ */ jsx8("p", { className: "text-og-base font-medium text-og-fg", children: "No machines yet" }),
|
|
1147
|
-
/* @__PURE__ */ jsx8("p", { className: "max-w-xs text-og-sm text-og-fg-muted", children: "
|
|
1172
|
+
/* @__PURE__ */ jsx8("p", { className: "max-w-xs text-og-sm text-og-fg-muted", children: "Connect your own computer to run the agent on it \u2014 your files, your terminal, your desktop." })
|
|
1148
1173
|
] }),
|
|
1149
1174
|
onEnroll ? /* @__PURE__ */ jsxs8(
|
|
1150
1175
|
"button",
|
|
@@ -1155,7 +1180,7 @@ function EmptyState({ onEnroll }) {
|
|
|
1155
1180
|
className: "inline-flex items-center gap-1.5 rounded-og-sm bg-og-accent px-3 py-1.5 text-og-sm font-medium text-og-accent-fg transition-colors hover:bg-og-accent-strong pointer-coarse:min-h-11",
|
|
1156
1181
|
children: [
|
|
1157
1182
|
/* @__PURE__ */ jsx8(PlusIcon, { className: "size-3.5", "aria-hidden": true }),
|
|
1158
|
-
"
|
|
1183
|
+
"Connect a machine"
|
|
1159
1184
|
]
|
|
1160
1185
|
}
|
|
1161
1186
|
) : null
|
|
@@ -1195,7 +1220,7 @@ function Header({
|
|
|
1195
1220
|
className: "inline-flex items-center gap-1.5 rounded-og-sm border border-og-border px-2.5 py-1 text-og-sm font-medium text-og-fg-muted transition-colors hover:border-og-border-strong hover:text-og-fg pointer-coarse:min-h-11",
|
|
1196
1221
|
children: [
|
|
1197
1222
|
/* @__PURE__ */ jsx8(PlusIcon, { className: "size-3.5", "aria-hidden": true }),
|
|
1198
|
-
"
|
|
1223
|
+
"Connect a machine"
|
|
1199
1224
|
]
|
|
1200
1225
|
}
|
|
1201
1226
|
) : null
|
|
@@ -1724,6 +1749,9 @@ function OpenGeniProvider({
|
|
|
1724
1749
|
);
|
|
1725
1750
|
const callbackRef = useRef2(onWorkspaceControlEvent);
|
|
1726
1751
|
const reconcilersRef = useRef2(/* @__PURE__ */ new Map());
|
|
1752
|
+
const reconcileInFlightRef = useRef2(/* @__PURE__ */ new Map());
|
|
1753
|
+
const workspaceControlSequencesRef = useRef2(/* @__PURE__ */ new Map());
|
|
1754
|
+
const pageLive = usePageLiveActivity();
|
|
1727
1755
|
callbackRef.current = onWorkspaceControlEvent;
|
|
1728
1756
|
const verifyApiContract = useCallback(async () => {
|
|
1729
1757
|
try {
|
|
@@ -1756,28 +1784,54 @@ function OpenGeniProvider({
|
|
|
1756
1784
|
[]
|
|
1757
1785
|
);
|
|
1758
1786
|
const reconcileSession = useMemo(
|
|
1759
|
-
() =>
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1787
|
+
() => (sessionId) => {
|
|
1788
|
+
const existing = reconcileInFlightRef.current.get(sessionId);
|
|
1789
|
+
if (existing) return existing;
|
|
1790
|
+
const promise = (async () => {
|
|
1791
|
+
await withTimeout(verifyApiContract(), 1e4, "API contract reconciliation");
|
|
1792
|
+
const callbacks = [...reconcilersRef.current.get(sessionId)?.values() ?? []];
|
|
1793
|
+
await withTimeout(
|
|
1794
|
+
Promise.all(callbacks.map((reconcile) => reconcile())).then(() => void 0),
|
|
1795
|
+
15e3,
|
|
1796
|
+
"session reconciliation"
|
|
1797
|
+
);
|
|
1798
|
+
})().finally(() => {
|
|
1799
|
+
if (reconcileInFlightRef.current.get(sessionId) === promise) {
|
|
1800
|
+
reconcileInFlightRef.current.delete(sessionId);
|
|
1801
|
+
}
|
|
1802
|
+
});
|
|
1803
|
+
reconcileInFlightRef.current.set(sessionId, promise);
|
|
1804
|
+
return promise;
|
|
1763
1805
|
},
|
|
1764
1806
|
[verifyApiContract]
|
|
1765
1807
|
);
|
|
1766
1808
|
useEffect(() => {
|
|
1809
|
+
if (!pageLive) {
|
|
1810
|
+
setWorkspaceControlConnectionState("idle");
|
|
1811
|
+
return;
|
|
1812
|
+
}
|
|
1767
1813
|
const controller = new AbortController();
|
|
1768
|
-
setWorkspaceControlEvent(null);
|
|
1769
1814
|
setWorkspaceControlConnectionState("connecting");
|
|
1770
1815
|
void (async () => {
|
|
1771
1816
|
try {
|
|
1772
1817
|
await verifyApiContract();
|
|
1773
1818
|
const workspace = await client.getWorkspace(workspaceId);
|
|
1819
|
+
const resumeAfter = Math.max(
|
|
1820
|
+
workspaceControlSequencesRef.current.get(workspaceId) ?? 0,
|
|
1821
|
+
workspace.inferenceControl.revision
|
|
1822
|
+
);
|
|
1823
|
+
workspaceControlSequencesRef.current.set(workspaceId, resumeAfter);
|
|
1774
1824
|
const stream = client.streamWorkspaceControlEvents(workspaceId, {
|
|
1775
|
-
after:
|
|
1825
|
+
after: resumeAfter,
|
|
1776
1826
|
signal: controller.signal,
|
|
1777
1827
|
onStateChange: setWorkspaceControlConnectionState
|
|
1778
1828
|
});
|
|
1779
1829
|
for await (const event of stream) {
|
|
1780
1830
|
if (controller.signal.aborted) return;
|
|
1831
|
+
workspaceControlSequencesRef.current.set(
|
|
1832
|
+
workspaceId,
|
|
1833
|
+
Math.max(workspaceControlSequencesRef.current.get(workspaceId) ?? 0, event.sequence)
|
|
1834
|
+
);
|
|
1781
1835
|
setWorkspaceControlEvent(
|
|
1782
1836
|
(current) => !current || event.sequence > current.sequence ? event : current
|
|
1783
1837
|
);
|
|
@@ -1792,7 +1846,7 @@ function OpenGeniProvider({
|
|
|
1792
1846
|
}
|
|
1793
1847
|
})();
|
|
1794
1848
|
return () => controller.abort();
|
|
1795
|
-
}, [client, verifyApiContract, workspaceId]);
|
|
1849
|
+
}, [client, pageLive, verifyApiContract, workspaceId]);
|
|
1796
1850
|
const value = useMemo(
|
|
1797
1851
|
() => ({
|
|
1798
1852
|
client,
|
|
@@ -1816,6 +1870,20 @@ function OpenGeniProvider({
|
|
|
1816
1870
|
contractMismatch ? /* @__PURE__ */ jsx12(ApiContractMismatchScreen, { mismatch: contractMismatch }) : null
|
|
1817
1871
|
] });
|
|
1818
1872
|
}
|
|
1873
|
+
function withTimeout(promise, timeoutMs, label) {
|
|
1874
|
+
let timer;
|
|
1875
|
+
return Promise.race([
|
|
1876
|
+
promise,
|
|
1877
|
+
new Promise((_resolve, reject) => {
|
|
1878
|
+
timer = setTimeout(
|
|
1879
|
+
() => reject(new Error(`${label} timed out after ${timeoutMs}ms`)),
|
|
1880
|
+
timeoutMs
|
|
1881
|
+
);
|
|
1882
|
+
})
|
|
1883
|
+
]).finally(() => {
|
|
1884
|
+
if (timer !== void 0) clearTimeout(timer);
|
|
1885
|
+
});
|
|
1886
|
+
}
|
|
1819
1887
|
function ApiContractMismatchScreen({ mismatch }) {
|
|
1820
1888
|
return /* @__PURE__ */ jsx12(
|
|
1821
1889
|
"div",
|
|
@@ -1856,6 +1924,23 @@ function reloadForContractMismatchOnce(mismatch) {
|
|
|
1856
1924
|
|
|
1857
1925
|
// src/hooks/use-machines.ts
|
|
1858
1926
|
var EMPTY = { activeSandboxId: null, activeEpoch: 0, machines: [] };
|
|
1927
|
+
function swapFailureMessage(result) {
|
|
1928
|
+
if (result.reason?.trim()) return result.reason;
|
|
1929
|
+
switch (result.code) {
|
|
1930
|
+
case "recovery_in_progress":
|
|
1931
|
+
return "The managed sandbox is still recovering. Try again shortly.";
|
|
1932
|
+
case "recovery_degraded":
|
|
1933
|
+
return "The managed sandbox recovery is degraded and needs attention.";
|
|
1934
|
+
case "recovery_unrecoverable":
|
|
1935
|
+
return "The managed sandbox could not be recovered.";
|
|
1936
|
+
case "offline_enrollment":
|
|
1937
|
+
return "The selected machine is offline.";
|
|
1938
|
+
case "concurrent_swap":
|
|
1939
|
+
return "The session route changed concurrently. Refresh and try again.";
|
|
1940
|
+
default:
|
|
1941
|
+
return "The session stayed on its current sandbox.";
|
|
1942
|
+
}
|
|
1943
|
+
}
|
|
1859
1944
|
function useMachines(options = {}) {
|
|
1860
1945
|
const { client, workspaceId } = useOpenGeni(options);
|
|
1861
1946
|
const machinesClient = options.machinesClient ?? client;
|
|
@@ -1884,8 +1969,11 @@ function useMachines(options = {}) {
|
|
|
1884
1969
|
const { run, mutating, mutationError, clearMutationError } = useMutationRunner(identityKey);
|
|
1885
1970
|
const [attachState, setAttachState] = useState4(() => ({ identity: identityKey, sandboxId: null }));
|
|
1886
1971
|
const attachingSandboxId = attachState.identity === identityKey ? attachState.sandboxId : null;
|
|
1972
|
+
const [removeState, setRemoveState] = useState4(() => ({ identity: identityKey, enrollmentId: null }));
|
|
1973
|
+
const removingEnrollmentId = removeState.identity === identityKey ? removeState.enrollmentId : null;
|
|
1887
1974
|
const data = loadedData ?? EMPTY;
|
|
1888
1975
|
const canAttach = sessionId !== void 0 && (typeof machinesClient.attachMachine === "function" || typeof machinesClient.swapActiveSandbox === "function");
|
|
1976
|
+
const canRemove = typeof machinesClient.removeEnrollment === "function";
|
|
1889
1977
|
const attach = useCallback2(
|
|
1890
1978
|
async (sandboxId) => {
|
|
1891
1979
|
if (sessionId === void 0) return false;
|
|
@@ -1894,7 +1982,10 @@ function useMachines(options = {}) {
|
|
|
1894
1982
|
const ownedIdentity = identityKey;
|
|
1895
1983
|
setAttachState({ identity: ownedIdentity, sandboxId });
|
|
1896
1984
|
const result = await run(async () => {
|
|
1897
|
-
await runSwap();
|
|
1985
|
+
const response = await runSwap();
|
|
1986
|
+
if (response && typeof response === "object" && "swapped" in response && response.swapped === false) {
|
|
1987
|
+
throw new Error(swapFailureMessage(response));
|
|
1988
|
+
}
|
|
1898
1989
|
return true;
|
|
1899
1990
|
});
|
|
1900
1991
|
if (identityRef.current === ownedIdentity) {
|
|
@@ -1912,6 +2003,24 @@ function useMachines(options = {}) {
|
|
|
1912
2003
|
},
|
|
1913
2004
|
[machinesClient, workspaceId]
|
|
1914
2005
|
);
|
|
2006
|
+
const remove = useCallback2(
|
|
2007
|
+
async (enrollmentId, request = {}) => {
|
|
2008
|
+
if (!machinesClient.removeEnrollment) return null;
|
|
2009
|
+
const ownedIdentity = identityKey;
|
|
2010
|
+
setRemoveState({ identity: ownedIdentity, enrollmentId });
|
|
2011
|
+
const result = await run(
|
|
2012
|
+
() => machinesClient.removeEnrollment(workspaceId, enrollmentId, request)
|
|
2013
|
+
);
|
|
2014
|
+
if (identityRef.current === ownedIdentity) {
|
|
2015
|
+
setRemoveState({ identity: ownedIdentity, enrollmentId: null });
|
|
2016
|
+
if (result?.outcome === "removed" || result?.outcome === "already_removed") {
|
|
2017
|
+
await refresh();
|
|
2018
|
+
}
|
|
2019
|
+
}
|
|
2020
|
+
return result;
|
|
2021
|
+
},
|
|
2022
|
+
[machinesClient, workspaceId, identityKey, run, refresh]
|
|
2023
|
+
);
|
|
1915
2024
|
return {
|
|
1916
2025
|
machines: data.machines,
|
|
1917
2026
|
activeSandboxId: data.activeSandboxId,
|
|
@@ -1922,8 +2031,11 @@ function useMachines(options = {}) {
|
|
|
1922
2031
|
attach,
|
|
1923
2032
|
canAttach,
|
|
1924
2033
|
fetchSeries,
|
|
1925
|
-
attaching: mutating,
|
|
2034
|
+
attaching: mutating && attachingSandboxId !== null,
|
|
1926
2035
|
attachingSandboxId,
|
|
2036
|
+
remove,
|
|
2037
|
+
canRemove,
|
|
2038
|
+
removingEnrollmentId,
|
|
1927
2039
|
mutationError,
|
|
1928
2040
|
clearMutationError
|
|
1929
2041
|
};
|
|
@@ -1957,4 +2069,4 @@ export {
|
|
|
1957
2069
|
OpenGeniProvider,
|
|
1958
2070
|
useMachines
|
|
1959
2071
|
};
|
|
1960
|
-
//# sourceMappingURL=chunk-
|
|
2072
|
+
//# sourceMappingURL=chunk-X4S56Y2H.js.map
|