Files
pi-qmem/extensions/config-command.ts
T
Matteo Benedetto 4776b4b496 refactor: split gateway and pi-qmem extension into modules
- gateway: separate config, models, state, audit, guardrail, embeddings,
  store, metrics, cleanup and routes; keep main.py as FastAPI bootstrap
- extension: split client/config, six tools, config command and rules;
  preserve jiti entrypoint and registrations
- Dockerfile copies the complete gateway module set
- tests: update monkeypatch boundaries for modular config/state
2026-08-24 16:19:19 +02:00

91 lines
2.5 KiB
TypeScript

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 <URL> | apikey <KEY> | 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;
}
},
});
}