Initial open-source release

This commit is contained in:
Will Chen
2025-04-11 09:37:05 -07:00
commit 43f67e0739
208 changed files with 45476 additions and 0 deletions

51
src/main/settings.ts Normal file
View File

@@ -0,0 +1,51 @@
import fs from "node:fs";
import path from "node:path";
import { getUserDataPath } from "../paths/paths";
import { UserSettingsSchema, type UserSettings } from "../lib/schemas";
const DEFAULT_SETTINGS: UserSettings = {
selectedModel: {
name: "auto",
provider: "auto",
},
providerSettings: {},
};
const SETTINGS_FILE = "user-settings.json";
function getSettingsFilePath(): string {
return path.join(getUserDataPath(), SETTINGS_FILE);
}
export function readSettings(): UserSettings {
try {
const filePath = getSettingsFilePath();
if (!fs.existsSync(filePath)) {
fs.writeFileSync(filePath, JSON.stringify(DEFAULT_SETTINGS, null, 2));
return DEFAULT_SETTINGS;
}
const rawSettings = JSON.parse(fs.readFileSync(filePath, "utf-8"));
// Validate and merge with defaults
const validatedSettings = UserSettingsSchema.parse({
...DEFAULT_SETTINGS,
...rawSettings,
});
return validatedSettings;
} catch (error) {
console.error("Error reading settings:", error);
return DEFAULT_SETTINGS;
}
}
export function writeSettings(settings: Partial<UserSettings>): void {
try {
const filePath = getSettingsFilePath();
const currentSettings = readSettings();
const newSettings = { ...currentSettings, ...settings };
// Validate before writing
const validatedSettings = UserSettingsSchema.parse(newSettings);
fs.writeFileSync(filePath, JSON.stringify(validatedSettings, null, 2));
} catch (error) {
console.error("Error writing settings:", error);
}
}