← Commit history

Publish 0.3.23

John Lauer ·5407c4cf5f · ·parent b859d8c
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