36 lines
1.2 KiB
TypeScript
36 lines
1.2 KiB
TypeScript
|
|
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<MagicCodeConfig> {
|
||
|
|
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") };
|
||
|
|
}
|