← Commit history

Publish 1.2.3

John Lauer ·520b582604 ·1mo ago ·parent f4d02b7
4 files changed +27−8
page.json+20−3
@@ -4,7 +4,7 @@   "type": "app",   "title": "Grok Bot",   "brief": "Grok Bridge lets Adom talk to Grok Bot. Adom's AI environment is for electrical engineers: any provider, any desktop power tool, one place.",-  "version": "1.2.2",+  "version": "1.2.3",   "hero": {     "type": "image",     "path": "screenshots/hero.png"@@ -51,6 +51,10 @@     {       "label": "Read Grok chat",       "prompt": "Call grok_chat_status then grok_chat_read and tell me if Grok Bot is thinking and what the latest visible messages say"+    },+    {+      "label": "Open the Grok Bot dashboard",+      "prompt": "Open the Grok Bot dashboard and tell me if any LED is not green"     }   ],   "discovery_triggers": [@@ -81,7 +85,10 @@     "record grok bot",     "create grok channel",     "grok_plugin_install",-    "grok_login"+    "grok_login",+    "grok dashboard",+    "grok bot dashboard",+    "open grok dashboard"   ],   "discovery_pitch": "Grok Bridge lets Adom talk to Grok Bot on Windows or Mac. Adom's environment is for electrical engineers who need every AI provider and every desktop power tool in one place; Adom Bridge is how those desktops become AI-first.",   "metadata": {},@@ -117,7 +124,17 @@     "install.sh",     "uninstall.sh",     "README.md",-    "package.json"+    "package.json",+    "dockbar.json",+    "docs/icon.svg",+    "dashboard/grok_dashboard.py",+    "dashboard/ui/index.html",+    "dashboard/ui/newbie-panel.js",+    "dashboard/ui/icon.svg",+    "dashboard/ui/demo.mp4",+    "dashboard/ui/assets/icons/settings-cog-outline.svg",+    "dashboard/demo/steps.json",+    "dashboard/demo/audio/README.md"   ],   "scripts": {     "install": "./install.sh",
skills/grok-app-control/SKILL.md+2−2
@@ -21,7 +21,7 @@ adom-bridge --ai-thread "<your thread>" grok_<verb> '<json>' | CLI | Purpose | Key args | |---|---|---| | `grok_status` | Detect + last send + inbox + webhook bound (host only) | — |-| `grok_open` | Launch Grok Bot in the **background**; if running, list windows | optional `foreground` + **required** `foregroundReason` |+| `grok_open` | Launch Grok Bot in the **background**; poll process/window; Start-Process minimized if launch/desktop_open do not take. Returns `launched`, `opened`, `alreadyOpen`, `hwnd` | optional `foreground` + **required** `foregroundReason` (≥10 chars) | | `grok_list_windows` | `desktop_find_window` titleContains `Grok Bot` (preferred; unwrap `output`/`best.hwnd`) then `desktop_list_windows` + `process_list` | optional `titleContains` | | `grok_screenshot` | `desktop_screenshot_window` of that hwnd | optional `titleContains` | | `grok_close` | Hide the window (`desktop_set_window_state` hide). Prefer hide over kill. **Never kill Cursor.** | — |@@ -35,6 +35,6 @@ adom-bridge --ai-thread "<your thread>" grok_<verb> '<json>'  Windows open in the background. `openedInBackground` / `windowEtiquette:"background"` are the contract. Foreground without `foregroundReason` is refused (`errorCode: foreground_reason_required`). Raise only when the user asked to **watch**. -`ok:true` is not enough — `grok_list_windows` or `grok_screenshot` after open/resize/close.+`success:true` on grok_open now means a process/window was observed (or alreadyOpen). Still screenshot after resize/close.  Cold-start and identity: **grok**. Recording: **grok-record**. Chat: **grok-chat**.
skills/grok-chat/SKILL.md+2−1
@@ -21,7 +21,7 @@ Never steal focus. Surface `_hint` verbatim. | CLI | Purpose | Key args | |---|---|---| | `grok_chat_status` | Thinking vs idle. `thinking=true` when UIA exposes `"<agent> is working"` (proven: `"New Bot is working"`) | — |-| `grok_chat_read` | Visible transcript via `desktop_ui_text {hwnd, role:"Document", range:"all"}` (Document named `"Grok Bot"`). Optional `limit` truncates from the **end** (latest). Never returns webhook keys | optional `limit` |+| `grok_chat_read` | Visible transcript via `desktop_ui_text {hwnd, role:"Document", range:"all"}`. Returns `focusedThread` / `agent`. Optional `thread`/`agent` clicks that sidebar row then re-reads. Optional `limit` from the **end**. After cold launch the focused thread may not be grok-bridge — pass `thread` or wait after `grok_open`. Never returns webhook keys | optional `limit`, `thread`, `agent` | | `grok_send` | Toast `Grok Bot: {message}` **and** append `~/.adom/grok-inbox.jsonl`. Typing into the chat widget is opt-in — default does not steal the keyboard | `message`, optional `agent` |  ## Gotchas@@ -29,6 +29,7 @@ Never steal focus. Surface `_hint` verbatim. - Status and read are the Grok Bot **window**, not this agent's box desktop feed. - `grok_send` is not a public Grok HTTP API. The Anywhere character (`grok-anywhere`) can poll the inbox. - If list_windows is empty, fix hwnd unwrap first (**grok-app-control**) — chat verbs need that hwnd.+- Empty/tiny transcript after cold start: `errorCode` `focused_thread_empty` / `transcript_unavailable` plus `focusedThread`. Call `grok_open` then wait, or `grok_chat_read {"thread":"grok-bridge"}`. Sidebar click is best-effort UIA. - `ok:true` is not enough: after send, the toast exists; the composer may be unchanged. Say that honestly.  Window open/screenshot: **grok-app-control**. Webhook bots/channels: **grok-webhook**.
skills/grok-webhook/SKILL.md+3−2
@@ -25,7 +25,8 @@ Never log the key. Never put the key in `_hint`. Auth on fire is header `Authori | `grok_webhook_status` | Whether the json has a url. Returns `bound`, `urlHost` (hostname only) | — | | `grok_webhook_ensure` | Scrape the routine pane and bind locally. No human copy-paste | optional `force` | | `grok_webhook_bind` | Write the json (local FS on the PC). `url` must be **https** | **`url`**, **`key`** |-| `grok_webhook_fire` | POST `{event, payload, source:"grok-bridge", hostname, agent?}` | **`event`**, optional `payload`, optional `agent` (name or id) |+| `grok_webhook_fire` | POST `{event, payload, source:"grok-bridge", hostname, agent?}`. Top-level `runUuid` from HTTP 200 body | **`event`**, optional `payload`, optional `agent` (name or id) |+| `grok_run_status` | Echo last fire `runUuid` (in-process; not a public run API) | optional `runUuid` | | `grok_bot_create` | Fire `event=create_bot` | **`name`**, optional `description` | | `grok_channel_create` | Fire `event=create_channel` | **`name`**, optional `member_ids` | | `grok_bot_list` | Fire `event=list_bots` | — |@@ -74,6 +75,6 @@ adom-bridge --ai-thread "grok" --target AdomLapper grok_webhook_fire '{ - `create_bot` / `list_bots` / `create_channel` ignore `agent` (they are mailbox-owner actions). - `grok_send {agent}` is still toast + inbox, not this loop. -HTTP 200 is only `{runUuid}`. Poll `grok_chat_read` for the nonce. Latency ~60–120s. Queue is FIFO.+HTTP 200 is only `{runUuid}` — now copied to the verb's top-level `runUuid` (was null when only nested). Poll `grok_chat_read` for the nonce. Optional `grok_run_status {runUuid}` echoes the last fire in this process. Latency ~60–120s. Queue is FIFO.  Smoke: `grok_webhook_fire {"event":"ping"}`. Verify with `grok_webhook_status` (hostname only).