Commit graph

2,417 commits

Author SHA1 Message Date
müde
9721be7bc3 docs(turn_stats): mark unread columns as forward-capture, not consumed 2026-07-05 22:39:45 +02:00
müde
f490e07509 refactor(prompt): drop unreachable role-block defensive branches; keep marker grammar 2026-07-05 22:36:10 +02:00
müde
20ff891962 refactor(forge_notify): share render_body_excerpt across formatters; fix nits + docs 2026-07-05 22:32:00 +02:00
müde
dd7f8c5ebb docs(turn-loop): document PromptTooLong archive+requeue, TurnOutcome=Result, credential-file session detection 2026-07-05 22:27:09 +02:00
müde
90af3e8d0b refactor(mcp): split claude launch-config layer into mcp_config.rs 2026-07-05 22:24:46 +02:00
müde
e1e3bda94a style: apply nix fmt 2026-07-05 22:24:42 +02:00
müde
9a0d525fdf refactor(mcp): drop vestigial SocketReply, match hive_sh4re::Response directly; remove dead code 2026-07-05 22:12:45 +02:00
müde
543177ed74 refactor(mcp): collapse repeated failure-arm triplet into reply_err helper 2026-07-05 22:05:06 +02:00
müde
785a36b907 refactor(web_ui): share one broker_request helper; /send timeout now 409 not 500 2026-07-05 21:55:28 +02:00
müde
d83d03e4c0 fix(agent): key session detection off credential filenames; own clear_session in login.rs 2026-07-05 21:48:56 +02:00
müde
d004fdc0eb fix(stats): set busy_timeout on agent snapshot reader so a concurrent write can't blank the page 2026-07-05 21:43:25 +02:00
müde
2b5edef4d1 fix(agent): recover PromptTooLong via archive+requeue; model TurnOutcome as Result 2026-07-05 21:42:13 +02:00
müde
cba3726389 remove redundant todo md 2026-07-05 20:56:15 +02:00
müde
4a404c1128 docs: describe hive-claude split, InfiniteSession, deferred compact, web_ui dir 2026-07-05 20:53:56 +02:00
müde
7c851c5dd3 fix(web_ui): cap bind_with_retry at 12 attempts, then return AddrInUse 2026-07-05 20:41:37 +02:00
müde
bdfeac80a7 refactor(web_ui): split into a module dir by concern, serve stays in mod.rs 2026-07-05 20:40:07 +02:00
müde
efaf56c2d5 refactor(agent): remove vestigial turn_lock (serve loop is single-driver) 2026-07-05 20:26:04 +02:00
müde
66f5b8720d refactor(agent): use hive_claude::TokenUsage directly, drop the duplicate 2026-07-05 20:21:33 +02:00
müde
c9de2eeb97 refactor(agent): build the InfiniteSession once in the serve loop, thread it 2026-07-05 20:16:06 +02:00
müde
f6977a961a perf(hive-claude): match rate-limit markers on raw line, drop re-serialize 2026-07-05 20:09:11 +02:00
müde
487e62a9ca feat(hive-claude): parse turn telemetry in the lib, return it from run 2026-07-05 20:06:30 +02:00
müde
faa7f982af feat(web_ui): defer operator /compact to turn end, run when idle too 2026-07-05 19:49:00 +02:00
müde
80d819e444 feat(hive-claude): add InfiniteSession (name+store+compaction policy) 2026-07-05 19:38:16 +02:00
müde
bf93a81e1d refactor(agent): move login-wait into login.rs, dedupe env resolvers 2026-07-05 19:08:48 +02:00
müde
a3b66241d1 refactor(agent): extract claude driver into hive-claude crate 2026-07-05 18:50:12 +02:00
müde
e35acca814 fix(agent): pin claude session by constant title, archive on reset 2026-07-05 18:13:54 +02:00
iris
6528a90233 fix(web_ui): drop stale (max) suffix from xhigh effort label
xhigh and max are distinct reasoning-effort levels (see EFFORT_LEVELS
in events.rs); labelling xhigh as '(max)' implied they were the same
level, per issue #2258.
2026-07-05 12:50:20 +02:00
damocles
788673341c refactor(term): add mutableRow to terminal api, use it for thinking_tokens 2026-07-05 12:39:26 +02:00
damocles
dc63bfcb23 fix(term): store text node ref for thinking_tokens, drop DOM dance 2026-07-05 12:20:37 +02:00
damocles
758f5ae5a8 fix(term): flex layout for details summary, fix thinking brain icon column 2026-07-05 12:10:24 +02:00
damocles
6d2e56e7c8 fix formatting (treefmt) 2026-07-05 12:00:18 +02:00
damocles
fac326aa35 fix(broker): route all wakes through sqlite, remove transient ping buffer 2026-07-05 11:55:40 +02:00
iris
bd0e4d1012 fixup! docs(turn-loop): document system inbox messages and link to approvals.md helper events
Per argus review: correct routing subject from 'root/manager agent' to
'submitting agent (root agent for top-level containers; approvals-group
agent for its own subtree)', and drop the deprecated 'manager' term.
2026-07-05 02:28:26 +02:00
iris
2748ce2f4c docs(turn-loop): document system inbox messages and link to approvals.md helper events
The messaging section listed the MCP tools for send/recv/ask/answer/ack_until
but didn't mention the system events agents receive from sender 'system' —
lifecycle events (spawned, rebuilt, killed, etc.) routed to the root agent and
Q&A events (question_asked, question_answered) delivered to any agent. Add a
brief paragraph that names the events and links to the canonical reference in
docs/approvals.md where the full payload shapes and routing logic live.
2026-07-05 02:24:42 +02:00
atlas
23f13d9e71 chore(docs,nix): fix stale 'localhost via shared netns' claims in forge/matrix
Agents in private netns can't reach host loopback directly; they
use forge.<domain> and matrix.<domain> via the gateway. Update four
locations that still claimed direct loopback access:

- hive-forge.nix: module header + openFirewall description
- hive-matrix.nix: openFirewall description
- docs/matrix.md: container design bullet + openFirewall section
2026-07-04 22:54:38 +02:00
atlas
d7bed0052c chore(nix): fix stale 'localhost via shared netns' claim in forge openFirewall doc
Agents in private netns reach the forge at forge.<domain> via the
gateway, not via localhost directly. The conclusion (firewall only
matters for external access) is correct; the mechanism description
was stale from the pre-isolation era.
2026-07-04 22:54:38 +02:00
atlas
03e07c7d37 chore(nix): fix remaining stale shared-netns references in harness-base.nix
- Option doc: 'Default points at the in-host tuwunel (shared netns)'
  → updated to reflect that c0re forwards the gateway URL at runtime
- DNS oneshot comment: 'inert in shared-netns mode' → removed since
  isolation is always on; oneshot always runs
2026-07-04 22:54:38 +02:00
atlas
9067398e3c chore(docs,nix): remove stale shared-netns references from matrix URL docs
Agents run in private netns (always-on isolation) and can't reach
host loopback directly. hive-c0re forwards HIVE_MATRIX_URL set to
`matrix.<domain>` via the gateway. Update two places that still
referenced the removed shared-netns path.
2026-07-04 22:54:38 +02:00
atlas
2ddabdc410 fixup! fix(#2245): drop TCP fallback from gateway nginx upstream 2026-07-04 22:42:56 +02:00
atlas
32e4c687b8 docs(gateway): remove stale TCP loopback fallback section
The TCP fallback was removed from gateway_nginx.rs in the previous
commit. Update docs/gateway.md to match:
- Step 4: remove 'TCP loopback for agents not yet rebuilt' — always UDS now
- Remove the 'TCP loopback fallback' subsection entirely
2026-07-04 22:42:56 +02:00
atlas
0456206e52 fix(#2245): drop TCP fallback from gateway nginx upstream
Agents run in private netns (always-on isolation). The TCP fallback
to 127.0.0.1:<port> was unreachable from the gateway's host netns
regardless of whether the per-agent socket marker existed.

Remove the conditional entirely: always use the unix socket path.
If the socket is not yet bound, nginx returns 502 which is already
handled by the error_page 502 503 504 = /__hive_agent_unreachable
directive in every location block.

Also removes the unused lifecycle::agent_web_port call and the
now-misleading '.bound state' mention from the render doc comment.
2026-07-04 22:42:56 +02:00
atlas
4947037454 chore(nix): trim stale body from deprecated isolateContainers option doc
The option is a no-op (marked DEPRECATED — ignored); the Prerequisite,
Migration, and Rust counterpart sections all described the migration that
already completed. Strip to just the deprecation notice.

Also fix the bridgeIp description: 'once netns isolation lands' is past
tense — isolation is unconditional now. Rephrase to present tense.
2026-07-04 21:57:26 +02:00
atlas
bc6353c232 docs(network): fix stale '(shared netns)' in bridge firewall table row
The parenthetical was backwards — this rule opens bridge ports so
*isolated* agents (in private netns, connected via veth) can reach
nginx. Remove the misleading '(shared netns)' tag, replace with the
accurate description.
2026-07-04 21:18:57 +02:00
atlas
1e986a0270 chore(nix): remove stale 'privsep phase 2' labels from comments
privsep is complete and always on. the phased-rollout framing
is historical — drop it from the inline comments, keeping the
accurate description of what the user + delegation actually do.
2026-07-04 21:04:18 +02:00
atlas
480b35aac4 docs(boundary): update to reflect always-on network isolation
All three area:ops pillars are now complete: network isolation is
always on (private netns, no shared-netns mode), the gateway is live,
and hive-c0re runs as the unprivileged hive-core user.

- Rewrite the intro to say the boundary is enforced, not aspirational
- Update 'Why network isolation is the load-bearing step' section to
  use past tense for the shared-netns world and note completion
- Mark network isolation as Complete in the sequencing list
2026-07-04 20:58:55 +02:00
atlas
a363d1f317 docs(gotchas): document nix fmt failure in git worktrees 2026-07-04 20:50:50 +02:00
iris
c594de07ca docs(ci): document CI checks, local equivalents, and pre-push hook 2026-07-04 20:48:58 +02:00
atlas
460ed50a80 chore(nix): remove stale phased-rollout comments in network + gateway modules 2026-07-04 20:44:50 +02:00
atlas
902d4dd461 docs(network): rewrite for always-on isolation; remove phased-rollout rationale
The two-phase network rollout (bridge-first, then isolateContainers) is
complete. Both options are now deprecated no-ops — isolation is always on.
Update the doc to reflect current state:

- Drop the phased-rollout intro ('off by default during rollout') and the
  v1/v2 comparison table; keep a brief historical note
- Remove 'Why ship before netns isolation' section (rollout is done)
- Update configuration example: network.enable is no longer needed
- Merge firewall description into a single table (80/443 always open)
- Remove 'Prerequisites before flipping on' and 'Migration behaviour'
  subsections (isolation was a one-time flip; no longer a toggle)
- Simplify resolver wiring: hive-priv always drops the marker; remove
  'only when isolated' conditional framing
2026-07-04 20:30:23 +02:00
atlas
f111dac231 fix(test): update effort_validation test to accept low and max levels
The test's invalid-values list included "low" which was valid before
this PR but is now a legitimate effort level. Replace with "lowest"
(still invalid) so the test keeps its coverage without false-failing.
2026-07-04 19:52:33 +02:00