feat(web-ui): Remote Updates dashboard page — push code to workers from the UI

React component for /swarm-updates: per-host table polled every 10s,
row actions for Push Update / Update Updater / Rollback, a fleet-wide
'Push to All' modal with the include_self toggle, and toast feedback
per result.

Admin-only (both server-gated and UI-gated). Unreachable hosts surface
as an explicit state; actions are disabled on them. Rollback is
disabled when the worker has no previous release slot (previous_sha
null from /hosts).
This commit is contained in:
2026-04-19 01:03:04 -04:00
parent a266d6b17e
commit 7894b9e073
3 changed files with 334 additions and 1 deletions

View File

@@ -9,6 +9,7 @@ import Attackers from './components/Attackers';
import AttackerDetail from './components/AttackerDetail';
import Config from './components/Config';
import Bounty from './components/Bounty';
import RemoteUpdates from './components/RemoteUpdates';
function isTokenValid(token: string): boolean {
try {
@@ -64,6 +65,7 @@ function App() {
<Route path="/attackers" element={<Attackers />} />
<Route path="/attackers/:id" element={<AttackerDetail />} />
<Route path="/config" element={<Config />} />
<Route path="/swarm-updates" element={<RemoteUpdates />} />
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>
</Layout>