clusev/resources/views/components
boban 5e4f29216d feat(commands): ad-hoc fleet commands + runbooks (feature 4/8)
The multi-server amplifier: run a command (ad-hoc or a saved runbook) across the whole fleet,
a group, or a selection, with a per-server result. Because it is arbitrary remote execution,
authorization + audit are the whole feature.

- The command is intentionally arbitrary; it runs via FleetService::runPlain (the credential's
  login user, base64 transport, NO extra sudo) — the same privilege the web terminal already
  grants, batched. No injection to prevent; the concern is who may run + that every run is logged.
- CommandRunner.run: per-server runPlain, one server failing never aborts the batch, output
  byte-capped (256 KiB) + mb_scrub'd before it reaches a Livewire property.
- Commands\Index page, fully `operate`-gated: route can:operate + mount() + a per-method gate() on
  run/runRunbook/execute/createRunbook/confirmDeleteRunbook/deleteRunbook. Every run goes through a
  signed single-use ConfirmToken + R5 confirm modal ("run on N servers?"); the modal audits
  command.run from the sealed token so execute() does not re-audit. Targets resolve client UUIDs →
  ids server-side (withActiveCredential + inGroup + whereIn), and {command, serverIds} is SEALED in
  the token — a client can't swap the command or targets after confirm. A forged token is a no-op.
- Runbooks: saved name+command, operate-gated CRUD, delete via ConfirmToken.
- lang/{de,en}/commands.php + audit.php command.run / runbook.* + shell.nav_commands (de/en). No emoji.

15 new tests: CommandRunner (runs each server, one-failing-doesn't-abort, nonzero=not-ok, byte-cap
+scrub), component (route gating, ad-hoc run opens confirm, empty-command / no-target errors, execute
runs the SEALED targets, forged token runs nothing, group scope targets only members, runbook create
+audit + run + delete-via-token). 700 tests green, Pint, lang parity, Codex-reviewed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 20:38:09 +02:00
..
.gitkeep feat: scaffold — Dockerized Laravel 13 + Livewire 3 + Tailwind 4 + Reverb 2026-06-12 00:31:50 +02:00
badge.blade.php feat(wireguard): SSH lock + peer config download (v0.9.40) 2026-06-21 09:25:19 +02:00
btn.blade.php perf(fleet,wg) + i18n(dashboard,update) + a11y(btn): re-audit design/perf cleanups 2026-07-05 17:10:19 +02:00
checkbox.blade.php fix(ui): themed x-checkbox component (accent, visible check) for login-protection + remember-me 2026-06-20 20:04:47 +02:00
command-palette.blade.php feat(shell): point Help entry at the online docs (docs.clusev.com) 2026-07-02 21:12:29 +02:00
icon.blade.php feat(docker): container management over SSH (feature 3/8) 2026-07-05 20:23:56 +02:00
kpi.blade.php style: align UI to the BASTION reference (atmosphere + depth) 2026-06-12 13:39:57 +02:00
lang-switch.blade.php feat(i18n): bilingual foundation (DE/EN) + localize auth/dashboard/servers/fleet/account 2026-06-13 22:36:16 +02:00
metric.blade.php feat: reference-depth dashboard (sparkline KPIs + live dual chart + table) 2026-06-12 14:44:11 +02:00
modal-trigger.blade.php fix(modals): reliable open + spinner/error feedback on every modal trigger 2026-06-15 21:07:25 +02:00
nav-item.blade.php polish(ui): in-system design refinements from the design review 2026-07-05 18:06:32 +02:00
panel.blade.php style: align UI to the BASTION reference (atmosphere + depth) 2026-06-12 13:39:57 +02:00
ring.blade.php fix(live): poll-driven metrics (chart + gauges), bigger donuts, drop fake fleet 2026-06-12 22:38:51 +02:00
sidebar.blade.php feat(commands): ad-hoc fleet commands + runbooks (feature 4/8) 2026-07-05 20:38:09 +02:00
skeleton.blade.php perf+ux: lazy-load pages (skeletons), fix modal, normalize buttons + spinners 2026-06-12 23:17:02 +02:00
source-comment.blade.php chore(release): point public-facing URLs at github.com/clusev/clusev — 0.9.58 2026-06-22 21:41:52 +02:00
status-dot.blade.php feat(ui): add "Initialisierung" (pending) server status 2026-06-14 10:20:32 +02:00
status-pill.blade.php feat(ui): add "Initialisierung" (pending) server status 2026-06-14 10:20:32 +02:00
topbar.blade.php fix(blade): garbled header on every signed-in page + private metrics channel (v0.4.1) 2026-06-14 08:34:07 +02:00
two-factor-badge.blade.php feat(ui): shield-only 2FA indicator in the sidebar + terminal search from 2 servers 2026-06-25 20:20:46 +02:00