control board: reply from the board through agent-send.sh (#1505)

Piece 2 of the MVP (#1503). A one-line reply box and Send in the detail
of rows with a live registration; POST /api/reply runs
tools/tmux/agent-send.sh -s <session> -S <host>:control-board
[-L <socket>] -m <text> once for one seat and returns the exit code,
stdout and stderr. The page shows delivered or failed with the tool's
stderr; other rows say "reply needs a registered seat". No send-keys,
queue, retries, history or broadcast; packages/seat and agent-send.sh
untouched. Every message ends with a fixed trailer telling the seat to
answer in its own session (Jason's refinement after the first Gate C
exchange; the board has no pane). Board suite 98/98.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
2026-09-12 11:30:30 -05:00
co-authored by Claude Fable 5.1
parent a62ca1904f
commit 867619dca2
8 changed files with 508 additions and 19 deletions
+19
View File
@@ -2133,3 +2133,22 @@ provider in the hover, and a Model detail row. Blank when the log names
none. Live check against the real data root on a scratch board: all 42
rows carried a model. Board suite 91/91 (was 90). Sonnet review recorded
in the plan page entry.
## 2026-09-12 — Control board piece 2: reply-from-board (#1505)
Before: the board could show a seat waiting on Jason but he had to find
its tmux pane to answer. After: the detail of a row with a live
registration has a one-line reply box; `POST /api/reply` runs
`tools/tmux/agent-send.sh -s <session> -S <host>:control-board [-L
<socket>] -m <text>` once, for one seat, and returns the tool's exit code,
stdout and stderr; the page shows `delivered <time>` or `failed (exit N):
<stderr>`. Rows without a live registration say "reply needs a registered
seat". No queue, retries, history, broadcast or raw send-keys; no change
to `packages/seat` or `agent-send.sh`. Live check through the real tool on
a scratch tmux session: delivered, and a refused target reported verbatim.
Board suite 98/98 (was 91). Gate C's first exchange on 2026-09-12:
Jason's "pizza?" reached darkwing and the row showed the answer within
one scan; the seat's attempt to agent-send back to `control-board` was
refused, correctly, since the board has no pane. Fix: every board message
ends with a fixed trailer saying to answer in the seat's own session.