Watch
0
0
Fork
You've already forked hyperhive
0
hyperhive/hive-agent/src
Repository files (latest commit first)
Filename Latest commit message Latest commit date
atlas 2cdd7f2ff1 hive-agent: publish the agent terminal to the swarm queue
The harness has had its queue coordinates since the credential reached
the container, but nothing used them. This offers each terminal row
upward on `$SWARM.term.<hive>.<agent>`, so a swarm-level terminal can
render an agent without reaching into the hive that hosts it.

It publishes the same `TermMsg` the web UI is handed rather than a
second model of the same events, so a new tool or a reclassified event
changes both surfaces together. It subscribes to the event bus rather
than to the SSE handler: the handler classifies per connected browser,
so hanging this off it would mean an agent nobody is watching publishes
nothing. That also means its own long-lived `ClassifyCtx`, since a
publisher restarting its correlation state would lose the `tool_use` →
name mapping a `tool_result` needs to render.

The hive in the subject is derived from the queue client id, not from
the harness's hive display name. Those come from different sources with
no rule tying them together, and the responder builds its grant from the
client id — so deriving it from the display name yields a publish the
broker refuses, reaching an operator as a terminal that is merely empty.
The prefix and suffix that bracket the hive are the responder's flags,
which the agent is not told; it restates their defaults, and the symptom
of a deployment retuning one without changing this is every publish
refused rather than a wrong subject accepted.

Oversize rows degrade in the publisher. Exceeding `max_payload` is not a
truncation: the server refuses the message and closes the connection, so
an oversize publish costs the row, the connection, and the rows racing
behind it through the reconnect. The body is the only unbounded field —
summaries are already trimmed at classification — so it is the field
spent, and the row keeps its icon, level, summary and coalesce key. A
row that does not fit even then is logged and dropped rather than sent.
The limit is read off the connection, so `8388608` stays spelled once in
the queue's own module; size is measured by serializing, because JSON
escaping separates character count from wire length by an unbounded
factor on exactly the rows already near the limit.

Best-effort throughout: no queue, an unparseable client id and a failed
connect each disable the publisher with one log line, and a failed
publish loses its row and nothing else. The turn loop and the web UI
never block on the queue.

Refs #3805
2026-09-13 11:59:55 +02:00
..
web_ui docs: stop writing repo-doc pointers as relative links rustdoc cannot resolve 2026-09-02 08:59:48 +02:00
claude_md_watch.rs hive-agent: warn + emit an OTEL gauge on a grown CLAUDE.md 2026-08-26 18:34:36 +02:00
db_migrate.rs todos: reopen an acked keyed row when the caller says so 2026-08-13 12:55:20 +02:00
disk_watch.rs todos: reopen an acked keyed row when the caller says so 2026-08-13 12:55:20 +02:00
events.rs hive-agent: trim narrative comment bloat in doc comments (#3901) 2026-09-02 01:52:53 +02:00
harness_state.rs docs: restructure into topic subdirectories, collapse duplicated index 2026-09-02 01:55:37 +02:00
identity.rs docs: restructure into topic subdirectories, collapse duplicated index 2026-09-02 01:55:37 +02:00
login.rs docs: stop writing repo-doc pointers as relative links rustdoc cannot resolve 2026-09-02 08:59:48 +02:00
login_session.rs refactor(#2464): rename hive-ag3nt crate to hive-agent, collapse lib into main 2026-07-15 16:09:39 +02:00
main.rs hive-agent: publish the agent terminal to the swarm queue 2026-09-13 11:59:55 +02:00
mcp_config.rs docs: three comments point at a nix directory that does not exist 2026-09-02 14:19:03 +02:00
otel_turn_metrics.rs docs: restructure into topic subdirectories, collapse duplicated index 2026-09-02 01:55:37 +02:00
paths.rs docs: restructure into topic subdirectories, collapse duplicated index 2026-09-02 01:55:37 +02:00
plugins.rs refactor(#2464): rename hive-ag3nt crate to hive-agent, collapse lib into main 2026-07-15 16:09:39 +02:00
prompt.rs hive-c0re/hive-sh4re: remove the ask/answer wire protocol + core routing 2026-08-30 01:18:17 +02:00
reminder_timer.rs docs/hive-c0re: fix ask/answer removal doc gaps argus caught on #3741 2026-08-30 03:02:31 +02:00
reminders.rs hive-sh4re: split approval-queue schema into its own topic module 2026-08-10 23:05:18 +02:00
serve_common.rs hive-agent: remove dead bash-task- wake_from special-case 2026-08-14 12:09:02 +02:00
state_entry_watch.rs fix hint text per argus review: group into subdirs, not split into more top-level files 2026-08-18 22:07:05 +02:00
stats.rs hive-sh4re: split approval-queue schema into its own topic module 2026-08-10 23:05:18 +02:00
stream_enrich.rs hive-agent: add speech-bubble icon to assistant text output rows 2026-09-10 19:00:21 +02:00
swarm_queue.rs hive-agent: publish the agent terminal to the swarm queue 2026-09-13 11:59:55 +02:00
swarm_term.rs hive-agent: publish the agent terminal to the swarm queue 2026-09-13 11:59:55 +02:00
term_msg.rs docs: say what these things are, not where they used to be 2026-09-07 15:06:12 +02:00
todo_server.rs hive-sh4re: one saturating_age for every loose-end producer 2026-09-02 14:20:25 +02:00
todos.rs todos: reopen an acked keyed row when the caller says so 2026-08-13 12:55:20 +02:00
turn.rs hive-agent: guarantee a wake after a self-requested /compact 2026-08-13 23:17:10 +02:00
turn_stats.rs swap hive-claude to the crates.io registry dependency (#2931) 2026-08-02 14:19:26 +02:00
vacuum.rs docs: restructure into topic subdirectories, collapse duplicated index 2026-09-02 01:55:37 +02:00