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

6,444 commits

Author SHA1 Message Date
damocles
9457f49684 test the wake prompt and the Messaging permission after the tool removal 2026-11-08 01:40:10 +01:00
damocles
8154c5da02 docs: vale fixes in the messaging paragraph 2026-11-08 01:40:10 +01:00
damocles
c5fba26d62 drop the remaining pointers at the removed send/recv tools 2026-11-08 01:40:10 +01:00
damocles
bffb2c07a8 drop the hyperhive send/recv/ack_until tools: agents message over matrix 2026-11-08 01:40:10 +01:00
damocles
ccac95fcf4 matrix-mcp: document the bare name in the DM tool schemas, expand it once 2026-11-07 23:01:02 +01:00
damocles
64c0b8b3f0 docs: send_dm and open_dm accept a bare agent name 2026-11-07 23:01:02 +01:00
damocles
66f4984223 matrix-mcp: send_dm and open_dm accept a bare agent name 2026-11-07 23:01:02 +01:00
atlas
f86d90a91d swarm-controller: read placements only once the queue client has connected 2026-11-07 21:56:55 +01:00
atlas
3b007b1ccb swarm-controller: update_meta waits up to 60s for the queue client to connect
The boot run of the UpdateMeta node read hive placements before the queue client had connected, failed on the Pending client, and was not declared again until the next 10 minute timer tick. It now waits for the connection, bounded to 60s, and fails with a message naming the wait when the queue never connects. agent_renewal's wait_for_queue takes the bound as a parameter so both callers share it.
2026-11-07 21:56:55 +01:00
atlas
c217301e80 module-eval: pin ProcSubset all and ProtectProc invisible on forgejo and openbao 2026-11-07 21:27:21 +01:00
atlas
d8ad1e1794 forgejo, bao: let the go process collector read /proc/stat so the uptime panels have data 2026-11-07 21:27:21 +01:00
atlas
61a334c847 swarmctl setup status shows where the setup ceremony stands 2026-11-07 17:20:21 +01:00
atlas
78b0451ed1 hive-priv: overlay the knowledge .git only when the clone has one, so agents start before the first clone 2026-11-07 15:13:35 +01:00
damocles
513530ae35 matrix-mcp: auto-join only on accounts that live on the swarm homeserver 2026-11-07 14:10:06 +01:00
damocles
852d98e8dd docs: the daemon auto-joins invites from the own homeserver 2026-11-07 14:10:06 +01:00
damocles
2728a02369 matrix-mcp: join invites from the own homeserver automatically 2026-11-07 14:10:06 +01:00
iris
a47edaec5b docs: drop the sentence that says the dashboard row has no forge links
A page documents what is there, not what was removed.
2026-11-07 13:43:44 +01:00
iris
d516bb890c remove the forge links from the hive dashboard and the agent page
Each agent row on the hive dashboard, and the agent page's link menu, linked
to the agent's forge profile and its config repo. Both are gone, with what
only they used:

- hive-agent no longer builds the two links, the `Forge` link kind, or the
  `forge_public_url` field of its state, and no longer reads
  `HIVE_FORGE_PUBLIC_URL`. The agent page's link menu and the dashboard row's
  icon strip (which skips a forge link an agent not yet rebuilt still sends)
  drop their forge handling.
- hive-c0re's dashboard state no longer carries `forge_public_url`.
- `HIVE_FORGE_PUBLIC_URL` is no longer forwarded to agents through the meta
  flake (the forwarded-variable list, its test fixture, the controller's
  settings and the VM test), so the next meta flake render differs by that
  one line. hive-c0re still reads it for the forge URL a hive publishes, so
  `swarm.forge.publicUrl` stays, with its description corrected.
- The docs stop describing the links.
2026-11-07 13:43:44 +01:00
atlas
1b6d7f3c99 swarm: a failed facts copy counts in the held-deploys gauge 2026-11-07 12:59:50 +01:00
atlas
79c1b6d81d swarm: a deploy goes out only once its closure is cached and the hive has its cache facts 2026-11-07 12:28:44 +01:00
iris
0e84fe8bc4 docs: the handbook follows the three layers: swarm, hives, agents
The handbook's sections were agent-lifecycle, integrations, swarm, tools,
trust-boundary and web-ui, which do not follow how the system is built, so a
reader could not tell which layer a page is about. Its pages now sit in
swarm/, hives/ and agents/, with the accounts an agent can hold outside the
system in external-accounts/.

- swarm/: forge, matrix and the knowledge repo join the swarm pages, and so
  does the swarmctl reference.
- hives/: the dashboard, hivectl and its reference, and the operator/agent
  boundary, with a README that takes over the old web-ui and tools pages.
- agents/: the roster, persistence, config changes, the agent's own web page
  (was web-ui/agent) and the security model, with a README.
- external-accounts/: GitHub and GitLab.

Pages are moved whole; none is split yet. Every reference follows: relative
links in the docs, `docs/2-handbook/...` paths in code comments, the nix
checks that regenerate the CLI references and the ignore list, and docs/README.md,
whose handbook section is now by layer.
2026-11-07 12:19:36 +01:00
atlas
263b21021a swarm-controller: ask the builder for the archetypes again soon after a failed pass 2026-11-07 11:54:23 +01:00
iris
5633107b32 swarm ui: sort every pull requests column, and read a protection rule as the forge does
The labels and reviewers columns had no sort, so "every column sorts" was
false; both now sort on their joined text.

A branch protection rule's name is a glob the forge compiles with `/` as its
separator, which also takes `?`, `[a-z]`, `[!a-z]`, `{a,b}` and a backslash
escape. The report read only `*` and `**`, so a rule such as `{main,release}`
matched nothing and its PRs showed as protected by no rule, needing no
approvals. It now reads all of them.
2026-11-07 11:46:05 +01:00
iris
560afef2b6 swarm ui: the issue report card is named "issues"
The reports tab holds cards, so a card named "issue report" repeats the word.
The card is now "issues", beside "pull requests", and the handbook says the
same.
2026-11-07 11:46:05 +01:00
iris
944fd5b726 swarm ui: a diff column on the pull requests card, and "approved" as its header
The pull requests card gets a diff column, the lines a PR adds and removes
(`+120 −8`), sortable on the total. The controller takes the counts from the
forge's pull request list, so no call is added. The column that said "has all
approvals" is now headed "approved".
2026-11-07 11:46:05 +01:00
iris
f633963b77 swarm ui: a pull requests card on the reports tab
The reports tab gets a "pull requests" card under the issue report. It lists
the open PRs of every repo, or of one picked in a repo select, with the
columns a reviewer or merger filters on: author, labels, requested
reviewers, base branch, WIP (the forge's draft flag), approvals against the
base branch's protection rule, has all approvals, conflicts, protected base
and CI. Every column sorts, the small-set columns filter by picking values,
and the browser keeps the filters and the repo. No filter applies at first.

swarm-controller resolves each row so the page makes no calls of its own:
GET /api/pr-report and GET /api/repos/{org}/{repo}/pr-report. The required
approvals come from the first matching branch protection rule (an
unprotected base asks for none); an approval counts when it is the
reviewer's latest decision, on the current head, neither stale nor
dismissed and official.

A free-text table cell gets a minimum width, so a table with many columns
scrolls sideways instead of wrapping a title to a word a line.
2026-11-07 11:46:05 +01:00
iris
7479d7fca7 review classifier: pin that a try-out's expiry follows its own size
The expiry test only built entries sized for ten classifications, so a run
whose deadline was ignored or fixed at the default would pass. It now checks
that a run of a hundred is still held when ten would have expired, and drops
at its own deadline.
2026-11-07 11:32:04 +01:00
iris
cffe8895df review classifier: the most classifications a run carries is a setting
The limit was a constant of ten in swarm-wire, so a repo with eleven rules
could not be reviewed and nothing short of a rebuild changed it. It is now
`max_classifications` in the classifier settings, beside
`max_concurrent_reviews`: 1 to 1000, ten until set, and a document stored
before the field decodes with the default. The classifier settings form in
the swarm UI gets a "rules per review" field, and the try-out's add button
stops at the saved limit instead of a hard-coded ten.

The controller checks a try-out, and a requested review's rules file, against
the setting where the run starts. The rules file itself may hold up to the
1000 the setting allows, so raising the limit needs no change to a repo.
A review whose rules exceed the limit posts a no-verdict comment saying so.

A run's reply deadline was a constant that covered ten classifications, a
minute plus three each. It is now computed from the run's own size, so a
bigger run waits as long as it needs and a default-sized one still waits 31
minutes. The classifier's answer window in the queue permissions covers the
biggest run the setting allows.
2026-11-07 11:32:04 +01:00
damocles
e436d356f3 matrix-mcp: sync through a filter that drops presence, typing and unbounded state 2026-11-07 10:56:28 +01:00
atlas
b8b55ba23e credentials-reference: a hand-edited public-key on the in-swarm cache is overwritten 2026-11-07 10:40:07 +01:00
atlas
b0f6ccaa64 attic-init: replace the stored public key with the one the cache reports
a re-created cache signs with a new key; the fact was only created once, so
every hive then rejected the swarm's closures. the cache's grant gains update
on that one leaf, and a store that refuses it leaves the key as it was.

Closes #6181
2026-11-07 10:40:07 +01:00
damocles
485e2e86ca docs: active voice in the power intent seeding sentence 2026-11-07 10:05:14 +01:00
damocles
beaf05ab9c c0re: drop the removed agent_power store from db::open examples 2026-11-07 10:05:14 +01:00
damocles
b77fa9edc3 c0re: keep power intent in memory, drop agent_power/kv tables and the stop snapshot 2026-11-07 10:05:14 +01:00
damocles
fca7f669f5 hive-agent: poll, do not sleep, for the positive case in the accept-limit test 2026-11-07 09:41:00 +01:00
damocles
e9940be983 hive-agent: cap concurrent connections on the in-agent todo socket 2026-11-07 09:41:00 +01:00
argus
533a39a00b review-classifier: a pure deletion of code and its tests needs no new test 2026-11-07 09:26:56 +01:00
damocles
4b08dde82e docs: two comments no longer mention the removed send allow-list 2026-11-07 09:26:24 +01:00
damocles
c1f7bb798e hive-agent-mcp: the send allow-list is gone, agents talk to peers over matrix 2026-11-07 09:26:24 +01:00
iris
f23ce106b1 fixup! swarm-ui: the refresh picker of a polling card sits in the card's header row 2026-11-07 09:22:34 +01:00
iris
d0b37f52be fixup! swarm-ui: the refresh picker of a polling card sits in the card's header row 2026-11-07 09:22:34 +01:00
iris
bf7345405f swarm-ui: the refresh picker of a polling card sits in the card's header row
On the jobs, builds and hives cards the picker was alone on the first line of
the body. DisclosureAction puts a body's control in the header of the
disclosure it is in, beside the chevron and outside the toggle, so it costs no
row and pressing it does not fold the card.
2026-11-07 09:22:34 +01:00
damocles
262505e16a matrix-mcp: report the sanitized file name that download_file wrote 2026-11-07 09:12:06 +01:00
damocles
eb4ce56100 matrix-mcp: name a downloaded attachment by its file name, not its caption 2026-11-07 09:12:06 +01:00
atlas
64dfe0d205 cache-miss pass pushes a record the builder did not push
A meta build whose attic push failed (attic or its token not up yet) is
recorded with cached false and the deploy goes ahead. Nothing sent that
build again until internal/meta moved, so the create for that agent
failed on every hive and a rebuild was silently never pending.

The controller's cache-miss pass now also takes a record from the head
with cached false: it sends the same build without asking the cache, with
the pass's existing backoff (30 min doubling to 12 h), and rewrites the
record with cached true once the push lands, under the same
compare-and-set guard as a path change. The push.rs module doc no longer
claims the next build pushes again.

Mixed versions: controller-only, same wire type and builder request. An
old controller leaves an uncached record as before; a builder needs no
change.

Closes #6173
2026-11-07 09:05:45 +01:00
atlas
9e0c51052b swarmctl: agent watch follows an agent's terminal rows
Reads GET /api/agents/{name}/term/stream over the controller socket or the
gateway and prints one line per row. The gateway path uses a client without
the total-request timeout so the stream isn't cut after 30 seconds.

Closes #6160
2026-11-07 09:05:10 +01:00
atlas
aa227a95c1 docs: move the agent tool docs to 4-implementation/agent-tools 2026-11-07 09:04:27 +01:00
atlas
df8a82bc33 docs: move the cli references under 2-handbook/tools
Closes #6157
2026-11-07 09:04:27 +01:00
iris
be383ab276 frontend: the per-agent UI typechecks under preact 11
preact 11's types reject the side panel's role=dialog on an aside, which the
nix agent-typecheck check runs. The drawer is a div, whose CSS is
class-based, so nothing else changes.
2026-11-07 08:41:40 +01:00
iris
d76d54c412 frontend: preact 11.2.0
All four packages move from preact 10.29.8 to 11.2.0. The new types need four
small changes in swarm-ui and the shared dropdown: a ref that may be empty is
typed RefObject<T | null>, HTMLAttributes is imported from preact instead of
read from the JSX namespace, and TextField's type is the five kinds it is
used with, asserted once for the input's new union. npm-deps-hash follows the
lockfile.
2026-11-07 08:41:32 +01:00