import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; import { loadConfig, saveConfig, testConnection } from "./shared"; export function registerQmemConfig(pi: ExtensionAPI) { pi.registerCommand("qmem:config", { description: "Menu configurazione Memory Gateway: URL, API key, test connessione (salva in ~/.config/pi-qmem/config.json)", handler: async (args, ctx) => { const cfg = loadConfig(); const parts = (args ?? "").trim().split(/\s+/).filter(Boolean); // --- Modalitร  CLI rapida (non interattiva) --- if (parts.length > 0) { if (parts[0] === "url" && parts[1]) { cfg.url = parts[1].replace(/\/+$/, ""); saveConfig(cfg); ctx.ui.notify(`qmem: URL aggiornato a ${cfg.url}`, "info"); return; } if (parts[0] === "apikey" && parts[1]) { cfg.apiKey = parts[1]; saveConfig(cfg); ctx.ui.notify("qmem: API key aggiornata", "info"); return; } if (parts[0] === "test") { await testConnection(ctx, cfg); return; } ctx.ui.notify("Uso: /qmem:config url | apikey | test", "warning"); return; } // --- Modalitร  menu interattivo (TUI/RPC) --- if (!ctx.hasUI) { ctx.ui.notify( `qmem: url=${cfg.url}, apiKey=${cfg.apiKey ? cfg.apiKey.slice(0, 8) + "..." : "(mancante)"}`, "info", ); return; } const choice = await ctx.ui.select( "qmem โ€” Configurazione", [ "๐ŸŒ Imposta URL gateway", "๐Ÿ”‘ Cambia API key", "๐Ÿ”Œ Test connessione", "๐Ÿ“‹ Mostra configurazione", "โ†ฉ๏ธ Annulla", ], ); if (!choice || choice.startsWith("โ†ฉ๏ธ")) return; if (choice.startsWith("๐ŸŒ")) { const url = await ctx.ui.input("URL del Memory Gateway:", cfg.url, { timeout: 60_000 }); if (url && url.trim()) { cfg.url = url.trim().replace(/\/+$/, ""); saveConfig(cfg); ctx.ui.notify(`qmem: URL aggiornato a ${cfg.url}`, "info"); } return; } if (choice.startsWith("๐Ÿ”‘")) { const key = await ctx.ui.input("API key (lascia vuoto per non cambiare):", "", { timeout: 60_000 }); if (key && key.trim()) { cfg.apiKey = key.trim(); saveConfig(cfg); ctx.ui.notify("qmem: API key aggiornata", "info"); } return; } if (choice.startsWith("๐Ÿ”Œ")) { await testConnection(ctx, cfg); return; } if (choice.startsWith("๐Ÿ“‹")) { ctx.ui.notify( `qmem: url=${cfg.url}, apiKey=${cfg.apiKey ? cfg.apiKey.slice(0, 8) + "..." : "(mancante)"}`, "info", ); return; } }, }); }