feat: add multilingual dictation and simplify chat STT picker

This commit is contained in:
2026-10-26 00:58:25 +03:00
parent 1c6ae6b2e2
commit bdd7d5e866
10 changed files with 140 additions and 40 deletions
+9 -7
View File
@@ -12,7 +12,7 @@
*/
import type { ThinkingLevel } from "@earendil-works/pi-agent-core";
import { isHexColor, type ChatSettings } from "../core";
import { isHexColor, isLanguage, isSttLanguage, type ChatSettings } from "../core";
import type {
AgentSettings,
AppearanceSettings,
@@ -75,7 +75,7 @@ function asRecord(body: unknown): Record<string, unknown> | null {
return body as Record<string, unknown>;
}
/** general: { autoUpdate?: boolean } */
/** Independent interface/STT language choices and automatic updates. */
export function parseGeneralSettingsBody(body: unknown): SettingsBodyResult<GeneralSettings> {
const raw = asRecord(body);
if (!raw) return { ok: false, error: "Invalid JSON body" };
@@ -86,11 +86,13 @@ export function parseGeneralSettingsBody(body: unknown): SettingsBodyResult<Gene
}
settings.autoUpdate = raw.autoUpdate;
}
for (const key of ["language", "sttLanguage"] as const) {
if (raw[key] !== undefined) {
if (raw[key] !== "en" && raw[key] !== "ru") return { ok: false, error: `${key} must be "en" or "ru"` };
settings[key] = raw[key];
}
if (raw.language !== undefined) {
if (!isLanguage(raw.language)) return { ok: false, error: 'language must be "en" or "ru"' };
settings.language = raw.language;
}
if (raw.sttLanguage !== undefined) {
if (!isSttLanguage(raw.sttLanguage)) return { ok: false, error: 'sttLanguage must be "en", "ru", or "multi"' };
settings.sttLanguage = raw.sttLanguage;
}
return { ok: true, settings };
}