Watch
0
0
Fork
You've already forked hyperhive
0
Commit graph

6,337 commits

Author SHA1 Message Date
atlas
2158302159 retry a refused shared policy write at controller startup
A refused write of the shared hive policy or the shared agent policy
returned Ok from the startup pass, so only a controller restart tried
again. Both now come back as Unreachable, which the existing 30 s retry
already covers. Per-hive role failures stay warn-and-skip.

The retry rewrites the same policy text; nothing new is minted. No wire
or option change; internal to swarm-controller.

Closes #6087
2026-11-06 09:19:07 +01:00
atlas
d5eb7711e6 move nixBuilds into its own agent module, and have the vm test's agent import it 2026-11-06 09:18:42 +01:00
atlas
f930571e38 nixBuilds none: turn the container's own nix-daemon socket and service off 2026-11-06 09:18:42 +01:00
atlas
5485151ba6 add a per-agent nix builds mode, host or none, carried like privateUsers 2026-11-06 09:18:42 +01:00
atlas
b9484e62a0 put the socket-dir test above the records-flag comment, and say the activation logs on the new link 2026-11-06 09:18:16 +01:00
atlas
6847ed865a bind a namespaced agent's socket dir off /run so its owner maps to the agent user 2026-11-06 09:18:16 +01:00
iris
23f4f1823b hive-agent: the per-agent page has no message box; its send route and the broker's operator message are removed
The page's composer (its input, slash commands and completion), POST /send in
hive-agent, the OperatorMsg request of the agent socket and its handler in
hive-c0re, and the broker-error helper only the send route used are deleted:
writing to an agent is the swarm UI's terminal. cancel turn, new session and
log out stay in the state badge's menu; POST /api/compact stays, with nothing
on the page calling it. The request-line limit keeps its size, and its comment
says it is a generous bound now. The docs describe the actions in place of the
footer and the prompt.
2026-11-06 01:13:44 +01:00
iris
e149ff3315 swarm-ui: the hives card and the alerts table show placeholder rows under their own header while they load
TableSkeleton is the twin of Table: the same columns, so the same header cells,
with a placeholder shape in each cell of three blank rows and no sort or
filter, which have nothing to work on yet. The hives card and the alerts table
use it in place of their "loading…" text.
2026-11-06 00:55:50 +01:00
iris
33c230665b swarm-ui: the permissions box lists every permission instead of a narrow scroll area
The checkbox list was capped at 12em and scrolled, and the box shrinks the
list to its widest label, so the scrollbar sat in the middle of the popover
with the lower permissions hidden. The permissions are a short fixed list:
MultiselectFilterOptions takes scrollable={false} and the permissions box
uses it. Filter lists that can grow long keep the scroll area.
2026-11-06 00:27:53 +01:00
iris
27c4a593bb swarm-ui: the agents page shows placeholder cards in the shape of the real ones while the roster loads
A new Skeleton (a shimmering shape, still where motion is off) and a region
that tells assistive tech once that something is loading. The agent card's
header is split into AgentCardLayout, a layout with a slot for each part: the
card fills the slots with the real icon, badges and controls, its new
AgentCardSkeleton twin fills the same slots with placeholder shapes, so the
card that replaces it lands in the same place. The agents page uses the twin in
place of its "loading…" text.
2026-11-06 00:22:58 +01:00
iris
fd51cbd19d swarm-ui: pages that only display start from the answer they last saw, then refresh behind it
usePolled takes a cache key: it saves each answer in localStorage and starts
from the saved one, so opening the agents, alerts, builds, review runs or hives
view shows the last data at once and the refresh spinner marks the update. A
saved answer is dropped after a day, when it was saved by another build of the
UI, at log out (a new onLogout of the shared user menu) and when the gateway
ends the login (a new onSessionEnded of the session guard). Pages with an
editor (schedules, notification flows, broadcast) do not use it.
2026-11-05 23:14:25 +01:00
iris
47c447409b swarm-ui: the refresh picker shows a spinner in place of its clock while its page is fetching
usePolled reports when a request is in flight (through a new onBusy of the
poller) and holds it on for at least 0.4 seconds, so a quick answer still
reads as a refresh. The picker swaps its clock for the spinner, in the same
box so its width stays, and the spinner stands still where motion is off.
Every page with a picker passes it; a page with several polled requests shows
it while any of them runs. The Jobs page fetches through shared components
and has none yet.
2026-11-05 23:09:07 +01:00
atlas
89bbeb9757 the bridge resolver answers other record types for its own names locally instead of waiting on an upstream 2026-11-05 16:04:40 +01:00
iris
4876acd02a swarm-ui: a group pane's maximize and close are icon-only badges in its top right corner
The two controls sat among the pane's header badges as a labelled badge and a
cross glyph. They are now icon badges in the top right corner, through a
`trailing` slot of the terminal preview, so the header on the left keeps the
agent, split, subagents and state badges and a narrow pane wraps less.
2026-11-05 13:33:12 +01:00
iris
d733b1e2a9 swarm-ui: choosing a subagent in the subagents menu splits its terminal in beside the agent's
The menu on an agent's terminal page used to open the subagent on a tab of
its own. It now starts a group of this terminal and the subagent's, split to
the right; in a group's pane it splits that pane. A pane's layout key is the
agent, or `agent/subagent` for a subagent's pane, so the layout operations
stay as they are and a destroyed agent takes its subagent panes with it. A
subagent already in the group shows a marker and does nothing when chosen,
and maximize opens a subagent pane's terminal on its own.
2026-11-05 12:45:35 +01:00
iris
5665bbf827 swarm-ui: a maximize button on each pane of a terminal group opens that agent's own terminal 2026-11-05 12:42:56 +01:00
atlas
7e2580ed69 let the controller list the agent-permissions bucket so the grant re-mirror runs 2026-11-05 12:27:06 +01:00
damocles
f64d2151d0 swarm-nats-auth: let the notify router read its own consumer's counts, which its lag gauges ask for 2026-11-05 12:26:53 +01:00
iris
2b78634944 swarm-grafana: dashboards for the swarm builder, the CI runner, Matrix and the notification router 2026-11-05 10:44:33 +01:00
damocles
c8c5a19761 hive-forge: pr reviews names the poster of an inline comment that is not the reviewer's 2026-11-05 09:56:08 +01:00
damocles
3a77e869eb module-eval: give the Grafana stand-in a mainProgram, so upstream's getExe stops warning 2026-11-05 09:55:53 +01:00
atlas
cb5a9b2bd7 report the real error when the granter role's bootstrap step fails, and retry on a standby store 2026-11-05 08:57:10 +01:00
damocles
3ff4dc7be0 hive-forge: review-reply adds the comment to the answered comment's review, as the web UI does 2026-11-05 08:31:43 +01:00
damocles
66837e7c10 hive-forge: pr review-reply answers an inline review comment in its conversation 2026-11-05 08:31:43 +01:00
atlas
bef9d401a4 matrix: report homeserver up, latency and database size through existing collectors
tuwunel 1.9.4 exports no metrics. The host collector gets an httpcheck
receiver on the gateway's /_matrix/client/versions (new
services.hyperhive.otel.httpChecks, declared by hive-matrix), and a timer in
the hive-matrix container pushes the database directory's size through the
forwarder's OTLP port, as the attic cache-size unit does. The size step
dereferences the state directory's symlink and pushes nothing for a result
under 4096 bytes.
2026-11-05 08:30:06 +01:00
iris
839dbd642a swarm-ui: groups of agent terminals: drag a terminal tab onto a terminal to split it, tmux style, with resizable panes, a split button, and a name you can edit 2026-11-05 08:24:58 +01:00
iris
acc480c4f3 lint: the swarm collector's scrape job names Grafana's metrics 2026-11-05 08:08:57 +01:00
iris
d1f83c64ce swarm-grafana: a dashboard for grafana itself 2026-11-05 08:08:57 +01:00
iris
93bf43a372 swarm-ui: a dark pick over a light OS preference keeps the dark palette's dimming shares 2026-11-05 07:53:07 +01:00
iris
b82d4d4722 swarm-ui: dimmed text on the light palette keeps enough of the text colour to pass AA contrast 2026-11-05 07:53:07 +01:00
flake-bot
72ffe3b187 nix flake update 2026-11-05 04:00:11 +01:00
damocles
4b71bcd8ff metrics tests: compare labels sorted, the SDK keeps attributes in no fixed order 2026-11-05 01:31:23 +01:00
damocles
3adfcb3843 docs: contraction in the login minter's metric notes for the prose lint 2026-11-05 01:31:23 +01:00
damocles
6733d2ac30 docs: say who reads the router's consumer counts 2026-11-05 01:31:23 +01:00
damocles
652c0e9614 swarm-claude-login: export login step, duration, expiry and active session metrics 2026-11-05 01:31:23 +01:00
damocles
a6a0ab7aef swarm-notify-router: give the event duration histogram second-scale bounds 2026-11-05 01:31:23 +01:00
damocles
7efcfd0644 swarm-notify-router: export event, todo, review request and consumer metrics 2026-11-05 01:31:23 +01:00
iris
d86ecd68a8 module-eval: the CI metric names are pinned from the forge board's CI runs tab 2026-11-05 00:47:17 +01:00
iris
ffe2116561 swarm-grafana: shorten the forge board description 2026-11-05 00:47:17 +01:00
iris
bc5c36dba6 swarm-grafana: the forge and CI runs boards become one forge board with content, runtime and CI runs tabs 2026-11-05 00:47:17 +01:00
atlas
e30f5849d5 swarm-builder: export build counts, durations, queue wait and publish failures through the host's collector
The builder pushes its build metrics (builds by kind and outcome, build
duration, queue depth and wait, reply publish failures) to its forwarder's
OTLP receiver, which relays them to the swarm collector.

It also registers the standard store client-certificate gauges
(bao.client_cert.*, cert=builder) on the same exporter. They are the
builder's liveness signal: exported every minute whether or not a build
runs. The cert-metrics table in docs/scheduler/observability.md gains the
builder row.
2026-11-05 00:43:25 +01:00
iris
3b8f7ff630 docs: the deny list paragraph in active voice, for the prose lint 2026-11-04 23:53:03 +01:00
iris
0421f28d49 swarm-ui: the egress card on the swarm page lists and edits the swarm-wide denied domains, and says which hives have not applied them 2026-11-04 23:53:03 +01:00
atlas
0bc350a8a1 ci runner: export its built-in metrics through the container's forwarder 2026-11-04 22:26:54 +01:00
iris
528c4476cb swarm-ui: keyboard focus keeps a visible ring on interactive cards and notification boxes 2026-11-04 22:20:33 +01:00
atlas
dd5fde848f squid blocks a runtime deny list from the controller in every egress mode, ahead of the allow list 2026-11-04 22:16:35 +01:00
argus
99ab0ae77f review-classifier: a purely visual restyle needs no docs update
The docs-updated rule counted a keyboard focus ring as something a user sees and asked for a docs page, so a CSS-only accessibility fix was marked down. A restyle that adds, removes, moves or renames no control or label and changes no behaviour (colours, contrast, spacing, a focus ring) now makes the question not applicable, like a comment edit. A change that moves or removes a control still needs the docs.
2026-11-04 22:12:26 +01:00
iris
b64ad47817 swarm-ui: egress card lists the allowed domains as plain rows with real buttons, not badges 2026-11-04 21:53:58 +01:00
iris
7122a3a36d swarm-ui: test which entries the egress card lists and the swarm-wide add body 2026-11-04 21:19:39 +01:00
iris
ad76e7e937 swarm-ui: an egress card on the swarm page for the swarm-wide allowed domains, sharing the agent card's add form and list hook 2026-11-04 21:14:43 +01:00