Commit Graph

188 Commits

Author SHA1 Message Date
Hitonabi cb9de01feb Merge wartung/role-metadata-texte: gemeinsame dist-Basis
dist-Konflikt (Hash-Assets beider Builds) durch frischen Build aufgelöst —
damit sind BEIDE Auftragsbuch-Karten in beliebiger Reihenfolge Ein-Klick-fähig
(role-metadata zuerst = sauber; diaet enthält die Rollen-Texte mit).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 08:52:03 +02:00
Hitonabi d9920fba8e MC2-Diät: Hermes-Fenster-Rolle an Hermes Desktop abgegeben
Der "Hermes GUI"-Tab (iframe auf /hermes-ui/) und das Hermes-Terminal-ttyd
(:7681) entfallen — die Agent-Oberfläche ist jetzt die Hermes-Desktop-App,
die über den BESTEHENDEN MC2-Proxy /hermes-ui/ (WS inklusive) an die Box
andockt. hermes-builtin-ui (:9119) bleibt als Desktop-Gateway erhalten und
wird im Dienste-Drawer + /api/system/services erstklassig geführt (statt
hermes-terminal); Wartungs-Allowlist kann ihn jetzt neu starten.

- Frontend: Tab/View raus (nav.ts, App.tsx, TerminalView.tsx gelöscht),
  AgentView + (Legacy-)AgentStatusCard zeigen Desktop-Gateway statt ttyd,
  Dienste-Zeile hermes-terminal → hermes-builtin-ui, Versions-Zeile
  "Hermes UI" (nesquena-Karteileiche ~/hermes-webui) entfernt.
- Backend: terminal_url/terminal_reachable + HERMES_TERMINAL_* raus,
  console.py proxyt nur noch die Box-Konsole, /api/system/services führt
  hermes-builtin-ui, USER_SERVICES getauscht, hermes-webui-GitInfo raus.
- deploy.sh: legt hermes-terminal + hermes-webui idempotent still
  (disable --now + Unit-Löschung). deploy/hermes-terminal.service bleibt
  EINEN Zyklus im Repo (das laufende alte deploy.sh kopiert es noch —
  Selbst-Reset-Falle); Aufräum-Commit folgt nach dem nächsten Deploy.
- frontend/dist mit-committet (Box baut nicht selbst).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 08:49:40 +02:00
Hitonabi 6704de3a69 build(frontend): rebuild assets nach ROLE_METADATA-Änderung 2026-07-09 08:21:40 +02:00
Hitonabi 54be1fb1f6 Zeitmaschine: kompaktes Snapshot-Datum lesbar anzeigen + Auftragsbuch-Doku
fmtSnap kannte nur Zeitstempel mit Trennzeichen (2026-07-08T...), backup.sh
schreibt aber kompakt (20260708-181136) — Datum erschien roh. Regex tolerant
gemacht. Dazu docs/AUFTRAGSBUCH.md (Funktionsweise + Leitplanken); dieser Branch
ist zugleich die erste echte E2E-Annahme-Probe des Auftragsbuchs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 21:43:38 +02:00
Hitonabi 1985a692bf UI: Auftragsbuch, Chronik+Zeitmaschine, Wissens-Wiki, Morgenlage, Erinnerungen
Neue Views: Auftragsbuch (Karten mit Diff/Kritiker-Kontext, Annehmen/Ablehnen mit
Fangnetz-Dialog), Chronik (Tages-Timeline aus dem Briefkasten + Zeitmaschine mit
Ein-Klick-Restore), Wissen (Vault als klickbares Wiki, [[Links]] springen).
Cockpit: Auftragsbuch-Kachel + Braucht-dich-Eintrag, Morgenlage-Karte (juengstes
Chef-Verdikt), Anstehendes (Erinnerungen anlegen/loeschen), Wissen/Chronik-Kacheln.
Gedaechtnis: Dubletten-Dialog zeigt jetzt konkret, was bleibt und was wegfaellt.
dist mitgebaut (tsc+vite gruen).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 18:42:22 +02:00
Hitonabi f2d357c5d8 Update-all-Button: alle ausstehenden System-Updates in EINEM Job
Neuer POST /api/maintenance/update-all kettet die AUSSTEHENDEN Updates
sequenziell (Engine -> Router -> Hermes -> OS) in einem maintenance-Job.
Bewusst reine Wiederverwendung: jeder Teil ist exakt der Befehl des
Einzel-Updates inkl. dessen Backup/Postcheck/Selbst-Rollback; &&-Kette
stoppt beim ersten Fehler, Banner-Zeilen im Log zeigen den Schritt.
OS zuletzt (breitester Eingriff, braucht als einziges das Box-Passwort;
fehlt es, laufen die sudo-freien Teile trotzdem und OS wird uebersprungen).
Hermes-Befehlskette in _hermes_update_cmd() extrahiert (DRY).

UI (SystemDrawer/Updates): Button 'Alle aktualisieren (N)' neben der
Update-Suche, nur sichtbar wenn etwas aussteht, gesperrt waehrend ein
Wartungs-Job laeuft, mit Bestaetigungs-Dialog der die Kette benennt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 17:36:52 +02:00
Hitonabi 49807ace7b Frontend-Rundumschlag: Health-Logik + Statuszeile an neue LLM-Landschaft angepasst
(1) useLucyHealth: ruhende Augen sind seit der Warm-Set-Diaet 07.07. der
NORMALZUSTAND (vision on-demand, Lucy waermt selbst) -> kein Dauer-warn
mehr im Cockpit ('Kleinigkeit an der Box' ohne Grund). Geladen = 'sieht
gerade zu', ruhend = ok mit ehrlicher Erklaerung + Weck-Knopf.
(2) Cockpit-Statuszeile SAGT jetzt, was der Hinweis ist (erster warn-Check
mit Label+Detail statt generischem 'Nichts Schlimmes — nur ein Hinweis';
User-Feedback 08.07.). useLucyHealth exportiert dafuer die warns-Liste.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 16:53:23 +02:00
Hitonabi 1b35f70dc6 UI: kritiker + reranker als erstklassige Rollen sichtbar
Die zwei neuen Rollen aus dem Rollen-Audit tauchen jetzt ueberall
ordentlich auf statt als namenlose Eintraege:
- ROLE_IDS (llamaswap + sources) um kritiker/reranker erweitert
- roleMeta.ts: 'Kritiker' (Scale, cyan — die unbestechliche Zweitmeinung)
  + 'Gedaechtnis-Sortierer' (ListOrdered, lime — Feinsortierung hinter
  dem Gedaechtnis, direkt nach embed einsortiert)
- werkbank/roleColors.ts: Speicherleisten-Farben passend dazu

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 22:25:20 +02:00
Hitonabi f65f9ca2d0 Hermes-Kontext-Ehrlichkeit + Leistungs-Graphen zurueck im Cockpit
(1) /v1/models meldet jetzt den ECHTEN Kontext pro Slot: --parallel teilt
den Server-Kontext hart auf (131072 / 2 Slots = 65536). Vorher budgetierte
Hermes gegen 131k -> Kompaktierung feuerte nie, llama-server kappte bei
~52k-Sessions Prompt/Antwort -> abgerissene Tool-Calls, Retry-Schleifen,
gefuehlte Abstuerze (journalctl 07.07 17:11, 152 msgs / ~51.700 Tokens).
Dazu auf der Box: context.engine 'default' (existiert nicht, warnte jeden
Turn) -> 'compressor' (der echte eingebaute Name).

(2) Cockpit: neue Sektion 'Leistung' mit den drei bestehenden Live-Karten
(System-Status, Token-Durchsatz, Latenz je Turn) — waren nach UI v3 nur
noch in der alten Zentrale, User will sie auf der Startseite. Browser-
verifiziert gegen die Box (rendert live, keine Konsolen-Fehler).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 21:18:08 +02:00
Hitonabi 3a6e3c5432 Hermes-GUI: eingebaute hermes serve-Weboberflaeche same-origin in MC2 einbetten (ersetzt CLI-Terminal-Tab)
Statt des ttyd-CLI-Terminals zeigt der Tab jetzt die reiche eingebaute Hermes-Web-GUI
(hermes serve/dashboard: Threads, sichtbare Tool-Calls, Sessions, Config) - same-origin,
ohne offenen Port, ohne Login (Loopback :9119 = LAN-Trust wie Terminal/Konsole).

- backend/routers/hermes_ui.py: generischer Reverse-Proxy /hermes-ui/* (alle Methoden + beliebige
  WebSockets) -> 127.0.0.1:9119; injiziert window.__HERMES_BASE_PATH__=/hermes-ui in die index.html,
  damit die SPA ihre API/WS-Calls unter dem Praefix absetzt (sonst Kollision mit MC2s /api).
- deploy/hermes-builtin-ui.service: hermes serve --skip-build auf Loopback :9119.
- deploy/deploy.sh: baut das GUI-Bundle mit Vite-base=/hermes-ui/ (Temp->Swap, ueberlebt Hermes-
  Updates) + installiert/startet den Dienst.
- backend/app.py + config.py + services/agent.py: Router registriert, Upstream/Pfad + Status-Feld.
- frontend: Terminal-Tab -> "Hermes GUI" (TerminalView iframe /hermes-ui/, nav-Label, vite-Dev-Proxy).

E2E im Browser verifiziert: GUI rendert eingebettet, /hermes-ui/api/* liefern echte Daten
(289 Sessions, verbundene Plattformen), Assets + Plugins laden, Basis-Pfad korrekt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 14:48:12 +02:00
Hitonabi a45bd586b6 Update-Passwort-Hinweis zeigt auf Einstellungen (Box-Zugang-Karte entfernt)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 21:47:19 +02:00
Hitonabi 032b9a8ee9 Konsole: Box-Zugang-Karte entfernt (redundant)
Der Login läuft jetzt über den su-Passwort-Prompt im Terminal selbst; die Passwort-
Verwaltung bleibt in System-Wartung → Einstellungen. Die doppelte „Box-Zugang"-Karte
auf der Konsole-Seite ist damit ueberfluessig und wird entfernt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 21:45:48 +02:00
Hitonabi eff23643e6 Hermes-Terminal same-origin + Passwort-Login; Engine/OS-Update-Fixes
Terminals (wie die Box-Konsole):
- hermes-terminal bindet jetzt NUR Loopback (--interface lo --base-path /hermes-terminal)
  und wird von MC2 same-origin durchgereicht (routers/console.py generalisiert auf beide
  ttyd-Instanzen). Kein eigener Firewall-Port mehr noetig.
- Beide Terminals starten die Shell/CLI ueber `su - hitonabi` → fragen beim Oeffnen das
  Box-Passwort ab (PAM gegen das echte Konto, nichts gespeichert). „Login mit sudo-PW".
- agent_status.terminal_url = /hermes-terminal/ (+ reachable via Loopback-Check).

Engine-Update (llama.cpp) — Fix „nicht moeglich":
- update-engine.sh/update-swap.sh sind per sudoers NOPASSWD freigegeben → das fruehere
  `sudo true`-Passwort-Gate hat sie faelschlich blockiert (wenn kein/falsches Box-PW). Gate
  entfernt → Engine-/Router-Update laufen jetzt passwortlos.

OS-Update (apt) — Fix „nicht moeglich":
- DEBIAN_FRONTEND wird jetzt INNERHALB `sudo bash -c '…'` gesetzt statt `sudo VAR=… cmd`
  (sonst lehnt sudos env-Policy die Variable ab und das Upgrade bricht ab).
- Frontend verschluckt password_required/incorrect_password nicht mehr still, sondern zeigt
  einen klaren Hinweis (Box-Passwort in „Box-Zugang" setzen/pruefen).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 21:18:55 +02:00
Hitonabi 18afa37412 UI v3: Cockpit-Startseite + Modelle-Werkbank als Default, neue Box-Konsole
Kompletter Frontend-Umbau auf das abgenommene v3-Konzept, dazu zwei neue Funktionen.

Frontend (Neuordnung bestehender IST-Views, kein Backend-Umbau):
- Cockpit ist die neue Startseite: ruhige Bereichs-Kacheln (je 1 Live-Zahl +
  Status-Punkt), ehrliche Status-Zeile "Box gesund" + Speicher-Pille, "Braucht dich"
  (kritische Probleme mit 1-Klick-Reparatur + bereitliegende Updates).
- Modelle-Werkbank: Maschinenraum-Speicherleiste als Hero (Arbeitsspeicher-Balken,
  nach Rolle eingefaerbt + frei), darunter Master/Detail. Eingebettet als Haupt-Tab
  im Modell-Manager ("Werkbank"), "Modelle finden" + JobsBar bleiben.
- Sidebar/Nav neu strukturiert; alle Aktionen ueber die bestehenden /api-Endpoints.

Neue Features:
- Box-Konsole: zweites ttyd-Web-Terminal mit echter Login-Shell auf :7682 (direkter,
  SSH-artiger Box-Zugriff, kein Passwort — gleiches LAN-Trust-Modell wie hermes-terminal).
  Neuer Dienst deploy/box-console.service + agent_status-Felder box_console_url/-reachable.
- Box-Zugang: das Host-Sudo-Passwort laesst sich jetzt direkt in der Konsole-Seite
  setzen/aendern/loeschen (lokal im Browser), statt nur versteckt im System-Drawer.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 20:41:19 +02:00
Hitonabi 78448220b2 Observability 1a: Per-Turn-Latenz-Trace + Latenz-Karte
voice_metrics.py: neben den rollenden Stats jetzt ein echter Per-Turn-Trace
(TurnTrace + Ringpuffer der letzten 60 Turns). Balken-Stufen zeitlich disjunkt
(stt · vision · hirn · gen); hirn misst ab mark_brain_start() VOR dem Hermes-
Request, damit die Vision-Zeit nicht doppelt gezaehlt wird. STT (davor) und
Mem0-Retrieve (Rueckruf waehrend) werden per park()/_take_* best-effort dem Turn
zugeordnet (Ein-Nutzer-Geraet, kein Turn-ID noetig). Mem0 = Unter-Detail INNERHALB
hirn (nicht addieren) -> ehrlich, kein Doppelzaehlen.

voice.py: TurnTrace in voice_chat's gen() (commit garantiert 1x via finally, auch
bei Fehler/Abbruch). STT-Endpoint parkt seine Dauer. NEU: GET /api/voice/metrics
(schliesst die Luecke - selbstkritik-feed.sh curlte das, existierte nie -> 404) +
GET /api/voice/trace?limit=N.

memory.py: GET /api/memory?q=... (= Hermes' Mem0-Prefetch) misst + parkt die
Retrieve-Zeit.

Frontend: LatencyCard (gestapelte Balken je Turn, "Taeter" = groesste Stufe,
Fehler-Turns rot, Tooltip mit "davon Mem0 X s"), Query useVoiceTrace, in der
Zentrale unter "Stack & Telemetrie". Lokal gegen Seed-Server verifiziert: 30,3-s-
Haenger -> Hirn-Balken 94% + "davon Mem0 26,1 s".

Grenzen (ehrlich, als Fussnote in der Karte): Tool-Runden im Hermes-LLM-Loop haben
keinen Callback an MC2 -> stecken in "Antwort". Reine Telegram-Text-Turns laufen an
MC2 vorbei und erscheinen hier nicht.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 13:21:52 +02:00
Hitonabi 8e4aca9f5c Discover: Katalog auf Juli-2026-Stand + Badge-Alias-Fix
Katalog-Daten (models_catalog.json) waren teil-stale (Stand 27.06.):
- vision: Qwen3-VL-30B-A3B-Instruct ergaenzt (neue Augen, MoE 30B-A3B) — sonst
  empfahl der "Modelle finden"-Tab weiter das aeltere VL-8B (Downgrade).
- scout: gemma-4-26B/31B (laengst entfernt) durch das live genutzte GLM-4.6V-Flash
  ersetzt.
- version 2026-06-27 -> 2026-07-03.
Bewusst NICHT aufgenommen: Qwen3.6-27B dense — im 3-Wege-Bench (tg 12,7 vs 60-91
der MoE-Coder) als Coder-Worker unterlegen, keine Empfehlung.

Badge-Fix (Discover.tsx): installedModel matchte nur das primaere role-Feld; ein
Modell kann eine Kategorie aber ueber einen Alias bedienen (Qwen3.6 = role "hermes"
+ Alias "fast") -> Fast-Karte zeigte faelschlich "Frei". Jetzt Match per Rolle ODER
Alias. Live gegen die Box verifiziert: alle 5 Rollen-Karten "Aktiviert".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 23:46:32 +02:00
Hitonabi 494037dee5 MC2 Final (D16 f): Voice-Metrik-Reste raus + README auf Final-Stand (C15)
f) Lucy/Voice-Reste aus dem MC2-Web-UI entfernt (kein "Sprechen"-Tab mehr):
   VoiceLatencyCard + Sprach-Latenz-Plumbing (queries/api-Typen) und der
   Backend-Leseendpoint /voice/metrics raus. Der Proaktivität-/Alarm-Kanal
   (/voice/announce, /alarm) und die STT/TTS/chat-Proxys bleiben unberührt.
C15) README auf den Final-/Autonomie-Stand aktualisiert (Mem0 statt SQLite-MCP,
   live+eingefroren, Lucy als eigenes Repo, Fangnetz-Updates/Werkstatt).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 20:23:24 +02:00
Hitonabi 8a2db70f3c MC2 Final (D16 c+e): System-Logs mit Fehler-Farben/Filter + Auto-Dedupe
c) System-Logs ausgebaut: neue LogConsole-Komponente färbt Fehler (rot) und
   Warnungen (amber) ein, "Nur Probleme"-Filter mit Zähler, Zeilen-Suche;
   voice-service in die Dienst-Liste aufgenommen (war nur backend-seitig).
e) Mem0-Dubletten automatisch: deterministischer Auto-Dedupe-Loop (täglich,
   apply=True, Schwelle 0.9 > manueller 0.85 da ohne Review) als Backend-
   Hintergrund-Task — kein Memory-Bloat mehr ohne Zutun. Knopf bleibt on-demand.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 20:12:11 +02:00
Hitonabi 4e5a7eed35 MC2 Final (D16 a/b/d): verständliche Updates + ehrliche Speicher-Zahlen
a) Update-Meldungen: generischer Release-Summarizer in Lucys Stimme mit
   strukturiertem Aktions-Verdikt ("Musst du etwas tun? NEIN/JA") für
   Hermes, Engine (llama.cpp) und llama-swap; Fangnetz-Hinweis verheiratet
   Breaking-Change-Sorge mit dem Postcheck.
b) OS ehrlich: zurückgestellte Pakete (Phasen-Rollout / kept back) werden
   ausgewiesen statt scheinbar zu hängen.
d) Ehrliche Speicher-Zahlen: KV-Cache aus echten GGUF-Architektur-Daten
   (Layer × KV-Köpfe × head_dim) + KV-Quant aus dem cmd statt params-blinder
   Schätzung — footprint_gb als eine Zahlensprache (Zentrale, Modell-Manager,
   fits-Check auf warmset+largest). Auto-Rewarm-Nudge nach Config-Reload.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 19:40:59 +02:00
Hitonabi a024ea1b2f Zentrale: "Lucys Augen"-Check ergaenzt (Vision-Modell im Blick)
Nutzer-Fund: Die Faehigkeiten-Liste zeigte Hirn/Gedaechtnis/Gateway/Agent/
Stimme, aber nicht die Augen — obwohl das Vision-Modell seit heute zum
Immer-bereit-Set gehoert. Neuer Check (nicht kritisch): gruen wenn das
vision-Modell geladen ist, sonst Warnung mit 1-Klick-"Augen aufwecken".

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 09:14:40 +02:00
Hitonabi d2ab662146 Immer-bereit-Set ehrlich gemacht: vision ttl 0, Warmup inkl. vision, Texte
Nutzer-Fund (Screenshots 03.07.): drei UI-Diskrepanzen im Modell-Manager.
1) Augen (VL-8B) hatten ttl 300 + fehlten im Warmup — standen also entgegen
   dem UI-Versprechen NICHT immer bereit. Jetzt ttl 0 (Box live + Snapshot)
   und Warmup-Default "fast vision".
2) Warn-Text beschrieb das alte Verdraengungs-Verhalten (seit persistent-Fix
   falsch) — jetzt: Set bleibt geladen, bei Ueberlauf scheitert das grosse
   Modell. 3) "Reserviert" als Vorsichts-Schaetzung/Obergrenze gekennzeichnet
   (68,8 GB Schaetzer vs. 25 GB real — Schaetzer-Umbau ist eigener Faden).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 09:10:44 +02:00
Hitonabi a2091b4f5f Warmhalte-Fix: llama-swap-Key heißt persistent, nicht persist
Live gefunden (Zed-Start warf Lucys Hirn raus): llama-swap ignoriert
unbekannte Group-Keys stillschweigend — der Verdrängungsschutz der
brains-Gruppe war seit jeher wirkungslos. set_group() schreibt jetzt
beide Keys (persistent für llama-swap, persist für MC2-API/UI),
budget.py rechnet die echte Ko-Residenz (on-demand reserviert das
Warm-Set statt 0), Warn-Texte beschreiben Überlauf statt Verdrängung.
Box-Config live gefixt + verifiziert: Coder und Qwen3.6 gleichzeitig ready.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 08:46:23 +02:00
Hitonabi 18f36f52ce B9-Merge fertig: api.ts-Typ (unit) + frontend/dist gebaut
tsc bestaetigte exakt die vom Werkstatt-Gate angekuendigte Luecke (4x TS2339 unit)
-> ServicesResp.services um unit ergaenzt, Build gruen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 21:24:35 +02:00
Hitonabi cd3c5b5eed Verbinden: Zed als Haupt-Tool (Windows stabil seit 10/2025, Rust-nativ, Agent Panel) — OpenCode raus
User-Anforderung: leichtgewichtig statt VS-Code-Bloat + klickbar. Zed: ~16x weniger RAM,
<10ms Latenz, parallele Agenten, OpenAI-kompatible lokale Endpoints nativ. Meine fruehere
'Windows zweitklassig'-Einschaetzung war veraltet (Radar-Lehre #2 heute).
Finale 3: Zed (Haupt) · Kilo Code (VS-Code-Fallback/Orchestrator) · Claude Code (Sessions).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 20:03:49 +02:00
Hitonabi a8d6f3f598 Verbinden-Seite: auf 3 Tools kuratiert (Kilo Code, OpenCode, Claude Code)
Roo Code wurde April 2026 eingestellt (Repo archiviert) — Kilo Code ist der aktive
Nachfolger der Roo/Cline-Linie (Orchestrator-Modus, Modell-pro-Modus, JetBrains+CLI).
Cursor/Zed/Continue raus (cloud-first bzw. von Kilo abgedeckt). Kilo-Note enthaelt die
Modus-Zuordnung: Code->coding, Architect/Orchestrator->heavy, Ask/Debug->chat.
Das Evolution-Radar (AUTONOMIE_PLAN E4) ueberwacht die Tool-Kategorie kuenftig selbst.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 19:53:03 +02:00
Hitonabi 49bf11886e dist: sauberer Rebuild nach Merge
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 15:55:03 +02:00
Hitonabi 996fea224a Merge lucy-v2: Komplett-Review 02.07.2026 (Voice-Speed, Turn-Detection, Update-Playbook, Lucy-Ausgliederung)
Konflikte zugunsten lucy-v2 aufgeloest (Superset; mains UI-Rework war dort dupliziert),
dist wird nach dem Merge frisch gebaut.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 15:54:58 +02:00
Hitonabi 9822af7640 Hermes-Update-Playbook: doctor im Job, Config-Drift-Scan + Tool-/Voice-Smoke im Postcheck, LLM-Release-Notes im Modal
- Update-Job: nach 'hermes update' laeuft 'hermes doctor' (Job rot bei Fehlern)
- hermes-postcheck.sh: Journal-Scan auf Unknown/deprecated/defaulting (Lehre aus v0.18:
  approvals.mode 'auto' wurde still ungueltig -> alle Tools in pending_approval),
  Tool-Smoke (echo via Agent, erkennt pending_approval), Voice-Smoke (/api/voice/chat)
- Update-Modal: die Box fasst anstehende Hermes-Commits selbst zusammen (fast-Modell,
  no-think, gecacht auf neuesten Hash) — Breaking Changes zuerst

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 15:53:37 +02:00
Hitonabi 7704ffddab dist: Rebuild nach P2-14-Splits
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 14:47:15 +02:00
Hitonabi 60765469aa Frontend: globale Error Boundary (Review F4) + dist-Rebuild
JS-Fehler in einer View fuehrten zum weissen Screen ohne Meldung; jetzt Fehleranzeige
mit Neu-laden-Knopf am App-Root (GraphView behaelt seine eigene Boundary).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:08:25 +02:00
Hitonabi 98360ad31f Frontend: Voice-Umzug in Desktop-App, MC3-Prototyp, UI-Rework-Dateien auf lucy-v2, dist konsistent
- VoiceView + components/voice + lib/voice entfernt (lebt jetzt in client/lucy-desktop)
- mc3/: Basisstation-Prototyp hinter #mc3-Weiche (non-destruktiv)
- roleMeta/useLucyHealth/useExpertMode/ExpertToggle/LucyHealthCard/WarmSetManager (UI-Rework, auf main a341d25 committet, hier nachgezogen)
- dist frisch gebaut (Asset-Stand war inkonsistent: alte geloescht, neue untracked)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 10:29:59 +02:00
Hitonabi a341d254e1 UI idiotensicher: Klartext-Rollen, Lucy-Statuspanel, Einfach/Experte, Warm-Set
Vier-Etappen-Umbau der MC2-Oberfläche für Endnutzer (kein Fachjargon):

1. Klartext-Schicht (lib/roleMeta.ts): Rollen-Kürzel → Zweck-Namen mit Icons
   (hermes=Lucys Hirn, embed=Lucys Gedächtnis, vision=Lucys Augen, …), zentral
   in ModelBadges/ModelsCard/Cockpit. Veraltete Rollenliste korrigiert
   (Phantom-„fast" raus; embed/coder-lite ergänzt).
2. „Geht's Lucy gut?"-Panel (lib/useLucyHealth.ts + LucyHealthCard): 5 Fähigkeiten
   in Klartext, Ampel-Verdikt, Speicher-Ampel, 1-Klick-Reparatur (echte Unit-Namen).
3. Einfach/Experte-Schalter (lib/useExpertMode.ts + ExpertToggle) + Schutzgeländer:
   Hirn/Gedächtnis (protected) nicht löschbar/entladbar; Ctx/Spec/Slots/Lane-Details
   im Einfach-Modus versteckt.
4. „Immer-bereit-Set"-Manager (WarmSetManager): brains-Gruppe in Klartext + ehrliches
   Speicher-Budget (inkl. KV) mit Verdrängungs-Hinweis.

Live gegen die Box verifiziert. frontend/dist mitgebaut.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 17:04:56 +02:00
Hitonabi 984224959a Build: Frontend-dist mit MTP-Badge (zu f655f09)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 18:17:36 +02:00
Hitonabi dd99401f3e Feat: Brain-Rolle (hermes) als erstklassige, dauer-warme Hirn-Rolle
- ROLE_IDS (llamaswap, sources) + UI-Rollenlisten (ModelBadges, Discover,
  ModelBrowse, Cockpit-Slot-Grid) um `hermes` erweitert: gemma erscheint als
  „Hirn", nicht mehr als scout.
- Neuer set_ttl-Helper; set_agent_brain erzwingt ttl:0 (neu + idempotent beim
  Re-Setzen) und liefert eine weiche Budget-Warnung (kein Hard-Block) bei OOM.
- brain_status/brain_model_name: zeigen das echte Hirn (Rolle hermes / Hermes
  model.default) statt hart `fast` (Bugfix Health-/Ready-Check).
- POST /api/models/{id}/role delegiert die Rolle `hermes` an den warm-bewussten
  Flow (Alias + brains-Gruppe + ttl 0 + Hermes-Config + Gateway-Restart).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 17:01:26 +02:00
Hitonabi 087eb2259d Polish: A11y-, Motion- & Deep-Linking-Sweep (Web Interface Guidelines)
Aus dem web-design-guidelines-Audit über das ganze Frontend:

P1 — index.css: prefers-reduced-motion-Block (Animationen/Transitions aus),
color-scheme dark/light, zwei `transition: all` → explizite Properties,
globaler :focus-visible-Ring. Formular-aria-labels (SystemDrawer-Passwörter
inkl. name/autocomplete/spellCheck, Memory, Connect, ModelBrowse, LaneEditor,
CustomDialog). Icon-Button-aria-labels + dekorative Icons aria-hidden.

P2 — Memory-Lösch-Bestätigung (war sofort), overscroll-behavior:contain auf
Modals (CustomDialog/Agent/Cockpit/CommandPalette), ModelBrowse fmtN → Intl.NumberFormat.

P3 — Deep-Linking: top-level View im URL-Hash (#models), Reload/Teilen/Cmd-Klick
funktionieren; Sidebar-Nav als <a href="#id"> (echte Links, aria-current),
hashchange-Sync; index.css-Aktiv-Selektoren button→a nachgezogen.

Verifiziert: npm run build (tsc strict) clean; live gegen die Box (Hash-Nav,
Reload-Persistenz, aria-current, Aktiv-Styling teal+Akzent, keine Konsolenfehler).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 20:25:08 +02:00
Hitonabi 8108d3fd28 Feat: "Modelle finden" mit gleichwertigem Stöbern-&-Suchen-Modus
Profi-Suche raus aus dem versteckten Akkordeon → eigener Modus-Umschalter
(Empfohlen | Stöbern & Suchen) im "Modelle finden"-Tab.

- Stöbern & Suchen: immer sichtbare Suchleiste, Filter-Chips (Beliebt/Coder/
  Vision/Reasoning/Klein), reiche Treffer (Autor · Downloads · Likes · installiert-
  Badge), aufklappbar → Quant + Rolle + Fit-Ampel + Download (OOM-Gate), plus
  Direkt-Eingabe für exaktes Repo/URL.
- Trending ohne Query: hf.search('') liefert jetzt Top-GGUF nach Downloads;
  Route /api/hf/search?q wird optional.
- Empfohlen = unveränderte Rollen-Sockets (Default). AddModel.tsx in ModelBrowse
  aufgegangen → gelöscht.

Verifiziert: npm run build (tsc strict) clean; Backend-Smoke (empty-q → Top-GGUF);
live gegen die Box (Toggle, Chips, Suche, installiert-Erkennung, Fit-Ampel).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 19:51:16 +02:00
Hitonabi a894a4e952 Feat: Pool-Auslastungs-Mini-Bar in der Dashboard-Modelle-Karte
Schlanke Glance-Anzeige der echten Speicher-Pool-Belegung (gtt_used/gtt_total
inkl. KV aus sysStatus.gpu) oben in der Modelle-Karte — teal/amber/rot ab 70/88 %.
Keine Karten-Doppelung: die volle interaktive VRAM-Bar + „Alle entladen" bleibt
im Modell-Manager.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 19:33:36 +02:00
Hitonabi c1fac1e688 Refactor: UI-Konsolidierung über Zentrale, Modell-Manager, Hermes & Verbinden
Beseitigt Redundanzen/Mismatches, die sich mit den Lanes angesammelt hatten:

- Modell-Manager: großen animierten SVG-Gateway-Graph (~310 Z.) entfernt —
  Rolle→Modell deckt das Slot-Grid ab, Lanes der Lane-Editor, IDE-Config die
  "Verbinden"-Seite. Cockpit-Brain-Switch raus → Verweis auf Hermes-Tab.
- Hermes: zweiten SVG-Graph + 4 Status-Kacheln durch einen ruhigen Box→Pfeil-
  Fluss ersetzt (Terminal → Gateway → Hirn/Verdrahtung/PC), Stil wie "Verbinden".
- Hirn-Wechsel vereinheitlicht: nur noch im Hermes-Tab. Installiert = warm-bewusst
  (/api/agent/brain/set), Alias = /api/agent/brain; Lane-Aliase chat/coding/fast/heavy.
- Terminologie auf Lane-Sprache: ConnectView "model auto" → chat/coding;
  connect.py-Snippets defaulten auf 'coding' (GATEWAY_MODELS mit Lanes vorn).
- Zentrale: ActiveModelsCard + RolesCard zu einer ModelsCard verschmolzen
  (Rollen + warm + Inferenz + Größe); Layout entdoppelt.

~600 Zeilen SVG-Graph-Code raus, 2 tote Karten gelöscht. Verifiziert:
npm run build (tsc strict) clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 19:22:56 +02:00
Hitonabi 9e432dbd2d Feat: Frontend-Overhaul E — Lane-Editor, Routing-Policy (hot-reload) & Latenz-Karte
Teil 1: VoiceLatencyCard auf dem Dashboard (GET /api/voice/metrics, C2) —
zeigt STT/Vision/Chat-TTFB/TTS mit p50/p95/last + count.

Teil 2: UI-editierbare Routing-Policy. Neuer routing_policy.py (hot-reload JSON
unter MODELS_DIR/mc2-routing.json, Env=Defaults, atomarer Write, Validierung).
router_logic, gateway_proxy und gateway.routing_summary lesen jetzt live via
load_policy(); routing_summary ist lane-bewusst (chat/coding statt altem auto).
Neue Endpoints GET/PUT /api/routing/policy.

Teil 3: LaneEditor.tsx als ZONE im Cockpit (chat/coding-Aliase + Schwellen +
fast_no_think, Speichern/Default-je-Feld); Gateway-Node zeigt die Lanes.

Verifiziert: npm run build (tsc strict) clean, FastAPI TestClient (GET/PUT,
Validierung, Persistenz, Hot-reload durch die API), venv-Smoke (Routing).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 18:58:17 +02:00
Hitonabi 50e04e0aee Feat: Model-Manager — Ko-Residenz-Schalter + "verdraengt das Hirn"-Warnung
Verhindert versehentliches Verdraengen des warmen Hirns im Modell-Manager.
- api.ts: GroupsResp-Typ + getGroups/setGroup (PUT /api/groups).
- queries.ts: useGroups-Hook (qk.groups).
- Cockpit: pro Modell ein "Brain"-Schalter (Ko-Residenz in der brains-Gruppe
  an/aus) + "Ko-resident"-Badge. Beim Laden eines gruppenlosen Modells, das
  ein warmes brains-Mitglied rauswerfen wuerde, erscheint eine Bestaetigung
  mit Hinweis auf den Schalter (beide warm halten).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 22:52:00 +02:00
Hitonabi 63a83c69c3 Feat: Hirn-Bereitschaft im /api/health + Frontend-Warnung
/api/health liefert jetzt brain:{role,model,ready} (echter /running-Check —
ein abgestuerztes/nicht geladenes Agent-Hirn 'fast' erscheint dort nicht).
Frontend zeigt 'Hirn offline (model)' + Amber-Punkt, statt dass der Ausfall
nur als App-Fehler ('Provider returned an empty stream') auftaucht.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 21:42:42 +02:00
Hitonabi 71d1d99c44 Feat: Wartungs-Riegel — nur EIN System-Update gleichzeitig
Bisher kein Schutz: Doppelklick/zwei Tabs konnten zwei update-engine.sh parallel
starten → racende .bak-Sicherung + parallele llama-swap-Restarts + sich gegenseitig
als kaputt sehende Postchecks.

Backend: jobengine.start_job bekommt group-Tag + active_in_group(); os/engine/swap/
hermes-update sind group="maintenance" und lehnen einen Start ab, solange eines laeuft
({ok:false, status:"busy", running:<label>}). Schuetzt auch gegen parallele Sessions.

Frontend: laeuft ein Wartungs-Job, zeigt der Drawer ein Banner "Update laeuft: <label>"
und sperrt "Jetzt aktualisieren" + "Nach Updates suchen". Logs/Job-Fortschritt/Dienste
bleiben voll nutzbar (Dashboard nicht hart gesperrt). Busy-Antwort wird als Hinweis gezeigt.
Modell-Upgrades bleiben erlaubt (parallel unkritisch).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 11:44:17 +02:00
Hitonabi 88661545b4 Feat: Graph-Knoten verschieben (Drag) + Neu-anordnen-Button
Sigma-Drag-Muster (downNode/mousemovebody/mouseup) → Knoten frei ziehen; 'Neu anordnen' rechnet das
ForceAtlas2-Layout neu (aufräumen nach manuellem Verschieben).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 11:19:53 +02:00
Hitonabi de3c452f20 UI: Gedächtnis-Graph viel größer (fast volle Viewport-Höhe statt 480px)
Graph- + Detail-Panel auf h-[calc(100vh-13rem)] min-h-560 (Panel scrollbar). Detail-Spalte 280→300px.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 11:13:21 +02:00
Hitonabi d832f90ad6 Feat: Gedächtnis-Tab überarbeitet — Sigma.js-Graph (skaliert), Liste als Default + gruppiert
Graph: reagraph (three.js, schwer, hing Renderer) → Sigma.js v3 + graphology (graph-optimiertes WebGL,
skaliert auf tausende Knoten), im App-Look: Kategorie-Farben, Knotengröße nach Verknüpfungen,
Hover-Highlight (Nachbarn hervor, Rest dimmt), Legende. Liste ist jetzt Default + nach Kategorie
gruppierte Sektionen (statt flacher Wand). reagraph deinstalliert → leichteres Bundle.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 11:09:33 +02:00
Hitonabi e2b3bb7088 Fix: Engine-Update-Badge bleibt nicht mehr haengen + Update-Detail-Fenster
- engine_update_job leert jetzt _engine_cache nach Abschluss (on_done),
  sonst zeigte das Dashboard bis zu 1h "Update verfuegbar" trotz erfolgter
  Aktualisierung (1h-Cache wurde nie invalidiert wie bei den anderen Jobs).
- check_updates_job leert zusaetzlich _comp_cache, damit "Nach Updates suchen"
  auch den Hermes-Status frisch prueft.
- Neu: GET /api/maintenance/update-details (os|engine|hermes) liefert, was
  genau aktualisiert wird (apt-Paketliste, Engine Build X->Y + Release-Notes,
  Hermes-Commits HEAD..origin/branch).
- Frontend: "Aktualisieren"-Buttons -> "Anzeigen"; oeffnen ein Detail-Fenster
  mit den konkreten Aenderungen, erst "Jetzt aktualisieren" startet das Update.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 10:53:40 +02:00
Hitonabi 9332971384 Fix: TTS-Sonderzeichen (& → und, % → Prozent, °/=/Schrägstrich) + **fett** im Chat gerendert
Stimme las '&' u.a. wörtlich/komisch vor → cleanForTTS wandelt Sonderzeichen aussprechbar um.
Anzeige rendert **fett** jetzt als echte Fettschrift statt roher Sternchen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 10:16:33 +02:00
Hitonabi d07fe1de66 Feat: Chat-Verbesserungen — echte Umlaute, TTS-Filter, Lautstärke-Regler, Sprechblasen
- Umlaute: System-Prompt erzwingt echte ä/ö/ü/ß (Hermes spiegelte bei Technik den ASCII-Hint).
- TTS-Filter: cleanForTTS entfernt URLs/Markdown/Code/Emojis vor der Sprachausgabe (Anzeige bleibt).
- Lautstärke: GainNode in AudioQueue + Regler (Default 60%, live); Probe-hören respektiert ihn.
  (Bugfix: Number(null)===0 → wäre sonst stumm gewesen.)
- Chat: Sprechblasen (User rechts / Hermes links), Zeilenumbrüche, Auto-Scroll, Tipp-Indikator.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 02:44:20 +02:00
Hitonabi 49c9e27502 Feat: festes Avatar-VRM (das eine Modell) + Avatar-Picker entfernt
Avatar fest auf /avatar.vrm (frontend/public/avatar.vrm → dist). Galerie/Upload/URL raus;
AvatarPicker → reine VoiceControls (nur Stimme). vrmStore.ts gelöscht. avatar.vrm ist gitignored
(23 MB, lizenz-/redistributionssensibel) — liegt auf der Box, nicht in git.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 02:34:35 +02:00
Hitonabi b4a8f92cfa Feat: lebendigere Avatar-Bewegung — Blickkontakt (lookAt), Umschauen, Gewichtsverlagerung, Vorlehnen beim Sprechen
Avatar schaut zur Kamera (vrm.lookAt = camera), Kopf driftet zu wechselnden Zielen (Umschauen),
Hüfte/Arme verlagern Gewicht, lehnt sich beim Sprechen leicht vor. Über Ruhepose + Lippensync/Mimik.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 02:28:00 +02:00