name: hydrogen-workspace-monitoring description: > How Hydrogen monitors and manages the local workspace and code-server. Covers the 15s workspace state poll, the two health levels (runtime available, workspace Running + code-server reachable), the floaty states, auto-start via setup_and_start, auto-reload of the VS Code iframe, and the lifecycle dialog system. Read BEFORE touching PanelVisualStudioCode.svelte, ContainerLifecycleDialog.svelte, or any workspace state handling code. Trigger words: workspace stopped, workspace monitoring, workspace poll, workspace floaty, start workspace, code-server reachable, lifecycle dialog, workspace state, workspace running.

Hydrogen Workspace Monitoring

This is the platform-generic reference for how Hydrogen monitors workspace health. The host-platform specifics (the runtime-unavailable floaty wording, the stop command, the exact code-server reachability port, and the no-daemon framing) live in your platform bootstrap's version of this skill.

Architecture

The workspace is Hydrogen's local code-server-backed dev environment. Hydrogen monitors workspace health at two levels:

  1. Runtime available — is the workspace runtime itself installed and responding on this machine?
  2. Workspace healthy — is the workspace present AND Running AND is code-server reachable on its host port?

The second level is a real reachability check, not just "is the workspace present." A resume reality-check (after sleep, or after an Hydrogen rebuild/relaunch) requires code-server to actually answer before Hydrogen trusts the workspace as healthy — a workspace can be Running while code-server is dead.

The VS Code panel (PanelVisualStudioCode.svelte) polls workspace state every 15s and shows appropriate UI for each state. These frontend components are runtime-agnostic; they front the active runtime via the runtime trait.

Workspace State Poll

PanelVisualStudioCode.svelte calls get_container_status (Tauri command) every 15s. The command dispatches through the runtime trait to the active runtime impl. Returns a status struct shaped like:

pub struct ContainerStatus {
    pub docker_available: bool,    // is the workspace runtime available?
    pub image_pulled: bool,        // is the workspace image/tarball present?
    pub container_exists: bool,    // is the workspace present (Running or Stopped)?
    pub container_running: bool,   // is it Running AND code-server reachable?
    pub container_id: Option<String>,
    pub error: Option<String>,
}

The field names are inherited from the Docker era; under any runtime they map onto the two health levels above (runtime availability, then workspace-present → workspace-Running + code-server-reachable).

Floaty States

All floaties appear INSIDE the VS Code panel only — not as full-app modals. They are draggable (grab header to move). The rest of the app (wiki tab, menu, etc.) remains fully interactive.

1. Runtime Not Available (red dot)

  • When: the workspace runtime itself is not installed / not responding (level-1 health fails)
  • Action: "Run Setup Steps" button → dispatches hydrogen-show-setup event (which walks the user through enabling the runtime)
  • Color: Red dot in header

The exact runtime name and floaty message are platform-specific — see your platform bootstrap's version of this skill.

2. Workspace Stopped / Not Ready (red dot)

  • When: the runtime is available but the workspace isn't Running, or it's Running but code-server isn't reachable on its host port (container_running == false)
  • Message: "The Adom workspace is not running."
  • Action: "Start Workspace" button → calls setup_and_start Tauri command
  • Lifecycle dialog: Shows the draggable lifecycle dialog with live setup output
  • Auto-reload: After the workspace + code-server come up, waits for code-server health, then reloads the VS Code iframe

Auto-Start via setup_and_start

The "Start Workspace" path calls Tauri setup_and_start, which delegates to the active runtime's setup_and_start:

  • If the workspace isn't present yet, fresh_import = download the golden image + provision the workspace + start code-server.
  • If the workspace is present but code-server is down, it just (re-)starts code-server.

Importantly, code-server runs as an Hydrogen-owned child process (not a detached nohup) — it dies with Hydrogen. So Hydrogen also re-ensures code-server on every launch (look for re-ensured code-server on launch in the log). Without that, a freshly relaunched Hydrogen would show the workspace Running but the editor stuck on "Starting AI Environment" forever, because the previous Hydrogen's code-server child was orphaned. See hydrogen-workspace-lifecycle for the full lifecycle detail.

Lifecycle Dialog

ContainerLifecycleDialog.svelte — a draggable floating card (no background blur) that shows live command output for start/stop/restart operations on the workspace.

Events

Listens for hydrogen-container-lifecycle CustomEvents on window:

  • action: 'restart' | 'stop' | 'start' — opens dialog, starts spinner
  • action: 'step', step: string — appends a log line
  • action: 'done' — stops spinner, shows Close button, auto-reloads VS Code
  • action: 'stopped' — stops spinner (for stop-only operations)
  • action: 'error', message: string — shows error state

Title

Dynamic based on actionType:

  • Restarting: "Workspace Restarting..." → "Restart Complete"
  • Stopping: "Stopping Workspace..." → "Workspace Stopped"
  • Starting: "Starting Workspace..." → "Workspace Started"
  • On error: "Restart/Stop/Start Failed"

VS Code Auto-Reload

After the done event, the dialog polls code-server health (/proxy/8080/) every 5s for up to 2 minutes. When healthy, it reloads all iframes whose src points at the host-side code-server port, then shows "VS Code iframe reloaded" and stops.

Tauri Commands

Command What it does
get_container_status Returns workspace status — runtime available, workspace present, Running + code-server reachable
setup_and_start fresh_import (provision workspace) + start code-server, up to 10 min timeout
stop_container Stops the workspace
toggle_console Show/hide the debug console window
is_console_visible Returns true if console window exists

The exact stop command is platform-specific — see your platform bootstrap's version of this skill.

  • Restart Workspace — stop the workspace + re-ensure code-server; emits lifecycle events, shows dialog
  • Stop Workspace — stops the workspace; emits lifecycle events, shows dialog, triggers stopped floaty
  • Start Workspace — available when stopped (from floaty button or menu)

Settings (Desktop section in Settings dialog)

  • desktop.show_console_on_startup — boolean, default false
  • desktop.launch_on_boot — boolean, default true (auto-start on boot)
  • your platform bootstrap's hydrogen-workspace-monitoring — the runtime-specific floaty wording, stop command, reachability check, and no-daemon framing
  • hydrogen-workspace-lifecycle — provision/export/remove/stop, the never-touch-global rule, control endpoints
  • hydrogen-container-stats — the title-bar CPU/RAM bars and workspace_stats() probe
  • hydrogen-networking — code-server port, control port