|
|
|
|
@ -6,7 +6,7 @@
|
|
|
|
|
|
|
|
|
|
The dashboard (`/`) has a fixed chrome header at the top and a
|
|
|
|
|
`<main>` that shows exactly one tab pane at a time. The URL hash
|
|
|
|
|
(`#swarm`, `#call`, `#system`, `#schedules`, `#peers`, `#settings`)
|
|
|
|
|
(`#swarm`, `#call`, `#system`, `#permissions`, `#schedules`, `#peers`, `#settings`)
|
|
|
|
|
drives which pane is active; hash changes don't reload the page.
|
|
|
|
|
FL0W is a separate full-page terminal at `/flow.html` — its
|
|
|
|
|
tab-strip entry is a cross-page link (`◆ FL0W ◆ →`), not a pane
|
|
|
|
|
@ -14,7 +14,7 @@ swap.
|
|
|
|
|
|
|
|
|
|
**Chrome header** (fixed, overlays the active tab pane):
|
|
|
|
|
- **Tab strip**: `◆ SW4RM ◆`, `◆ Y3R C4LL ◆`, `◆ SYST3M ◆`,
|
|
|
|
|
`◆ SCH3DUL3S ◆`, `◆ P33RS ◆` (hidden when `swarm.peers` is empty),
|
|
|
|
|
`◆ P3RM1SS10NS ◆`, `◆ SCH3DUL3S ◆`, `◆ P33RS ◆` (hidden when `swarm.peers` is empty),
|
|
|
|
|
`◆ M4TR1X ◆ →` (optional page link, see below), `◆ FL0W ◆ →`
|
|
|
|
|
(page link), and `◆ S3TT1NGS ◆`. Count pills on SW4RM (container
|
|
|
|
|
count), Y3R C4LL (pending approvals + questions), and SCH3DUL3S
|
|
|
|
|
@ -119,6 +119,60 @@ age + claude-creds badge). Two actions: `⊕ R3V1V3` (queues a
|
|
|
|
|
Spawn approval; existing state is reused), `PURG3` (wipes
|
|
|
|
|
state + applied dirs; `POST /purge-tombstone/{name}`).
|
|
|
|
|
|
|
|
|
|
## P3RM1SS10NS tab
|
|
|
|
|
|
|
|
|
|
Per-agent permission configuration. Two sections, each rendered as a
|
|
|
|
|
column-driven checkbox matrix: rows are agents, columns are the
|
|
|
|
|
permission names fetched from the backend. The column list is
|
|
|
|
|
authoritative — adding a new tool-group or capability to the backend
|
|
|
|
|
requires no UI change; the new column appears automatically.
|
|
|
|
|
|
|
|
|
|
Fetches fire on tab activation (not page-load) to avoid unnecessary
|
|
|
|
|
work when the operator never visits this tab.
|
|
|
|
|
|
|
|
|
|
**C4P4B1L1T13S** — per-agent capability grants. Capabilities unlock
|
|
|
|
|
gated MCP tools and system-level access beyond the default agent
|
|
|
|
|
surface. A saving POST queues a rebuild for the affected agent so the
|
|
|
|
|
new `HIVE_CAPABILITIES` env var takes effect in the next session.
|
|
|
|
|
|
|
|
|
|
The current capabilities are:
|
|
|
|
|
|
|
|
|
|
| Name | Effect |
|
|
|
|
|
|------|--------|
|
|
|
|
|
| `manage_root_agent` | allows the `set_status` / lifecycle tools on the root manager |
|
|
|
|
|
| `read_host_journal` | unlocks `get_host_journal` to read journald from inside a container |
|
|
|
|
|
| `query_agent_state` | allows `get_loose_ends(agent: "<name>")` calls targeting other agents |
|
|
|
|
|
|
|
|
|
|
Each row is one agent. Columns are the capability names returned by
|
|
|
|
|
`GET /api/capabilities` as `caps: Vec<String>`. Checking or unchecking
|
|
|
|
|
boxes changes only the in-browser state; the `S4V3` button on the
|
|
|
|
|
right edge POSTs the full capability set for that agent to
|
|
|
|
|
`POST /api/capabilities/{agent}` as `{ caps: ["name", …] }` and
|
|
|
|
|
queues a rebuild. Absent agents in the assignment map have no extra
|
|
|
|
|
capabilities.
|
|
|
|
|
|
|
|
|
|
**T00L GR0UPS** — per-agent tool-group permissions. Tool groups are
|
|
|
|
|
named buckets of MCP tools; each agent starts with a role default
|
|
|
|
|
(agents: `messaging`, `meta`, `inbox`, `execution`; manager: all
|
|
|
|
|
groups). Checking / unchecking and saving changes which groups are
|
|
|
|
|
active for the agent. Backed by `GET /api/tool-groups` (columns) and
|
|
|
|
|
`POST /api/tool-groups/{agent}` (save). A rebuild is queued after
|
|
|
|
|
each save so `HIVE_TOOL_GROUPS` takes effect.
|
|
|
|
|
|
|
|
|
|
The current tool groups are: `messaging`, `meta`, `inbox`, `lifecycle`,
|
|
|
|
|
`approvals`, `scheduling`, `diagnostics`, `execution`, `web_tools`. All
|
|
|
|
|
listed in `ToolGroup::ALL` in `hive-sh4re`. The `web_tools` group is
|
|
|
|
|
special: it carries no MCP tools; instead it adds Claude's built-in
|
|
|
|
|
`WebFetch` and `WebSearch` to `--tools` / `--allowedTools` for that
|
|
|
|
|
agent session.
|
|
|
|
|
|
|
|
|
|
Both tables share the same visual shape: `.cap-table-wrap` /
|
|
|
|
|
`.tg-table-wrap` outer scroll container, `thead` with a label column
|
|
|
|
|
(`.cap-agent-col` / `.tg-agent-col`) + one column per permission
|
|
|
|
|
(`.cap-col` / `.tg-group-col`) + a save column (`.cap-save-col` /
|
|
|
|
|
`.tg-save-col`). Each tbody row is one agent: a name cell, checkbox
|
|
|
|
|
cells, and the `S4V3` button.
|
|
|
|
|
|
|
|
|
|
## SCH3DUL3S tab
|
|
|
|
|
|
|
|
|
|
Anything that fires at a future time. Operator-set schedules
|
|
|
|
|
@ -682,6 +736,26 @@ that's a browser-level decision, not ours.
|
|
|
|
|
- `POST /cancel-reminder/{id}` — hard-delete a pending reminder.
|
|
|
|
|
- `POST /retry-reminder/{id}` — re-arm a reminder whose delivery
|
|
|
|
|
failed (clears the failure state so the scheduler retries).
|
|
|
|
|
- `GET /api/tool-groups` — returns `{ groups: Vec<String>,
|
|
|
|
|
assignments: BTreeMap<String, Vec<String>> }`. `groups` is the
|
|
|
|
|
ordered list of all known tool-group names (drives the column
|
|
|
|
|
headers in the P3RM1SS10NS tab); `assignments` is the per-agent
|
|
|
|
|
override map (absent agents use the role default).
|
|
|
|
|
- `POST /api/tool-groups/{agent}` — body `{ groups: ["name", …] }`.
|
|
|
|
|
Writes the tool-group set for `{agent}` to
|
|
|
|
|
`/var/lib/hyperhive/meta/tool-groups.json` and queues a rebuild so
|
|
|
|
|
`HIVE_TOOL_GROUPS` takes effect. Agent name validated;
|
|
|
|
|
`guard_agent_name` applied.
|
|
|
|
|
- `GET /api/capabilities` — returns `{ caps: Vec<String>,
|
|
|
|
|
assignments: BTreeMap<String, Vec<String>> }`. `caps` is the
|
|
|
|
|
ordered list of all known capability names; `assignments` is the
|
|
|
|
|
per-agent grant map (absent agents have no extra capabilities).
|
|
|
|
|
- `POST /api/capabilities/{agent}` — body `{ caps: ["name", …] }`.
|
|
|
|
|
Writes the capability set for `{agent}` to
|
|
|
|
|
`/var/lib/hyperhive/meta/capabilities.json` and queues a rebuild so
|
|
|
|
|
`HIVE_CAPABILITIES` takes effect. Agent name validated;
|
|
|
|
|
unknown capability strings are rejected (400). `guard_agent_name`
|
|
|
|
|
applied.
|
|
|
|
|
- `GET /api/schedules` — list all schedules (active and
|
|
|
|
|
recently cancelled) for the SYST3M scheduled-prompts panel.
|
|
|
|
|
- `POST /api/schedules` — operator-direct schedule create:
|
|
|
|
|
|