feat(tui): persist model tier selection and fix formatting

Persist /model tier choice to ~/.local/share/flynn/preferences.json so
it survives restarts. Decode HTML entities (e.g. ') in markdown
renderer output. Suppress noisy logger.info and punycode deprecation
warnings in TUI startup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
William Valentin
2026-02-10 12:23:12 -08:00
parent 50471d63af
commit 411c6d84a2
8 changed files with 126 additions and 13 deletions
+29
View File
@@ -0,0 +1,29 @@
import { readFileSync, writeFileSync, mkdirSync } from 'fs';
import { dirname, resolve } from 'path';
export interface Preferences {
modelTier?: string;
}
export function loadPreferences(dataDir: string): Preferences {
const filePath = resolve(dataDir, 'preferences.json');
try {
const raw = readFileSync(filePath, 'utf-8');
return JSON.parse(raw) as Preferences;
} catch {
return {};
}
}
export function savePreference(dataDir: string, key: string, value: unknown): void {
const filePath = resolve(dataDir, 'preferences.json');
let prefs: Record<string, unknown> = {};
try {
prefs = JSON.parse(readFileSync(filePath, 'utf-8'));
} catch {
// start fresh
}
prefs[key] = value;
mkdirSync(dirname(filePath), { recursive: true });
writeFileSync(filePath, JSON.stringify(prefs, null, 2) + '\n');
}