← Commit history

dock: global manifest (world-readable, adom-curated) + public hd-dock skill + catalog row

John Lauer ·61b5411d59 ·3mo ago ·parent 982e082
4 files changed +373−3
dock/apps.jsonadded+255
@@ -0,0 +1,255 @@+{+  "manifest_version": "2.0.0",+  "_comment": [+    "The global Hydrogen Desktop dock list. World-readable by design; HD polls it",+    "anonymously. WRITE access is the adom org: the adom team curates this file,",+    "and featured/order exist only here (an app cannot feature itself).",+    "Display fields (name, brief, hero) are NOT in this file. The dock resolves",+    "them from each wiki_repo page, one source of truth. Launch behavior comes",+    "from each entry's launch block; the authoring contract for app publishers",+    "is the public hd-dock skill (ships with HD) and the Dock section of the",+    "adom/hydrogen-desktop wiki page. To request listing: open an issue on the",+    "adom/hydrogen-desktop wiki page."+  ],+  "poll_seconds": 21600,+  "manual_refresh_cooldown_seconds": 60,+  "apps": [+    {+      "id": "kicad",+      "wiki_repo": "adom/adom-desktop-kicad-bridge",+      "featured": true,+      "order": 10,+      "webview": {+        "title": "KiCad Bridge"+      },+      "launch": {+        "mode": "container_command",+        "steps": [+          {+            "label": "Starting the KiCad bridge",+            "run": "adom-desktop bridge start kicad --print-url",+            "await": "url",+            "timeout_seconds": 60+          }+        ],+        "on_ready": "navigate_placeholder"+      }+    },+    {+      "id": "fusion",+      "wiki_repo": "adom/adom-desktop-fusion-bridge",+      "featured": true,+      "order": 20,+      "webview": {+        "title": "Fusion 360 Bridge"+      },+      "launch": {+        "mode": "container_command",+        "steps": [+          {+            "label": "Starting the Fusion bridge",+            "run": "adom-desktop bridge start fusion --print-url",+            "await": "url",+            "timeout_seconds": 60+          }+        ],+        "on_ready": "navigate_placeholder"+      }+    },+    {+      "id": "chip-fetcher",+      "wiki_repo": "adom/adom-chip-fetcher",+      "featured": true,+      "order": 40,+      "webview": {+        "title": "Chip Fetcher"+      },+      "launch": {+        "mode": "container_command",+        "steps": [+          {+            "label": "Installing adom-chip-fetcher",+            "run": "adom-wiki pkg install adom/adom-chip-fetcher",+            "skip_if": "command -v chip-fetcher",+            "timeout_seconds": 180+          },+          {+            "label": "Starting Chip Fetcher",+            "run": "chip-fetcher serve --print-url",+            "await": "url",+            "timeout_seconds": 60+          }+        ],+        "on_ready": "navigate_placeholder"+      }+    },+    {+      "id": "pup",+      "wiki_repo": "adom/adom-desktop-puppeteer-bridge",+      "order": 50,+      "webview": {+        "title": "Pup"+      },+      "launch": {+        "mode": "container_command",+        "steps": [+          {+            "label": "Starting the pup bridge",+            "run": "adom-desktop bridge start pup --print-url",+            "await": "url",+            "timeout_seconds": 60+          }+        ],+        "on_ready": "navigate_placeholder"+      }+    },+    {+      "id": "nucleus",+      "wiki_repo": "adom/adom-nucleus",+      "order": 60,+      "webview": {+        "title": "Adom Nucleus",+        "url": "https://wiki.adom.inc/adom/adom-nucleus"+      },+      "launch": {+        "mode": "webview"+      }+    },+    {+      "id": "symbol",+      "wiki_repo": "adom/adom-symbol",+      "order": 70,+      "webview": {+        "title": "Adom Symbol"+      },+      "launch": {+        "mode": "container_command",+        "steps": [+          {+            "label": "Installing adom-symbol",+            "run": "adom-wiki pkg install adom/adom-symbol",+            "skip_if": "command -v adom-symbol",+            "timeout_seconds": 180+          },+          {+            "label": "Starting Adom Symbol",+            "run": "adom-symbol serve --print-url",+            "await": "url",+            "timeout_seconds": 60+          }+        ],+        "on_ready": "navigate_placeholder"+      }+    },+    {+      "id": "footprint",+      "wiki_repo": "adom/adom-footprint",+      "order": 80,+      "webview": {+        "title": "Adom Footprint"+      },+      "launch": {+        "mode": "container_command",+        "steps": [+          {+            "label": "Installing adom-footprint",+            "run": "adom-wiki pkg install adom/adom-footprint",+            "skip_if": "command -v adom-footprint",+            "timeout_seconds": 180+          },+          {+            "label": "Starting Adom Footprint",+            "run": "adom-footprint serve --print-url",+            "await": "url",+            "timeout_seconds": 60+          }+        ],+        "on_ready": "navigate_placeholder"+      }+    },+    {+      "id": "lbr",+      "wiki_repo": "adom/adom-lbr",+      "order": 90,+      "webview": {+        "title": "Adom LBR"+      },+      "launch": {+        "mode": "container_command",+        "steps": [+          {+            "label": "Installing adom-lbr",+            "run": "adom-wiki pkg install adom/adom-lbr",+            "skip_if": "command -v adom-lbr",+            "timeout_seconds": 180+          },+          {+            "label": "Starting Adom LBR",+            "run": "adom-lbr serve --print-url",+            "await": "url",+            "timeout_seconds": 60+          }+        ],+        "on_ready": "navigate_placeholder"+      }+    },+    {+      "id": "chipsmith",+      "wiki_repo": "adom/adom-chipsmith",+      "order": 100,+      "webview": {+        "title": "Adom Chipsmith"+      },+      "launch": {+        "mode": "container_command",+        "steps": [+          {+            "label": "Installing adom-chipsmith",+            "run": "adom-wiki pkg install adom/adom-chipsmith",+            "skip_if": "command -v adom-chipsmith",+            "timeout_seconds": 180+          },+          {+            "label": "Starting Adom Chipsmith",+            "run": "adom-chipsmith serve --print-url",+            "await": "url",+            "timeout_seconds": 60+          }+        ],+        "on_ready": "navigate_placeholder"+      }+    },+    {+      "id": "parts-search",+      "wiki_repo": "adom/adom-parts-search",+      "order": 110,+      "webview": {+        "title": "Parts Search"+      },+      "launch": {+        "mode": "container_command",+        "steps": [+          {+            "label": "Starting Parts Search",+            "run": "adom-parts-search serve --print-url",+            "await": "url",+            "timeout_seconds": 60+          }+        ],+        "on_ready": "navigate_placeholder"+      }+    },+    {+      "id": "hero-studio",+      "wiki_repo": "adom/hero-studio",+      "order": 130,+      "webview": {+        "title": "Hero Studio",+        "url": "https://wiki.adom.inc/adom/hero-studio"+      },+      "launch": {+        "mode": "webview"+      }+    }+  ]+}
package.json+4−3
@@ -4,7 +4,7 @@   "type": "bootstrap",   "title": "Hydrogen Desktop Bootstrap (apps + skills)",   "brief": "Layer Hydrogen Desktop's workspace onto a standard Adom workstation.",-  "version": "0.2.30",+  "version": "0.2.31",   "description": "Hydrogen Desktop'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 Desktop on ANY platform: the platform-generic hd-* skills (BUNDLED in this package by design; wsl2 skills ride adom/hd-windows-bootstrap, mac skills ride adom/hd-mac-bootstrap) and the generic HD editor configuration (Claude Code CLI + extension, VS Code settings, trusted domains). Platform-specific layers depend on THIS: adom/hd-windows-bootstrap, adom/hd-mac-bootstrap.",   "org": "adom",   "tags": [@@ -28,6 +28,7 @@     "package.json",     "install.sh",     "README.md",-    "skills/**"+    "skills/**",+    "dock/**"   ]-}\ No newline at end of file+}
skills/hd-dock/SKILL.mdadded+113
@@ -0,0 +1,113 @@+---+name: hd-dock+description: The Hydrogen Desktop dock (the app launcher rail on the right edge of the workspace) and how apps get into it. Covers the two-layer list (the adom-curated global manifest plus user-added wiki apps), the dock block an app declares in its wiki package.json so the dock knows how to launch it, the container_command step contract (--print-url, skip_if, await url, timeouts), the free orbital loading screen, and how a user or an AI adds any wiki app to the dock locally. Read this when a user says: add an app to the dock, add my app to the dock, put this wiki page in the dock, dock settings, make my app dock-ready, dock block, dock manifest, launch steps, how do dock apps launch, app launcher, featured apps, pin an app, hover zoom, alt-pin.+---++# hd-dock: the Hydrogen Desktop app launcher++The dock is the launcher rail on the right edge of the HD workspace. Every card+in it is a wiki app page. The dock resolves what to SHOW (name, brief, hero)+from the page itself and how to LAUNCH from a `dock` block the app declares.+Display is never duplicated into the dock; the page is the single source of truth.++## The list has two layers++1. **The global manifest (adom-curated).** HD fetches a public manifest and+   renders its apps. Only the adom team edits it; `featured` and `order` exist+   only here. It is world-readable at:++   `https://wiki.adom.inc/blob/bootstrap/hd-bootstrap/dock/apps.json`++   HD refreshes it on launch and then on the poll cadence the manifest itself+   declares (`poll_seconds`, currently 6 hours), so curation changes never wait+   for an HD release. Want your app on the global list? Make it dock-ready+   (below), then open an issue on the adom/hydrogen-desktop wiki page asking+   for listing; the adom team vets and merges.++2. **User-added apps (self-serve, local).** Any user adds any public wiki app+   from Dock settings (the gear at the top of the rail) with `owner/slug`, or+   by asking their AI ("add adom/orbital-lab to my dock"). These render in All+   apps, are pinnable, and persist locally. They never affect other users.++## The `dock` block (what an app declares)++In the app's wiki `package.json`:++```json+"dock": {+  "webview": { "title": "Adom TSCi", "favicon": "icons/tsci.svg" },+  "launch": {+    "mode": "container_command",+    "steps": [+      { "label": "Installing Adom TSCi",+        "run": "adom-wiki pkg install adom/adom-tsci",+        "skip_if": "command -v adom-tsci",+        "timeout_seconds": 180 },+      { "label": "Starting the board viewer",+        "run": "adom-tsci serve --print-url",+        "await": "url",+        "timeout_seconds": 60 }+    ],+    "on_ready": "navigate_placeholder"+  }+}+```++### webview++| Field | Required | Meaning |+|---|---|---|+| `title` | yes | Webview tab title while the app is loaded |+| `favicon` | no | Tab icon, a path in the app's page repo |+| `url` | for `mode: "webview"` | Page to load directly (hosted app, or the wiki page itself) |++### launch++- `mode: "webview"`: nothing to install; the dock loads `webview.url` directly.+- `mode: "container_command"`: run `steps` in order in the user's workspace+  container, then `on_ready: "navigate_placeholder"` navigates the pre-loaded+  webview to the URL a step produced.++| Step field | Required | Meaning |+|---|---|---|+| `label` | yes | Shown in the launch toast while the step runs |+| `run` | yes | The command |+| `skip_if` | no | Probe command; exit 0 skips the step (idempotent installs) |+| `await` | no | `url`: scrape the first URL the command prints, hold for on_ready |+| `url_pattern` | no | Scrape regex, default `https?://\S+` |+| `timeout_seconds` | no | Per-step budget; timing out fails the launch with this label |++**The `--print-url` convention** is the whole integration contract: a dock-ready+server verb prints its own reachable URL to stdout and keeps serving.++## The loading screen is free++The instant a launch involves a webview, HD paints the panel with the workspace+theme background token and runs the Adom orbital loading animation (transparent,+so it reflects any theme) until the app URL has truly loaded, then fades it out.+Install steps stay behind the mark with their labels ticking in the launch toast.+Apps bundle nothing and opt into nothing. Details and the embeddable single-file+animation: the adom/orbital-lab wiki page.++## Publisher checklist (make your app dock-ready)++1. Public wiki page with a hero and a billboard-quality one-line brief; the+   dock shows exactly these.+2. Install step is `adom-wiki pkg install <owner>/<slug>` with a `skip_if`+   probe so relaunches skip it.+3. Server verb takes `--print-url`; that step gets `await: "url"`.+4. Sane `timeout_seconds` (180 install / 60 serve are good defaults).+5. Add the `dock` block to package.json, publish the page.+6. Test from your own dock: Dock settings, Add app, `owner/slug`, click it,+   watch the steps run behind the loading mark.++## Adding an app for a user (AI recipe)++When the user asks you to add a wiki app to their dock:++1. Confirm the page exists and is public (`adom-wiki discover search`).+2. Open Dock settings (gear at the top of the rail), Add app, enter+   `owner/slug`; or drive the equivalent HD API if you are automating.+3. If the page has no `dock` block, it still loads as a plain webview of its+   wiki page; tell the user launch steps need the block and point the+   publisher at this skill.
skills/hd-skill-catalog/SKILL.md+1
@@ -53,6 +53,7 @@ which runtime you're in. | `hd-eval` | Inject JS into ANY HD surface (shell/workbench/wiki/Claude) via POST /eval-in; build add-ons, overlays, highlights. | | `hd-adom-menu` | The upper-left Adom logo menu: Settings, Ports, API Explorer, DevTools, Setup Steps, Virgin Reset, About dialog, version readout. | | `hd-settings` | HD's Settings dialog + the full preferences tree (theme, vim mode, 3D control style, launch-on-boot, AD window behavior). |+| `hd-dock` | The app launcher rail: the adom-curated global list + user-added wiki apps, the dock block apps declare so HD can launch them, and the free orbital loading screen. | | `hd-file-transfer` | Move files BOTH ways between the WSL2 workspace and the Windows PC (/mnt/c, \\wsl$, adom-desktop relay). | | `hd-tab-icons` | Webview tab icon customization (displayIcon API, brand colors, MDI/SVG). | | `hd-profile-menu` | The avatar dropdown: profile/repos/molecules links and logout. |