docs+install: vollständiger Installer + aktuelle README

Mac-Worker:
- install-launchagent.sh legt jetzt selbst venv + Dependencies an, statt
  das vorauszusetzen — ein Befehl reicht für komplette Erstinstallation
- modernes launchctl bootout/bootstrap/kickstart statt unload/load
  (alte Variante wirft auf neueren macOS-Versionen "Input/output error 5")
- neuer Sub-Befehl "restart" zum Neustarten ohne Reinstall
- neues update.sh: git pull + pip install + kickstart + Health in einem Schritt

LXC:
- install.sh ALLOWED_EXTS-Check verhindert wiederholtes ",webm"-Anhängen
- bessere Abschluss-Ausgabe mit echter Host-IP, Update-Anweisung, Diagnose-Hinweis

Docs:
- Haupt-README: aktueller Funktionsstand (Auth, PDF, Profile, Mobile/PWA,
  Diagnose, Retry alle als done markiert), Installation auf neuen Stand gebracht
- Profile-Tabelle mit allen 17 Profilen
- API-Listen vervollständigt (diag, preload, log, pdf, profiles)
- Datenfluss-Skizze mit Preload + Heartbeat + X-Job-Id beschrieben

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
root
2026-05-14 20:36:35 +00:00
co-authored by Claude Opus 4.7
parent f408a555f8
commit bc497a1665
6 changed files with 390 additions and 174 deletions
+14 -5
View File
@@ -33,9 +33,10 @@ uvicorn app.main:app --reload --port 8000
| GET / POST / DELETE | `/api/admin/users[...]` | User-Verwaltung (admin) |
| POST | `/api/jobs` | multipart: `audio`, `title`, `profile` → Job anlegen |
| GET | `/api/jobs` | Liste aller Jobs (Owner-gefiltert; Admin sieht alle) |
| GET | `/api/jobs/{id}` | Job-Detail |
| GET | `/api/jobs/{id}` | Job-Detail (inkl. `step_started_at`, `last_heartbeat_at`) |
| GET | `/api/jobs/{id}/diag` | Diagnose-Bündel: Stage-Sekunden + Mac-Worker-Log |
| POST | `/api/jobs/{id}/retry` | Verarbeitung neu anstoßen (Transkript bleibt) |
| GET | `/api/jobs/{id}/download/{kind}` | `kind` ∈ `docx`, `transcript`, `summary`, `protocol` |
| GET | `/api/jobs/{id}/download/{kind}` | `kind` ∈ `pdf`, `docx`, `transcript`, `summary`, `protocol` |
## Benutzer- und Passwort-Verwaltung per CLI
@@ -80,10 +81,18 @@ Danach im Browser direkt einloggen.
## Datenfluss
```
Upload → SQLite-Job → BackgroundTask
Upload → SQLite-Job → BackgroundTask (idempotent)
→ Mac: /api/transcribe (multipart)
→ Mac: /api/summarize (JSON)
→ Mac: /api/protocol (JSON)
→ Mac: /api/preload (Modell ins RAM ziehen, vor Summarize)
→ Mac: /api/summarize (JSON)
→ Mac: /api/protocol (JSON)
→ Mac: /api/export/docx (JSON) → DOCX
→ Mac: /api/export/pdf (JSON) → PDF
→ Ergebnisse landen in /var/lib/voice-agent/results/{job_id}/
```
Während laufender Mac-Calls pingt ein Heartbeat alle 3 s `last_heartbeat_at`.
Bei `RemoteProtocolError` / `ConnectError` retried der MacClient einmal automatisch
mit 3 s Backoff. Jeder Mac-Call trägt einen `X-Job-Id`-Header — der Mac-Worker
sammelt damit pro Job einen Log-Ringbuffer (200 Zeilen, 1 h TTL), den
`/api/jobs/{id}/diag` für die UI bündelt.