Watch: notification switches, a model list and Ask before acting on new threads, and Ask before acting on a thread

This commit is contained in:
gib committed 2026-11-02 12:10:48 -05:00
1 parent 3cc7e40852
commit 6bc9cac6ca
14 files changed
+623 -81

No files matched your search

+19 -3
View File
@@ -55,7 +55,8 @@ xcrun simctl launch <udid> org.gbrown.wristcode.watchkitapp -demo -screen notifi
`screenshots/` holds the screens captured this way. The complication, the multi-select question, the
status screens, the subagent card and thread, Recent with Settle all and the "N more" row, the full
Recent list, and a finished thread with Settle are rendered by `SnapshotTests` instead, which only run when given a directory:
Recent list, a finished thread with Settle, a running thread with Ask before acting, and New thread
with its model list are rendered by `SnapshotTests` instead, which only run when given a directory:
```sh
TEST_RUNNER_WC_SCREENSHOT_DIR=$PWD/screenshots xcodebuild -scheme WristCode \
@@ -88,8 +89,23 @@ The gear at the top left of the feed opens the status overview (`GET /v1/status`
"All connected" or "Needs attention", lists only the issues worst first (offline hosts, a host on a
fallback route, tokens expiring within 7 days, push problems), and folds the healthy hosts into one
row. Each host opens its route ladder with Reconnect. The Notifications row shows whether this watch
is registered, the last push, Send test, the gateway, and Unpair. Each screen loads once when it
appears; nothing polls.
is registered, the last push, a switch per kind of push (Needs me, Finished, Failed, Subagents ask),
Send test, the gateway, and Unpair. A switch flips at once and sends only its own key with
`PUT /v1/device/notifications`. If that fails, it flips back and the error shows under the switches.
Host problems always notify. Each screen loads once when it appears; nothing polls.
## Models and Ask before acting
On New thread, the Agent row opens every model the host offers, grouped by provider, with the
project default's provider first. The watch remembers the last pick per host and falls back to the
project's default when the host stops offering it. It sends `model` only when the pick differs from
the default, so the default keeps its options, such as reasoning effort. The Ask before acting switch
under it remembers its last value. It is hidden, and the thread starts with `askFirst: false`, when
the provider cannot ask first.
A thread's screen has the same switch between Reply and Stop. It flips at once and posts
`/v1/threads/:hostId/:threadId/mode`. If that fails, it flips back and the error shows under it.
Against a gateway older than these routes, the switches and the model list stay hidden.
## Complication