helmd hub: central server på Pi5 + agent-uplink + helmd ctl + web-login
Hub-läge i samma binär (doc/hub-plan.md): agenter ansluter utåt med delad agent-nyckel (hub-sektion i config.json), web-/CLI-klienter loggar in (lokala konton, pbkdf2; Authenticator-interface för LDAP senare) och styr alla agenters sessioner via proxy + merged SSE. Webbklienten autodetekterar hub/local via /api/mode. Nya kommandon: helmd hub [setpass|users|agentkey], helmd ctl (login/agents/sessions/ prompt/screen/answer/events …). Enhetstester + scripts/run-hub-smoke.sh (15-stegs e2e: hub + agent + ctl). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011KikHkfCiC3yELbsMN8fT9
This commit is contained in:
@@ -34,12 +34,67 @@ skickar tangenter. Fungerar därför med vilken TUI-agent som helst, och
|
||||
## Kommandon
|
||||
|
||||
```
|
||||
helmd serve [--listen host:port] [--config fil] starta servern
|
||||
helmd serve [--listen host:port] [--config fil] starta agent-servern
|
||||
helmd share [--note text] [--session namn] <fil> dela en fil till klienterna
|
||||
helmd token skriv ut API-token
|
||||
helmd hub [--listen host:port] [--config fil] starta hubben (Pi5)
|
||||
helmd hub setpass <användare> [--password PW] sätt/skapa hub-konto
|
||||
helmd hub users lista hub-konton
|
||||
helmd hub agentkey skriv ut agent-nyckeln
|
||||
helmd ctl <kommando> CLI-styrklient mot hubben
|
||||
helmd version
|
||||
```
|
||||
|
||||
## Hubben (`helmd hub`)
|
||||
|
||||
Central server (Pi5) som **agenter ansluter utåt till** och där web-
|
||||
och CLI-klienter **loggar in** och styr alla agenters sessioner. Full
|
||||
design och beslut: [../doc/hub-plan.md](../doc/hub-plan.md).
|
||||
|
||||
- **Agent-anslutning:** ingen inloggning/konto — agenten skickar den
|
||||
**delade agent-nyckeln** (`agent_key` i hubbens config) vid
|
||||
registrering. Hämta den med `helmd hub agentkey` på hubben, eller
|
||||
efter inloggning med `helmd ctl agentkey` / Inställningar-fliken i
|
||||
webben. Transporten är long-poll över HTTP (`/hub/register`,
|
||||
`/hub/work`, `/hub/result`, `/hub/events`) — agenten kör jobben mot
|
||||
sin egen lokala mux, så hela API-tabellen ovan funkar oförändrad
|
||||
genom hubben. Agenter ser aldrig något om varandra.
|
||||
- **Klient-login:** `POST /api/login` med användarnamn + lösenord →
|
||||
Bearer-token. Konton ligger lokalt i hub-konfigen (pbkdf2-sha256);
|
||||
`Authenticator`-interfacet i `hubauth.go` är utbytespunkten för
|
||||
LDAP/SSO längre fram. Första starten seedas `admin` (lösenord från
|
||||
`HELMD_HUB_ADMIN_PASSWORD` eller slumpat — skrivs ut i loggen).
|
||||
- **Klient-API:** `GET /api/agents` (lista + online-status),
|
||||
`ANY /api/agents/{namn}/…` (proxas till agentens `/api/…`),
|
||||
`GET /api/events` (merged SSE, fältet `agent` på varje event),
|
||||
`GET /api/agentkey`, `GET/POST /api/login|logout|me`.
|
||||
`GET /api/mode` (oautentiserad) svarar `hub`/`local` så att den
|
||||
inbäddade webbklienten kan välja login-form — i hub-läge får den
|
||||
användarnamn/lösenord och en agentväljare.
|
||||
- **Agentens config** (`config.json`) pekar ut hubben:
|
||||
|
||||
```json
|
||||
"hub": {
|
||||
"url": "http://192.168.0.19:8790",
|
||||
"name": "brasse-linux01",
|
||||
"key": "<agent_key>",
|
||||
"enabled": true
|
||||
}
|
||||
```
|
||||
|
||||
Det lokala API:t på `:8788` fortsätter fungera parallellt — hubben
|
||||
nere betyder bara att uplinken backar och försöker igen.
|
||||
- **Hubbens config** (`~/.config/helmd/hub.json`, `HELMD_HUB_CONFIG`
|
||||
överstyr): `listen` (default `127.0.0.1:8790`), `auth` (`local`),
|
||||
`users`, `agent_key`, `session_ttl_hours` (default 168).
|
||||
- **CLI-klienten:** `helmd ctl login --server http://192.168.0.19:8790`
|
||||
→ `ctl agents`, `ctl sessions <agent>`, `ctl new <agent> <namn>`,
|
||||
`ctl screen|prompt|question|answer|keys|kill <agent> <session> …`,
|
||||
`ctl shares <agent>`, `ctl events`. Sparar server + token i
|
||||
`~/.config/helmd/ctl.json`.
|
||||
- **Smoke-test av hela flödet:** `bash scripts/run-hub-smoke.sh`
|
||||
(hub + agent + ctl lokalt, 15 kontroller).
|
||||
|
||||
`helmd share` är **agentens verktyg för att dela filer** (html, md,
|
||||
png, jpg, …) till klienterna: agenten kör kommandot i sin shell, filen
|
||||
laddas upp till servern och dyker upp i klientens delningsflik.
|
||||
|
||||
Reference in New Issue
Block a user