docs: finalize Gemini privacy handoff

This commit is contained in:
2026-07-30 18:13:01 +02:00
parent a0af15a037
commit a6e4576848
7 changed files with 108 additions and 49 deletions
+14
View File
@@ -18,6 +18,12 @@ Alle wesentlichen Projektänderungen werden hier in verständlicher Form dokumen
- SQLite-Sitzungen mit geordneter Nachrichtenhistorie außerhalb des Repositories. - SQLite-Sitzungen mit geordneter Nachrichtenhistorie außerhalb des Repositories.
- CLI-Befehle für neue, gelistete, geladene, geleerte und beendete Sitzungen. - CLI-Befehle für neue, gelistete, geladene, geleerte und beendete Sitzungen.
- Unit-Tests für Konfiguration, Speicher, Chatkern, Provider und CLI. - Unit-Tests für Konfiguration, Speicher, Chatkern, Provider und CLI.
- Sicherer Gemini-Key-Speicher über Betriebssystem-Keyring.
- Offizieller Gemini-Provider mit lokalem Datenschutzrouter
(`allowed`/`ask`/`never`) und sichtbarem Ollama-Fallback.
- Strikter Nullkostenmodus, lokale Schutzlimits und inhaltsfreies Provider-Audit.
- Bereinigte CLI-Befehle `/provider`, `/privacy` und `/status`.
- Sicheres PowerShell-Startskript ohne Systemänderungen.
### Changed ### Changed
@@ -29,8 +35,16 @@ Alle wesentlichen Projektänderungen werden hier in verständlicher Form dokumen
- Offizielle VS-Code-Erweiterungen für Python, Pylance und Python Environments eingerichtet. - Offizielle VS-Code-Erweiterungen für Python, Pylance und Python Environments eingerichtet.
- `qwen3:8b` mit echten deutschen Antworten und GPU-/Zeitmessungen auf der RTX 3060 geprüft. - `qwen3:8b` mit echten deutschen Antworten und GPU-/Zeitmessungen auf der RTX 3060 geprüft.
- Projektstatus, Architektur und Datenmodell auf den funktionierenden Textchat aktualisiert. - Projektstatus, Architektur und Datenmodell auf den funktionierenden Textchat aktualisiert.
- Chatlaufzeit auf austauschbares Hybridrouting umgestellt; alte Ollama-Sitzungen
bleiben ladbar.
- Nicht geheime Providerkonfiguration liegt lokal außerhalb von Git; ein Key wird
erst unmittelbar vor einem zulässigen Cloudaufruf geladen.
### Security ### Security
- Lokale Secret-Dateien, Laufzeitdaten, Modelle, Datenbanken und Logs werden von Git ausgeschlossen. - Lokale Secret-Dateien, Laufzeitdaten, Modelle, Datenbanken und Logs werden von Git ausgeschlossen.
- Das Sprachmodell darf keine Secret-Werte erhalten. - Das Sprachmodell darf keine Secret-Werte erhalten.
- Gemini bleibt ohne lokale Aktivierung, Key, Nullkostenmodus und bestätigtes
Nicht-Billing deaktiviert; Javis aktiviert niemals Billing.
- Cloudkontext wird lokal klassifiziert und minimiert; 429, Netzwerk-, Timeout-,
Key- und Modellfehler fallen auf Ollama zurück.
+13 -10
View File
@@ -8,12 +8,12 @@ Javis beginnt als modularer Monolith. Module besitzen klare Zuständigkeiten und
1. Interface: implementierte CLI; später möglicherweise Sprache, Mobilzugriff und Living Mind. 1. Interface: implementierte CLI; später möglicherweise Sprache, Mobilzugriff und Living Mind.
2. Core: implementierter Gesprächsablauf und Sitzungslogik. 2. Core: implementierter Gesprächsablauf und Sitzungslogik.
3. Providers: kleine Schnittstelle und implementierter lokaler Ollama-Adapter. 3. Providers: kleine Schnittstelle, lokaler Ollama- und optionaler Gemini-Adapter.
4. Memory: implementierte SQLite-Sitzungen; ein semantischer Index ist nur geplant. 4. Memory: SQLite-Sitzungen und separates inhaltsfreies Provider-Audit.
5. Obsidian: zunächst lesender Adapter, später eng begrenzte Entwürfe. 5. Obsidian: zunächst lesender Adapter, später eng begrenzte Entwürfe.
6. Tools und Status: feste Schemas, Allowlists, Timeouts und bereinigte Ausgaben. 6. Tools und Status: feste Schemas, Allowlists, Timeouts und bereinigte Ausgaben.
7. Security: Freigaben, Secret-Provider und Berechtigungsprüfung. 7. Security: lokaler Datenschutzrouter, Freigaben und Betriebssystem-Keyring.
8. Audit: nachvollziehbare Aktionen ohne geheime Inhalte. 8. Audit: Provider-Metadaten ohne Prompts, Antworten oder geheime Inhalte.
## Plattformgrenzen ## Plattformgrenzen
@@ -24,10 +24,13 @@ Javis beginnt als modularer Monolith. Module besitzen klare Zuständigkeiten und
## Implementierter Chatfluss ## Implementierter Chatfluss
`interface.cli` nimmt Text an, `core.chat_service` verbindet Sitzungsverlauf und `interface.cli` nimmt Text an und verbindet den `core.provider_router`.
Provider, `providers.ollama` spricht nur die lokale Ollama-HTTP-API an und Dieser klassifiziert die aktuelle Anfrage vollständig lokal, minimiert den
`memory.sqlite_store` speichert erfolgreiche Benutzer-/Assistentenpaare atomar. freigegebenen Kontext und wählt Gemini oder Ollama. `core.chat_service` speichert
Scheitert das Modell, wird keine erfundene Antwort gespeichert. erst eine erfolgreiche Antwort zusammen mit der Benutzernachricht atomar.
Es existiert kein Cloudadapter, Toolaufruf, Obsidian-Zugriff oder eigener Gemini ist nur bei lokaler Aktivierung, vorhandenem Key, `free_only = true`,
öffentlicher Netzwerkdienst. Der Ollama-Endpunkt muss eine Loopback-Adresse sein. bestätigtem Nicht-Billing und passender Datenschutzentscheidung erreichbar.
Ollama bleibt Loopback-, Datenschutz-, Offline-, Quota- und Fehlerfallback.
Es existiert weiterhin kein Toolaufruf, Obsidian-Zugriff oder eigener öffentlicher
Netzwerkdienst.
+21 -11
View File
@@ -58,11 +58,12 @@ Rootserver:
- Modelle liegen außerhalb von Git unter `D:\Javis-Data\ollama-models`. - Modelle liegen außerhalb von Git unter `D:\Javis-Data\ollama-models`.
- Der lokale Ollama-Dienst bindet nur an `127.0.0.1:11434`; PATH, Registry, - Der lokale Ollama-Dienst bindet nur an `127.0.0.1:11434`; PATH, Registry,
Autostart und Windows-Dienste blieben unverändert. Autostart und Windows-Dienste blieben unverändert.
- CLI-Befehle: `/new`, `/sessions`, `/load <ID>`, `/clear`, `/help`, `/exit`. - CLI-Befehle: `/new`, `/sessions`, `/load <ID>`, `/clear`, `/provider`,
`/privacy`, `/status`, `/help`, `/exit`.
- Sitzungsdaten liegen über `JAVIS_DATA_DIR` außerhalb von Git; der bestätigte - Sitzungsdaten liegen über `JAVIS_DATA_DIR` außerhalb von Git; der bestätigte
Smoke-Test nutzte `D:\Javis-Data\runtime\core-chat-smoke`. Smoke-Test nutzte `D:\Javis-Data\runtime\core-chat-smoke`.
- Kein Obsidian-, Laptop- oder Rootserverzugriff wurde implementiert. - Kein Obsidian-, Laptop- oder Rootserverzugriff wurde implementiert.
- Keine Tool-, Sprach-, Mobil-, Status- oder Living-Mind-Funktion ist implementiert. - Keine Tool-, Sprach-, Mobil- oder Living-Mind-Funktion ist implementiert.
- Offizielle Gemini-Prüfung abgeschlossen: `gemini-3.6-flash` und - Offizielle Gemini-Prüfung abgeschlossen: `gemini-3.6-flash` und
`gemini-3.5-flash-lite` sind stabile GA-Modelle mit Free-Tier-Textnutzung; `gemini-3.5-flash-lite` sind stabile GA-Modelle mit Free-Tier-Textnutzung;
Standard dieses Pakets wird ausschließlich `gemini-3.6-flash`. Standard dieses Pakets wird ausschließlich `gemini-3.6-flash`.
@@ -107,8 +108,8 @@ Rootserver:
- Ollama-Provider akzeptiert nur lokale HTTP-Loopback-Adressen - Ollama-Provider akzeptiert nur lokale HTTP-Loopback-Adressen
- SQLite-Sitzungsspeicher mit atomaren Benutzer-/Assistentenpaaren - SQLite-Sitzungsspeicher mit atomaren Benutzer-/Assistentenpaaren
- Laufzeitdaten außerhalb von Git über `JAVIS_DATA_DIR` oder sicheren Plattformstandard - Laufzeitdaten außerhalb von Git über `JAVIS_DATA_DIR` oder sicheren Plattformstandard
- aktuell ausschließlich lokales Modell; als separates Folgepaket ist Gemini als - Hybridprovider bevorzugt Gemini für cloudgeeignete Inhalte und verwendet
bevorzugter kostenloser Provider für ausdrücklich cloudgeeignete Inhalte geplant Ollama bei Datenschutz, Ablehnung, Offline-, Quota- und Providerfehlern
- strikter Nullkostenmodus ohne Billing-Aktivierung oder kostenpflichtigen Fallback; - strikter Nullkostenmodus ohne Billing-Aktivierung oder kostenpflichtigen Fallback;
lokales Modell bleibt Offline-, Datenschutz-, Ausfall- und Quota-Fallback lokales Modell bleibt Offline-, Datenschutz-, Ausfall- und Quota-Fallback
- Secret-Werte außerhalb von Code, Git, Prompts und Logs - Secret-Werte außerhalb von Code, Git, Prompts und Logs
@@ -202,6 +203,9 @@ Abnahmestatus:
- manuell durch Pascal getestet: am 30.07.2026 erfolgreich; CLI-Start, echte - manuell durch Pascal getestet: am 30.07.2026 erfolgreich; CLI-Start, echte
deutsche Antworten, Sitzungskontext, `/sessions`, `/exit`, Neustart, deutsche Antworten, Sitzungskontext, `/sessions`, `/exit`, Neustart,
`/load <UUID>`, vollständiger Verlauf und Fortsetzung `/load <UUID>`, vollständiger Verlauf und Fortsetzung
- Gemini/Datenschutz/Fallback automatisiert durch Codex getestet: ja, nur mit
Test-Doubles und lokalem nachrichtenfreiem CLI-Smoke
- Gemini/Datenschutz/Fallback manuell durch Pascal getestet: noch nicht
- von Pascal für produktive Verwendung freigegeben: noch nicht ausdrücklich erklärt - von Pascal für produktive Verwendung freigegeben: noch nicht ausdrücklich erklärt
## Git-Stand ## Git-Stand
@@ -219,6 +223,13 @@ Abnahmestatus:
- lokaler Merge nach `main`: `f3d6dfb` - lokaler Merge nach `main`: `f3d6dfb`
- geprüfter und gepushter Abschlussstand vor diesem Handoff-Update: `0a550e6` - geprüfter und gepushter Abschlussstand vor diesem Handoff-Update: `0a550e6`
- Secret-Provider: `570e7fa` - Secret-Provider: `570e7fa`
- Datenschutz/Nullkosten: `286d96d`
- isolierter Gemini-Provider: `f3e1183`
- Hybridrouter: `e57186f`
- lokale Konfiguration: `ab6ea48`
- CLI-Verdrahtung: `af9426e`
- Startskript: `141ff2e`
- Resttests: `a0af15a`
- `origin` verwendet HTTPS - `origin` verwendet HTTPS
- kein Force-Push und keine umgeschriebene Historie - kein Force-Push und keine umgeschriebene Historie
@@ -231,11 +242,13 @@ Abnahmestatus:
- aktuell: isolierte Python-Toolchain und reproduzierbare Entwicklungsumgebung - aktuell: isolierte Python-Toolchain und reproduzierbare Entwicklungsumgebung
- aktuell: portable Ollama-Laufzeit und `qwen3:8b` außerhalb von Git verifiziert - aktuell: portable Ollama-Laufzeit und `qwen3:8b` außerhalb von Git verifiziert
- aktuell: lokaler CLI-Chat und persistente SQLite-Sitzungen vollständig abgenommen - aktuell: lokaler CLI-Chat und persistente SQLite-Sitzungen vollständig abgenommen
- aktuell: Gemini-Free-Hybridrouting, Datenschutz und Nullkostenmodus
automatisiert vollständig geprüft; manueller Live-Test steht aus
## Offene Entscheidungen und Fehler ## Offene Entscheidungen und Fehler
- endgültiger Produkt-/Repositoryname bleibt offen - endgültiger Produkt-/Repositoryname bleibt offen
- Startmechanismus für Ollama ist noch bewusst manuell und nur pro Prozess konfiguriert - Startskript startet Ollama bei Bedarf pro Prozess; kein Autostart oder Dienst
- Antworten werden noch nicht gestreamt; Sitzungen besitzen noch keine Titel oder Suche - Antworten werden noch nicht gestreamt; Sitzungen besitzen noch keine Titel oder Suche
- genauer späterer Obsidian-Schreibbereich ist nicht freigegeben - genauer späterer Obsidian-Schreibbereich ist nicht freigegeben
- normaler Secret-Provider ist festgelegt: Betriebssystem-Keyring; eine - normaler Secret-Provider ist festgelegt: Betriebssystem-Keyring; eine
@@ -260,12 +273,9 @@ Abnahmestatus:
## Nächster sinnvoller Auftrag ## Nächster sinnvoller Auftrag
Auf dem bestehenden Feature-Branch als nächstes einzelnes Arbeitspaket: Pascal führt anhand `docs/NEXT_SESSION.md` den echten Gemini-, Ask- und
Never-Test mit ausschließlich künstlichen beziehungsweise unpersönlichen Daten
1. veraltete Architektur-, Sicherheits-, Changelog- und Nächste-Sitzung-Texte durch. Bis zu seiner Bestätigung nicht nach `main` mergen.
auf den tatsächlich implementierten Stand bringen
2. Feature-Branch pushen und vor Pascals manuellem Live-Test stoppen
3. nicht nach `main` mergen
Keinen API-Key in Chat, Git, Obsidian, Logs oder Dokumentation übernehmen. Keinen API-Key in Chat, Git, Obsidian, Logs oder Dokumentation übernehmen.
+2 -1
View File
@@ -10,7 +10,8 @@
| ADR-0006 | Ollama und qwen3:8b für den ersten Windows-Chat verwenden | 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 | | ADR-0007 | Gemini kostenlos bevorzugen, sensible Inhalte lokal halten und niemals Billing aktivieren | angenommen |
Offen bleiben insbesondere das endgültige Runtime-Secret-System, der genaue Der normale Runtime-Secret-Speicher ist mit dem Betriebssystem-Keyring festgelegt;
keine XML-Secret-Datei. Offen bleiben insbesondere der genaue
Obsidian-Schreibbereich, das spätere Laptop-Modell und der Produktname. Obsidian-Schreibbereich, das spätere Laptop-Modell und der Produktname.
Ausführliche Begründungen stehen unter [`docs/adr`](adr/README.md). Ausführliche Begründungen stehen unter [`docs/adr`](adr/README.md).
+35 -20
View File
@@ -2,29 +2,44 @@
## Ziel ## Ziel
Nächstes separates Featurepaket: kostenlose Gemini-Anbindung mit strikt lokalem Pascal nimmt den Gemini-Free-Provider und die lokalen Fallbacks manuell ab.
Datenschutzrouting und Ollama als Ausfall-, Quota-, Offline- und Sensitivitätsfallback. Bis dahin bleibt `feat/gemini-privacy-router` ungemergt.
## Vor Änderungen erneut prüfen ## Vorbereitung durch Pascal
1. `git status --short --branch` 1. In Google AI Studio einen neuen, nur für Javis verwendeten Gemini-Auth-Key
2. `git log -1 --oneline` erstellen.
3. `docs/PROJECT_STATUS.md` 2. Für das zugehörige Google-Projekt kein Billing verbinden beziehungsweise den
4. offene Entscheidungen in `docs/DECISIONS.md` externen Billingstatus selbst prüfen.
3. Den Key niemals in Chat, Codex, Git, Obsidian oder einen sichtbaren
Kommandozeilenparameter kopieren.
4. Im Repository ausführen:
## Vorgeschlagener Umfang ```powershell
& 'D:\Javis-Tools\uv\uv.exe' run javis configure gemini
& 'D:\Javis-Tools\uv\uv.exe' run javis secrets set gemini
powershell -ExecutionPolicy Bypass -File .\scripts\start-javis.ps1
```
- aktuelle kostenlose Gemini-Modelle, Kennungen und Kontingente ausschließlich in Die erste Einrichtung verlangt zwei lokale Bestätigungen. Der zweite Befehl liest
offizieller Google-Dokumentation prüfen; Kandidaten nicht ungeprüft übernehmen den Key verdeckt ein und speichert ihn im Windows Credential Manager.
- Providerrouter mit `free_only = true` und ohne Billing-Konfiguration entwerfen
- lokale Datenschutzentscheidung `allowed`, `ask` oder `never` vor jedem Cloudaufruf
- Gemini-Key nur über lokalen Secret-Provider; Wert niemals an Modell, Git,
Obsidian, Logs, Dokumentation oder Chat geben
- Gemini-Erfolg, fehlenden/ungültigen Key, 429, Netzwerkausfall, lokalen Fallback,
`never`, `ask` und ausbleibende Billing-Aktivierung testen
## Nicht beginnen ## Manueller Test
Keinen echten Schlüssel anfordern oder dokumentieren, kein Billingkonto verbinden, 1. `/status`: Key und Konfiguration `ja`, Nullkostenmodus `aktiv`.
keine kostenpflichtigen Fallbacks, keinen vollständigen Vault übertragen und 2. Unpersönlich: `Erkläre in zwei Sätzen, was eine SQLite-Transaktion ist.`
weiterhin kein Obsidian-Schreiben, SSH-/Serverzugriff, Sprache oder Living Mind. 3. `/privacy`: `allowed`, Provider `gemini`, kein Fallback.
4. Ask ohne private Details: `Ich habe eine private Alltagssituation. Nenne nur
allgemeine Möglichkeiten.` Bei der Freigabe Enter drücken; Antwort muss lokal
über Ollama kommen.
5. Never mit Kunstbeispiel: `Nur lokal: Der Beispiel-API-Key ist absichtlich
erfunden.` Es darf keine Cloudfreigabe angeboten werden; Antwort bleibt lokal.
6. `/status`: bereinigte Zähler prüfen, danach `/exit`.
Erst wenn Pascal diese Punkte bestätigt, darf über den Merge nach `main`
entschieden werden. Google-Quoten sind projektabhängig und in AI Studio zu prüfen.
## Weiterhin nicht beginnen
Kein Obsidian-Zugriff, SSH-/Serverzugriff, Sprache, Mobile Client, Tools oder
Living Mind. Keine echten persönlichen Daten für Cloudtests verwenden.
+9 -6
View File
@@ -1,6 +1,6 @@
# Projektstatus # Projektstatus
Stand: lokaler Textchat auf `main`, 30.07.2026. Stand: Gemini-Free-Feature automatisiert geprüft, 30.07.2026.
## Erreicht ## Erreicht
@@ -30,8 +30,10 @@ Stand: lokaler Textchat auf `main`, 30.07.2026.
## Abnahmestatus ## Abnahmestatus
- automatisiert durch Codex getestet: ja - Core-Chat automatisiert durch Codex getestet: ja
- manuell durch Pascal getestet: ja, am 30.07.2026 - Core-Chat manuell durch Pascal getestet: ja, am 30.07.2026
- Gemini/Datenschutz/Fallback automatisiert durch Codex getestet: ja
- Gemini/Datenschutz/Fallback manuell durch Pascal getestet: noch nicht
- von Pascal für produktive Verwendung freigegeben: noch nicht ausdrücklich erklärt - von Pascal für produktive Verwendung freigegeben: noch nicht ausdrücklich erklärt
## Aktuelles Featurepaket ## Aktuelles Featurepaket
@@ -66,7 +68,7 @@ Stand: lokaler Textchat auf `main`, 30.07.2026.
## Nicht implementiert ## Nicht implementiert
Obsidian-Adapter, Tools, Serverzugriff, Sprache, Mobile Client, Obsidian-Adapter, Tools, Serverzugriff, Sprache, Mobile Client,
Living-Mind-Frontend und automatische Ollama-Prozessverwaltung. Living-Mind-Frontend.
## Git ## Git
@@ -86,5 +88,6 @@ Living-Mind-Frontend und automatische Ollama-Prozessverwaltung.
Ollama wird bewusst manuell in einem eigenen Terminal gestartet. Antworten werden Ollama wird bewusst manuell in einem eigenen Terminal gestartet. Antworten werden
noch nicht gestreamt; Sitzungen haben noch keine Titel, Suche oder Löschfunktion. noch nicht gestreamt; Sitzungen haben noch keine Titel, Suche oder Löschfunktion.
`qwen3:8b` ist nicht automatisch für die GTX 1050 des späteren Zielhosts geeignet. `qwen3:8b` ist nicht automatisch für die GTX 1050 des späteren Zielhosts geeignet.
Nur Abschlussdokumentation und Feature-Branch-Push fehlen. Es wurde kein echter Der echte Gemini-/Fallback-Test durch Pascal und danach die Mergeentscheidung
API-Key angefordert, angezeigt oder konfiguriert und keine Cloudanfrage ausgeführt. fehlen. Es wurde kein echter API-Key angefordert, angezeigt oder konfiguriert und
keine Cloudanfrage ausgeführt.
+14 -1
View File
@@ -14,10 +14,23 @@
Secrets dürfen nie in Code, Git, Prompts, Chatverläufe oder Logs gelangen. Das Modell erfährt nur den Namen, die Verfügbarkeit und ein bereinigtes Aktionsergebnis. Secrets dürfen nie in Code, Git, Prompts, Chatverläufe oder Logs gelangen. Das Modell erfährt nur den Namen, die Verfügbarkeit und ein bereinigtes Aktionsergebnis.
Bevorzugt wird eine Secret-Provider-Abstraktion. Eine optionale lokale XML-Datei wie `key-pw.xml` oder `secrets.local.xml` ist nur als restriktiv geschützte, Git-ignorierte Klartextdatei zulässig. Ins Repository darf höchstens eine leere Beispielstruktur. Die Secret-Provider-Abstraktion verwendet im normalen Betrieb das
Betriebssystem-Keyring, unter Windows den Credential Manager. Der Gemini-Key wird
verdeckt eingegeben, nie ausgegeben und erst unmittelbar vor einem zulässigen
Cloudaufruf gelesen. Für API-Keys wird keine XML-Secret-Datei verwendet.
Eine vorhandene SSH-Schlüsseldatei aus früherer LS25-/Gitea-Arbeit bleibt lokal. Pfad, privater Inhalt und Gerätekennung werden nicht dokumentiert. Eine vorhandene SSH-Schlüsseldatei aus früherer LS25-/Gitea-Arbeit bleibt lokal. Pfad, privater Inhalt und Gerätekennung werden nicht dokumentiert.
## Cloud und Nullkostenmodus
- Datenschutzklassifizierung `allowed`, `ask` oder `never` erfolgt lokal.
- `ask` ist ohne ausdrückliches Ja abgelehnt; `never` ist nicht übersteuerbar.
- Prompts werden auf den minimal freigegebenen Kontext begrenzt.
- Gemini bleibt ohne Aktivierung, Key und lokale Nicht-Billing-Bestätigung aus.
- Javis aktiviert kein Billing und nutzt keine kostenpflichtigen Zusatzfunktionen.
- Die externe Billingfreiheit kann Javis nicht technisch garantieren; Pascal muss
sie in Google AI Studio beziehungsweise dem Google-Projekt selbst prüfen.
## Obsidian ## Obsidian
- gesamter Vault zunächst nur lesend - gesamter Vault zunächst nur lesend