phase1a: Box-Diaet - schlafende Dienste, Sonntags-Update als Timer, tote Skills raus, Warm-Set nur Hirn
Ampel / ampel (push) Successful in 26s

- Waechter und Dienste-Liste kennen "schlaeft": abgeschaltete Units (disable --now) sind kein
  Befund mehr; die Oberflaeche zeigt sie grau mit Knopf "Wecken" (fuer die Android-App spaeter).
- Updates am Sonntag laufen wieder ueber mc2-autoupdate.timer (jobs/sonntags-update.sh) statt als
  Hermes-Cron, der sich beim Hermes-Update selbst neu startete (20.09.: 180 s, Fehlschlag).
  Flugplan und Waechter kennen den Timer.
- 10 abgeloeste Skills (Werkstatt, Kanban, Orchestrator, Trend-Radar ...) aus dem Repo; deploy.sh
  verschiebt sie in ~/.hermes/skills-archiv statt sie weiter zu Lucy zu kopieren.
- Embedding und Reranker schlafen: raus aus brains und Warm-Set, ttl 300, warmup.sh waermt sie
  nicht mehr vor. deploy.sh spielt Timer und Warm-Set-Drop-in selbst aus.
- Dienste-Namen: "Box-Wart (MC2)", "Hermes-Dashboard", "Spracherkennung (Desktop-Lucy)".
- Frontend neu gebaut (npm ci, lokale Pakete waren vom 28.08.).

Tests: 87 gruen (neu: schlafende Dienste), Frontend Lint/Tests/Build gruen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-24 14:50:37 +02:00
co-authored by Claude Opus 5.5
parent 648be33d21
commit 45b5bf275c
29 changed files with 130 additions and 1141 deletions
+2
View File
@@ -97,6 +97,8 @@ export interface Dienst {
unit: string
ok: boolean
scope: string
/** Bewusst abgeschaltet (systemctl disable) — kein Fehler, nur geweckt wird per Knopf. */
schlaeft?: boolean
}
export const useDienste = () =>
+13 -4
View File
@@ -38,10 +38,15 @@ export function Dienste({ offen, onSchliessen }: { offen: boolean; onSchliessen:
{(dienste.data?.services ?? []).map((d) => (
<li key={d.unit} className="flex flex-wrap items-center justify-between gap-2 border-t border-linie py-2.5">
<span className="flex min-w-0 items-center gap-2.5">
<span className={cn("size-2.5 shrink-0 rounded-full", d.ok ? "bg-gruen" : "bg-rot")} aria-hidden />
<span
className={cn("size-2.5 shrink-0 rounded-full", d.ok ? "bg-gruen" : d.schlaeft ? "bg-text-3" : "bg-rot")}
aria-hidden
/>
<span className="min-w-0">
<span className="block text-[15px]">{d.name}</span>
<span className="ziffern text-xs text-text-3">{d.unit} · {d.ok ? "läuft" : "antwortet nicht"}</span>
<span className="ziffern text-xs text-text-3">
{d.unit} · {d.ok ? "läuft" : d.schlaeft ? "schläft (abgeschaltet)" : "antwortet nicht"}
</span>
</span>
</span>
<span className="flex gap-2">
@@ -49,9 +54,13 @@ export function Dienste({ offen, onSchliessen }: { offen: boolean; onSchliessen:
Protokoll
</Button>
{bestaetigen === d.unit ? (
<Button variant="gefahr" size="sm" onClick={() => neustarten(d.unit)}>Wirklich neu starten?</Button>
<Button variant="gefahr" size="sm" onClick={() => neustarten(d.unit)}>
{d.schlaeft ? "Wirklich wecken?" : "Wirklich neu starten?"}
</Button>
) : (
<Button variant="outline" size="sm" onClick={() => setBestaetigen(d.unit)}>Neu starten</Button>
<Button variant="outline" size="sm" onClick={() => setBestaetigen(d.unit)}>
{d.schlaeft ? "Wecken" : "Neu starten"}
</Button>
)}
</span>
</li>