docs: finalize Gemini privacy handoff
This commit is contained in:
+13
-10
@@ -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.
|
||||
2. Core: implementierter Gesprächsablauf und Sitzungslogik.
|
||||
3. Providers: kleine Schnittstelle und implementierter lokaler Ollama-Adapter.
|
||||
4. Memory: implementierte SQLite-Sitzungen; ein semantischer Index ist nur geplant.
|
||||
3. Providers: kleine Schnittstelle, lokaler Ollama- und optionaler Gemini-Adapter.
|
||||
4. Memory: SQLite-Sitzungen und separates inhaltsfreies Provider-Audit.
|
||||
5. Obsidian: zunächst lesender Adapter, später eng begrenzte Entwürfe.
|
||||
6. Tools und Status: feste Schemas, Allowlists, Timeouts und bereinigte Ausgaben.
|
||||
7. Security: Freigaben, Secret-Provider und Berechtigungsprüfung.
|
||||
8. Audit: nachvollziehbare Aktionen ohne geheime Inhalte.
|
||||
7. Security: lokaler Datenschutzrouter, Freigaben und Betriebssystem-Keyring.
|
||||
8. Audit: Provider-Metadaten ohne Prompts, Antworten oder geheime Inhalte.
|
||||
|
||||
## Plattformgrenzen
|
||||
|
||||
@@ -24,10 +24,13 @@ Javis beginnt als modularer Monolith. Module besitzen klare Zuständigkeiten und
|
||||
|
||||
## Implementierter Chatfluss
|
||||
|
||||
`interface.cli` nimmt Text an, `core.chat_service` verbindet Sitzungsverlauf und
|
||||
Provider, `providers.ollama` spricht nur die lokale Ollama-HTTP-API an und
|
||||
`memory.sqlite_store` speichert erfolgreiche Benutzer-/Assistentenpaare atomar.
|
||||
Scheitert das Modell, wird keine erfundene Antwort gespeichert.
|
||||
`interface.cli` nimmt Text an und verbindet den `core.provider_router`.
|
||||
Dieser klassifiziert die aktuelle Anfrage vollständig lokal, minimiert den
|
||||
freigegebenen Kontext und wählt Gemini oder Ollama. `core.chat_service` speichert
|
||||
erst eine erfolgreiche Antwort zusammen mit der Benutzernachricht atomar.
|
||||
|
||||
Es existiert kein Cloudadapter, Toolaufruf, Obsidian-Zugriff oder eigener
|
||||
öffentlicher Netzwerkdienst. Der Ollama-Endpunkt muss eine Loopback-Adresse sein.
|
||||
Gemini ist nur bei lokaler Aktivierung, vorhandenem Key, `free_only = true`,
|
||||
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
@@ -58,11 +58,12 @@ Rootserver:
|
||||
- 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,
|
||||
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
|
||||
Smoke-Test nutzte `D:\Javis-Data\runtime\core-chat-smoke`.
|
||||
- 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
|
||||
`gemini-3.5-flash-lite` sind stabile GA-Modelle mit Free-Tier-Textnutzung;
|
||||
Standard dieses Pakets wird ausschließlich `gemini-3.6-flash`.
|
||||
@@ -107,8 +108,8 @@ Rootserver:
|
||||
- Ollama-Provider akzeptiert nur lokale HTTP-Loopback-Adressen
|
||||
- SQLite-Sitzungsspeicher mit atomaren Benutzer-/Assistentenpaaren
|
||||
- Laufzeitdaten außerhalb von Git über `JAVIS_DATA_DIR` oder sicheren Plattformstandard
|
||||
- aktuell ausschließlich lokales Modell; als separates Folgepaket ist Gemini als
|
||||
bevorzugter kostenloser Provider für ausdrücklich cloudgeeignete Inhalte geplant
|
||||
- Hybridprovider bevorzugt Gemini für cloudgeeignete Inhalte und verwendet
|
||||
Ollama bei Datenschutz, Ablehnung, Offline-, Quota- und Providerfehlern
|
||||
- strikter Nullkostenmodus ohne Billing-Aktivierung oder kostenpflichtigen Fallback;
|
||||
lokales Modell bleibt Offline-, Datenschutz-, Ausfall- und Quota-Fallback
|
||||
- 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
|
||||
deutsche Antworten, Sitzungskontext, `/sessions`, `/exit`, Neustart,
|
||||
`/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
|
||||
|
||||
## Git-Stand
|
||||
@@ -219,6 +223,13 @@ Abnahmestatus:
|
||||
- lokaler Merge nach `main`: `f3d6dfb`
|
||||
- geprüfter und gepushter Abschlussstand vor diesem Handoff-Update: `0a550e6`
|
||||
- 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
|
||||
- kein Force-Push und keine umgeschriebene Historie
|
||||
|
||||
@@ -231,11 +242,13 @@ Abnahmestatus:
|
||||
- aktuell: isolierte Python-Toolchain und reproduzierbare Entwicklungsumgebung
|
||||
- aktuell: portable Ollama-Laufzeit und `qwen3:8b` außerhalb von Git verifiziert
|
||||
- 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
|
||||
|
||||
- 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
|
||||
- genauer späterer Obsidian-Schreibbereich ist nicht freigegeben
|
||||
- normaler Secret-Provider ist festgelegt: Betriebssystem-Keyring; eine
|
||||
@@ -260,12 +273,9 @@ Abnahmestatus:
|
||||
|
||||
## Nächster sinnvoller Auftrag
|
||||
|
||||
Auf dem bestehenden Feature-Branch als nächstes einzelnes Arbeitspaket:
|
||||
|
||||
1. veraltete Architektur-, Sicherheits-, Changelog- und Nächste-Sitzung-Texte
|
||||
auf den tatsächlich implementierten Stand bringen
|
||||
2. Feature-Branch pushen und vor Pascals manuellem Live-Test stoppen
|
||||
3. nicht nach `main` mergen
|
||||
Pascal führt anhand `docs/NEXT_SESSION.md` den echten Gemini-, Ask- und
|
||||
Never-Test mit ausschließlich künstlichen beziehungsweise unpersönlichen Daten
|
||||
durch. Bis zu seiner Bestätigung nicht nach `main` mergen.
|
||||
|
||||
Keinen API-Key in Chat, Git, Obsidian, Logs oder Dokumentation übernehmen.
|
||||
|
||||
|
||||
+2
-1
@@ -10,7 +10,8 @@
|
||||
| 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 |
|
||||
|
||||
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.
|
||||
|
||||
Ausführliche Begründungen stehen unter [`docs/adr`](adr/README.md).
|
||||
|
||||
+35
-20
@@ -2,29 +2,44 @@
|
||||
|
||||
## Ziel
|
||||
|
||||
Nächstes separates Featurepaket: kostenlose Gemini-Anbindung mit strikt lokalem
|
||||
Datenschutzrouting und Ollama als Ausfall-, Quota-, Offline- und Sensitivitätsfallback.
|
||||
Pascal nimmt den Gemini-Free-Provider und die lokalen Fallbacks manuell ab.
|
||||
Bis dahin bleibt `feat/gemini-privacy-router` ungemergt.
|
||||
|
||||
## Vor Änderungen erneut prüfen
|
||||
## Vorbereitung durch Pascal
|
||||
|
||||
1. `git status --short --branch`
|
||||
2. `git log -1 --oneline`
|
||||
3. `docs/PROJECT_STATUS.md`
|
||||
4. offene Entscheidungen in `docs/DECISIONS.md`
|
||||
1. In Google AI Studio einen neuen, nur für Javis verwendeten Gemini-Auth-Key
|
||||
erstellen.
|
||||
2. Für das zugehörige Google-Projekt kein Billing verbinden beziehungsweise den
|
||||
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
|
||||
offizieller Google-Dokumentation prüfen; Kandidaten nicht ungeprüft übernehmen
|
||||
- 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
|
||||
Die erste Einrichtung verlangt zwei lokale Bestätigungen. Der zweite Befehl liest
|
||||
den Key verdeckt ein und speichert ihn im Windows Credential Manager.
|
||||
|
||||
## Nicht beginnen
|
||||
## Manueller Test
|
||||
|
||||
Keinen echten Schlüssel anfordern oder dokumentieren, kein Billingkonto verbinden,
|
||||
keine kostenpflichtigen Fallbacks, keinen vollständigen Vault übertragen und
|
||||
weiterhin kein Obsidian-Schreiben, SSH-/Serverzugriff, Sprache oder Living Mind.
|
||||
1. `/status`: Key und Konfiguration `ja`, Nullkostenmodus `aktiv`.
|
||||
2. Unpersönlich: `Erkläre in zwei Sätzen, was eine SQLite-Transaktion ist.`
|
||||
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.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Projektstatus
|
||||
|
||||
Stand: lokaler Textchat auf `main`, 30.07.2026.
|
||||
Stand: Gemini-Free-Feature automatisiert geprüft, 30.07.2026.
|
||||
|
||||
## Erreicht
|
||||
|
||||
@@ -30,8 +30,10 @@ Stand: lokaler Textchat auf `main`, 30.07.2026.
|
||||
|
||||
## Abnahmestatus
|
||||
|
||||
- automatisiert durch Codex getestet: ja
|
||||
- manuell durch Pascal getestet: ja, am 30.07.2026
|
||||
- Core-Chat automatisiert durch Codex getestet: ja
|
||||
- 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
|
||||
|
||||
## Aktuelles Featurepaket
|
||||
@@ -66,7 +68,7 @@ Stand: lokaler Textchat auf `main`, 30.07.2026.
|
||||
## Nicht implementiert
|
||||
|
||||
Obsidian-Adapter, Tools, Serverzugriff, Sprache, Mobile Client,
|
||||
Living-Mind-Frontend und automatische Ollama-Prozessverwaltung.
|
||||
Living-Mind-Frontend.
|
||||
|
||||
## Git
|
||||
|
||||
@@ -86,5 +88,6 @@ Living-Mind-Frontend und automatische Ollama-Prozessverwaltung.
|
||||
Ollama wird bewusst manuell in einem eigenen Terminal gestartet. Antworten werden
|
||||
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.
|
||||
Nur Abschlussdokumentation und Feature-Branch-Push fehlen. Es wurde kein echter
|
||||
API-Key angefordert, angezeigt oder konfiguriert und keine Cloudanfrage ausgeführt.
|
||||
Der echte Gemini-/Fallback-Test durch Pascal und danach die Mergeentscheidung
|
||||
fehlen. Es wurde kein echter API-Key angefordert, angezeigt oder konfiguriert und
|
||||
keine Cloudanfrage ausgeführt.
|
||||
|
||||
+14
-1
@@ -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.
|
||||
|
||||
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.
|
||||
|
||||
## 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
|
||||
|
||||
- gesamter Vault zunächst nur lesend
|
||||
|
||||
Reference in New Issue
Block a user