doku: Stand main 75611be nachgezogen (Phase 2a, Waechter-Fixes)
- STACK.md: Instanz-Rolle box, Partner noch nicht eingerichtet; 62 /api-Routen; Waechter prueft
die Partner-Instanz, sobald es sie gibt.
- OFFENE-FAEDEN.md: Phase 2 begonnen (2a auf main: backend/kern/, /api/partner,
Partner-Pruefung, Telegram-Zweitweg); die Homelab-Instanz selbst in Phase 3 (User-OK).
Punkt "Waechter prueft die schlafende Spracherkennung" gestrichen - auf main behoben (99ba6a7).
- VERDIKTE.md: eine Codebasis, zwei Rollen (MC_ROLLE); zweiter Weg zu Telegram direkt ueber die
Bot-API.
- FALLEN.md: schlafgelegte Dienste auch in den HTTP-Proben ausnehmen (Fehlalarm 24.09. 14:56).
- ARBEITSWEISE.md, README.md: Homelab-Instanz ab Phase 3, Partner-Pruefung "sobald eingerichtet".
Pruefungen: git grep auf Altbegriffe ausserhalb docs/archiv trifft nur noch die Tabelle
"Ueberholt (mit Datum)" in VERDIKTE.md; 0 tote Links in 15 Dateien; keine zerrissenen Tabellen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
424aaada27
commit
45048c60b7
@@ -27,8 +27,9 @@ Anleitung für den Alltag: [docs/BEDIENUNG.md](docs/BEDIENUNG.md).
|
||||
|
||||
## Was von allein läuft
|
||||
|
||||
- **Wächter** (jede Minute): Dienste, Timer, Hermes-Jobs, Kern, Platte, festgehaltene Updates und die
|
||||
Partner-Instanz. Abgestürzte Dienste startet er selbst neu (höchstens 2× je Stunde), Rotes meldet er per Telegram.
|
||||
- **Wächter** (jede Minute): Dienste, Timer, Hermes-Jobs, Kern, Platte, festgehaltene Updates und, sobald
|
||||
eingerichtet, die Partner-Instanz. Abgestürzte Dienste startet er selbst neu (höchstens 2× je Stunde), Rotes meldet
|
||||
er per Telegram.
|
||||
- **Updates** sonntags 04:30: llama-swap → Motor → Hermes, danach Prüfung; rot → zurück und festhalten. Die Box
|
||||
startet nur sonntags zwischen 04:00 und 06:59 neu.
|
||||
- **Modell-Radar** nachts 00:30–02:30: sucht Kandidaten für Hirn und Coder und testet höchstens einen pro Woche;
|
||||
|
||||
@@ -44,7 +44,7 @@ Agenten-Fundament darunter (Quelle tabu) · Telegram = mobil melden · OpenChamb
|
||||
| Fläche | Ort | Gehört hierhin | Gehört nicht hierhin |
|
||||
|---|---|---|---|
|
||||
| **Box-Wart** (MC2) | dieses Repo, `:9001` | Updates, Wächter-Hinweise, Modelle, Radar, Aufräumen, Dienste und Protokolle, Sicherungen, Einstellungen | ein Chat- oder Gesprächsfenster |
|
||||
| **Homelab-Teil** (ab Phase 2) | gleiche Software als Container auf dem Proxmox-PC | Homelab-Geräte, deren Updates per Knopf, Erreichbarkeit | Dinge der KI-Box (die bleiben beim Box-Wart) |
|
||||
| **Homelab-Teil** (eigene Instanz ab Phase 3) | gleiche Software als Container auf dem Proxmox-PC, Rolle `homelab` | Homelab-Geräte, deren Updates per Knopf, Erreichbarkeit | Dinge der KI-Box (die bleiben beim Box-Wart) |
|
||||
| **Lucy** (Desktop-App) | Repo `F:\Coding Stuff\lucy` (Electron) | Sprache, Gespräch, proaktive Meldungen aus dem Briefkasten | Verwaltungs- und Update-Knöpfe |
|
||||
| **Hermes** (Agent „Lucy" auf der Box) | `~/.hermes/` | Verhalten über `config.yaml`, `SOUL.md`, Skills, Plugins, MCP-Server | Änderungen am Quellcode in `~/.hermes/hermes-agent/` |
|
||||
| **Telegram** | Hermes-Plattform | Meldungen empfangen, mit Lucy schreiben | eigene Oberflächen |
|
||||
|
||||
@@ -58,6 +58,9 @@ und Symptom; Erledigtes streichen (die Git-Historie behält es)._
|
||||
- **Die Box ist deutschsprachig (de_DE):** Parser von CLI-Ausgaben brauchen `LC_ALL=C` (apt sagt sonst
|
||||
„aktualisierbar von:").
|
||||
- **`pkill -f` über SSH trifft die eigene Remote-Shell** → Muster klammern (`'[g]en…'`).
|
||||
- **Wer einen Dienst schlafen legt, prüft alle Proben, die ihn abfragen (24.09.).** Nach dem Abschalten der
|
||||
Spracherkennung meldete die Kern-Probe des Wächters um 14:56 „Der Hör-Dienst antwortet nicht" samt Telegram
|
||||
(Fehlalarm). Die Probe läuft seitdem nur, wenn der Dienst nicht schläft.
|
||||
- **Einmal-Dienste hinter Timern fallen still aus (07.–23.09.):** `projekte-sync` scheiterte 16 Tage lang stündlich an
|
||||
einem leeren Gitea-Repo, niemand merkte es. Seit 23.09. meldet der Wächter gescheiterte Timer-Läufe.
|
||||
|
||||
|
||||
@@ -6,16 +6,18 @@ _Stand 24.09.2026. Neues hier rein, Erledigtes raus (die Git-Historie behält es
|
||||
|
||||
## Fahrplan zum Homelab Orchestrator (Plan vom 24.09.2026)
|
||||
|
||||
Phase 1 läuft: Box-Diät, Backend, Deploy mit Prüftor und Rückweg und das Sonntags-Update als Timer sind live
|
||||
(`main` = `4cd856b`). Offen sind die Oberfläche (Branch `wartung/phase1d-frontend`) und die Doku (Branch
|
||||
`doku/phase1e-neuordnung`).
|
||||
Phase 1 läuft: Box-Diät, Backend, Deploy mit Prüftor und Rückweg und das Sonntags-Update als Timer sind live.
|
||||
Offen sind die Oberfläche (Branch `wartung/phase1d-frontend`) und die Doku (Branch `doku/phase1e-neuordnung`).
|
||||
Phase 2 hat begonnen: Teil 2a (Kern für zwei Instanzen mit Rollen `box`/`homelab`, Partner-Aufsicht,
|
||||
Telegram-Zweitweg, eine Zeitzone) liegt auf `main` (`75611be`). Die Homelab-Instanz selbst wird erst in Phase 3
|
||||
eingerichtet und braucht ein User-OK.
|
||||
|
||||
| Phase | Inhalt | Abnahme | Stand |
|
||||
|---|---|---|---|
|
||||
| 0 · Sofort | Nachtmeldungen sammeln und um 07:00 schicken, Dringendes sofort; Sicherung mit Lucys Gedächtnis, `SOUL.md`, Skills, Cron-Skripten und Box-Wart-Zustand; Token-Datei aus dem Repo; Git aufgeräumt | Testmeldung nachts landet in der 07:00-Meldung, dringende kommt sofort; Sicherung enthält das Gedächtnis; auf Gitea nur `main` und Archiv-Tags | erledigt 24.09. |
|
||||
| 1 · Box-Wart 1.0 | Ballast raus (tote Routen, Module, Deploy-Dateien, Skills); Konsole, Spracherkennung, PC-Fernsteuerung, Embedding und Reranker schlafen; riskante Stellen behoben; Deploy mit Rückweg und Prüftor; Sonntags-Update als Timer; Oberfläche; Doku neu | alle Prüfläufe grün, keine toten Routen; ein absichtlich kaputter Deploy rollt sich selbst zurück; Sonntags-Update ohne Hermes-Hänger; Doku beschreibt den Box-Wart | läuft (Oberfläche, Doku offen) |
|
||||
| 2 · Kern und zweite Instanz | zentrales Einstellungs-Objekt, SQLite, Worker mit Job-Engine, Adapter-Schnittstelle mit der Box als erstem Adapter; Oberfläche „Homelab Orchestrator" mit den Bereichen Box-Wart und Homelab; Container auf dem Proxmox-PC (nach User-OK), beide Instanzen prüfen sich gegenseitig | Box-Wart verhält sich wie vorher (Tests); ein Update-Lauf überlebt einen Neustart; stoppt eine Instanz, meldet die andere es auf Telegram | offen |
|
||||
| 3 · Homelab sehen | Proxmox-API mit Leseschlüssel (nach User-OK); Inventar: Host, 6 Container, Arcane-VM mit Docker; offene Updates je Gerät (Host-Pakete per Proxmox-Webhook, App-Versionen, Arcane-API); Erreichbarkeit je Dienst; Anzeige „Rückweg: Snapshot oder Backup"; neue Container per Etikett | Übersicht zeigt alle 8 Geräte mit Update-Stand; ein gestoppter Dienst erzeugt einen Hinweis | offen |
|
||||
| 2 · Kern und zweite Instanz | zentrales Einstellungs-Objekt, SQLite, Worker mit Job-Engine, Adapter-Schnittstelle mit der Box als erstem Adapter; Oberfläche „Homelab Orchestrator" mit den Bereichen Box-Wart und Homelab; beide Instanzen prüfen sich gegenseitig | Box-Wart verhält sich wie vorher (Tests); ein Update-Lauf überlebt einen Neustart; stoppt eine Instanz, meldet die andere es auf Telegram | begonnen: 2a auf `main` (`backend/kern/`, `/api/partner`, Partner-Prüfung im Wächter, Telegram-Zweitweg) |
|
||||
| 3 · Homelab sehen | Homelab-Instanz als Container auf dem Proxmox-PC (nach User-OK); Proxmox-API mit Leseschlüssel (nach User-OK); Inventar: Host, 6 Container, Arcane-VM mit Docker; offene Updates je Gerät (Host-Pakete per Proxmox-Webhook, App-Versionen, Arcane-API); Erreichbarkeit je Dienst; Anzeige „Rückweg: Snapshot oder Backup"; neue Container per Etikett | Übersicht zeigt alle 8 Geräte mit Update-Stand; ein gestoppter Dienst erzeugt einen Hinweis | offen |
|
||||
| 4 · Jetzt updaten | Ausführer auf dem Proxmox-Host (nach User-OK) für Etikett `community-script` oder `watcher`, ohne `watcher-aus`; Knopf je Gerät: Snapshot, Update, Erreichbarkeits-Check, Erfolgsmeldung; rot → zurückrollen und melden; PBS mit Backup statt Snapshot; Host-Updates mit Warnung, Neustart getrennt; Docker über Arcane, zuerst als Probelauf | ein Update mit absichtlich rotem Check rollt sich selbst zurück und meldet es; nach einem Host-Neustart meldet die KI-Box, dass alles wieder läuft | offen |
|
||||
| 5 · Android-App | Push, Cockpit und Übersicht, Updates unterwegs freigeben, Lucy per Sprache mit Live-Modus; weckt Spracherkennung und Stimme | wird zu Beginn der Phase festgelegt | offen, eigenes Projekt |
|
||||
|
||||
@@ -23,39 +25,35 @@ Hintergrund zur Homelab-Technik: [ARCHITEKTUR.md](../ARCHITEKTUR.md), Abschnitt
|
||||
|
||||
## Offene Einzelpunkte (Box-Wart)
|
||||
|
||||
1. **Der Wächter prüft die schlafende Spracherkennung weiter.** `pruefe_kern()` in
|
||||
`backend/services/waechter.py` fragt `voice-service` (`:8650/health`) ohne Schlaf-Ausnahme ab. Solange der Dienst
|
||||
schläft, ist ein roter Hinweis „Der Hör-Dienst antwortet nicht" samt Telegram-Meldung zu erwarten. Auf der Box
|
||||
prüfen, dann die Probe an `schlaeft()` koppeln.
|
||||
2. **Ein Modelltausch schreibt die llama-swap-Config mehrfach.** „Übernehmen" im Radar trägt das Modell unter einer
|
||||
1. **Ein Modelltausch schreibt die llama-swap-Config mehrfach.** „Übernehmen" im Radar trägt das Modell unter einer
|
||||
Sperre ein; Hirn-Umstellung, Aliase `fast`/`heavy` und ttl folgen als eigene Schreibvorgänge. Jeder lädt
|
||||
llama-swap neu und entlädt alle Modelle. Ziel: ein Schreibvorgang je Tausch.
|
||||
3. **Jobs überleben noch keinen MC2-Neustart.** Update- und Download-Jobs sind Kindprozesse von MC2; `deploy.sh`
|
||||
2. **Jobs überleben noch keinen MC2-Neustart.** Update- und Download-Jobs sind Kindprozesse von MC2; `deploy.sh`
|
||||
verschiebt deshalb. Verschwindet der Hermes-Job, wartet `autoupdate.sh` 20 Minuten und geht dann in
|
||||
Selbstreparatur und Rückweg. Lösung in Phase 2 (Worker).
|
||||
4. **Session-Token des Hermes-Dashboards (nur mit User-Ja).** Das Drop-in
|
||||
3. **Session-Token des Hermes-Dashboards (nur mit User-Ja).** Das Drop-in
|
||||
`hermes-builtin-ui.service.d/session-token.conf` aus der früheren Desktop-Anbindung ist weiter gesetzt; `backup.sh`
|
||||
und `restore.sh` sichern es samt Kopie `desktop-gateway-token`. Entfernen ist Security-Config.
|
||||
5. **Rote Wächter-Hinweise warten nachts bis 07:00.** Der Wächter meldet mit Betreff „[Box-Problem]" ohne `-d`; zwischen
|
||||
4. **Rote Wächter-Hinweise warten nachts bis 07:00.** Der Wächter meldet mit Betreff „[Box-Problem]" ohne `-d`; zwischen
|
||||
00:00 und 06:59 landet das in der Morgenmeldung. Klären, ob Rot sofort raus soll.
|
||||
6. **Die gekürzte Morgenmeldung verweist auf „Cockpit unter Meldungen".** Diesen Bereich gibt es nicht. Der volle
|
||||
5. **Die gekürzte Morgenmeldung verweist auf „Cockpit unter Meldungen".** Diesen Bereich gibt es nicht. Der volle
|
||||
Stapel liegt in `~/.hermes/night-queue.txt.zuletzt-gesendet`, jede Meldung zusätzlich in Lucys Briefkasten.
|
||||
7. **Code verweist auf verschobene Doku:** `deploy/mc2-backup.service` (`Documentation=` auf `docs/BACKUP.md`),
|
||||
6. **Code verweist auf verschobene Doku:** `deploy/mc2-backup.service` (`Documentation=` auf `docs/BACKUP.md`),
|
||||
`backend/services/backup.py` (`docs/BACKUP.md`), `backend/services/maintenance.py` (`docs/BEDIENUNG.md`,
|
||||
sudoers-Hinweis), `backend/services/agent.py` (`docs/HERMES_SETUP.md`), `backend/services/llamaswap.py`
|
||||
(`docs/OPTIMIZATION_PLAN.md`). Beim nächsten Code-Commit auf `docs/BETRIEB.md`, `docs/ARCHITEKTUR.md` bzw.
|
||||
das Archiv umstellen.
|
||||
8. **Oberfläche (Phase 1d):** Updates-Seite mit Urteil und Paketliste, ehrliche Lade- und Fehlerzustände, Rückfragen,
|
||||
7. **Oberfläche (Phase 1d):** Updates-Seite mit Urteil und Paketliste, ehrliche Lade- und Fehlerzustände, Rückfragen,
|
||||
Aufträge aller Gruppen. Heute erscheinen Downloads nicht unter „Updates", obwohl die Modellsuche das ankündigt.
|
||||
9. **Units nur auf der Box:** `hermes-builtin-ui.service` samt Drop-ins und die llama-swap-Drop-ins (darunter
|
||||
8. **Units nur auf der Box:** `hermes-builtin-ui.service` samt Drop-ins und die llama-swap-Drop-ins (darunter
|
||||
`warmset.conf`) liegen nicht im Repo; seit 24.09. stehen sie als Kopie in jeder Sicherung.
|
||||
10. **Ungepinnte Abhängigkeiten:** `backend/requirements.txt` nur mit `>=`, jeder Deploy zieht die neueste Version.
|
||||
9. **Ungepinnte Abhängigkeiten:** `backend/requirements.txt` nur mit `>=`, jeder Deploy zieht die neueste Version.
|
||||
Was nachweislich zusammen lief, steht in `known-good/` jeder Sicherung.
|
||||
11. **Der Wächter hält das Hirn für bereit, sobald irgendein Modell läuft** (`pruefe_kern()`). Ein abgestürztes Hirn
|
||||
10. **Der Wächter hält das Hirn für bereit, sobald irgendein Modell läuft** (`pruefe_kern()`). Ein abgestürztes Hirn
|
||||
neben einem geladenen Coder bliebe unbemerkt. Klären, ob gewollt.
|
||||
12. **Radar „Jetzt suchen" läuft synchron** und kann Minuten dauern; `POST /api/models/{id}/load` meldet `ok`, egal
|
||||
11. **Radar „Jetzt suchen" läuft synchron** und kann Minuten dauern; `POST /api/models/{id}/load` meldet `ok`, egal
|
||||
was die Engine antwortet.
|
||||
13. **Kleinkram im Code:** `mcp/mcp_mc.py` (MCP aus) ruft die nie vorhandene Route `/api/routing/route`;
|
||||
12. **Kleinkram im Code:** `mcp/mcp_mc.py` (MCP aus) ruft die nie vorhandene Route `/api/routing/route`;
|
||||
`hermes-postcheck.sh` warnt bei jedem Lauf über den entfernten Patch-Träger; `voice_service/app.py` nennt
|
||||
faster-whisper statt Parakeet; `.aiexclude` gilt nur Antigravity.
|
||||
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
# Stack-Wahrheiten — Maschinen, Dienste, Modelle, Automatik
|
||||
|
||||
_Stand 24.09.2026. Quellen: Code in `main` (`4cd856b`: Units, `deploy/llama-swap.config.yaml`, Skripte)
|
||||
_Stand 24.09.2026. Quellen: Code in `main` (`75611be`: Units, `deploy/llama-swap.config.yaml`, Skripte)
|
||||
und die Prüfberichte vom 24.09.2026 (live auf der Box gelesen). Bei Widerspruch zu anderen Dokumenten
|
||||
gewinnt diese Datei. Wer sie ändert: erst messen, dann schreiben, Datum dazu._
|
||||
|
||||
Instanzen: Auf der KI-Box läuft der Homelab Orchestrator in der Rolle `box` (Standard von `MC_ROLLE`, Anzeigename
|
||||
„Box-Wart"). Die zweite Instanz (Rolle `homelab`, Container auf dem Proxmox-PC) ist noch nicht eingerichtet;
|
||||
`MC_PARTNER_URL` ist deshalb nicht gesetzt.
|
||||
|
||||
## Maschinen und Zugänge
|
||||
|
||||
| Was | Wo | Stand |
|
||||
@@ -27,7 +31,7 @@ gewinnt diese Datei. Wer sie ändert: erst messen, dann schreiben, Datum dazu._
|
||||
| Unit | Art | Port | Aufgabe | 24.09. |
|
||||
|---|---|---|---|---|
|
||||
| `llama-swap` | System | `:8080` | Modell-Router, startet je Modell einen `llama-server` (Vulkan, `/opt/llamacpp-vulkan`), liest die Config mit `--watch-config` | läuft |
|
||||
| `mission-control-2` | User | `:9001` | Box-Wart: Oberfläche, 60 `/api`-Routen, `/v1`-Weiterleitung, `/hermes-ui/`, Erinnerungen | läuft |
|
||||
| `mission-control-2` | User | `:9001` | Box-Wart: Oberfläche, 62 `/api`-Routen (davon 2 für die Partner-Instanz), `/v1`-Weiterleitung, `/hermes-ui/`, Erinnerungen | läuft |
|
||||
| `mc2-gateway` | User | `127.0.0.1:9010` | `/v1`-Datenpfad: `model: auto`, Bild-Weiche | läuft |
|
||||
| `mc2-steward` | User | – | Wächter und Re-Warm (hält das Hirn geladen) | läuft |
|
||||
| `hermes-gateway` | User | `:8642` | Hermes Agent „Lucy", Telegram | läuft |
|
||||
@@ -103,7 +107,7 @@ Config: `/etc/llama-swap/config.yaml` ist die lebende Wahrheit (Oberfläche und
|
||||
|
||||
| Wann | Was | Wie | Details |
|
||||
|---|---|---|---|
|
||||
| jede Minute | Wächter: Dienste, Timer, Hermes-Jobs, Kern, Platte, festgehaltene Updates | `mc2-steward` | [BETRIEB.md](../BETRIEB.md) |
|
||||
| jede Minute | Wächter: Dienste, Timer, Hermes-Jobs, Kern, Platte, festgehaltene Updates, Partner-Instanz (sobald eingerichtet) | `mc2-steward` | [BETRIEB.md](../BETRIEB.md) |
|
||||
| alle 90 s | Re-Warm: lädt das Hirn nach, wenn nichts geladen ist | `mc2-steward` | [ARCHITEKTUR.md](../ARCHITEKTUR.md) |
|
||||
| stündlich (+≤5 min) | `projekte-sync`: `~/projekte` mit Gitea abgleichen (nur fast-forward) | Timer | [BETRIEB.md](../BETRIEB.md) |
|
||||
| 00:30 | Modell-Radar: Suche (≤1× am Tag), Test im Fenster 00:30–02:30 | `mc2-radar.timer` | [RADAR.md](../RADAR.md) |
|
||||
|
||||
@@ -14,7 +14,8 @@ oder einen User-Entscheid (siehe [ARBEITSWEISE.md](ARBEITSWEISE.md)). Abgelöste
|
||||
[OFFENE-FAEDEN.md](OFFENE-FAEDEN.md)). Einen Neubau („MC3") hatte der User schon am 03.07. verworfen.
|
||||
- **Homelab Orchestrator (24.09.):** zwei Instanzen, eine Oberfläche. Der Box-Wart bleibt auf der KI-Box, der
|
||||
Homelab-Teil läuft als Container auf dem Proxmox-PC, beide prüfen sich gegenseitig. „Box-Wart" bleibt der
|
||||
Name des Bereichs für die KI-Box.
|
||||
Name des Bereichs für die KI-Box, „Homelab" der für den Proxmox-PC. Beide Instanzen laufen mit derselben
|
||||
Codebasis, unterschieden durch `MC_ROLLE` (`box` oder `homelab`).
|
||||
- **Homelab-Umfang und Rechte (24.09.):** Proxmox-Host, 6 Container, Arcane mit Docker, KI-Box, nichts weiter.
|
||||
Proxmox nur über eine Lese-API und einen kleinen Ausführer auf dem Host. Dabei ist, was das Etikett
|
||||
`community-script` oder `watcher` trägt; `watcher-aus` nimmt ein Gerät aus. Schlüssel und Ausführer erst nach
|
||||
@@ -45,6 +46,8 @@ oder einen User-Entscheid (siehe [ARBEITSWEISE.md](ARBEITSWEISE.md)). Abgelöste
|
||||
- **Neustart der Box nur im Wartungsfenster So 04:00–06:59 (24.09.).** `MC_AUTOUPDATE_REBOOT_JETZT=1` erzwingt ihn.
|
||||
- **Nachtruhe für Meldungen (24.09.):** `notify.sh` sammelt 00:00–06:59, um 07:00 kommt eine Morgenmeldung.
|
||||
Dringendes geht sofort raus.
|
||||
- **Zweiter Weg zu Telegram (24.09.):** Scheitert `hermes send`, schickt `notify.sh` direkt an die Telegram-Bot-API.
|
||||
Hermes kann selbst ausfallen, und die Homelab-Instanz hat kein Hermes.
|
||||
- **Deploy zweistufig mit Prüftor und Rückweg (24.09.):** `deploy/pruefen.sh` ersetzt die CI-Ampel.
|
||||
- **llama-swap-Config (24.09.):** Die lebende Datei `/etc/llama-swap/config.yaml` ist die Wahrheit. Der Repo-Abzug
|
||||
überschreibt sie nur, wenn er sich im selben Deploy geändert hat. Geschrieben wird nur unter der Config-Sperre.
|
||||
|
||||
Reference in New Issue
Block a user