/** * Default Model Extension * * Setzt bei jedem Session-Start das Modell zurück auf den in settings.json * definierten defaultProvider/defaultModel. * * Dadurch bleibt das Standard-Modell stabil: Man kann in einer Session * temporär ein anderes Modell wählen (via /model oder Ctrl+G). Nach * Session-Ende, Reload oder neuer Session gilt wieder der Default. * * Konfiguration in ~/.pi/agent/settings.json: * "defaultProvider": "anthropic", * "defaultModel": "claude-sonnet-4-20250514", */ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; import * as fs from "node:fs"; import * as path from "node:path"; function getSettingsPath(): string { return path.join( process.env.HOME || "/home/xray", ".pi", "agent", "settings.json", ); } function readDefaultModel(): { provider: string | null; model: string | null; } { try { const raw = fs.readFileSync(getSettingsPath(), "utf-8"); const settings = JSON.parse(raw); return { provider: settings.defaultProvider ?? null, model: settings.defaultModel ?? null, }; } catch { return { provider: null, model: null }; } } export default function (pi: ExtensionAPI) { pi.on("session_start", async (event, ctx) => { if (!ctx.hasUI) return; // Bei Startup (Programmstart) ist das Modell bereits korrekt gesetzt: // entweder von CLI-Args (--provider/--model) oder aus settings.json. // Nur bei Resume/Fork/Reload kann ein veraltetes Modell stammen. if (event.reason === "startup") return; const { provider, model } = readDefaultModel(); if (!provider || !model) return; // Prüfen ob das aktuelle Modell bereits dem Default entspricht const currentProvider = ctx.model?.provider; const currentModel = ctx.model?.id; if (currentProvider === provider && currentModel === model) return; // Modell-Objekt aus dem Registry suchen const modelObj = ctx.modelRegistry?.find?.(provider, model); if (!modelObj) return; try { const success = await pi.setModel(modelObj); if (!success) { ctx.ui.notify( `⚠️ Default-Modell ${provider}/${model} nicht verfügbar (API-Key?)`, "warning", ); } } catch { // Silent — Modell-Wechsel fehlgeschlagen, weitermachen } }); }