feat(web-ui): unify SwarmDeckies into DeckyFleet with swarm card mode

DeckyFleet now branches on /system/deployment-mode: in swarm mode it
pulls /swarm/deckies and normalises DeckyShardView into the shared
Decky shape so the same card grid renders either way. Swarm cards gain
a host badge (host_name @ address), a state pill (running/degraded/
tearing_down/failed/teardown_failed with matching colors), an inline
last_error snippet, and a two-click arm/commit Teardown button lifted
from the old SwarmDeckies component. Mutate + interval controls are
hidden in swarm mode since the worker /mutate endpoint still 501s —
swarm-side rotation is a separate ticket.

Drops the standalone /swarm/deckies route + nav entry; SwarmDeckies.tsx
is deleted. The SWARM nav group keeps SwarmHosts, Remote Updates, and
Agent Enrollment.
This commit is contained in:
2026-04-19 21:53:26 -04:00
parent bf01804736
commit 33d954a61c
4 changed files with 311 additions and 282 deletions

View File

@@ -11,7 +11,6 @@ import Config from './components/Config';
import Bounty from './components/Bounty';
import RemoteUpdates from './components/RemoteUpdates';
import SwarmHosts from './components/SwarmHosts';
import SwarmDeckies from './components/SwarmDeckies';
import AgentEnrollment from './components/AgentEnrollment';
function isTokenValid(token: string): boolean {
@@ -70,7 +69,6 @@ function App() {
<Route path="/config" element={<Config />} />
<Route path="/swarm-updates" element={<RemoteUpdates />} />
<Route path="/swarm/hosts" element={<SwarmHosts />} />
<Route path="/swarm/deckies" element={<SwarmDeckies />} />
<Route path="/swarm/enroll" element={<AgentEnrollment />} />
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>