bootstrap
Adom Hydrogen (platform base)
Public Made by Adomby adom
Layer Hydrogen's workspace onto a standard Adom workstation.
← Commit history
hygiene: scripts.install lifecycle (current logic; stale install.sh replaced), hero to screenshots/ (out of the install tarball), discovery_triggers, page.json unpinned to 0.3.21
7 files changed
+195−94
install.sh+69−37@@ -1,55 +1,85 @@ #!/usr/bin/env bash-# postinstall.sh — adom/hd-bootstrap+# install.sh — adom/hydrogen-bootstrap (the scripts.install lifecycle hook; was postinstall.sh) # # Runs (as the workspace user) after every dependency is installed —-# apps/skills install first, bootstraps (and their postinstall) last. This hook applies the HD *environment configuration* that isn't a+# adompkg installs apps/skills first, bootstraps (and their postinstall)+# last. This hook applies the HD *environment configuration* that isn't a # package: the Claude Code + adom-vscode extensions, and the VS Code / code-server-# settings that make the editor behave like Hydrogen Desktop.+# settings that make the editor behave like Hydrogen. # # What is NOT here, by design: # - the Adom ecosystem (skills hub, distributor search, KiCad/Fusion, pup, # adom-cli, adom-vscode binary, ...) — comes from the adom/core dependency-# - the hd-* runtime skills — BUNDLED in this package (skills/ dir)-# - the CLIs (adom-cli, adom-desktop) — their own dependencies+# - the hd-* runtime skills — the adom/hd-skills dependency+# - the workspace-updater daemon + the CLIs — their own dependencies # - the OS baseline (apt, code-server, systemd, user/linger/pam) — that's # the golden image's Dockerfile ("hardware"); a live install assumes a # workspace that already has it. # # Idempotent + LIVE-INSTALLABLE: this must converge correctly from a cold-# `adom-wiki pkg install adom/hd-bootstrap` on an already-running workspace (the+# `adompkg install adom/hydrogen-bootstrap` on an already-running workspace (the # vendor "am I set up?" path), not only inside the golden-image bake. Re-runs # are safe. The bake runs the exact same command, just earlier. #-# Mirrors the config sections of hd-wsl2-image/image/bake-hd-setup.sh — keep-# the two in lockstep until the bake is rewritten to just install this.+# Mirrors the config sections of the golden-image bake script+# (bake-hydrogen-setup.sh in the image repo) — keep the two in lockstep until+# the bake is rewritten to just install this. set -euo pipefail log() { echo "[hd-bootstrap] $*"; } CS="$(command -v code-server 2>/dev/null || echo /usr/lib/code-server/bin/code-server)" HERE="$(cd "$(dirname "$0")" && pwd)" -# 0. Deploy the bundled hd-* runtime skills into ~/.claude/skills/. These ship-# INSIDE this package (HD-specific); the package's skills/ dir is the source of truth.+# 0. Deploy the bundled hydrogen-* runtime skills into ~/.claude/skills/. These+# ship INSIDE this package (Hydrogen-specific — there is no separate skills+# package); the package's skills/ dir is the source of truth.+# NAMING CUTOVER (2026-08): skills renamed hd-* -> hydrogen-*. Deploy EVERY+# bundled skill dir (no name-prefix glob to go stale again), and purge the+# old hd-* copies a previous version deployed so the two generations never+# sit side by side (the ab 2.0.17 lesson, issue #584 sidebar). if [ -d "$HERE/skills" ]; then- log "deploying bundled hd-* skills"+ log "deploying bundled hydrogen skills" install -d -m 0755 "$HOME/.claude/skills" count=0- for d in "$HERE"/skills/hd-*/; do+ for d in "$HERE"/skills/*/; do [ -f "${d}SKILL.md" ] || continue name="$(basename "$d")" install -d -m 0755 "$HOME/.claude/skills/${name}" install -m 0644 "${d}SKILL.md" "$HOME/.claude/skills/${name}/SKILL.md" count=$((count + 1)) done- log " deployed ${count} hd-* skills"+ log " deployed ${count} bundled skills"+ purged=0+ for d in "$HOME"/.claude/skills/hd-*/; do+ [ -d "$d" ] || continue+ rm -rf "$d"+ purged=$((purged + 1))+ done+ [ "$purged" -gt 0 ] && log " purged ${purged} stale hd-* skill dirs (renamed to hydrogen-*)" fi +# 0b. Purge KNOWN-DEAD sibling module dirs. These are baked v22 leftovers whose+# packages were renamed in the registry (June slug consolidation + the+# adom-desktop -> adom-bridge rename): `pkg update` skips them forever with a+# STALE_INSTALL warning and never deletes the folders, so every fresh install+# carries dead names in adom_modules (John, 2026-08-09). Fixed allowlist on+# purpose - a hook must never guess at deleting things the registry merely+# failed to resolve transiently. Successors all install via the dependency+# tree, so removing the corpse loses nothing.+MODULES_ADOM="$(cd "$HERE/.." && pwd)"+for dead in adom-desktop step2glb adom-theme-system adom-workspace-control; do+ if [ -d "${MODULES_ADOM}/${dead}" ]; then+ rm -rf "${MODULES_ADOM}/${dead}"+ log "purged dead module dir: adom/${dead} (renamed in the registry; successor installs via the tree)"+ fi+done+ # 1. Claude Code CLI — NOT installed here, on purpose. It's not an adompkg/wiki # package (it's Anthropic's, from claude.ai), and its installer needs a working # systemd user session, which is unreliable in the bake env. HD installs + auths # it at runtime via its setup cascade (install-claude-cli + claude-auth), in the # real workspace where the user session works. So the bootstrap leaves Claude to-# HD. Just ensure ~/.local/bin is on PATH (for adompkg + adom-desktop).+# HD. Just ensure ~/.local/bin is on PATH (for adompkg + the Adom CLIs). grep -q '/.local/bin' "$HOME/.bashrc" 2>/dev/null \ || printf 'export PATH="$HOME/.local/bin:$PATH"\n' >> "$HOME/.bashrc" @@ -80,13 +110,14 @@ cat > "$HOME/.local/share/code-server/User/settings.json" <<'SETTINGS' "workbench.startupEditor": "none", "workbench.activityBar.location": "default", "workbench.activityBar.iconClickBehavior": "toggle",- "workbench.colorTheme": "Default Dark Modern",+ "workbench.colorTheme": "Adom Studio Dark (Brighter Text)",+ "editor.fontSize": 15, "workbench.statusBar.visible": false, "workbench.navigationControl.enabled": false, "workbench.secondarySideBar.visible": false, "workbench.secondarySideBar.defaultVisibility": "hidden",- "claudeCode.allowDangerouslySkipPermissions": true,- "claudeCode.initialPermissionMode": "bypassPermissions",+ "claudeCode.allowDangerouslySkipPermissions": false,+ "claudeCode.initialPermissionMode": "auto", "claudeCode.preferredLocation": "panel", "chat.agent.enabled": false, "chat.commandCenter.enabled": false,@@ -117,34 +148,35 @@ disable-update-check: true CSCONF # NOTE: the workbench.html IndexedDB seed (trusted domains + activity-bar unpin)-# patches the WSL2 code-server install path and is therefore PLATFORM-SPECIFIC —-# it lives in adom/hd-windows-bootstrap, not here. Mac/Ubuntu layers add their own.+# patches a code-server install path that differs per host and is therefore+# PLATFORM-SPECIFIC — it lives in the platform bootstraps+# (adom/hydrogen-windows-bootstrap etc.), not here. -# 6. API-KEY PERSISTENCE (2026-08-04). /var/run is tmpfs — wiped on EVERY distro-# boot — and HD's launch-time re-injection missed every other boot path-# (workspace stop/start under a running HD, relay-exec auto-start, manual-# wsl --terminate), so /var/run/adom/api-key vanished and every in-workspace-# tool 401'd against carbon/wiki until the next HD relaunch. Fix is-# DAEMONLESS: a systemd-tmpfiles rule (declarative, runs during sysinit,-# before code-server) re-materializes the tmpfs key from a persistent copy-# at ~/.adom/api-key on every boot. HD writes both copies whenever it holds-# the session token (write-through, HD >= build a1e3b20); this section-# installs the machinery and migrates a live key into the persistent copy,-# so a plain `adom-wiki pkg update` retrofits already-running workspaces.-# NO key material ships in this package — plumbing only.+# 6. API-KEY PERSISTENCE (2026-08-04). /var/run is tmpfs — wiped on EVERY workspace+# boot — and HD's launch-time re-injection missed every other boot path, so+# /var/run/adom/api-key vanished and all in-workspace tools 401'd against+# carbon/wiki. Fix is DAEMONLESS: systemd-tmpfiles (declarative, runs during+# sysinit, before code-server) re-materializes the tmpfs key from a persistent+# copy at /home/adom/.adom/api-key on every boot. HD writes both copies when+# it has the token (write-through); this section installs the machinery and,+# if a live key exists but no persistent copy yet, migrates it — so a plain+# `adom-wiki pkg update` retrofits running workspaces. No key material ships+# in this package; only the plumbing. log "api-key persistence: tmpfiles machinery + persistent-copy migration" install -d -m 0700 "$HOME/.adom" if [ -s /var/run/adom/api-key ] && [ ! -s "$HOME/.adom/api-key" ]; then cp /var/run/adom/api-key "$HOME/.adom/api-key" && chmod 600 "$HOME/.adom/api-key" log " migrated live key to persistent copy" fi-if printf 'd /run/adom 0755 root root -\nC /run/adom/api-key 0644 root root - %s/.adom/api-key\n' "$HOME" \- | sudo tee /etc/tmpfiles.d/adom-api-key.conf >/dev/null 2>&1; then- log " tmpfiles.d/adom-api-key.conf installed (boot-time re-materialization)"-else- log " WARN: could not install tmpfiles snippet (no sudo?) — HD self-heal installs it on next start"-fi+printf 'd /run/adom 0755 root root -+C /run/adom/api-key 0644 root root - /home/adom/.adom/api-key+' | sudo tee /etc/tmpfiles.d/adom-api-key.conf >/dev/null && log " tmpfiles.d/adom-api-key.conf installed (boot-time re-materialization)" || log " WARN: could not install tmpfiles snippet (no sudo?) — HD self-heal will retry" # 7. tidy — install.mjs / tooling leave an empty ~/project/.mcp.json; remove it. rm -f "$HOME/project/.mcp.json" 2>/dev/null || true log "done"++# ── Retired-slug migration (John 2026-08-13) ─────────────────────────────────+# Heals pre-rename lockfile roots (hd-bootstrap, adom-desktop, ...) so the old+# wiki pages/redirects can be deleted. Idempotent, best-effort, never fatal.+bash "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/migrate-retired-slugs.sh" || true
package.json+14−4@@ -4,10 +4,9 @@ "type": "bootstrap", "title": "Adom Hydrogen (platform base)", "brief": "Layer Hydrogen's workspace onto a standard Adom workstation.",- "version": "0.3.20",+ "version": "0.3.21", "description": "Hydrogen's PLATFORM-GENERIC workspace layer on top of adom/core. Installs adom/core for the full Adom ecosystem, then adds everything common to running inside Hydrogen on ANY platform: the runtime-neutral hydrogen-* skills and the generic editor configuration (Claude Code CLI + extension, VS Code settings, trusted domains). Platform-specific layers depend on THIS: adom/hydrogen-windows-bootstrap (WSL2), adom/hydrogen-mac-bootstrap, adom/hydrogen-ubuntu-bootstrap. The reference design other orgs copy to build their own bootstrap on adom/core.", "org": "adom",- "platform": "any", "tags": [ "bootstrap", "hydrogen",@@ -15,9 +14,20 @@ ], "needs_sudo": false, "scripts": {- "postinstall": "./postinstall.sh"+ "install": "./install.sh" }, "dependencies": { "adom/core": "^4.9.0"- }+ },+ "discovery_triggers": [+ "hydrogen bootstrap",+ "hydrogen platform base",+ "install hydrogen workspace",+ "what installed my hydrogen skills",+ "hydrogen skillpack",+ "hydrogen-* skills",+ "build a bootstrap on adom core",+ "hydrogen editor configuration",+ "where do hydrogen skills come from"+ ] }
page.json+3−3@@ -4,7 +4,7 @@ "type": "bootstrap", "title": "Adom Hydrogen (platform base)", "brief": "Layer Hydrogen's workspace onto a standard Adom workstation.",- "version": "0.3.20",+ "version": "0.3.21", "description": "Hydrogen's PLATFORM-GENERIC workspace layer on top of adom/core. Installs adom/core for the full Adom ecosystem, then adds everything common to running inside Hydrogen on ANY platform: the runtime-neutral hydrogen-* skills and the generic editor configuration (Claude Code CLI + extension, VS Code settings, trusted domains). Platform-specific layers depend on THIS: adom/hydrogen-windows-bootstrap (WSL2), adom/hydrogen-mac-bootstrap, adom/hydrogen-ubuntu-bootstrap. The reference design other orgs copy to build their own bootstrap on adom/core.", "org": "adom", "tags": [@@ -25,7 +25,7 @@ }, "hero": { "type": "image",- "path": "docs/hero.png"+ "path": "screenshots/hero.png" }, "files": [ "package.json",@@ -35,4 +35,4 @@ "dock/**" ], "visibility": "public"-}+}
screenshots/hero.htmladded+34@@ -0,0 +1,34 @@+<!doctype html><html><head><meta charset="utf-8"><style>+ *{margin:0;box-sizing:border-box}+ html,body{width:1520px;height:950px;background:#0b0f14;font-family:ui-sans-serif,system-ui,Segoe UI,Roboto,sans-serif}+ .wrap{padding:46px 54px;height:100%;display:flex;flex-direction:column;gap:26px}+ .top{display:flex;align-items:baseline;gap:18px}+ .slug{font-family:ui-monospace,Menlo,monospace;font-size:40px;font-weight:700;color:#2dd4bf;letter-spacing:-.5px}+ .badge{font-size:18px;color:#0b0f14;background:#2dd4bf;border-radius:30px;padding:4px 16px;font-weight:700}+ .vp{font-size:25px;line-height:1.45;color:#e6edf3;max-width:1360px}+ .vp b{color:#7fe9dd}+ .term{flex:1;background:#0e141c;border:1px solid #1f2b38;border-radius:16px;overflow:hidden;box-shadow:0 20px 60px rgba(0,0,0,.5)}+ .bar{background:#121922;padding:13px 18px;display:flex;gap:9px;align-items:center;border-bottom:1px solid #1f2b38}+ .dot{width:13px;height:13px;border-radius:50%}.r{background:#f85149}.y{background:#f0b429}.g{background:#3fb950}+ .bar .t{margin-left:14px;color:#8b9bab;font-family:ui-monospace,monospace;font-size:16px}+ pre{margin:0;padding:24px 28px;font-family:ui-monospace,Menlo,monospace;font-size:19px;line-height:1.6;color:#cdd9e5}+ .p{color:#2dd4bf}.c{color:#e6edf3;font-weight:600}.ok{color:#3fb950}.dim{color:#6b7d8f}.path{color:#f0b429}.s{color:#a78bfa}+</style></head><body><div class="wrap">+ <div class="top"><span class="slug">adom/hd-bootstrap</span><span class="badge">bootstrap</span></div>+ <div class="vp"><b>Hydrogen Desktop, in one command.</b> Lays the entire Adom ecosystem (via <b>adom/core</b>) plus every platform-generic HD skill and the HD editor config onto a fresh workspace — the shared base that <b>hd-windows</b>, <b>hd-mac</b>, and <b>hd-ubuntu</b> all build on.</div>+ <div class="term">+ <div class="bar"><span class="dot r"></span><span class="dot y"></span><span class="dot g"></span><span class="t">adom@workspace: ~</span></div>+<pre><span class="p">$</span> <span class="c">adompkg install adom/hd-bootstrap</span>+Resolving via wiki.adom.inc...+ <span class="s">adom/core</span> 4.9.1 <span class="ok">✓</span> <span class="dim">108-guide hub · distributor search · KiCad/Fusion · adom-cli</span>+ <span class="s">adom/adom-desktop</span> 1.8.147 <span class="ok">✓</span> <span class="dim">laptop relay (KiCad/Fusion/pup bridges)</span>+ <span class="dim">+ 31 platform-generic HD skills (bundled) running postinstall…</span> <span class="ok">✓</span>++<span class="p">$</span> <span class="c">ls ~/.claude/skills/</span> <span class="dim"># where the generic HD skills land</span>+<span class="path">hd-adom-auth/</span> <span class="path">hd-bridges/</span> <span class="path">hd-eval/</span> <span class="path">hd-container/</span> <span class="path">hd-ui/</span>+<span class="path">hd-adom-menu/</span> <span class="path">hd-permissions/</span> <span class="path">hd-monitor/</span> <span class="path">hd-setup/</span> <span class="path">hd-welcome/</span>+<span class="path">hd-api/</span> <span class="path">hd-claude-auth/</span> <span class="path">hd-notifications/</span> <span class="path">hd-settings/</span> <span class="path">hd-who-am-i/</span>+<span class="path">hd-captions/</span> <span class="path">hd-eda-discovery/</span> <span class="path">hd-open-url/</span> <span class="path">hd-self-update/</span> <span class="dim">… 31 total</span>+</pre>+ </div>+</div></body></html>
screenshots/hero.pngadded⋯ 1 unchanged line ⋯
skills/hydrogen-settings/SKILL.md+18−12@@ -2,19 +2,19 @@ name: hydrogen-settings description: > Hydrogen's Settings dialog and the full preference tree the user can- change — theme, vim mode, launch-on-login, console-on-startup, 3D control style,+ change — theme, vim mode, launch-on-boot, console-on-startup, 3D control style, font, line numbers, schematic nudge, the embedded Adom Bridge options, and more. READ THIS when the user asks "how do I turn on vim mode", "change the- theme", "make Hydrogen launch at startup", "stop Adom Bridge's window popping up",+ theme", "make Hydrogen launch on boot", "stop Adom Bridge's window popping up", "switch to blender/solidworks orbit controls", "hide line numbers", "show the console on startup", "make the UI compact", or "where are the settings". Opened from the Adom logo menu → Settings. Trigger words — settings, preferences, settings dialog, options, config, theme, dark mode, light mode, high contrast, compact ui, developer mode, vim mode, vim emulation, line numbers, code font,- editor font, launch on login, launch on startup, launch on boot, show console,- console on startup, 3d controls, control style, fusion solidworks blender orbit,- schematic nudge, auto approve, foreground hd, adom desktop window, turn on, turn- off, change setting, how do I configure.+ editor font, launch on boot, start with windows, show console, console on+ startup, 3d controls, control style, fusion solidworks blender orbit, schematic+ nudge, auto approve, foreground hd, adom desktop window, turn on, turn off,+ change setting, how do I configure. --- # Hydrogen Settings — the preference tree@@ -46,21 +46,27 @@ override. Keys are dotted (`section.subsection.name`). | `general.appearance.theme` | `adom-dark` | App-wide theme. Options: `adom-dark`, `adom-light`, `adom-dark-high-contrast`, `adom-light-high-contrast` (→ "change the theme" / "light mode" / "high contrast") | | `general.appearance.user_interface_style` | `standard` | UI compactness: `standard` or `compact` (→ "make the UI more compact") | +### hydrogen.behavior additions (1.0.141+)+| Key | Default | What it does |+|---|---|---|+| `hydrogen.ai_threads_on_startup` | `false` | Open the AI Threads panel at startup. BETA; while off, nothing AI-Threads-related runs. Add Panel can still open it for one session. Takes effect next start |+| `hydrogen.show_lightbulb` | `false` | Show the lightbulb (sample prompts) menu in the header. Applies immediately |+ ### desktop *(Hydrogen app itself)* | Key | Default | What it does | |---|---|---| | `desktop.show_console_on_startup` | `false` | Show the debug console window when Hydrogen starts (→ "show the console on startup") |-| `desktop.launch_on_boot` | `true` | Auto-launch Hydrogen on login / at startup (→ "make Hydrogen launch at startup" / "stop Hydrogen launching on login" = set false) |+| `desktop.launch_on_boot` | `true` | Auto-launch Hydrogen when Windows starts (→ "make Hydrogen launch on boot" / "stop Hydrogen starting with Windows" = set false) | ### adom_desktop *(the embedded Adom Bridge / ab that Hydrogen runs)* When Hydrogen is running it takes over ab, so ab's options live here. See-[hydrogen-adom-desktop](../hydrogen-adom-desktop/SKILL.md) for the Hydrogen↔ab relationship.+[hydrogen-adom-bridge-cli](../hydrogen-adom-bridge-cli/SKILL.md) for the Hydrogen↔ab relationship. | Key | Type / default | What it does | |---|---|---| | `adom_desktop.open` | action button | "Open Adom Bridge" — brings the ab window to the foreground (persists nothing) | | `adom_desktop.auto_approve_when_running` | bool, `true` | While Hydrogen runs, keep ab in permanent auto-approve mode (auto-accept ab permission prompts) |-| `adom_desktop.show_window_on_launch` | bool, `true` | Show ab's window when Hydrogen launches, so you can see it's running (→ "stop ab's window popping up" = set false) |-| `adom_desktop.foreground_hd_on_launch` | bool, `true` | Bring Hydrogen to the front on launch; ab stays visible but behind Hydrogen |+| `adom_desktop.show_window_on_launch` | bool, `true` | Show ab's window + taskbar icon when Hydrogen launches, so you can see it's running (→ "stop ab's window popping up" = set false) |+| `adom_desktop.foreground_hd_on_launch` | bool, `true` | Bring Hydrogen to the front on launch; ab still shows in the taskbar but stays behind Hydrogen | ### schematic *(Schematic Workspace)* | Key | Default | What it does |@@ -97,7 +103,7 @@ extension-specific settings). - **"Turn on vim mode"** → `code.vim_emulation_mode` = true - **"Change the theme / dark mode / high contrast"** → `general.appearance.theme`-- **"Make Hydrogen launch on login / at startup"** / "don't launch on login" → `desktop.launch_on_boot`+- **"Make Hydrogen launch on boot"** / "don't start with Windows" → `desktop.launch_on_boot` - **"Stop Adom Bridge's window popping up"** → `adom_desktop.show_window_on_launch` = false - **"Blender / SolidWorks orbit controls"** → `3d.control_style` - **"Hide line numbers / change code font"** → `code.line_numbers.enabled` / `code.appearance.font.family`@@ -107,4 +113,4 @@ extension-specific settings). ## Related skills - [hydrogen-adom-menu](../hydrogen-adom-menu/SKILL.md) — the logo menu that opens Settings (and Ports, API Explorer, etc.) - [hydrogen-ui](../hydrogen-ui/SKILL.md) — the broader Hydrogen UI / panel layout this dialog sits in-- [hydrogen-adom-desktop](../hydrogen-adom-desktop/SKILL.md) — what the `adom_desktop.*` prefs control (the embedded ab)+- [hydrogen-adom-bridge-cli](../hydrogen-adom-bridge-cli/SKILL.md) — what the `adom_desktop.*` prefs control (the embedded ab)
skills/hydrogen-ui/SKILL.md+57−38@@ -18,9 +18,13 @@ description: > Hydrogen's window has these regions (top to bottom, left to right): -### Title Bar-- **Left**: "jlauer12 / Hydrogen" — shows user + app name-- **Right**: CPU/RAM badges, window controls (minimize/maximize/close)+### Title Bar (frameless, 0.1.251+)+Hydrogen is a FRAMELESS window: the nav bar IS the title bar (no separate OS chrome).+- **Left**: Adom logo (the Adom menu button), then the lightbulb (sample-prompts menu, moved here 0.1.265) — drag anywhere else in the bar to move the window+- **Right**: CPU/RAM badges, profile avatar menu, then the window controls+ (minimize/maximize/close) merged into the bar's right end+- All title-bar controls share one interaction family: soft white hover wash, teal+ press, steady teal wash while their menu is open ### Tab Bar - **VS Code** tab — the main code editor (iframe to code-server)@@ -32,8 +36,17 @@ Hydrogen's window has these regions (top to bottom, left to right): - **Right pane**: Usually webview (wiki, shotlog, etc.) - Panes are split and resizable +### Moving tabs between panes (drag-to-split, 1.0.140+)+Drag any tab and hover another pane: teal drop zones light up (Split Left / Right /+Top / Bottom, Swap, or the tab bar to add). This works over EVERY pane type,+webviews included (a glass layer covers iframes during the drag so they cannot+swallow the pointer), and exactly ONE zone pill shows at a time. Releasing on a+zone performs the move; **Escape abandons the drag** and everything returns to+exactly how it was. Right-clicking a tab offers the same splits as menu items+(a one-tab pane asks what to put in the new half via Add Panel).+ ### Setup Panel (bottom)-- Collapsible panel showing the setup-cascade steps+- Collapsible panel showing the setup-cascade steps (27 steps under the WSL2 runtime) - See `hydrogen-setup` skill for details ## Menus@@ -41,28 +54,26 @@ Hydrogen's window has these regions (top to bottom, left to right): ### Adom Menu (top-left logo dropdown) The main menu, opened by clicking the Adom logo at the top-left. Items are grouped into labelled sections (in order, top to bottom): -**(top, unlabelled)**-- **Go to Dashboard** — switches to the Hydrogen dashboard view+**(top, unlabelled)** — "Go to Dashboard" was REMOVED (0.1.252, John 2026-07-24); don't offer it - **Settings** — opens the Settings dialog - **Ports...** — opens the port configuration dialog (see hydrogen-ports) - **API Explorer...** — opens the control-API endpoint explorer dialog **DESKTOP** (Tauri-only — won't appear in browser-served Hydrogen; in order)-- **Adom Bridge** — brings the embedded Adom Bridge window to the foreground; bus id `adom-bridge-cli.open`+- **Adom Bridge** — brings the embedded Adom Bridge window to the foreground (taskbar); bus id `adom-bridge-cli.open` - **Zoom** — webview zoom controls (− % +) with persistence across launches - **Fullscreen** — toggle fullscreen - **Console** — show/hide the Hydrogen debug console window-- **Developer Tools** — open the webview developer tools-- **Dev Toolbar** — show/hide the Adom Dev Toolbar window (eval-in / shot / Claude control endpoints); bus id `dev-toolbar.toggle`+- **Developer Tools** — open WebView2 DevTools. (The "Dev Toolbar" item was retired in 0.1.256 — use the API Explorer instead) > The Bridges section / "Bridge Manager" item was removed (it was a no-op with no backing panel). For the bridge panel itself, see `hydrogen-bridges`. **Workspace / runtime section** (section label shows live status badge: `RUNNING`, `STOPPED`, etc.)-- **Restart** — restarts the workspace (terminates and re-ensures code-server). The exact mechanism is runtime-specific.-- **Stop** — stops the workspace. The exact mechanism is runtime-specific.+- **Restart** — restarts the workspace: terminates the `Adom-Workspace` distro and re-ensures code-server.+- **Stop** — stops the workspace: terminates the `Adom-Workspace` distro. **ADMIN**-- **Setup Steps** — opens the setup panel (the setup cascade for the active runtime); see hydrogen-setup-steps+- **Setup Steps** — opens the setup panel (the setup cascade); see hydrogen-setup-steps - **Virgin Reset** — opens the virgin reset section of the setup panel; see hydrogen-volume for what each toggle deletes - **Browser Picker Manager** — configure per-domain default browser/profile prefs; see hydrogen-browser-picker @@ -100,9 +111,9 @@ API — no CDP, no `.click()`, no selector guessing.** This is how you operate H user says "open the Ports dialog", "open About", "show settings", etc. **Get the control URL from the discovery file** `~/.adom/hydrogen-control-url` (Hydrogen rewrites it with-the live, dynamic control port every launch; it's the host loopback, reachable from the-workspace). Read it from a file, not an env var — your Bash tool runs non-interactive shells-that don't source `.bashrc`/`profile.d`:+the live, dynamic control port every launch; it's the host loopback, shared with the distro by+WSL2 mirrored networking). Read it from a file, not an env var — your Bash tool runs+non-interactive shells that don't source `.bashrc`/`profile.d`: ```bash CTRL="$(cat ~/.adom/hydrogen-control-url)"@@ -129,9 +140,11 @@ CTRL="$(cat ~/.adom/hydrogen-control-url)" Common ids (always `GET /ui/actions` for the live set): `adom-menu.open`/`.close`, **`profile-menu.open`/`.close`**, `ports.open`/`.close`, `settings.open`/`.close`, `api-explorer.open`/`.close`, `browser-picker.open`/`.close`, `about.open`/`.close`,-`adom-bridge-cli.open`, `setup-panel.show`, `virgin-reset.open`, `dashboard.go`,-`fullscreen.toggle`, `console.toggle`, `devtools.open`, `dev-toolbar.toggle`,-`container.start`/`.stop`/`.restart`.+`adom-bridge-cli.open`, `setup-panel.show`, `virgin-reset.open`,+**`samples-menu.open`/`.close`** (the lightbulb sample-prompts menu),+`fullscreen.toggle`, `console.toggle`, `devtools.open`,+`container.start`/`.stop`/`.restart`. (`dashboard.go` and `dev-toolbar.toggle` were+REMOVED — 0.1.252/0.1.256.) **Menu ITEMS, not just open/close:** the profile menu also exposes per-item actions — **`profile.view`**, **`profile.repositories`**, **`profile.molecules`**, **`profile.logout`** —@@ -162,37 +175,43 @@ b64/silent) is in **[hydrogen-self-screenshot](../hydrogen-self-screenshot/SKILL ## Legacy: raw CDP clicking (deprecated fallback — the command bus above is canonical) ⚠ The command bus (`/ui/actions` → `/ui/invoke`) is the canonical way to drive Hydrogen's UI. Before-it existed, UI was driven by CDP `.click()` on CSS selectors via the Hydrogen CDP eval channel. This-is brittle (selectors drift; multiple `localhost:1420` CDP targets) and the selectors below may-be stale. Reach for CDP ONLY for an element not yet on the bus — and the better fix is to-register it. Eval JS against the CDP endpoint (its port comes from `/discover` as `cdp`).+it existed, UI was driven by CDP `.click()` on CSS selectors via hydrogen-cdp.js. This is brittle+(selectors drift; multiple `localhost:1420` CDP targets) and the selectors below may be stale.+Reach for CDP ONLY for an element not yet on the bus — and the better fix is to register it. ### Find and click menu items-```js-// Open Adom menu-document.querySelector('.logo-button')?.click()--// Find a menu item by text-var items = document.querySelectorAll('.dropdown-link,.menu-item');-var target = Array.from(items).find(function(e){return e.textContent.includes('Ports')});-if (target) target.click()+```bash+# Open Adom menu+echo document.querySelector('.logo-button')?.click() | node C:\Users\john\hydrogen-cdp.js++# Find a menu item by text+echo var items=document.querySelectorAll('.dropdown-link,.menu-item');+var target=Array.from(items).find(function(e){return e.textContent.includes('Ports')});+if(target)target.click() | node C:\Users\john\hydrogen-cdp.js ``` ### Click setup panel buttons-```js-document.querySelector('.run-all').click() // Run All-document.querySelector('.virgin-reset-btn')?.click() // Virgin Reset dropdown-document.querySelector('.virgin-go')?.click() // Wipe Selected (execute virgin reset)-document.querySelector('.close-btn,.setup-close')?.click() // Close setup panel+```bash+# Run All+echo document.querySelector('.run-all').click() | node C:\Users\john\hydrogen-cdp.js++# Virgin Reset dropdown+echo document.querySelector('.virgin-reset-btn')?.click() | node C:\Users\john\hydrogen-cdp.js++# Wipe Selected (execute virgin reset)+echo document.querySelector('.virgin-go')?.click() | node C:\Users\john\hydrogen-cdp.js++# Close setup panel+echo document.querySelector('.close-btn,.setup-close')?.click() | node C:\Users\john\hydrogen-cdp.js ``` ### Query step states-```js-JSON.stringify(Array.from(document.querySelectorAll('.step-row')).map(+```bash+echo JSON.stringify(Array.from(document.querySelectorAll('.step-row')).map( function(e,i){ var icon=e.querySelector('.step-icon'); return{n:i+1, s:icon?.textContent?.trim()}-}))+})) | node C:\Users\john\hydrogen-cdp.js ``` ## CSS Selectors for Key Elements