Commit Graph
100 Commits
Author SHA1 Message Date
HitonabiandClaude Fable 5 2db0ce080f Autonomie E2: Auto-Update-Timer (So 04:30) + Pin-Register + Rollback
- deploy/autoupdate.sh: Router->Engine->Hermes ueber bestehende Pfade; rot = Rollback + Selbst-Pinning (/srv/models/mc2-pins.json) + Telegram; gruen = Meldung "eingespielt X->Y"; Abschluss-Summary je Lauf
- Hermes-Rollback selbst gebaut (Job kann nur rot werden): git reset auf alten Stand + Config aus frischem Backup + Gateway-Neustart + Gehirn-Check
- sudoers-mc2-autonomie: NOPASSWD-Snippet fuer Engine/Router (einmalige sudo-Session); bis dahin wird die Ebene uebersprungen + gemeldet
- Verifiziert auf der Box: Happy-Path (11+2 Commits echt eingespielt), Fake-Fail -> Rollback+Pin+Meldung, Pin-Skip, Unpin -> regulaeres Update

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 20:01:13 +02:00
HitonabiandClaude Fable 5 df8ec46018 Radar (E4): IDE-/Agent-Tool-Kategorie in die Watch-Liste (Roo-Code-Lehre)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 19:53:22 +02:00
HitonabiandClaude Fable 5 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
HitonabiandClaude Fable 5 2263e298fd Autonomie E1: Meldeweg deploy/notify.sh (hermes send -> Telegram, Fallback Log+wall)
Verifiziert auf der Box: 2 Testnachrichten via Telegram zugestellt (mc2-notify.log OK).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 19:49:26 +02:00
HitonabiandClaude Fable 5 1adbb19572 Autonomie-Plan: Multi-Agent-Verdikt ergaenzt (Fan-out-Radar + Worker/Reviewer-Werkstatt; nicht bei Voice/IDE; kein Hirn-Tausch)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 19:44:32 +02:00
HitonabiandClaude Fable 5 41aeb111d7 Kickoff-Paket Kapitel 0: Autonomie-Plan (E1-E6) + Bench-Harnesses ins Repo
- docs/AUTONOMIE_PLAN.md: 3 Saeulen + Werkstatt, Etappen mit Verifikation, Leitplanken,
  Definition-of-Done, Session-Start-Checkliste — naechste Session startet mit 'leg los'
- deploy/bench/{model-bench,brain-bench}.sh: die 02.07.-Benches als versionierte Harnesses
  (Grundlage der Modell-Selbst-Evaluation E5; Quoting-/pipefail-Lehren eingebaut)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 17:20:22 +02:00
HitonabiandClaude Fable 5 d887a6c248 Report: Nachtrag 3 — Lucy-Trennung, Update-Playbook E2E gruen, Radikal-Aufraeumen
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 16:11:43 +02:00
HitonabiandClaude Fable 5 4eaa11c32a Postcheck: pipefail-Falle im Voice-Smoke (head schliesst Pipe -> curl 23 -> Fehlalarm)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 16:10:21 +02:00
HitonabiandClaude Fable 5 8c7dd5b30f Postcheck: Voice-Smoke mit 3 Versuchen (Session-Kaltstart nach Gateway-Neustart war Fehlalarm)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 16:07:01 +02:00
HitonabiandClaude Fable 5 49bf11886e dist: sauberer Rebuild nach Merge
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 15:55:03 +02:00
HitonabiandClaude Fable 5 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
HitonabiandClaude Fable 5 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
HitonabiandClaude Fable 5 9e7cc6612f Lucy ausgegliedert: client/lucy-* -> eigenes Repo Hitonabi/lucy (+ alte hermes-voice geloescht)
- lucy-desktop + lucy-tts leben jetzt in F:/Coding Stuff/lucy bzw. git .../Hitonabi/lucy
  (Verzeichnisnamen unveraendert -> alle Pfade/BATs funktionieren weiter)
- lucy-f5 geloescht (Experiment abgeschlossen, Verdikt: Pocket bleibt; Skripte in der Historie)
- hermes-voice geloescht (Vor-Lucy-Python-Client, ersetzt)
- docs/LUCY_TTS_PLAN.md mit umgezogen; .gitignore entschlackt
- MC2 = Box/Stack (Backend, Frontend, Sidecars, Deploy, hermes-pc-Executor)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 15:50:16 +02:00
HitonabiandClaude Opus 4.8 4a680b863e Verbinden: IDE-Configs einheitlich auf eine coding-Lane (OpenCode/Zed/Continue zeigten noch alle Modelle)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-02 15:38:23 +02:00
HitonabiandClaude Fable 5 d7de1f47d4 Lucy-Prompt: https://-URLs + curl-Timeout in Terminal-Befehlen erzwingen
Der v0.18-Security-Scan flaggt schemenlose URLs (wttr.in/... = MEDIUM) -> Approval-Umweg;
dazu hing ein wttr.in-curl 31s ohne Timeout. Beides ist Prompt-steuerbar.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 15:32:34 +02:00
HitonabiandClaude Fable 5 646031e5c0 TTS: Worker-Pool aktivieren (LUCY_WORKERS=4 x 2 Threads beim Spawn) — lief seit je SERIELL
Realtest-Fund (User-Logs): workers=0 -> lange Antworten trudelten seriell nach
(9,9s Audio in 9,7s gen). Mit Pool rechnen Folgesaetze parallel zum Sprechen.
TTFB des ERSTEN Satzes bleibt ~1,6-2,3s (Voll-Generierung + Kollaps-Gate vor Emission) —
Fix dafuer = generate_audio_stream fuer Satz 1 (API vorhanden), braucht Hoer-Tests -> naechste Session.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 15:18:13 +02:00
HitonabiandClaude Fable 5 195b07deef Hotfix nach Realtest: Turn-Hold konservativ + Smart-Turn-Vorwaermen (3,3s -> 0,16s Kaltstart)
User-Feedback 'sehr langsam' diagnostiziert (voice_metrics): (1) zwei App-Instanzen liefen
parallel (Dev-Instanz vergessen — beendet), (2) Semantik-Hold hielt echte Saetze auf.

- useVAD: warten NUR noch bei sehr sicherem 'unfertig' (P(fertig) < 0.15 statt < 0.5),
  max. eine Warterunde pro Aeusserung, HOLD 1,8s -> 1,2s, Not-Aus localStorage
  lucy_turncheck=0, Entscheidung wird bei lucy_perf=1 geloggt (fuer echtes Nachtunen)
- voice_service: Smart Turn beim Start vorwaermen (Probe-Inferenz auf Stille) — der
  3,3s-Kaltstart traf sonst den ersten gesprochenen Satz; deployt + verifiziert (0,16s)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 15:07:17 +02:00
HitonabiandClaude Fable 5 2a4eb51bd7 Kandidaten live testbar: gpt-oss-120b (2,3x schneller als heavy) + VL-30B in Config (Review P3-17 abgeschlossen)
Bench (Box, Vulkan, 32k ctx): gpt-oss-120b tg 54-55 t/s vs. Qwen3.5-122B 23,5 t/s bei
60 statt 73 GB. Beide OHNE Alias-Wechsel deployt — Qualitaets-Entscheid beim User.
brains-Gruppe nach Reload wieder angewaermt (hermes/embed/vision ready).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 14:52:22 +02:00
HitonabiandClaude Fable 5 7704ffddab dist: Rebuild nach P2-14-Splits
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 14:47:15 +02:00
HitonabiandClaude Fable 5 588d032335 Frontend: Cockpit entflochten (Review P2-14, Teil 2) — 990 -> 909 Zeilen
- views/models/cockpit/RoleAssignModal.tsx: Rollen-Zuweisung inkl. Empfehlungs-Sortierung
  und Schutzgelaender als eigenstaendige Komponente
- Preview-verifiziert gegen die Live-Box: Modal oeffnet per Slot-Karte ('Lucys Hirn
  festlegen'), Schutzgelaender greift, 9 Modell-Optionen, schliesst sauber
- Zone C (Library, ~440 Z) bleibt fuer eine Folge-Session (tief mit Aktions-State verwoben)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 14:47:10 +02:00
HitonabiandClaude Fable 5 e84386b03e Frontend: SystemDrawer entflochten (Review P2-14, Teil 1) — 934 -> 665 Zeilen
- components/system/rows.tsx: SERVICES + UpdateRow + ServiceRow + formatBytes
- components/system/SettingsTab.tsx: Einstellungen-Tab inkl. eigenem State (localStorage)
- components/system/UpdateDetailModal.tsx: Update-Detail-Fenster (os/engine/swap/hermes)
- Preview-verifiziert gegen die Live-Box: alle 3 Tabs rendern, Speichern-Flow
  (Dialog + localStorage) und Logs-Tab (Service-Select) funktionieren

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 14:42:52 +02:00
HitonabiandClaude Fable 5 a16287e19c Report: Live-Deploy verifiziert — parallel-2 wirkt (echte Parallelitaet), neue Session 0,85s/first_content 803ms (vorher 5,6-12s)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 12:08:57 +02:00
HitonabiandClaude Fable 5 f88c2a95c1 Report: VL-30B-Bench (90-92 t/s, Vision-Upgrade-Kandidat) + gpt-oss-Handoff dokumentiert
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 12:01:15 +02:00
HitonabiandClaude Fable 5 ed55612cfa Report: Lemonade-Verdikt — nicht als Unterbau; GPU-Klon besser mit llama.cpp-Vulkan + llama-swap (Box-Stack)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:59:52 +02:00
HitonabiandClaude Fable 5 47ade040e6 gitignore: F5-Eval-venv (lokal, mehrere GB)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:58:44 +02:00
HitonabiandClaude Fable 5 852e723cc8 Report: Nachtrag 2 — P2/P3-Vollausbau dokumentiert (Turn-Detection, F5-Finale, Electron 43, Mem0 v3, Kandidaten, Lemonade)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:57:44 +02:00
HitonabiandClaude Fable 5 f90e5f4519 Lucy: Electron 33 -> 43 (Chromium 150, Node 24) — Boot-Smoke-Test gruen (Review P2-13b)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:31:42 +02:00
HitonabiandClaude Fable 5 c3d1cc87e2 Lucy: useVoiceAgent entflochten (Review P2-13a)
textPipeline.ts (Umlaute/TTS-Cleaning/Emo-Tags/Session-Id), visionIntent.ts, perf.ts —
alles pure Funktionen, einzeln testbar; der Hook (397->305 Z) orchestriert nur noch.
Verhalten unveraendert, tsc gruen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:29:10 +02:00
HitonabiandClaude Fable 5 88c2659a9c P3: llama-swap capabilities deklariert + Plugin lernt Tool-Namen (Hermes-0.18-API)
- deploy-Config: capabilities (in/out/tools/context) je Modell — /v1/models informiert
  Clients korrekt; context = nutzbarer Kontext pro Request (c/parallel)
- mc2-memory: sync_turn nutzt messages aus Hermes >=0.18 — nur Tool-NAMEN (Ergebnisse
  bleiben draussen: untrusted/Poisoning-Vektor); deployt, Postcheck gruen
- Mem0 v3-Algorithmus auf der Box verifiziert (BM25/Entity/Hybrid in 2.0.8 aktiv)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:25:46 +02:00
HitonabiandClaude Fable 5 6f7498a956 Turn-Detection: Smart Turn v3 semantisch (Review P2-11) — live verifiziert
- voice_service /turn: smart-turn-v3.2 (8MB ONNX, ~110ms warm inkl. Features); Audio muss
  LINKS gepadded werden (rechts-Padding -> konstant 'complete', live diagnostiziert) und
  der Output ist empirisch P(unfertig) — Doku sagt es andersherum, Messung gewinnt
- backend /api/voice/turn: Proxy mit fail-open (Turn-Check ist Optimierung, kein Blocker)
- useVAD: Semantik-Hold — bei 'incomplete' bis 1,8s auf Fortsetzung warten und anhaengen,
  statt mitten im Gedanken zu antworten; Deckel 30s; fail-open bei Netzfehlern
- Verifiziert: fertig=true(0.74), mitten-im-Wort=false(0.04), via :9001 ok

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:21:45 +02:00
HitonabiandClaude Fable 5 a1cea1a1ea deploy-Config: Kommentar aus dem cmd-Literalblock heraus (waere Teil des Kommandos gewesen)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:09:29 +02:00
HitonabiandClaude Fable 5 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
HitonabiandClaude Fable 5 68ad291a8f P2: Vision im Stream (C2), TTS-Warmup-Retry (L2), parallel-2-Config vorbereitet
- voice.py: Bildschirm-Sicht laeuft IM SSE-Stream (+hermes.vision.progress-Event fuer
  Warte-Ansage), Vision-Timeout 120->45s (MC_VISION_TIMEOUT); deployt + Smoke-Test ok
- useVoiceAgent: Warm-Gate mit Retry/Backoff + sichtbarer Meldung statt stummem Fake-ready
- deploy-Config: hermes -c 131072 --parallel 2 (+KV Q8_0) — Mem0-Extraktion blockiert
  Voice-Turns nicht mehr; speicherneutral. Live-Schaltung: User
- Report: P2-Nachtrag; C5 (pricing/token_stats) war Fehlalarm — in Benutzung

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:07:00 +02:00
HitonabiandClaude Fable 5 e08d812598 Brain-Bench + Latenz-Metrik (Review P1-9/P1-10)
- Bench-Matrix Qwen3.6 (5 Configs, separater Port): MTP n-max 3 bestaetigt (+26% tg),
  n-max 4 lohnt nicht, KV Q8_0 gratis (78,6=78,6 t/s) bei halbem KV-Speicher
- deploy-Config: -ctk/-ctv q8_0 am hermes-Eintrag (Live-Schaltung: User-Freigabe noetig)
- voice.py: chat_first_content-Metrik (echte Hirn-Latenz bis erster Inhalts-Token)
- Report um Umsetzungs-Nachtrag ergaenzt

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 10:56:23 +02:00
HitonabiandClaude Fable 5 45fb61000a VAD: Silero v5 (vad-web) statt RMS-Eigenbau — Turn-Ende 900 -> 450 ms (Review P1-7)
- useVAD.ts: MicVAD (neuronale Sprach- statt Pegel-Erkennung), redemptionMs 450,
  preSpeechPad 320 ms, WAV direkt aus Float32 (kein webm/Opus-Umweg mehr zur Box)
- boxStt.ts: Dateiname passend zum Blob-Typ (rec.wav | rec.webm)
- Assets self-hosted unter /vad/ via scripts/copy-vad-assets.mjs (npm postinstall), offlinefaehig
- Verifiziert: tsc + Build sauber, App startet, Assets werden ausgeliefert (Mikro-Test: User)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 10:49:36 +02:00
HitonabiandClaude Fable 5 403961da51 STT: Parakeet-TDT 0.6B v3 als Default-Engine (Review P1-6) — 2,0s -> 0,45s
- onnx-asr (int8, CPU) als neue STT-Engine im Voice-Sidecar; whisper bleibt lazy Fallback
- Engine per VOICE_STT_ENGINE + pro Request (Form-Feld engine) waehlbar
- A/B auf der Box (10,8s DE-Audio): parakeet 0,45s vs whisper-medium 2,44s, Transkript identisch gut
- Live deployt + verifiziert (auch ueber :9001-Proxy: 0,46s)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 10:41:27 +02:00
HitonabiandClaude Fable 5 64efe18500 Docs: Komplett-Review 2026-07-02 (IST live verifiziert + Roadmap P0-P3) + Session-Docs
- REVIEW_2026-07-02.md: Latenz-Baseline (STT 2s dominant, LLM-TTFT 65ms), chat-Lane-Bug,
  SOLL-Recherche (Parakeet v3, Silero VAD v6, KV-Quant, MoE-Spec-Trap), Verdikte bestaetigt
- Audit-/TTS-/ZeroClaw-/DR-Docs von main nachgezogen; launch.json

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 10:30:12 +02:00
HitonabiandClaude Fable 5 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
HitonabiandClaude Fable 5 09a1c98514 Lucy-TTS/F5: Skripte + Batches versionieren, schwere Assets ignoriert
- pocket_server.py (Produktions-TTS mit Stimmen-Waechter), text_norm, Bench-/Diag-Skripte
- lucy-f5: f5_server/f5_test/bench_dml (DirectML-Experiment, Phase C/D offen)
- .gitignore: venvs/Modelle/Audio/Logs der beiden Ordner + box_recon/gemma_swap-Scratch

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 10:29:33 +02:00
HitonabiandClaude Fable 5 aff0105700 Lucy v2: voice-core-Adapter, VAD, Overlay-Feinschliff + Projekt-Dateien
- voice-core/: STT/TTS hinter Engine-Interfaces (pocket/box austauschbar), SpeechScheduler ausgelagert
- useVAD (Freisprechen, adaptive RMS-Schwelle), usePushToTalk, sentiment
- Avatar3D/config/styles-Feinschliff, AuraGlow
- electron.vite.config, tsconfig, Starter-BATs, .gitignore (out/, avatar.vrm)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 10:29:22 +02:00
HitonabiandClaude Fable 5 2db839aef9 Memory-Guards + Voice-Sidecar-Install robuster
- mem0_service: Junk-Fact-Guard post-extraction (Regex + sofortiges Delete), custom_instructions praezisiert
- mc2-memory-Plugin: Recall-Schwelle 0.3->0.5, Trivial-Turn-Filter (Begruessung/Quittungen nicht lernen)
- voice_service/install.sh: Python-3.12-venv via uv, Piper-Binary + DE-Stimmen, Chatterbox best-effort

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 10:29:12 +02:00
HitonabiandClaude Fable 5 9967155332 Backend: Box-Sync + Drift-Fixes (Review P0-3)
- deploy/llama-swap.config.yaml: Live-Box-Config jetzt versioniert (war untracked + veraltet)
- config.py: Template -fa 1 -> -fa on (Box-Standard)
- llamaswap.py: cache-reuse NICHT bei mmproj-Modellen anhaengen (verifizierte Vision-Falle)
- voice.py: Thinking-Deaktivierung fuer Voice-Chat (MC_VOICE_NO_THINK)
- connect.py: IDE-Snippets zeigen nur noch die coding-Lane

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 10:29:01 +02:00
HitonabiandClaude Opus 4.8 7e857a546b Voice: Thinking fuer Lucys Sprach-Pfad aus (enable_thinking:false)
Qwen3.6 ist ein Thinking-Modell; ohne Abschaltung 11k Reasoning-Token vor jeder kurzen Antwort (~30s TTFB). voice.py umging die Gateway-Lane -> gleiches chat_template_kwargs-Muster nachgezogen, env MC_VOICE_NO_THINK. Gemessen ~30s -> ~3s.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 21:53:54 +02:00
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 6db1224d95 Gedächtnis: nur Relevantes lernen/erinnern (Anti-Selbstbezug + Cache-Stabilität)
Der auto-lernende Mem0-Store sammelte trotz Relevanz-Direktive viel Müll:
Fakten ÜBER den Assistenten selbst (Hermes/Lucy), transiente Zustände
(Commit-Rückstand, Cronjob-Läufe, Onboarding-/Test-Fragen) und Gesprächs-Meta.
Live-Store war zu ~40% solcher Ballast; der niedrige Recall-Schwellwert (0.3)
blendete zudem marginale Fakten pro Turn ein und brach damit --cache-reuse.

- mem0_service/app.py: custom_instructions verschärft (NIEMALS Fakten über den
  Assistenten selbst / keine zeitgebundenen Zustände) + deterministischer
  Post-Extraktions-Guard (_is_junk_fact) löscht Assistenten-Meta/transiente
  Fakten, die mem0-OSS trotz Direktive extrahiert — unabhängig vom LLM.
- hermes/plugins/mc2-memory/__init__.py: RECALL_MIN_SCORE 0.3->0.5 (nur starke
  Treffer, oft leer -> stabilerer Prompt-Prefix -> --cache-reuse greift),
  MIN_USER_LEN 12->25 + Trivial-Turn-Skip (Begrüßung/Quittung/Aufwärmen).

Alles env-überschreibbar und reversibel. Backend/Frontend unberührt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 16:45:45 +02:00
HitonabiandClaude Opus 4.8 3c0a24feb7 Lucy v2: Blick-Vertikale korrigiert + Performance entschaerft
- Mauszeiger-Verfolgung: Hoch/Runter war invertiert -> Vorzeichen fuer Augen + Kopf/Nacken gedreht
- Performance: animierten filter:blur (Aurora) entfernt, dpr auf [1,1.5] gedeckelt,
  Partikel auf eine Ebene reduziert (Ruckeln gemeldet)
- (visuelle Abnahme durch User steht noch aus)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 21:34:37 +02:00
HitonabiandClaude Opus 4.8 38f8c96b66 Lucy v2 (MateEngine komplett): an den Rand ducken + Tanzen zur Musik
Rand-ducken:
- Overlay-Fenster gleitet nach ~15s Nicht-Naehe an den Bildschirmrand (Sliver sichtbar), kommt zurueck
  bei Annaeherung; Tray-Menuepunkt "An den Rand ducken/Hervorholen"; weiche Bounds-Animation (easeInOut)
- pinned/full unterdruecken Auto-Ducken; showWin/applyMode setzen sauber zurueck

Tanzen zur Musik:
- Main: setDisplayMediaRequestHandler -> System-Audio per Loopback fuer getDisplayMedia
- useDanceAudio: nimmt System-Ton ab, misst Bass-Energie -> danceLevel (Video-Track verworfen)
- Avatar: rhythmische Ganzkoerper-Tanzbewegung + Huepfen, skaliert mit der Energie
- "Tanzen"-Knopf im Vollfenster

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 19:41:43 +02:00
HitonabiandClaude Opus 4.8 c3c7c2ca91 Lucy v2 (MateEngine-Verhalten): Blickfolgen + Streicheln + Ziehen
- Mauszeiger-Verfolgung: Main pollt globalen Cursor (screen.getCursorScreenPoint), Renderer richtet
  Augen (lookAt-Offset in Kamera-Achsen) + dezent Kopf/Nacken danach aus
- Antippen/Streicheln: Klick auf den Avatar -> kurze freudige Reaktion (Laecheln + Kopf-Wackeln)
- Ziehen: im Overlay ist der Avatar eine Drag-Region (am Koerper greifen -> Fenster verschieben),
  Kamera-Drehung (OrbitControls) im Overlay aus; Blasen/Knoepfe bleiben no-drag
- neue IPC-Events: lucy:cursor (+ preload onCursor)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 19:35:06 +02:00
HitonabiandClaude Opus 4.8 feba73a11a Lucy v2 (Etappe 3+4): Mimik nach Bedeutung + Overlay v2
Etappe 3 (natuerlich reagieren, App-Teil):
- optionaler <emo:...>-Tag von Hermes -> Avatar-Mimik nach Inhalt (Fallback: Sentiment-Heuristik)
- Tag wird aus Anzeige UND Sprachausgabe entfernt (stripEmoTag)

Etappe 4 (aus der App ausbrechen):
- Geistmodus: Overlay durchklickbar (setIgnoreMouseEvents+forward), AUSSER ueber .clickable-Zonen
  -> Lucy sitzt auf dem Desktop, Arbeit dahinter laeuft weiter, Bedienelemente bleiben klickbar
- Overlay-Blasen: Links (oeffnen/kopieren) + Code (kopieren/in App ansehen) griffbereit ohne Chat-Panel
- neue IPC win:setClickThrough + preload setClickThrough

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 19:20:39 +02:00
HitonabiandClaude Opus 4.8 16f4683859 Lucy v2 (Etappe 2): guter Chat + animierter digitaler Raum
Chat:
- react-markdown/remark-gfm: Lucys Antworten formatiert (fett/listen/inline-code)
- Code-Bloecke mit Kopier-Knopf; Links oeffnen im System-Browser (shell.openExternal via IPC)
- Kopier-Knopf pro Antwort (Hover)
- Persona erlaubt Code/Links SCHRIFTLICH auf Nachfrage; Stimme liest nur kurze Einleitung (cleanForTTS filtert)

Digitaler Raum:
- driftendes Aurora-Licht + schwebende Partikel (2 Parallax-Ebenen) + Vignette ueber dem Neon-Gitter
- reine CSS-Animation (GPU), im Overlay weiter ausgeblendet

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 19:12:12 +02:00
HitonabiandClaude Opus 4.8 41f46569bf Lucy v2 (Etappe 1.3): gelegentliche Bewegungs-Einschuebe im Leerlauf
- alle ~20-35s ein Einmal-Clip (Strecken/Umschauen), dann zurueck in die Ruhe
- bricht sauber ab, sobald zugehoert/gedacht/gesprochen wird
- kurze passende Mimik (Laecheln beim Strecken)
- (visuelle Abnahme durch User steht noch aus)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 19:07:00 +02:00
HitonabiandClaude Opus 4.8 ac475ba509 Lucy v2 (Etappe 1.2): echte Bewegungs-Clips (.vrma) + lebendiges Gesicht
- @pixiv/three-vrm-animation: VRMA-Clips laden/abspielen (AnimationMixer)
- Ruhiger prozeduraler Leerlauf als Basis; echte Thinking-Pose blendet beim Nachdenken ein
- (.vrma sind Gesten, kein Ruhe-Loop -> nicht als Dauerschleife; Einmal-Einschuebe folgen)
- Blick-Sakkaden gegen eingefrorenes Gesicht
- VRMA-Clips: tk256ailab/vrm-viewer (MIT), siehe public/vrma/ATTRIBUTION.md

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 19:01:55 +02:00
HitonabiandClaude Opus 4.8 ef1e7eb8e6 Lucy v2 (Etappe 1.1): echte Vokal-Mundformen + Blick ohne Schielen
- Lippensync: spektraler Schwerpunkt -> aa/ih/ou-Mundformen statt nur Pegel ("Mund auf/zu")
- Augen blicken auf weit entfernten Punkt in Kamerarichtung -> kein Konvergenz-Schielen bei naher Kamera

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 18:41:18 +02:00
HitonabiandClaude Opus 4.8 cb4d7102b5 Docs: Optimierungsplan final — Deploy + scout-Vision/No-Think + F3/F4 evidenzbasiert verworfen
- Deploy verifiziert (f655f09 + 9842249 live, MTP-Draft im API erkannt)
- scout GLM-4.6V-Flash: Vision verifiziert (Testbild korrekt erkannt), No-Think-Modi dokumentiert
- F3 KV-Quant + coder-lite-Spec: getestet → verworfen (kein/negativer Nutzen; Spec schadet MoE)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 18:25:31 +02:00
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 f655f09ce1 Feat: MTP-Speculative-Decoding-Support + Warm-Set-/Budget-Korrektur (Strix-Halo-Optimierung)
Backend:
- MTP-Drafter-Support (Multi-Token-Prediction): erkennt MTP-Köpfe neben dem Modell
  (mtp-*.gguf / *-assistant, arch gemma4-assistant), schreibt
  --model-draft … --spec-type draft-mtp --spec-draft-n-max statt draft-simple.
  _parse_model erkennt --model-draft/-md; drafts_for/set_spec_draft/find_compatible_draft
  MTP-bewusst. Backward-kompatibel (klassische Drafts unverändert). (config.SPEC_DRAFT_N_MAX)
- register_model: cache-reuse/-cram als Default (Drift-Fix — neue Installs wie der
  hand-getunte Box-Stand), --parallel 2 nur noch für coder (kein ctx-Halbierungs-Footgun),
  Spec-Auto-Attach für alle Rollen self-guarding.
- budget.reserved_gb auf die VERIFIZIERTE llama-swap-Gruppen-Swap-Semantik angeglichen:
  on-demand-Modelle verdrängen die brains-Gruppe und laufen allein (reservieren 0, voller
  GTT); brains-Member reservieren nur die übrigen Member. Tote _persist_members entfernt.

Frontend:
- SpecDraftModal zeigt MTP-Drafter mit MTP-Badge (DraftInfo.mtp).

Docs:
- docs/OPTIMIZATION_PLAN.md: vollständiges Audit + Umsetzungs-Log (W1/W2 Warm-Set,
  gemma ctx/fa/cache-reuse/MTP 52→70,8 t/s, fast --parallel 1, scout=GLM-4.6V-Flash),
  alles live gegen die Box verifiziert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 18:13:07 +02:00
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 3611defe5d Feat: Per-Stage-Latenz-Metriken für die Voice-Pipeline (C2)
Neues services/voice_metrics.py (rollend, thread-safe, in-memory): misst STT,
Vision-Beschreibung, Chat-TTFB (Hermes-Stream) und TTS server-seitig. voice.py
instrumentiert die vier Stufen; GET /api/voice/metrics liefert avg/p50/p95/last
je Stufe. Macht aus Latenz-Vermutungen Messdaten — Anzeige folgt im Frontend (E).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 18:14:13 +02:00
HitonabiandClaude Opus 4.8 c77be502f9 Fix: coding-Lane bleibt beim Coder (agentisch) — nie heavy/fast
Agentisches Coden (OpenCode/RooCode/…) hat immer großen Repo-Kontext; die alte
Regel routete >24k Zeichen auf heavy (Allzweck-122B) statt auf einen Coder =
Downgrade der Coding-Fähigkeit. Jetzt: coding -> CODER immer. Optionaler leichter
schneller Coder via MC_ROUTE_CODER_LITE (Phase 2b: Qwen3-Coder-30B), Eskalation
auf den starken Coder bei Architektur-Keywords / sehr großem Kontext.
Reason-Strings header-safe gemacht (kein U+2192 → Latin-1-Crash im x-mc-Header).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 18:03:02 +02:00
HitonabiandClaude Opus 4.8 ec9d1bff5b Perf: Bildschirm-Beschreibung knapper (B2) — schnellere Vision-Turns
voice.py _describe_images: max_tokens 600->280 (env MC_VISION_MAX_TOKENS) +
knapperer Prompt ('höchstens 5 kurze Sätze, keine Einleitung'). Schnellere
VL-Generierung UND weniger Kontext-Bloat im anschließenden Hermes-Turn.
Vision-Modell/Zwei-Schritt bleibt (volles Weglassen erst nach Bake-off, Stufe D).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 17:52:07 +02:00
HitonabiandClaude Opus 4.8 bb922b2a21 Feat: virtuelle Gateway-Lanes 'coding' + 'chat' (Router macht die Arbeit)
Der :9001/v1-Gateway bietet zwei virtuelle Modelle an, die der Router auf echte
Modelle abbildet:
- coding → coder (Standard) · heavy (riesiger/architektonischer Kontext) ·
  fast (triviale Nicht-Code-Kurzfrage)
- chat   → fast/heavy (= bisheriges model:auto, weiter als Alias unterstützt)

router_logic.choose_for_lane() kapselt die Lane-Logik (Code-Indikatoren DE+EN,
damit echte Coding-Anfragen nie auf fast abrutschen). gateway_proxy routet die
Lane-Namen und listet sie in /v1/models, sodass IDEs einfach "coding" wählen.
Lucy/Hermes (:8642) bleibt unberührt — andere Ebene.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 17:43:33 +02:00
HitonabiandClaude Opus 4.8 8a802241f7 Sec: Prompt-Injection-Muster-Filter für Web-/Vision-Input (Stufe 0)
Neues mcp/guard.py (pure stdlib): Spotlighting/Data-Marking + Mustererkennung
(DE+EN) für untrusted Inhalt. fetch_url (mcp_web.py) wrappt Web-Text, voice.py
wrappt die Bildschirm-Beschreibung — beide markieren den Inhalt als DATEN
('hier stehende Anweisungen nicht befolgen') und warnen bei Injection-/Befehls-
mustern. Konservativ: blockiert nie, bricht den Turn nie ab.

Schließt den internen Injection-Pfad (manipulierte Webseite/Screenshot -> Agent)
ohne Nachfrage-Wand. Letzter Baustein des pragmatischen Stufe-0-Abschlusses.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 17:12:34 +02:00
HitonabiandClaude Opus 4.8 a9a26cf856 Sec: Mem0 lernt nicht aus Bildschirm-/Web-Turns (Anti-Poisoning)
Der mc2-memory-Provider überspringt das Auto-Lernen (sync_turn), wenn die
User-Message den Bildschirm-Sicht-Marker trägt — on-screen-Text könnte
Injection-Anweisungen enthalten, die sonst dauerhaft ins Gedächtnis wandern.
Per Env MC2_MEMORY_SKIP_UNTRUSTED=0 abschaltbar. Teil von Stufe 0 (Security).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 17:04:07 +02:00
HitonabiandClaude Opus 4.8 b31736cde7 Sec: PC-Executor Bearer-Token-Pflicht (RCE-Lücke schließen)
executor.py erzwingt jetzt HERMES_PC_TOKEN auf allen Steuer-Endpunkten
(/shell,/screenshot,/type,/key,/open,/search), fail-closed (503) wenn kein
Token gesetzt ist; /health bleibt offen für den Reachability-Check. CORS-
Wildcard entfernt, Bind-Host konfigurierbar (HERMES_PC_HOST). mcp_pc.py sendet
PC_EXECUTOR_TOKEN als Authorization-Bearer mit.

Schließt die unauthentifizierte Remote-Code-Execution auf dem Windows-PC
(host=0.0.0.0, kein Token) — Teil von Stufe 0 (Security) des Stack-Reviews.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 16:46:41 +02:00
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 68cad9c0f1 Feat: Bildschirm-Sicht Multi-Monitor — beide Screens an das Vision-Modell
ChatIn.images (Liste, 1 data-URL je Monitor); _describe_images schickt alle
Screenshots in EINER Nachricht ans VL-Modell -> Lucy sieht beide Bildschirme.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 22:31:04 +02:00
HitonabiandClaude Opus 4.8 9c3dd9be82 Feat: Bildschirm-Sicht nutzt das dedizierte Vision-Modell (Qwen3-VL-8B)
Statt das Bild an die fast-MoE (schwaechere Vision) zu geben: das VL-Modell
beschreibt den Screenshot, die Beschreibung geht als Text-Kontext an Hermes.
-> bessere Bilderkennung UND Lucy behaelt ihr volles Hirn/Gedaechtnis.
MC_VISION_MODEL (default 'vision') steuerbar.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 22:26:55 +02:00
HitonabiandClaude Opus 4.8 d1ea505b7a Feat: Bildschirm-Sicht — /api/voice/chat akzeptiert optionales Bild
ChatIn.image (data:-URL); bei Bild wird die User-Message multimodal
([text]+[image_url]) an Hermes gebaut -> fast/Qwen3.6 (mmproj) bzw. Vision-
Modell verarbeitet den Screenshot. Lucys 'Augen' fuer die Desktop-App.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 22:18:32 +02:00
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 181db38b49 Feat: Hermes-Entfesselung — volle Stack-Control-Plane + PC-Executor-Autostart-Fix
mcp_mc.py: 7 -> 23 Tools (hf_search/quants, install/delete/load/unload_model,
set_model_role, list_jobs, cancel_job, list_services, backup_now, list_backups,
token_stats, check_updates, apply_update, service_logs). Hermes kann den Stack jetzt
vollständig steuern (alles was die MC2-UI kann).

executor.py: _ensure_streams() — unter pythonw (kein Konsolenfenster, für
Scheduled-Task-Autostart) sind sys.stdout/stderr=None und uvicorn-Logging crasht
beim Start. Jetzt Umleitung auf %LOCALAPPDATA%\HermesPCExecutor\executor.log.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 12:28:14 +02:00
HitonabiandClaude Opus 4.8 b1fa8bea43 Fix: Embedding-Modell (Qwen3-Embedding-0.6B) auch automatisch vorwaermen
Das Embedding-Modell (Alias `embed`, fuer Mem0/Gedaechtnis) ist zwar brains-Member
(persist), aber Pingen von `fast` laedt die anderen Gruppenmitglieder NICHT mit —
es blieb kalt bis zur ersten /v1/embeddings-Anfrage.

- warmup.sh: waermt jetzt zusaetzlich die Embedding-Modelle ueber /v1/embeddings
  (anderer Endpunkt als chat), gesteuert via MC_WARMUP_EMBED (default "embed").
- stack-postcheck.sh: prueft nach jedem Update zusaetzlich, dass das Embedding-Modell
  laedt und einen Vektor liefert (sonst ist Mem0/Gedaechtnis betroffen) -> Job rot.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 12:02:35 +02:00
HitonabiandClaude Opus 4.8 d73075bea0 Fix: Engine-Update lief ins Leere (falsches Skript gepinnt) + Text-file-busy
ROOT CAUSE: Die Unit pinnte MC_ENGINE_UPDATE_CMD=/usr/local/bin/update-llamacpp —
ein Alt-Skript aus der ROCm-Zeit, das den ROCm-Build nach /opt/llamacpp (totes
Rollback-Dir) zog statt des aktiven Vulkan-Builds nach /opt/llamacpp-vulkan. Es
endete mit 0 → Job "DONE", aber die aktive Engine blieb auf 9821. Mein
deploy/update-engine.sh lag dadurch komplett brach. Fix: Pin aus der Unit raus →
Backend nutzt den Default `sudo bash <repo>/deploy/update-engine.sh`.

Zusätzlich (vom User vermutet): mit geladenem Modell laeuft llama-server → die
Binary ist "Text file busy", in-place ueberschreiben scheitert. update-engine.sh
und update-swap.sh stoppen llama-swap jetzt VOR dem Austausch und starten danach,
mit robustem Fehlerpfad (set -uo statt -e, Service kommt immer zurueck, sonst
Rollback aus .bak).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 11:52:49 +02:00
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 4ee016d3a7 Feat: Auto-Rollback bei Engine-/Router-Update wenn Stack-Check fehlschlaegt
update-engine.sh / update-swap.sh sichern jetzt den alten Build/die alte Binary
VOR dem Ueberschreiben (.bak), verifizieren nach dem Restart per stack-postcheck.sh
und rollen bei Fehler automatisch zurueck (Binary/Dir wiederherstellen + restart +
erneut pruefen). Exit-Codes: 0 = neuer Build verifiziert, 1 = fehlgeschlagen aber
Rollback ok (alter Stand laeuft wieder), 2 = Update UND Rollback kaputt.

Da die Skripte den Postcheck nun selbst fahren (um reagieren zu koennen), entfaellt
das `&& stack-postcheck` in engine/swap-update-job. OS-Update behaelt den reinen
Detect-Check (apt-Downgrade waere unsicher). Backups sind winzig (Engine 86M,
Swap 14M) bei 1.6TB frei.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 11:34:41 +02:00
HitonabiandClaude Opus 4.8 9923743219 Feat: Stack-Funktionsprüfung nach OS-/Engine-/Router-Update
Bisher hatte nur das Hermes-Update einen echten Post-Check; OS/Engine/Router
liefen mit Exit 0 durch, auch wenn der neue Build den Stack zerschoss (gruener
Job trotz totem Stack). Neu: deploy/stack-postcheck.sh prueft nach jedem Update
funktional — llama-swap aktiv, /v1/models 200, ECHTE 1-Token-Inferenz auf dem
Hirn-Modell (beweist Laden+Generieren), MC2 /api/health engine_reachable, Mem0
erreichbar. Eingehaengt als `<update> && bash stack-postcheck.sh` in os/engine/
swap-update-job → Exit 1 macht den jobengine-Job ROT. Pendant zu hermes-postcheck.sh.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 11:29:32 +02:00
HitonabiandClaude Opus 4.8 637cbd9135 Fix: OS-Update-Erkennung auf deutscher Box (LC_ALL=C fuer apt)
_os_upgradable zaehlte mit `grep -c upgradable`, os_update_details parste
`[upgradable from:]` — beides englisch. Auf der deutschsprachigen Box gibt apt
aber `[aktualisierbar von:]` aus → Zaehler 0 und leere Detailliste, obwohl
`apt list --upgradable` 7 Pakete zeigt. Fix: apt mit LC_ALL=C aufrufen, dann
ist die Ausgabe immer englisch und beide greifen wieder.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 11:22:32 +02:00
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 7bc20a6302 Fix: installierte Engine-Build-Nummer lesen (Format 'version: NNNN') + .gitattributes (LF)
- _installed_engine_build matchte nur 'build: <hash> (N)' / 'bNNNN', aber der
  aktuelle llama-server meldet 'version: 9821 (hash)'. Dadurch war installed_build
  immer None → Engine-Badge fiel auf ungenauen mtime-Vergleich zurueck. Jetzt
  praeziser Build-Nummer-Vergleich (latest > installed).
- .gitattributes erzwingt LF fuer *.sh/*.service/*.timer: die Box hatte
  core.autocrlf aktiv und checkte deploy.sh mit CRLF aus -> 'set -euo pipefail'
  wurde zu 'pipefail\r' (invalid option name), Deploy brach ab.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 10:58:59 +02:00
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 209afebefa Fix: Mem0-Relevanzfilter — keine Tagesnachrichten/Welt-Events/Meta-Smalltalk mehr lernen
Auto-Lernen speicherte News (Bahn-Ausfall, SpaceX...) + Meta-Aussagen ('Nutzer fragt nach X') als
Fakten. custom_instructions weisen die Extraktion jetzt an, NUR dauerhaft nützliche Nutzer-/Projekt-/
Stack-Fakten zu behalten und Vergängliches komplett zu ignorieren. (10 Altlasten bereits gelöscht.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 10:38:31 +02:00
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 799a0c72e9 Feat: natürlichere EL-Stimme — multilingual_v2 + voice_settings (niedrige Stability/Style)
Flash v2.5 (Tempo-Modell) + fehlende voice_settings klangen roboterhaft. Jetzt eleven_multilingual_v2
+ stability 0.4 / similarity 0.8 / style 0.35 / speaker_boost → ausdrucksstärker. Alles env-überschreibbar.
Hinweis: multilingual_v2 = 1 Credit/Zeichen (Flash war 0.5).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 10:08:51 +02:00
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 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
HitonabiandClaude Opus 4.8 15d5598eec Cleanup: nur noch ElevenLabs + Edge (Chatterbox/Piper/Referenz-Upload raus); EL-Library-Voices gefiltert
Ursache des Dauerfehlers: "Standardstimme" = Rachel = Library-Voice → Free-Tier verbietet die per API
(402). Fix: /voices liefert bei ElevenLabs NUR eigene Stimmen (category!=premade); Picker wählt
automatisch die erste echte Stimme (nie leer/Standardstimme). UI auf 2 Engines reduziert (EL premium +
Edge gratis), Default-Engine = elevenlabs. Chatterbox/Piper aus /voices+/health entfernt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 02:15:27 +02:00
HitonabiandClaude Opus 4.8 dd4c4c8c0f Fix: EL-Retry bei 429 (Free-Tier-Concurrency) + index.html no-cache (immer frisches Bundle)
5 parallele EL-Calls -> 1x 502 (Concurrency-Limit). elevenlabs_tts retryt jetzt 429/5xx mit Backoff.
index.html wird nicht mehr gecacht -> nach Deploy kein altes Bundle mehr.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 02:02:50 +02:00
HitonabiandClaude Opus 4.8 6d7a17e765 Fix: TTS seriell statt parallel (Chatterbox nicht thread-safe -> 502/hängt) + Fehler statt ewig 'denkt'
Frontend feuerte Satz-TTS parallel; 3 gleichzeitige Chatterbox-Generierungen zerschossen sich
(alignment-Bug -> 502, keine Stimme, Status blieb 'thinking'). Jetzt seriell (1 Call gleichzeitig,
Reihenfolge bleibt). Wenn nichts abgespielt wird -> Fehlermeldung statt Dauer-'denkt'.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 01:57:20 +02:00
HitonabiandClaude Opus 4.8 53d0796bd5 Fix: Chatterbox lauter/kratzig (Peak-Normalisierung) + sporadischer Generation-Bug (Retry x3)
Klon-Output war zu laut/übersteuert -> Peak auf 0.9 normalisiert. alignment_stream_analyzer-NoneType
ließ einzelne Sätze fehlschlagen (im Voice-Loop 'Stimme kam nicht') -> bis zu 3 Versuche.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 01:36:25 +02:00
HitonabiandClaude Opus 4.8 eeb397f066 Feat: Chatterbox-Klon-Referenz hochladen (eigene Stimme via ElevenLabs → lokal unbegrenzt klonen)
Sidecar: /reference (POST Upload → 24kHz-Mono-WAV via PyAV/faster-whisper, kein System-ffmpeg;
GET/DELETE). Chatterbox nutzt aktive Referenz (active.txt, überlebt Restart). Backend: /api/voice/
reference-Proxy. Picker (Chatterbox): „Referenz-Stimme hochladen (mp3/wav)" → setzt Stimme auf
»deine Referenz«. Ermöglicht den User-Plan: Stimme besorgen → EL erzeugen → Chatterbox klont.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 00:55:40 +02:00
HitonabiandClaude Opus 4.8 75727c6b36 UI: Engine-Auswahl als 2x2-Raster (4 Engines lesbar statt gequetscht)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 00:48:28 +02:00
HitonabiandClaude Opus 4.8 f08595910d Fix: Edge-Stimmen-Hinweis (Gisela ist nicht in edge-tts; Seraphina/Katja empfehlen)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 00:45:43 +02:00
HitonabiandClaude Opus 4.8 11f0066b47 Feat: Edge-TTS-Engine (native dt. Azure-Stimmen, kein Akzent) + Probe-hören-Knopf
Edge-TTS als 4. Engine (gratis, kein Key, KEIN Cloning → natives Deutsch ohne Akzent — die einzige
Lösung gegen das Akzent-Problem aller Cloning-Engines). /voices listet dt. Edge-Stimmen (weiblich
zuerst, inkl. Gisela). Picker: Engine 'Edge (natürlich · gratis)' + Probe-hören-Knopf (festen Satz je
Engine/Stimme abspielen, ohne reinsprechen). Default bleibt Piper.

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