skill
Adom UI Design System
Public Made by Adomby adom
How the AI builds and tests interfaces people love to use in Adom. Ships as one installable skill that bundles focused skills (tooltips, floating-windows, toasts, responsive-ui, app-shell, ai-driven-apps, clickable-paths).
← Commit history
1.16.0: Send to AI is ONE call (run-prompt new:true); the two-step new-then-sid flow can never work, and the timeout is 45s
2 files changed
+30−7
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "adom-ui-design",- "version": "1.15.0",+ "version": "1.16.0", "type": "skill", "description": "The Adom UI Design System plus a bundle of focused UI skills (tooltips, floating-windows, toasts, responsive-ui, app-shell, ai-driven-apps, clickable-paths, dark-default, input-feedback, settings-layout). One install drops the whole set of skill files onto your container, plus shared icon assets (the settings cog) so every Adom app draws the same glyph.", "dependencies": {},
skills/say-strip/SKILL.md+29−6@@ -159,14 +159,37 @@ That was the park. It is over. ## Send to AI: the server side The page never talks to the panel directly; its backend does, via the workspace control-API (the URL in `~/.adom/hydrogen-control-url`):+API (the URL in `~/.adom/hydrogen-control-url`). -1. `POST /ai-threads/new` with a staged `name` ("KiCad - say it") and `tags`- (see the TAG RULE below) - returns the new thread's `sid`. The staged name/tags- have a 4h TTL, which a real send consumes immediately.-2. `POST /ai-threads/run-prompt` with `{ sid, prompt, submit: true }`.+**ONE CALL. Do not use the two-step new-then-send-by-sid flow.** -The backend endpoint is `POST /api/say-send { phrase }` answering `{ ok, sid }` or+```+POST /ai-threads/run-prompt+{ "new": true, "prompt": phrase, "submit": true,+ "name": "KiCad - say it", "tags": ["dock:kicad-bridge"] }+```++⚠ **An earlier version of this skill specified `POST /ai-threads/new` first and then+`run-prompt` with the returned `sid`. THAT CAN NEVER WORK, and every app that built it+shipped a Send button that opens a tab and delivers nothing.** `/new` has never returned an+id: a thread has no `sid` until its first submitted prompt, and its keeper tab settles in a+background task after `/new` has already responded. So a client that reads `sid || id` from+`/new` always aborts with "the AI panel did not return a thread id", which is exactly the+symptom John hit on 2026-08-24. `/new` now returns explicit `sid: null` / `tid: null` with a+hint pointing at the composite.++The composite stages `name` and `tags` the same way (they attach when the sid appears) and+reports delivery in its response (`delivered_to`), so there is no id round-trip at all.++**Timeout: 45 seconds, not 5 or 10.** `/ai-threads/run-prompt` with `new: true` honestly+takes 10 to 30 seconds on a busy workbench, because it is opening a tab and waiting for the+editor to materialise it. A short client timeout turns a working send into a spurious "could+not reach the AI panel", which was the second half of the same bug. The copy-fallback+already covers a genuine failure, so give the call room to succeed first.++See `hydrogen-ai-threads-api` (0.3.22+) for the endpoint's own documentation.++The backend endpoint is `POST /api/say-send { phrase }` answering `{ ok, delivered_to }` or `{ ok: false, why }` (CORS `*` like every /api/* route, per the dockbar guide). This replaces the parked `/api/say-try` contract.