Compare commits

...
Author SHA1 Message Date
iris
86165f07c8 docs: update hivectl verb list in CLAUDE.md (add gateway, agents, choom) 2026-06-05 00:46:17 +02:00
iris
33be854c50 docs: fix stale /api/agent/{name}/links reference in gateway.md 2026-06-05 00:46:17 +02:00
iris
30c2d94f13 docs: fix remaining stale AgentLink comment (per damocles review) 2026-06-05 00:46:17 +02:00
iris
4769d7ce5a docs: remove stale /api/agent/{name}/links references
The c0re-proxy endpoint was removed in the dashboard-state refactor.
Links are now served by agent_links() via two agent-local endpoints:
StateSnapshot.links (GET /api/state, per-agent page) and
DashboardState.links (GET /api/dashboard-state, dashboard card).

Update docs/web-ui/agent.md and the StateSnapshot.links doc comment
to reflect the current source of truth.
2026-06-05 00:46:17 +02:00
4 changed files with 30 additions and 21 deletions

View file

@ -27,13 +27,19 @@ hive-c0re/ host daemon + sibling operator CLI (lib + 2 bins)
vacuum tasks.
src/bin/hivectl.rs `hivectl` binary: operator-facing host CLI
for ad-hoc administration that doesn't go
through the broker. v0 verbs: `forge
create-user <name>`, `matrix create-user
<name>` — wrap the same idempotent
`forge::ensure_user_for` /
`matrix::ensure_user_for` flows c0re runs
in its boot sweeps, callable manually for
recovery / debug.
through the broker. Verbs: `forge
create-user <name>` / `matrix create-user
<name>` — manual entry points to the same
idempotent provisioning flows c0re runs at
boot; `gateway create-user|delete-user|
list-users` — BCrypt htpasswd management for
gateway HTTP Basic auth; `agents list|kill|
restart|restart-all` — container management
without the broker; `choom <name> [--fresh]`
— exec into `machinectl shell h-<name>`
running `claude --continue` (or fresh) so
the operator can drop into the agent's live
Claude session interactively.
src/server.rs host admin socket (HostRequest → dispatch)
src/client.rs admin-socket client
src/manager_server.rs manager-privileged socket (ManagerRequest)

View file

@ -156,7 +156,7 @@ as same-origin `/agent/<name>/…` URLs instead of the legacy direct
`services.hyperhive.gateway.enable = true`. Three render sites
flip together: the primary agent-name link, the favicon fetch
(`<url>/icon`), and the nav-strip `container`-kind links from
`/api/agent/<name>/links`. `forge`-kind nav-strip links still
`DashboardState.links` (`GET /api/dashboard-state`). `forge`-kind nav-strip links still
resolve against `http://<host>:3000` (separate sub-domain transition
tracked by `forge.behindGateway`); `external`-kind links are
already absolute. See `docs/web-ui/dashboard.md::Container row` for the

View file

@ -27,8 +27,12 @@ through. Three flex columns:
`⬡ forge` (profile) + `↳ config` (agent-configs mirror) when the
agent has a forge account; any `hyperhive.dashboardLinks` extras
(`kind = External`). A `↑ dashboard` link is prepended by the JS
so the host dashboard is one click away. `GET /api/agent/{name}/links`
is the single source of truth. Each `NavLink.kind` resolves
so the host dashboard is one click away. Links come from
`StateSnapshot.links` (served by `GET /api/state`); the same set
also appears in `DashboardState.links` (`GET /api/dashboard-state`)
for the dashboard card's icon strip. Both are produced by
`agent_links()` in hive-ag3nt — the single source of truth.
Each `NavLink.kind` resolves
differently in the frontend: `Container` → same-origin path
(the agent page is itself container-local); `Forge`
`http://<host>:3000<url>`; `External` → already absolute.

View file

@ -416,12 +416,11 @@ struct StateSnapshot {
/// Cumulative token usage across the most recent turn's inferences
/// (cost signal). `null` until the first turn finishes.
cost_usage: Option<crate::events::TokenUsage>,
/// Navigation links for this agent page. The same list feeds the
/// dashboard card's icon-only nav strip via hive-c0re's
/// `GET /api/agent/{name}/links` same-origin passthrough proxy
/// — single source of truth, no CORS. Per-agent page also reads
/// this directly. See [`docs/web-ui/dashboard.md::Container row`] for the
/// frontend resolver + which links appear in which conditions.
/// Navigation links for this agent page. Also served via
/// `DashboardState.links` (`GET /api/dashboard-state`) for the
/// dashboard card's icon strip. Both are produced by `agent_links()`
/// — single source of truth. See [`docs/web-ui/dashboard.md::Container row`]
/// for the frontend resolver + which links appear in which conditions.
links: Vec<AgentLink>,
/// Public URL of the forge served by hive-gateway (e.g.
/// `"https://forge.pr1ma.darkest.space"`). Sourced from
@ -439,11 +438,11 @@ struct StateSnapshot {
swarm_name: Option<String>,
}
/// One navigation link in the agent page header row. Same JSON
/// shape feeds the dashboard's icon-only nav strip via the host's
/// `GET /api/agent/{name}/links` passthrough proxy, so the agent
/// backend is the single source of truth for what links an agent
/// exposes.
/// One navigation link in the agent page header row. The same JSON
/// shape appears in both `StateSnapshot.links` (`GET /api/state`,
/// per-agent page) and `DashboardState.links` (`GET /api/dashboard-state`,
/// dashboard card icon strip). `agent_links()` is the single source
/// of truth for what links an agent exposes.
#[derive(Serialize)]
struct AgentLink {
/// `kind = Container | Forge` → path; `kind = External` → full URL.