* feat: implementation of language detection
* run utility scripts in tasks
* fix: addiitonal fixes for background utilities
* feat: toast() also for utility scripts
---------
Co-authored-by: hugo <hugoms@me.com>
* chore: just a plan update
* Add LM Studio as local AI provider (OpenAI-compatible, like Ollama)
* Convert WebP thumbnails to JPEG before image analysis for LM Studio compatibility
* Strengthen language enforcement in image analysis prompt for local models
* Use i18n localized prompts for image analysis instead of English instructions
* Add airplane mode (Flugmodus) with status bar toggle and offline model preferences
* Fix flightmode: persist model IDs, skip network when offline, airplane icon
* Auto-fallback to offline models in airplane mode for chat, title, and image analysis
* Auto-select first local model as offline fallback when no explicit offline model configured
* Block git fetch/pull/push and site upload in airplane mode
* fix: thumbnails optimized for AI
* fix: error handling in airplane mode
---------
Co-authored-by: hugo <hugoms@me.com>
- Add SecureKeyStore class using safeStorage encrypt/decrypt with base64 in SQLite
- Update chatHandlers to store/retrieve API keys via SecureKeyStore
- Delete old plain-text opencode_api_key on startup (no migration, re-enter key)
- Add deleteSetting() to ChatEngine
- Add 14 SecureKeyStore unit tests and 6 chatHandlers keychain integration tests
- Update existing chatHandlers test mocks for SecureKeyStore
- Update MISTRAL_PLAN.md: mark PR 1 done, remove legacy fallback from PR 2 scope
- Fix OpenAI path using accumulatedText instead of round-specific text
in assistant messages for multi-round tool conversations
- Guard JSON.parse in both SSE parsers against corrupted events
- Extract cacheReadTokens from OpenAI prompt_tokens_details when available
- Add tests for JSON parse resilience and cache token extraction (7 new tests)