Script for easily configuring, using, switching and comparing local offline coding models
1import { log } from "../log.js";
2import { writeConfig } from "../util.js";
3import {
4 AIDER_CONFIG_FILE,
5 AIDER_ENV_FILE,
6 OPENCODE_CONFIG_FILE,
7 PI_MODELS_FILE,
8 PI_SETTINGS_FILE,
9 CODEX_CONFIG_FILE,
10} from "../config.js";
11import { getActiveChatModel, getActiveTui } from "../runtime-config.js";
12import { aiderConfig, aiderEnv } from "../templates/aider.js";
13import { opencodeConfig } from "../templates/opencode.js";
14import { piModelsConfig, piSettingsConfig } from "../templates/pi.js";
15import { codexConfig } from "../templates/codex.js";
16
17export async function writeTuiConfig(): Promise<void> {
18 const chatModel = getActiveChatModel();
19 const tui = getActiveTui();
20
21 // Always write all configs so switching TUIs doesn't require re-running setup
22 await writeConfig(AIDER_CONFIG_FILE, aiderConfig(chatModel.id));
23 await writeConfig(AIDER_ENV_FILE, aiderEnv());
24 log(`Aider config written to ${AIDER_CONFIG_FILE}`);
25
26 await writeConfig(
27 OPENCODE_CONFIG_FILE,
28 opencodeConfig(chatModel.id, chatModel.name),
29 );
30 log(`OpenCode config written to ${OPENCODE_CONFIG_FILE}`);
31
32 await writeConfig(
33 PI_MODELS_FILE,
34 piModelsConfig(chatModel.id, chatModel.name),
35 );
36 await writeConfig(PI_SETTINGS_FILE, piSettingsConfig());
37 log(`Pi config written to ${PI_MODELS_FILE}`);
38
39 await writeConfig(CODEX_CONFIG_FILE, codexConfig(chatModel.id));
40 log(`Codex config written to ${CODEX_CONFIG_FILE}`);
41
42 // Goose and gptme are configured via env vars at launch time (no config files needed)
43
44 log(`Active TUI: ${tui.name}`);
45}