swarm: cancel an agent's turn from the swarm queue
A separate $SWARM.control.<agent> subject carries commands, apart from
the text subject. swarm-controller exposes POST /api/agents/{name}/cancel
as a NATS request; the harness answers whether a turn was actually
stopped, through the same cancel path as the dashboard button. The agent
credential gets subscribe on its control subject and allow_responses to
answer; only the controller may publish there.
Refs #3803
This commit is contained in:
parent
e7ed28b382
commit
fefc565794
11 changed files with 558 additions and 69 deletions
|
|
@ -281,12 +281,14 @@ one, as the hive dashboard does.
|
|||
The queue also limits what an agent may **subscribe** to, because agents are the
|
||||
least trusted clients on the queue. An agent's own queue credential, which its
|
||||
subagent daemon also presents, may subscribe to its reply inbox
|
||||
`_INBOX.agent.<agent>.>` and its operator-input subject `$SWARM.input.<agent>`,
|
||||
and nothing else. The harness and the subagent daemon connect with
|
||||
`_INBOX.agent.<agent>` as their inbox prefix, so the replies to the icon write
|
||||
and the schedule read arrive. An agent can't read another agent's terminal,
|
||||
state, input or replies. The queue refuses the hive's shared agent client
|
||||
outright.
|
||||
`_INBOX.agent.<agent>.>`, its operator-input subject `$SWARM.input.<agent>` and
|
||||
its command subject `$SWARM.control.<agent>`, and nothing else. Besides the
|
||||
subjects it publishes to, the credential may answer the one request it was just
|
||||
sent, which is how a command gets its reply. The harness and the subagent daemon
|
||||
connect with `_INBOX.agent.<agent>` as their inbox prefix, so the replies to the
|
||||
icon write and the schedule read arrive. An agent can't read another agent's
|
||||
terminal, state, input, commands or replies. The queue refuses the hive's shared
|
||||
agent client outright.
|
||||
|
||||
Hives and the swarm controller get a subscribe allow-list too, each with its
|
||||
own reply inbox `_INBOX.client.<client-id>.>`, which `swarm_queue_client::connect`
|
||||
|
|
|
|||
|
|
@ -209,6 +209,15 @@ credential may subscribe there. The harness doesn't reply, so swarm-controller
|
|||
answers 202 when the request times out after two seconds, and 503 when the
|
||||
queue reports no subscriber.
|
||||
|
||||
A command has its own subject, so the harness never mistakes typed text for
|
||||
one. `POST /api/agents/<name>/cancel` sends `"cancel"` as a NATS request on
|
||||
`$SWARM.control.<name>`, and only swarm-controller may publish there. The
|
||||
harness answers `{acted}`, which says whether a turn was running when the
|
||||
cancel stopped it. It runs the same code as the hive dashboard's cancel button.
|
||||
Unlike input, the harness answers a command, so swarm-controller returns that
|
||||
answer as 200, 503 for no subscriber, and 504 when the harness held the command
|
||||
and didn't answer within ten seconds. A 504 means unknown, not cancelled.
|
||||
|
||||
</details>
|
||||
|
||||
<details><summary>Where the subagent list and rows come from</summary>
|
||||
|
|
|
|||
Loading…
Reference in a new issue