feat: add multilingual dictation and simplify chat STT picker
This commit is contained in:
@@ -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 };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user