Freigabe-Anpassung und Soft-Trash
release-tag / release-image (push) Successful in 1m34s

This commit is contained in:
2026-07-29 11:08:03 +02:00
parent a33ff09c41
commit dc369dab65
14 changed files with 1233 additions and 122 deletions
+51 -5
View File
@@ -27,6 +27,11 @@ Der bekannte Administrationsmodus:
- automatische Backups
- atomisches Schreiben per Temp-Datei + Rename
- Schutz vor extern veränderten Dateien
- integrierter **Produktiv/Staging-Umschalter** mit Staging-Zähler
- KI-Entwürfe im selben Formular oder Raw-JSON-Editor prüfen und korrigieren
- einzelne oder mehrere Staging-Entwürfe **Freigeben → Produktiv**
- einzelne oder mehrere Staging-Entwürfe sicher löschen (`staging/.trash`)
- Freigaben überschreiben niemals bestehende Produktiv-IDs oder Zieldateien
### `APP_MODE=google`
@@ -78,6 +83,7 @@ APP_SUBTITLE=JSON · Massenbearbeitung · Docker
KB_DATA_PATH=../glpi-ai-agent-kb-microsoft-errorcodes-kompendium/knowledge
KB_DATA_MOUNT_MODE=rw
KB_BACKUP_PATH=./backups
KB_STAGING_PATH=./staging
KB_EDITOR_PORT=8080
BASIC_AUTH_USER=admin
@@ -193,6 +199,35 @@ Ein Staging-Artikel verwendet dasselbe JSON-Format wie die restliche Wissensbasi
`auto_reply` ist im Staging standardmäßig bewusst `false`. Das kann über `OLLAMA_STAGING_AUTO_REPLY=true` geändert werden, wird für ungeprüfte KI-Inhalte aber nicht empfohlen.
## Staging-Review und Freigabe im Editor
Der Editor bindet `STAGING_DIR` unabhängig davon ein, ob auf dieser Instanz der Ollama-Fallback aktiv ist. In einem Dual-Deployment teilen sich Search- und Editor-Container daher denselben Staging-Mount:
```text
kb-search
knowledge :ro
staging :rw <- KI erzeugt Entwürfe
kb-editor
knowledge :rw <- Freigaben landen hier
staging :rw <- Helpdesk prüft Entwürfe
backups :rw
```
In der Editor-Oberfläche steht links oberhalb der Suche ein Umschalter **Produktiv / Staging** zur Verfügung. Die bestehenden Filter für Suchtext, `auto_reply`, Sprache, Stil und Quelle funktionieren auch auf den Staging-Dateien.
Ein Staging-Artikel kann ganz normal im Formular oder als Raw JSON bearbeitet und gespeichert werden. Im Staging-Modus erscheinen zusätzlich:
- **Freigeben → Produktiv** – legt eine neue JSON-Datei in `DATA_DIR` an und archiviert den geprüften Originalentwurf danach unter `STAGING_DIR/.approved`.
- **Löschen** – verschiebt den verworfenen Entwurf nach `STAGING_DIR/.trash`, statt ihn sofort unwiederbringlich zu löschen.
- **Staging-Aktionen** – Freigeben oder Löschen für eine Mehrfachauswahl.
Bei einer Freigabe wird der **aktuelle JSON-Inhalt unverändert** übernommen. Insbesondere bleibt `auto_reply` so gesetzt, wie der Reviewer ihn im Entwurf eingestellt hat. Dadurch kann ein KI-Entwurf zunächst mit `auto_reply: false` geprüft und erst bewusst auf `true` gesetzt werden.
Die Freigabe überschreibt niemals eine vorhandene Produktivdatei. Existiert bereits dieselbe `id` oder derselbe abgeleitete Dateiname, bricht die Operation mit einem Konflikt ab und der Staging-Entwurf bleibt erhalten.
Im Google-/Viewer-Modus bleiben alle Staging-Schreib-, Lösch- und Freigabe-Endpunkte serverseitig gesperrt.
### 10-Minuten-Timeout
`OLLAMA_TIMEOUT=10m` ist der Standard. Der Timeout wird im Request-Kontext und im Go-HTTP-Client durchgesetzt. Zusätzlich passt der Server seinen HTTP-`WriteTimeout` an, damit eine erlaubte 10-Minuten-Generierung nicht bereits nach dem normalen 60-Sekunden-Timeout abgebrochen wird.
@@ -236,6 +271,7 @@ docker run -d \
-e APP_TITLE="KB Administration" \
-v /srv/kb/knowledge:/data/knowledge:rw \
-v /srv/kb/backups:/data/backups:rw \
-v /srv/kb/staging:/data/staging:rw \
kb-helpdesk:local
```
@@ -249,6 +285,7 @@ docker run -d \
-e APP_TITLE="IT Helpdesk Wissen" \
-e APP_SUBTITLE="Interne Lösungsdatenbank" \
-v /srv/kb/knowledge:/data/knowledge:ro \
-v /srv/kb/staging:/data/staging:rw \
kb-helpdesk:local
```
@@ -363,18 +400,27 @@ Lesend in beiden Modi:
- `GET /api/facets?limit=10`
- `GET /api/items/{key}`
Optional bei aktiviertem Ollama-Fallback:
Optional bei aktiviertem Ollama-Fallback im Google-Modus:
- `POST /api/ai/fallback` mit `{"query":"..."}` – nur zulässig, wenn die normale KB 0 Treffer liefert
- `GET /api/staging/{key}` – gespeicherten Staging-Entwurf laden
- `GET /api/staging/{key}` – den gerade erzeugten Staging-Entwurf im Viewer laden
Nur im Editor-Modus:
Staging-Review im Editor-Modus:
- `GET /api/staging?...` – Staging-Dateien suchen und filtern
- `GET /api/staging/{key}` – Staging-Entwurf laden
- `PUT /api/staging/{key}` – Staging-Entwurf bearbeiten
- `DELETE /api/staging/{key}` – sicher nach `staging/.trash` verschieben
- `POST /api/staging/{key}/promote` – Entwurf nach Produktiv freigeben und Original unter `.approved` archivieren
- `POST /api/staging/bulk` – mehrere Entwürfe mit `action=promote|delete` bearbeiten
Weitere Schreibendpunkte nur im Editor-Modus:
- `PUT /api/items/{key}`
- `POST /api/bulk`
- `POST /api/reload`
Im Google-Modus antworten diese drei Endpunkte mit HTTP `403 Forbidden`.
Im Google-Modus sind Staging-Liste und sämtliche Staging-Schreib-/Freigabeaktionen sowie die produktiven Schreibendpunkte serverseitig gesperrt.
## Sicherheit
@@ -447,7 +493,7 @@ go build -o kb-helpdesk ./cmd/server
│ ├── app.js
│ └── style.css
├── internal/aifallback/ # Ollama-Client + Structured Output
├── internal/staging/ # atomisches Speichern/Laden ungeprüfter Entwürfe
├── internal/staging/ # Staging-Suche, Bearbeitung, Soft-Delete und AI-Entwürfe
├── internal/store/
│ ├── store.go
│ └── store_test.go