3.8 KiB
Changelog
Alle Änderungen werden hier dokumentiert. Format orientiert an Keep a Changelog, Versionierung nach Semver.
[Unreleased]
[0.3.0] — 2026-06-04
Hinzugefügt — BYOK (Bring Your Own Key)
Neue Quelle LLMBackendID.byok: der Nutzer hinterlegt einen eigenen
Dritt-API-Key (OpenAI / Anthropic / Gemini / Mistral); der Call geht
direkt vom Gerät zum Anbieter — der Key berührt mana-Infrastruktur
nie. Symmetrisch zum Web-Pendant @mana/browser-llm + @mana/byok-providers.
Sources/ManaLLM/Byok/:ByokTypes.swift—ByokProviderID,ByokSelection,ByokMessage,ByokKeyResolver,ByokProvider-Protocol,ByokError.ByokProviders.swift— vierURLSession-Streaming-Adapter (SSE), OpenAI/Mistral via gemeinsamen OpenAI-compat-Pfad, Anthropic + Gemini mit ihren eigenen Schemas.ByokKeyVault.swift— Keychain-Speicher, bewusst app-privat, NICHT ingroup.ev.mana.session; keine Cross-Device-Sync.makeResolver(…).ByokBackend.swift—LLMBackend-Konformität; ohne Resolverunavailable; Prompt/Key werden nie geloggt.
LLMRouter:setByokResolver(_:defaultProvider:),setAllowByokInPick(_:). BYOK wird nie still gewählt (Datenschutz-Disziplin, analog Web) — direkt nutzbar überbackend(for: .byok).LLMBackendID.byok.isOnDeviceLLM == false(Inhalt geht zu Dritt-SaaS).
Apps müssen anpassen: LLMBackendID hat einen neuen Case .byok —
switch über alle Cases (z.B. in Settings-UI) muss ihn behandeln.
Compliance-Regel (sensible Inhalte per Default nicht über BYOK) siehe
mana/docs/COMPLIANCE.md §5. 11 neue Tests (netzwerk-/keychain-frei),
swift build + swift test grün (23 gesamt).
[0.2.0] — 2026-05-22
Minor — Preference-Stores nach ManaLLM geliftet + UI-Konsoldierung
in mana-swift-ui möglich gemacht.
Hintergrund
Vorher lebten LLMBackendPreferenceStore und
LLMDownloadOverCellularStore mit Memoro-spezifischen UserDefaults-Keys
(memoro.llmBackend, memoro.llmDownloadOverCellular) ausschließlich
in memoro-native. Damit die anderen ManaLLM-Konsumenten (Pageta,
Comicello, Herbatrium) ebenfalls eine Settings-UI bekommen können
(siehe mana-swift-ui 0.8.0 / ManaLLMUI), wandern die Stores hier
ins Package und nutzen App-übergreifende Keys (mana.llm.*).
Neu
LLMBackendPreferenceStore— UserDefaults-Store für die On-Device- LLM-Wahl (mana.llm.backend). Default:.appleFM.LLMDownloadOverCellularStore— WiFi-only-Default für Modell- Downloads (mana.llm.allowCellular). Default:false.- Beide Stores migrieren beim ersten Read einmalig aus Legacy-Keys:
memoro.llmBackend→mana.llm.backendmemoro.onDeviceLLMEnabled(alter Bool-Toggle) → mapped zu.appleFM/.noOp, dannmana.llm.backendmemoro.llmDownloadOverCellular→mana.llm.allowCellular
LLMBackend.removeCachedModel()— neue Protocol-Methode mit Default-No-Op-Impl.GemmaBackendüberschreibt (löscht HF-Repo-Pfad im App-Group-Container). Apple FM und NoOp bleiben No-Op.- Test-Suite
LLMPreferenceStoresTests(13 Tests,.serializedwegenUserDefaults.standard).
Geändert
GemmaBackend.removeCachedModel()-Signatur:throws→async throws(für Protocol-Konformität). Caller müssentry awaitschreiben statttry.
Migration für Apps
Apps die schon ManaLLM konsumieren brauchen nichts zu ändern —
Symbol-Namen bleiben identisch, Defaults bleiben identisch, alte
UserDefaults-Keys werden transparent migriert. Memoro hat seine
lokalen Store-Duplikate gelöscht; der Build bleibt grün, weil
Memoro import ManaLLM schon hatte.
Apps die heute keine LLM-Settings-UI haben können jetzt
ManaLLMUI aus mana-swift-ui 0.8.0 einhängen (drop-in).