feat(agent): add test frontend and Docker stack

This commit is contained in:
2026-09-16 21:42:05 +02:00
parent c8b55fbd38
commit 4f5107a46a
16 changed files with 1065 additions and 71 deletions
+29 -5
View File
@@ -5,10 +5,10 @@ Rollender Übergabe-Log für agent-Threads. Workflow: `.agents/SKILL.md`
## Current focus
API-first-Festigung (D19): Der eigenständige Wissensdienst erhält einen
versionierten, authentisierbaren v1-Vertrag und eine explizite Privacy-Grenze.
Als Nächstes folgt der dünne Odoo-Client; Lohndaten bleiben bis zum separaten
tenant-autorisierten Datenvertrag außerhalb der Agenten-API.
Der Docker-Compose-Stack (D21) für UI + API auf `100.103.83.12` ist lokal
gebaut und validiert. Offen ist nur der Zielhost-Smoke-Test samt Verifikation
des tatsächlichen Ollama-DNS-Alias im externen Netz `ollama-default`; danach
kann der dünne Odoo-Client folgen.
## Completed (2026-09-14)
@@ -436,6 +436,27 @@ tenant-autorisierten Datenvertrag außerhalb der Agenten-API.
ist durch `check_same_thread=False` plus `RLock` worker-thread-sicher. Neue
Nicht-lokaler CLI-Bind ohne `PV_API_KEY` wird fail-closed abgelehnt. Neue
API-/Concurrency-Tests erhöhen die Offline-Suite von 75 auf **82 grüne Tests**.
- **D20 (Test-Frontend, 2026-09-16):** FastAPI liefert unter `/` ein
dependency-freies, responsives Frontend aus `web/` aus. Es nutzt same-origin
`/v1/ask` und `/v1/health`, zeigt Status, Quellen, Konflikte, Rückfragen,
Suchplan und Grounding-Metadaten und hält den Verlauf nur im DOM. Ein
optional gemerkter Service-Key liegt ausschließlich im `sessionStorage` des
Tabs; kein Secret wird in die Assets injiziert. Modelltext wird ohne
`innerHTML` gerendert. CSP gilt gezielt für UI/Assets, damit `/docs` nutzbar
bleibt; globale Header setzen `nosniff`, `DENY` und `no-referrer`. Betrieb
auf dem Tailscale-Interface: `python -m agent.cli serve --host
100.103.83.12` mit gesetztem `PV_API_KEY`; UI auf Port 8080. Tests 82 → 84.
- **D21 (Docker-Compose-Deployment, 2026-09-16):** `compose.yaml` baut einen
gemeinsamen UI-/API-Container, bindet Port 8080 nur an `100.103.83.12` und
tritt dem externen Netz `ollama-default` bei. Ollama wird nicht dupliziert;
`OLLAMA_URL` ist konfigurierbar (Beispiel `http://ollama:11434`, Alias auf
Zielhost noch zu verifizieren). `data/` ist schreibbar, `wissensbasis/`
read-only; Root-FS read-only, Capabilities entfernt, no-new-privileges,
unprivilegierter `PUID:PGID`, verpflichtender `PV_API_KEY`. `.dockerignore`
hält `.env`, Index, Layer-1-Korpora und KB aus dem Image; Runtime-Image nutzt
`requirements-runtime.txt`. Compose `config --quiet`, Image-Build und
read-only Import-/Asset-Smoke-Test bestanden. Deployment: `docs/DOCKER.md`.
Statische Deploymenttests erhöhen die Suite von 84 auf **87 Tests**.
- **Bake-off-Protokoll** (Skill): Modellwechsel nur über dokumentierten
Goldset-Vergleich; Kriterium: Zitier-Präzision > Verweigerungs-
korrektheit > Latenz.
@@ -446,7 +467,10 @@ tenant-autorisierten Datenvertrag außerhalb der Agenten-API.
- `.agents/skills/pv-rag-agent/SKILL.md` — verbindliche Regeln.
- `agent/README.md` — Betrieb, Konfiguration, Host-Schritte.
- `docs/API.md` — v1-Vertrag, Authentisierung, Privacy-Grenze und Odoo-Aufruf.
- `agent/api.py` — versionierte Service-Oberfläche und Sicherheitsgrenzen.
- `agent/api.py` — versionierte Service-Oberfläche, UI-Auslieferung und Sicherheitsgrenzen.
- `web/` — dependency-freies Test-Frontend.
- `compose.yaml`, `Dockerfile`, `.env.example`, `.dockerignore` — Zielhost-Stack.
- `docs/DOCKER.md` — Deployment, Indexaufbau und Smoke-Tests.
- `agent/eval/goldset.yaml` — Goldset (IDs gegen kb.json verifiziert).
- `agent/generate.py` — Grounding-Kern (Prompt, Post-Validierung).
- `wissensbasis/README.md` — Layer-2-Schema + Rechtsprechungs-Provenance.