import { readFile } from "node:fs/promises"; import { join } from "node:path"; export interface MagicCodeConfig { mode?: string; model?: string; } export const DEFAULT_MODE = "claudecode"; // mode par défaut : extension ClaudeCode async function readJson(path: string): Promise { try { return JSON.parse(await readFile(path, "utf8")) as MagicCodeConfig; } catch { return {}; } } /** Priorité : flags CLI > variables d'environnement > config projet > config utilisateur > défauts. */ export async function resolveConfig(opts: { cwd: string; homeDir: string; flags: MagicCodeConfig; }): Promise<{ mode: string; model?: string }> { const user = await readJson(join(opts.homeDir, ".magiccode", "config.json")); const project = await readJson(join(opts.cwd, ".magiccode", "config.json")); const env: MagicCodeConfig = { mode: process.env.MAGICCODE_MODE, model: process.env.MAGICCODE_MODEL, }; const pick = (k: keyof MagicCodeConfig): string | undefined => opts.flags[k] ?? env[k] ?? project[k] ?? user[k]; // Pas de modèle par défaut : s'il n'est pas défini explicitement, l'utilisateur le choisit au démarrage. return { mode: pick("mode") ?? DEFAULT_MODE, model: pick("model") }; }