test: verify and document desktop ui

This commit is contained in:
2026-07-30 20:26:03 +02:00
parent cf35148576
commit 571969b69b
15 changed files with 369 additions and 28 deletions
+13 -13
View File
@@ -115,6 +115,8 @@ Rootserver:
Abbruch, Modus und bereinigte Statusanzeige sind im Desktopclient verdrahtet.
- `ask` unterstützt `Einmal erlauben`, `Lokal beantworten` und `Abbrechen`;
`never` erreicht weiterhin keinen Cloudfreigabedialog.
- Startwege `uv run javis gui` und `scripts/start-javis-gui.ps1` funktionieren;
der GUI-Starter verwendet die sichere Loopback-/Prozesslogik des CLI-Starters.
## Aktuelle Architektur
@@ -195,8 +197,12 @@ Letzter bestätigter Projektstand:
- uv-Lock und `uv sync --dev`: bestanden
- Python in `.venv`: 3.12.13
- Ruff in `.venv`: 0.16.0
- Unit-Tests: 97 bestanden; zusätzlich GUI-Streamingereignisse, atomarer Abbruch
und alle drei Ergebnisse des Datenschutzdialogs abgedeckt
- Tests: 101 bestanden; zusätzlich Qt-Offscreen-Fenster, Dialogzuordnung und
sichere Wiederverwendung des Startskripts abgedeckt
- `uv run javis gui` im Offscreen-Modus: erfolgreich, Exitcode 0
- echter lokaler GUI-Smoke: erfolgreich; 1 Sitzung, 2 Nachrichten, Provider Ollama
- GUI-Startskript mit prozesslokalem ExecutionPolicy-Bypass: erfolgreich
- manuelle Desktop-Abnahme durch Pascal: noch offen
- PowerShell-Syntax des Startskripts: erfolgreich geparst
- Ruff Lint: bestanden
- Ruff Formatprüfung: bestanden
@@ -243,21 +249,14 @@ Abnahmestatus:
- aktueller Arbeitsbranch: `feat/desktop-ui`
- stabiler Ausgangsstand: `main` bei `d3e85f2`
- stabiler Ausgangsstand: `main` bei `77b510b`
- medizinischer Datenschutz-Fix: `9148193`
- Provider- und CLI-Streaming: `00a5a6c`
- SQLite-Titel und Migration: `112ae6d`
- GUI-Grundgerüst und Kernadapter: `1658e04`
- Sitzungen, Streaming, Abbruch und Datenschutz: `cf35148`
- Sitzungsnavigation: `43c1f76`
- Dokumentation: `328dcd9`
- Chatkomfort-Merge nach `main`: `cbba102`
- 91 Unit-Tests, Ruff und Strukturprüfung auf dem gemergten `main` bestanden
- Feature-Branch erfolgreich zu `origin/feat/chat-comfort` gepusht
- `main` erfolgreich bis `3361eae` zu `origin/main` gepusht und synchron verifiziert
- CLI-Verdrahtung: `af9426e`
- Startskript: `141ff2e`
- Resttests: `a0af15a`
- Routing-/Reporting-Korrektur: `7a14fe8`
- Gemini-/Datenschutz-Merge nach `main`: `564a3fd`
- `origin` verwendet HTTPS
- kein Force-Push und keine umgeschriebene Historie
@@ -289,8 +288,9 @@ Abnahmestatus:
## Nächster sinnvoller Auftrag
Auf `feat/desktop-ui` als Nächstes Offscreen-GUI-Tests, sicheres Startskript,
Desktopanleitung und anschließend echten lokalen GUI-Smoke ergänzen.
Auf `feat/desktop-ui` als Nächstes vollständige Abschlussprüfungen ausführen,
Dokumentation committen und Feature-Branch pushen. Danach für Pascals manuelle
Desktop-Abnahme stoppen; noch nicht nach `main` mergen.
Medizinische Antwortqualität bleibt ein späteres Sicherheits-/Systemprompt-Thema.
Noch keine Obsidian-Integration oder Tools beginnen.
+1
View File
@@ -9,6 +9,7 @@
| ADR-0005 | Laufenden Handoff kompakt halten und Vollstände nur zu Meilensteinen archivieren | angenommen |
| ADR-0006 | Ollama und qwen3:8b für den ersten Windows-Chat verwenden | angenommen |
| ADR-0007 | Gemini kostenlos bevorzugen, sensible Inhalte lokal halten und niemals Billing aktivieren | angenommen |
| UI-0001 | Desktop-MVP verwendet PySide6 und denselben Javis-Kern wie die CLI | angenommen |
Der normale Runtime-Secret-Speicher ist mit dem Betriebssystem-Keyring festgelegt;
keine XML-Secret-Datei. Offen bleiben insbesondere der genaue
+87
View File
@@ -0,0 +1,87 @@
# Javis Desktop
## Installation und Start
Die Desktopoberfläche verwendet PySide6 und denselben Python-Kern wie der CLI-Chat.
```powershell
& 'D:\Javis-Tools\uv\uv.exe' sync --dev
& 'D:\Javis-Tools\uv\uv.exe' run javis gui
```
Der empfohlene Windows-Start prüft zusätzlich Repository, lokale Werkzeuge und
Ollama und setzt ausschließlich Prozessvariablen:
```powershell
.\scripts\start-javis-gui.ps1
```
Falls Windows den direkten Skriptaufruf per Richtlinie blockiert, funktioniert
ohne systemweite Änderung der prozesslokale Start:
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\start-javis-gui.ps1
```
Der bisherige Start über `.\scripts\start-javis.ps1` beziehungsweise
`uv run javis chat` bleibt unverändert verfügbar.
## Bedienung
- `Enter`: Nachricht senden
- `Shift+Enter`: neue Zeile
- `Ctrl+N`: neue Sitzung
- `Ctrl+K`: Sitzungssuche fokussieren
- `Esc`: laufende Antwort abbrechen
- Doppelklick: Sitzung laden
- Kontextmenü einer Sitzung: umbenennen
Die linke Spalte verwaltet Sitzungen. In der Mitte erscheinen Verlauf,
Markdownantwort und Eingabe. Rechts stehen nur bereinigte technische Metadaten:
Zustand, Modus, Provider, Ollama-Erreichbarkeit, Modell, Datenschutzentscheidung,
Cloudzähler, Fallback und Datenverzeichnis.
## Provider und Datenschutz
`Hybrid/Auto` verwendet weiterhin den vorhandenen lokalen Datenschutzrouter.
`Lokal` verhindert Cloudnutzung. Bei `ask` stehen drei Entscheidungen bereit:
- `Einmal erlauben`: minimierten notwendigen Kontext einmalig an Gemini senden
- `Lokal beantworten`: ohne Cloud mit Ollama antworten
- `Abbrechen`: Anfrage ohne Speicherung beenden
`never` wird ausschließlich lokal verarbeitet und zeigt keinen Freigabedialog.
Der Gemini-Key bleibt im Betriebssystem-Keyring und wird in der Oberfläche weder
ausgegeben noch dokumentiert.
## Streaming und Abbruch
Die Modellgenerierung läuft in einem Qt-Worker. Es kann nur eine Antwort
gleichzeitig laufen. `Stoppen`, `Esc` oder kontrolliertes Schließen fordern den
Abbruch an. Ein unvollständiges Benutzer-/Assistentenpaar wird nicht gespeichert.
## Bekannte Grenzen
- keine Sprache, kein Mikrofon und kein Wakeword
- keine Betriebssystem-, App-, Obsidian-, Server- oder Laptopsteuerung
- keine autonomen Aktionen und keine neuen Cloudanbieter
- Schließen kann kurz warten, bis der lokale Netzwerkstream kontrolliert reagiert
- medizinische Antwortqualität ist ein späteres Sicherheits-/Systemprompt-Thema
## Manueller Abnahmetest für Pascal
1. `.\scripts\start-javis-gui.ps1`
2. Prüfen, dass sich das Fenster öffnet.
3. Eine lokale Frage stellen.
4. Die gestreamte Antwort prüfen.
5. Eine neue Sitzung anlegen.
6. Die alte Sitzung laden.
7. Eine Antwort mit `Esc` oder `Stoppen` abbrechen.
8. Den Modus `Lokal` testen.
9. Eine öffentliche Technikfrage im Hybridmodus testen.
10. Eine `ask`-Anfrage lokal beantworten lassen.
11. Anwendung schließen und neu starten.
12. Die gespeicherte Sitzung erneut laden.
Abnahmestatus: automatisierte Tests und echter lokaler GUI-Smoke durch Codex
bestanden; manuelle Abnahme durch Pascal steht noch aus.
+5 -5
View File
@@ -10,14 +10,14 @@ Chatkomfort umfasst sicheres Ollama-/Gemini-Streaming, Strg+C ohne Teilpersisten
medizinisches `never`, automatische und manuelle Sitzungstitel, nummerierte
Listen, Laden per Nummer/ID-Präfix und begrenzte Suche in Titeln/Benutzertexten.
91 Unit-Tests, Ruff, Struktur-, Secret-, Gitignore- und Auditprüfungen sowie
echte Ollama- und Gemini-Streaming-Smokes sind erfolgreich.
Das Desktop-MVP auf `feat/desktop-ui` verwendet denselben Kern wie die CLI.
101 Tests, Qt-Offscreen-Start und echter lokaler Ollama-GUI-Smoke sind erfolgreich.
Die manuelle Abnahme durch Pascal steht noch aus.
## Nächster sinnvoller Schritt
Der Chatkomfort-Branch ist nach `main` gemergt und dort erneut geprüft. Den
finalen Stand aus `docs/CHATGPT_HANDOFF.md` übernehmen und mit Pascal ein
einzelnes nächstes Paket festlegen; noch keine Folgephase automatisch beginnen.
Nur den Desktop-MVP nach `docs/DESKTOP_UI.md` manuell abnehmen. Erst danach mit
Pascal ein einzelnes nächstes Paket festlegen; keine Folgephase automatisch beginnen.
## Weiterhin nicht beginnen
+18 -3
View File
@@ -1,6 +1,6 @@
# Projektstatus
Stand: Chatkomfort-Feature vollständig automatisiert geprüft, 30.07.2026.
Stand: Desktop-MVP automatisiert und mit lokalem Modell geprüft, 30.07.2026.
## Erreicht
@@ -28,7 +28,7 @@ Stand: Chatkomfort-Feature vollständig automatisiert geprüft, 30.07.2026.
Inhalte werden nicht wörtlich in automatische Titel übernommen
- echte CLI-Modellantwort sowie Laden und Fortsetzen derselben Sitzung in einem
neuen Prozess bestätigt
- 91 Unit-Tests, Ruff, Struktur-, Gitignore-, Secret- und Auditprüfung erfolgreich
- 101 Tests, Ruff, Struktur-, Gitignore-, Secret- und Auditprüfung erfolgreich
- lokaler Core-Chat am 30.07.2026 zusätzlich von Pascal manuell erfolgreich
geprüft: deutsche Antworten, Sitzungskontext, `/sessions`, `/exit`, Neustart,
`/load <UUID>`, vollständiger Verlauf und Fortsetzung
@@ -96,9 +96,24 @@ Stand: Chatkomfort-Feature vollständig automatisiert geprüft, 30.07.2026.
Obsidian-Adapter, Tools, Serverzugriff, Sprache, Mobile Client,
Living-Mind-Frontend.
## Desktop-MVP
- PySide6-Client verwendet Runtime, Chatservice, Hybridprovider, Datenschutz,
SQLite, Audit und Secret-Provider des bestehenden Kerns
- Sitzungen, Suche, Umbenennen, Markdown, Streaming, Abbruch, Modus,
Dreifach-Freigabedialog und bereinigter Status implementiert
- `uv run javis gui` und `scripts/start-javis-gui.ps1` vorhanden
- Qt-Offscreen-Start und echter lokaler Ollama-GUI-Smoke bestanden
- automatisiert durch Codex getestet: ja
- echter lokaler GUI-Smoke durch Codex: ja; 1 Sitzung, 2 Nachrichten, Ollama
- manuell durch Pascal abgenommen: noch nicht
## Git
- aktueller Branch: `main`
- aktueller Branch: `feat/desktop-ui`
- Desktop-Basis: `main` bei `d3e85f2`
- GUI-Grundgerüst: `1658e04`
- Sitzungen/Streaming/Datenschutz: `cf35148`
- Basis: `main` bei `77b510b`
- medizinisches Routing: `9148193`
- Streaming: `00a5a6c`