name: hd-wake-repair description: > How Hydrogen Desktop automatically repairs the workspace connection after the laptop wakes from sleep: the wake-heal cascade, the header wake indicator with its live info tooltip, the Settings > Desktop > Wake section (heal toggle, indicator toggle, linger slider), and the /wake/* control API endpoints. Read this when the user reports HD did not reconnect after sleep, sees a "cannot reconnect" dialog, asks what the sunrise/sync icon in the header is, or wants to test or configure wake behavior. Trigger words: wake from sleep, laptop sleep, lid close, sleep resume, resume from sleep, reconnect after sleep, wake repair, wake heal, wake indicator, sunrise icon, cannot reconnect, workspace stuck after wake, wake status, wake simulate, wake settings.

HD Wake Repair (reconnect after laptop sleep)

WSL2-runtime version (default). The heal cascade below manipulates the Adom-Workspace WSL distro; the legacy Docker runtime does not have this feature.

When the laptop sleeps, WSL2 networking and code-server often come back wedged: the user reopens the lid and sees a dead editor pane or VS Code's "Cannot reconnect" dialog. HD detects the wake natively (Win32 power notifications, both manual and automatic resume, deduplicated) and runs an automatic repair so the user should normally have to do NOTHING.

What the user sees

  • Wake indicator in the header, to the right of the lightbulb (only if enabled in settings, default off): a spinning sync icon while healing, a sunrise icon when the heal finished, an alert icon if it failed.
  • Hovering the small info (i) icon next to it shows a live tooltip with the current phase and the last log lines, updating as the heal runs.
  • The indicator lingers for a configurable time after the wake (default 60s), then hides itself.

Settings (Settings window > Desktop > Wake)

Setting Key Default Meaning
Repair connection after wake desktop.wake_heal on Run the heal cascade on resume. Turning it off means wakes are only logged.
Show wake indicator desktop.wake_indicator off Show the header indicator + info tooltip after a wake.
Indicator linger desktop.wake_indicator_linger 60s Slider (0-600s, 15s steps): how long the indicator stays visible after a wake.

If the user complains about reconnects, suggest turning the indicator ON so they (and you) can watch what the heal is doing.

Control API endpoints

On the HD control API (port from ~/.adom/hd-control-url, see hd-api):

  • GET /wake/status — full state: last_sleep_at, last_wake_at, wake_kind, current phase, healing, heal_enabled, and the recent log (capped 40 lines). Always read this first when debugging a wake complaint.
  • POST /wake/simulate — fires a fake wake event and runs the real heal cascade end-to-end. Safe to use for testing; takes ~20-60s on a healthy system.
  • POST /wake/config {"heal_enabled": true|false} — toggle healing at runtime (the settings toggle calls this).

What the heal actually does (so you can explain or debug it)

Three phases, visible in the /wake/status log:

  1. Backend — polls workspace health up to 8 rounds x 12s. Restarts code-server at round 2 if still down. If a WSL wedge is suspected, runs wsl --terminate Adom-Workspace at round 4 and lets the distro boot fresh. A full wsl --shutdown is NEVER automatic (it would kill other distros); that remains a manual last resort.
  2. Token re-stamp/var/run/adom/api-key lives on tmpfs inside the distro, so a distro restart wipes it. HD re-writes it from the saved session so agents inside the workspace keep working.
  3. Pane — checks the VS Code pane up to 3 x 15s for a stuck "Cannot reconnect" dialog and, only if stuck, reloads the editor iframe (pane-only reload, not the whole app).

From inside the workspace (your perspective)

A laptop sleep looks to you like a frozen clock and a brief network blackout. After a wake: your API key file may have just been re-stamped, and code-server may have restarted underneath you. If the user says "it didn't come back":

  1. GET /wake/status and read the log — did the heal run, and where did it stop?
  2. If heal_enabled is false, ask the user if they want it on (POST /wake/config).
  3. POST /wake/simulate reproduces the whole flow on demand.
  4. If the heal reports failure repeatedly, the workspace may need a manual restart: Adom menu > Restart Container (which shows a live log of what it is doing).