bootstrap
Adom Hydrogen (Windows / WSL2)
Public Made by Adomby adom
The Windows (WSL2) platform layer for Hydrogen.
← Commit history
Publish 0.3.23
3 files changed
+45−3
package.json+1−1@@ -4,7 +4,7 @@ "type": "bootstrap", "title": "Adom Hydrogen (Windows / WSL2)", "brief": "The Windows (WSL2) platform layer for Hydrogen.",- "version": "0.3.22",+ "version": "0.3.23", "description": "The Windows platform layer for Hydrogen, where the workspace runs in a WSL2 Ubuntu distro. Depends on adom/hydrogen-bootstrap (the platform-generic layer, which bundles the generic hydrogen-* skills) and adds everything specific to the WSL2 runtime: the WSL2/networking/lifecycle hydrogen-* skills (BUNDLED here by design, John+Kyle 2026-07-16) and the WSL2 code-server workbench seed. Sibling adom/hydrogen-mac-bootstrap carries the parallel mac skills. This is the package the golden WSL2 image installs.", "org": "adom", "tags": [
page.json+1−1@@ -4,7 +4,7 @@ "slug": "hydrogen-windows-bootstrap", "title": "Adom Hydrogen (Windows / WSL2)", "brief": "The Windows (WSL2) platform layer for Hydrogen.",- "version": "0.3.22",+ "version": "0.3.23", "author": { "name": "John Lauer", "email": "[email protected]"
skills/hydrogen-ai-threads-api/SKILL.md+43−1@@ -8,7 +8,8 @@ description: > Read this before shelling out to a CLI or driving the editor UI yourself. Trigger words - open an AI thread, new claude thread, new codex thread, new kimi thread, ai threads api, send a prompt to an AI, put text in the chat box, list open AI conversations, reopen a- conversation, close an AI tab, default AI, which AI should I use, dock opens a thread.+ conversation, close an AI tab, default AI, which AI should I use, dock opens a thread,+ run-prompt job status, background send, where did my prompt go, ai picker toast. --- # Driving Hydrogen's AI threads from your own app@@ -164,6 +165,47 @@ controls it; the AI threads panel's settings expose the first two. The picker of Codex; Kimi is hidden unless `show_kimi` is true (or it is the default), though `type: "kimi"` always works for a caller that names it. +## Know where your prompt went: jobs, status polling, toasts (1.0.218)++Every `POST /ai-threads/run-prompt` call is a **job** from its first millisecond, before the+picker, the open, or the typing. The answer always carries `job` and `state`; poll+`GET /ai-threads/run-prompt/status?job=<job>` about once a second and stop at `terminal:true`.++```bash+# a dashboard's "Send to AI": hand the id back right away, run the rest detached+curl -sX POST "$BASE/ai-threads/run-prompt" -H 'content-type: application/json' \+ -d '{"new":true,"prompt":"open the symbol in kicad","tags":["app:kicad-bridge"],"background":true}'+# -> {"ok":true,"job":"7f2c...","state":"accepted","background":true}++curl -s "$BASE/ai-threads/run-prompt/status?job=7f2c..."+# -> {"ok":true,"state":"picking","terminal":false,"elapsed_ms":1200,"human":"waiting for the AI picker", ...}+# -> {"ok":true,"state":"picked","job":{"type":"codex","picked_by":"user",...},"human":"Codex picked"}+# -> {"ok":true,"state":"delivered","terminal":true,"job":{"result":{...the full call response...}}}+```++The states, in order: `accepted` -> `picking` (the picker is up, counting down) -> `picked`+(`job.type` and `job.picked_by`: `user` | `default` | `caller`) -> `opening` -> `prefilled`+(Claude: prompt in the composer) or `tab_found` (Codex/Kimi) -> `submitted` -> `working` ->+`needs_you` (a permission or question waits) | `done`. Codex and Kimi have no hooks, so they+end at `delivered`; an existing `tid` goes `delivering` -> `delivered` | `failed`. Failure+terminals: `cancelled` (Escape in the picker), `rejected`, `open_failed`, `open_unconfirmed`,+`tab_not_found`, `inject_failed`, `submit_failed`, `failed`, `timeout`. Every status answer+carries `human`, a ready-made toast line for that phase ("Codex is working", "Claude Code+needs you"), and `_hints.states` repeats this glossary.++- **`background: true`** returns `{job, state: "accepted"}` at once. Without it the call+ blocks through the picker (5 s countdown, up to 45 s) and the open, then returns the same+ fields; `wait: true` additionally holds for the Claude turn to finish.+- **Pass your own `job`** (any string) to correlate a retry, or leave it out and use the one+ you are given. `GET /ai-threads/run-prompt/status` with no `?job=` lists the 20 most+ recent jobs, newest first, for a dashboard that lost an id.+- **The shell toasts the pick**: "Sending to Codex" or "Sending to Claude Code (your default)"+ appears in Hydrogen the moment the countdown resolves, so the person sees where the+ prompt went even when your dashboard is on another screen. `POST /ai-threads/new` says+ `picked_by` in its answer and toasts "Opening Codex" the same way.+- An AI calling this from a thread should pass `type` (no picker) and, for anything longer+ than a one-liner, `background:true` then poll; `human` is what to say back to the person.+ ## See what is open ```bash