// Der gemeinsame Kontext der Kern-Dienste (5.5.0, Separation of Concerns): // Jeder Dienst bekommt genau das hier — die Datenbank, die Wege nach // draußen und das Protokoll — statt auf Modul-Globale zu greifen. So ist // jeder Dienst für sich lesbar und mit einem Fake-Kontext testbar. import type { DbStatus, KernNachricht } from '../gemeinsam/nachrichten' import type { Protokoll } from '../gemeinsam/protokoll' import type { Datenbank } from './speicher/db' export interface KernKontext { /** null, wenn die Datenbank nicht zu öffnen war — der Kern läuft trotzdem (R4). */ readonly db: Datenbank | null readonly dbStatus: DbStatus /** Nur ans Fenster (wenn eins verbunden ist). */ anFenster(nachricht: KernNachricht): void /** Ans Haupt UND ans Fenster — für alles, was Tray/Taskleiste/Updater brauchen. */ anHauptUndFenster(nachricht: KernNachricht): void /** Eine Zeile ohne Warnzeichen fürs Ereignis-Protokoll — und in die Datei. */ hinweis(text: string): void /** Eine Zeile MIT Warnzeichen (kern-fehler) — und in die Datei. */ fehler(text: string): void readonly protokoll: Protokoll /** Der Gerüst-Beweis (--smoke-kern): ohne Netz, ohne MakeMKV, ohne Takte. */ readonly smoke: boolean } /** --datenbank= kommt vom Haupt (der Kern kennt Electrons app.getPath * nicht — er ist ein reiner Node-Prozess). */ export function datenbankPfadAusArgv(argv: readonly string[]): string | null { for (const arg of argv) { if (arg.startsWith('--datenbank=')) { const pfad = arg.slice('--datenbank='.length) if (pfad.length > 0) return pfad } } return null } /** Einstellung lesen mit Vorgabe — die eine Quelle (§ 6.7). */ export function einstellung(kontext: Pick, schluessel: string, vorgabe = ''): string { const wert = kontext.db?.einstellungLesen(schluessel) return wert === null || wert === undefined ? vorgabe : wert }