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

6,377 commits

Author SHA1 Message Date
atlas
f1f611ba01 tmpfiles creates the agents root owned by hive-core
a fresh host's hive-priv made /var/lib/hyperhive/agents root-owned, so
hive-c0re could not create agent dirs (nightly run #7113). the rule
names no mode, so existing hosts are unchanged.

Closes #6143
2026-11-06 20:32:42 +01:00
iris
bb789e4603 swarm-ui: the job graph shows placeholder rows in the shape of a job tree while it loads
JobqGraph takes an optional loading element, so the dashboard keeps its text
and the swarm UI's jobs tab passes a placeholder built from the graph's own
node and row classes: a root with two children and a second root, with the
real indent and rail.
2026-11-06 20:26:31 +01:00
iris
f276ee342c swarm-ui: linking a matrix account starts on the password login and warns before a pasted token
The form's credential choice now starts on 'log in with a password', listed
first, with a note that the swarm's own login gives the account a device of
its own. Choosing 'paste a token' shows a warning: a token from Element or
another client belongs to a device that is already logged in, so the agent
cannot use its encryption keys and the account will not decrypt encrypted
rooms.
2026-11-06 20:21:16 +01:00
iris
ecea98c950 fixup! swarm-ui: the broadcast roster and the egress lists show placeholders while they load 2026-11-06 20:07:25 +01:00
iris
8847e6390b swarm-ui: the broadcast roster and the egress lists show placeholders while they load
The broadcast grid showed nothing while the agents loaded, and the egress
card a 'loading the … domains' line. They now show grey placeholders in the
shape of what is coming: six agent chips with the real chip's height (160 px,
measured), and three domain rows with their remove buttons.
2026-11-06 20:07:25 +01:00
iris
a9dd276935 swarm-ui: FieldGrid lays out a row of form fields on one grid for the forms that each hand-rolled it
Classifier settings, the try-out target row and classification rows, and the
schedule cadence each wrote their own flex row with its own flex basis and
gap. FieldGrid is one grid with equal columns and one gap, FieldGridFull
spans a row, and the four forms use it, so a lone last field keeps its column
width and the columns share their edges in every row.
2026-11-06 20:05:14 +01:00
iris
c37205e8f5 swarm-ui: the terminal message box has a placeholder and a spinner instead of a label and a sent line
The label 'message <agent>' is the input's placeholder (the label stays for
screen readers). The send button shows a spinner over its label while the
request is pending and keeps its width, and the 'sent' line is gone: the box
empties when the message is held. Spinner is a component of its own now, used
by the button and the refresh picker.
2026-11-06 19:51:22 +01:00
iris
5eef1f4a3d swarm-ui: the schedules, notification flows and flow editor show placeholders while they load
The schedules card, the notification router card (flows and recent
deliveries) and the flow editor showed a bare 'loading…' line. They now show
grey placeholders in the layout of what is coming: schedule cards with the
real card's row heights, flow cards with a block for the graph, the
deliveries table's header over blank rows, and lines for the editor.
2026-11-06 19:46:11 +01:00
damocles
0bc0b86d1d hive-c0re: priv_client can dial any socket path, so its wire path is tested against a fake hive-priv 2026-11-06 19:45:37 +01:00
iris
514a7c1580 fixup! docs: the trust-boundary pages keep the operator guidance, the mechanism moves to implementation 2026-11-06 19:45:11 +01:00
iris
30a8f71bb5 docs: the trust-boundary pages keep the operator guidance, the mechanism moves to implementation
boundary.md keeps the model, the design rule, why network isolation
matters and host admin socket access; the hive-priv socket activation and
the per-agent socket directory move to 4-implementation/trust-boundary.
security.md keeps the agent trust model and the path-name rule; the nix
builds mode with its threat model, and the hive-c0re privilege separation,
move to their own pages there. Headings and text move as they were, with
one level shaved off the heading depth. Links, code and nix pointers, and
the docs index follow the moves.
2026-11-06 19:45:11 +01:00
iris
5d5df29687 swarm-ui: shared code leaves page folders; SectionHeading and Preformatted replace per-page copies
durationLabel moves to util.ts, termPaths to agent/terminal/term-paths.ts,
StateBadges and tokenTotal to agent/state, and TryOutResult to
pages/review-common, so the builds, runs and agent pages no longer import
across page folders. SectionHeading is the body-size section heading the
create form and the egress card each styled; Preformatted is the scrolling
text block of the builds tail and the AGENTS.md view, which now share one
chrome and are both keyboard-scrollable. The components page shows both.
2026-11-06 19:09:18 +01:00
iris
4bd81d5b0f fixup! swarm-ui: forms share one submit flow, result line and field column 2026-11-06 19:00:01 +01:00
iris
811b23cd6b swarm-ui: forms share one submit flow, result line and field column
useSubmit holds the idle, sending, done and error state and the request
flow that six forms each wrote out; FormResult shows the success line and
the problem panel; FormStack is the column the link, claude-login,
inference and limits forms each styled by hand. The create-agent, link
account, backend-env and agent-input forms use the submit flow; the link,
claude-login, inference and limits forms use FormStack.
2026-11-06 19:00:01 +01:00
iris
0e10473e6f fixup! docs: sort the top-level directories into five sections by what the reader wants 2026-11-06 18:46:57 +01:00
iris
6739bb903d docs: sort the top-level directories into five sections by what the reader wants
Every docs directory moves under 1-getting-started, 2-handbook,
4-implementation or 5-project; the options reference (section 3) comes from
the website and has no directory here. trust-boundary stays whole under the
handbook for now. web-ui, swarm and tools split between handbook and
implementation, and the command-line references move to
2-handbook/reference. Links, path references in code and nix, and the docs
index follow the moves; no page content changes.
2026-11-06 18:46:57 +01:00
iris
53ccbcb4b3 fixup! swarm-ui: shared Hint, ActionRow, Toolbar, EmptyState, ExternalLink and ExpandableCard replace per-page copies 2026-11-06 18:41:25 +01:00
iris
2b53fcd742 fixup! swarm-ui: shared Hint, ActionRow, Toolbar, EmptyState, ExternalLink and ExpandableCard replace per-page copies 2026-11-06 18:41:25 +01:00
iris
8a2e5203ad swarm-ui: shared Hint, ActionRow, Toolbar, EmptyState, ExternalLink and ExpandableCard replace per-page copies
Hint, ActionRow, Toolbar, EmptyState and ExternalLink replace the muted
text, button row, refresh bar, empty line and _blank anchor that each page
restyled under its own class. ExpandableCard (with a loading twin) holds the
builds and recent-runs cards, which had identical head and body CSS. The
create form's raw checkbox becomes CheckboxField. The components page shows
each new piece.
2026-11-06 18:41:25 +01:00
damocles
b74b5e77e4 hive-c0re: priv_client builds its requests in testable functions and tests them 2026-11-06 18:09:05 +01:00
iris
9b81af1fef swarm-ui: the classifier settings under the ACP runtime line up on one grid
The two groups of fields had different column counts, so their edges never met,
and the price labels carried their unit, which wrapped in a monospace font and
pushed those inputs below their neighbours. Every group is one CSS grid now. The
provider fields sit under a "provider" heading, with the URL and the model each
on a full row so their placeholders are not cut off, shorter price labels and
the unit said once under them.
2026-11-06 18:08:46 +01:00
iris
a9f0d61daa swarm-ui: an agent's settings and AGENTS.md show placeholders while they load
BadgeSkeleton is the twin of Badge: the real Badge frame, as tall as an
interactive one (the settings values are buttons), with a placeholder for its
value. Permissions, resource caps, internet and allowed domains use it in place of
their "loading…" text, the details popover shows lines of text, and the
AGENTS.md editor a block, in place of theirs. SkeletonLines is a few stacked
lines for such blocks.
2026-11-06 17:27:55 +01:00
iris
38505a5864 swarm-ui: the egress icon is shown as an emoji like the others
The globe of the egress card and of the allowed-domains box showed as a
plain monochrome glyph where the bee and the bell were emoji: a font with a
text-style glyph for the globe won over the emoji font. The two globes now carry
the emoji variation selector, and a panel's icon asks for emoji presentation
(font-variant-emoji), so another icon cannot fall the same way.
2026-11-06 17:20:27 +01:00
atlas
a71e7cea75 allow erofs as the idmapped store filesystem
nspawn idmaps the store on erofs, which the VM test's store uses; the
allowlist from the store check refused it and failed the namespaced-agent
subtest in vm-nightly #7084. vm-nightly #7030 ran the same agent on the
same erofs store green. The magic is EROFS_SUPER_MAGIC_V1 from the
kernel's linux/magic.h; libc has no constant.

Refs #5888
2026-11-06 17:02:44 +01:00
atlas
47ec47e25b start the forge mint unit from the trust refresh
a late store root dependency-fails forgejo-swarm-controller-account on
first boot and the refresh never started it, so the controller got no
forge token (vm-nightly #7084). list it as a trust consumer.

Closes #6109
2026-11-06 15:45:34 +01:00
atlas
419d087702 say the store check is an allowlist: only ext4, btrfs and xfs pass 2026-11-06 12:37:04 +01:00
atlas
af739dc8ea refuse a namespaced agent whose /nix/store cannot be idmapped
Refs #5888
2026-11-06 12:37:03 +01:00
atlas
5d2b0c9a54 swarm-builder: an agent option whose eval failed is left out of the reply, not read as its default 2026-11-06 11:36:32 +01:00
atlas
cd1b77b078 pin state as the first data dir with a comment and a test 2026-11-06 11:36:17 +01:00
atlas
76f5ede645 make a userns data move resumable and refuse before the first chown 2026-11-06 11:36:17 +01:00
atlas
aed7c8451a read the running rev and the hyperhive flake from /etc files, not the unit 2026-11-06 11:35:48 +01:00
atlas
32af7e0639 lifecycle: leak the stop-failed warning kind once per agent
Closes #6096
2026-11-06 11:35:27 +01:00
atlas
18e4f195e5 hive-priv: refuse injecting strings in the limits drop-in and the container conf
memory_max and cpu_quota are checked against the shapes systemd takes
before write_resource_limits makes any file. validate_bind_path also
refuses whitespace, control bytes, backslash, dollar and backtick, which
the start script expands unquoted in EXTRA_NSPAWN_FLAGS. bridge must be
an interface name and gateway_ip an IPv4 literal. Each refusal names its
field.

Closes #6086
2026-11-06 10:06:11 +01:00
atlas
04870fbdb0 docs: registration follows the secret within five minutes, not at once 2026-11-06 09:21:59 +01:00
atlas
68b38a9d44 swarm-controller: keep retrying the forge webhook secret and registration after a startup outage
The webhook secret slot is filled in the background, on the forge token's
capped unbounded backoff, when the store can't answer at start. The hook
registration waits for the secret and retries on the same backoff instead
of giving up after five tries.

Closes #6101
2026-11-06 09:21:59 +01:00
damocles
431cb6e77f hive-bash-mcp: find env on PATH where /usr/bin/env is missing, so the runner tests run in the nix sandbox 2026-11-06 09:21:43 +01:00
damocles
7d28227fee hive-bash-mcp: a task writes to its files directly, so a backgrounded child cannot hold it open 2026-11-06 09:21:43 +01:00
atlas
febac5eaa9 serialise the agent-sockets and gateway publishes and give each its own tmp file
Closes #6094
2026-11-06 09:20:21 +01:00
atlas
970ee83a93 broker: keep unacked ids until the ack update succeeds
Closes #6092
2026-11-06 09:19:58 +01:00
atlas
39482ea6cd forge-token: exit 1 when the store read fails for any reason but "not there"
Only "No value found at" and a 403 mean the token is not minted yet and
exit 0. Any other failure exits 1 so the restart policy and store-retry
apply. The token file stays untouched either way.

Closes #6089
2026-11-06 09:19:33 +01:00
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