hive-agent: re-send the turn-state header once a minute
The header on `$SWARM.agent-state.<agent>` went out only when a bus event changed it, and the core subject keeps nothing for a late subscriber. An idle agent therefore said nothing to a reader that attached after its last change: swarm-controller after a restart showed `effective: null` for that agent until its next turn, which can be hours. The publish loop now also wakes every 60 s and re-sends the current header through the same `publish` path (clearing the dedup state first). Transitions still go out as they happen. Same subject, same grant. An agent whose queue connection is down now logs `swarm agent state: publish skipped` once a minute even while idle, so the `hh-swarm-agent-state-publish-skipped` alert also fires for idle disconnected agents, not only busy ones. Refs #5034
This commit is contained in:
parent
d723fac0be
commit
19a045a401
8 changed files with 152 additions and 59 deletions
|
|
@ -230,13 +230,14 @@ a destroyed one doesn't exist — so a view that needs the full four-state pictu
|
|||
takes them from the `agent-status` bucket and uses this subject to sharpen the
|
||||
rest.
|
||||
|
||||
Headers go out **on transition, not on a timer**: the harness rebuilds the
|
||||
header whenever its event bus moves and publishes only when the result differs
|
||||
from what it last sent. That's the whole point of the subject — the
|
||||
`agent-status` bucket already republishes once a minute, which is far too slow
|
||||
for "is this agent thinking right now." The cost of a core subject is that a
|
||||
subscriber attaching mid-idle sees nothing until the next change, so a renderer
|
||||
opens with the bucket's snapshot and lets this stream refine it.
|
||||
Headers go out **on transition**: the harness rebuilds the header whenever its
|
||||
event bus moves and publishes when the result differs from what it last sent.
|
||||
That's the whole point of the subject — the `agent-status` bucket already
|
||||
republishes once a minute, which is far too slow for "is this agent thinking
|
||||
right now." A core subject keeps nothing for a late subscriber, so the harness
|
||||
also re-sends the current header once a minute: a subscriber attaching
|
||||
mid-idle sees it within that minute. A renderer opens with the bucket's
|
||||
snapshot and lets this stream refine it.
|
||||
|
||||
Swarm-side, `GET /api/agents/<name>/state/stream` relays that subject as SSE,
|
||||
resolving the agent's hive at request time exactly as the terminal stream does.
|
||||
|
|
|
|||
Loading…
Reference in a new issue