helmd hub: central server på Pi5 + agent-uplink + helmd ctl + web-login
All checks were successful
helmd-image / build (push) Successful in 3m22s
helmd-release / build-release (push) Successful in 4m28s

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:
2026-08-06 23:19:18 +02:00
parent d0b57e8224
commit 77682e91b5
17 changed files with 2411 additions and 37 deletions

View File

@@ -13,7 +13,8 @@
<div id="login" class="login hidden">
<div class="login-card">
<h1>⛵ agent-helm</h1>
<p>Klistra in API-token från servern (<code>helmd token</code>).</p>
<p id="loginHint">Klistra in API-token från servern (<code>helmd token</code>).</p>
<input id="userInput" placeholder="användarnamn" autocomplete="username" class="hidden">
<input id="tokenInput" type="password" placeholder="token" autocomplete="off">
<button id="tokenSave" class="primary">Anslut</button>
<p id="loginError" class="error"></p>
@@ -33,6 +34,10 @@
<main id="tab-sessions" class="tab-page">
<aside class="sess-list">
<div id="agentBar" class="agent-bar hidden">
<label for="agentSelect">Agent</label>
<select id="agentSelect"></select>
</div>
<div class="sess-head">
<span>Sessioner</span>
<button id="newSessBtn" title="Ny session"></button>
@@ -96,9 +101,17 @@
<button type="submit" class="primary">Spara</button>
<span id="cfgStatus"></span>
</div>
<div id="hubSettings" class="hidden">
<h2>Hub</h2>
<p class="muted">Agent-nyckeln behövs i nya agenters <code>config.json</code> (<code>hub.key</code>).</p>
<div class="row">
<button type="button" id="agentKeyBtn">Visa agent-nyckel</button>
<code id="agentKeyOut"></code>
</div>
</div>
<h2>Klient</h2>
<div class="row">
<button type="button" id="logoutBtn" class="danger">Glöm token (logga ut)</button>
<button type="button" id="logoutBtn" class="danger">Logga ut</button>
<span id="verInfo" class="muted"></span>
</div>
</form>