feat: add local zero-cost configuration

This commit is contained in:
2026-07-30 18:03:40 +02:00
parent e57186f678
commit ab6ea485dc
7 changed files with 232 additions and 30 deletions
+8 -2
View File
@@ -1,5 +1,11 @@
# Konfiguration
`javis.example.toml` dokumentiert ausschließlich nicht geheime Einstellungen. Für den lokalen Betrieb wird später eine ignorierte `javis.toml` erzeugt.
`javis.example.toml` dokumentiert ausschließlich nicht geheime Einstellungen.
Die lokale Datei liegt standardmäßig unter `JAVIS_DATA_DIR\javis.toml` und damit
außerhalb des Repositorys. `JAVIS_CONFIG_FILE` darf alternativ einen absoluten
Pfad angeben. Umgebungsvariablen überschreiben lokale TOML-Werte.
Secret-Werte gehören nicht in TOML, Code oder Git. Die bevorzugte Zielarchitektur verwendet einen Secret-Provider, beispielsweise Betriebssystem-Keyring, geschützte Umgebungsvariablen oder später Docker Secrets. Falls Pascal XML nutzt, liegt die echte Datei nur lokal, mit restriktiven Rechten und Git-Ausschluss. Das Modell erhält niemals ihren Inhalt.
Secret-Werte gehören nicht in TOML, Code oder Git. Der Gemini-Key liegt im
Betriebssystem-Keyring und wird mit `javis secrets` verwaltet. Die TOML-Datei
enthält nur die lokale Bestätigung, dass Pascal das Google-Projekt ohne Billing
betreibt. Javis kann den externen Billingstatus nicht technisch verifizieren.
+15 -20
View File
@@ -1,25 +1,20 @@
# Entwurf für eine spätere TOML-Konfiguration.
# Der erste Chat liest die in .env.example genannten Umgebungsvariablen.
[app]
display_name = "Javis"
language = "de"
[paths]
data_dir = ""
[providers]
active = "ollama"
active = "auto"
[providers.ollama]
model = "qwen3:8b"
ollama_base_url = "http://127.0.0.1:11434"
base_url = "http://127.0.0.1:11434"
timeout_seconds = 180
cloud_fallback = false
[obsidian]
[providers.gemini]
enabled = false
vault_path = ""
write_areas = []
[security]
secrets_provider = "none"
require_approval_for_writes = true
model = "gemini-3.6-flash"
optional_model = "gemini-3.5-flash-lite"
free_only = true
billing_confirmed_disabled = false
max_requests_per_day = 25
max_input_chars = 12000
max_output_tokens = 1024
timeout_seconds = 30
max_attempts = 2
max_context_messages = 6