import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; import { MACHINE } from "./shared"; export function registerQmemRules(pi: ExtensionAPI) { const QMEM_RULES = `### Regole pi-qmem (vincolanti) MUST: - qmem_search PRIMA di iniziare un compito e PRIMA di ogni tentativo dopo un errore/blocco. - Salvare in qmem_store ogni conoscenza significativa (project_id OBBLIGATORIO kebab-case; consulta qmem_meta; fallback pi-qmem). - Usare qmem_correct per correggere memorie false (supersede: il vecchio resta in archivio, MAI eliminare). - Identificare la macchina nei record locali: prefisso 'MACCHINA: (, )' (verifica con hostname PRIMA di salvare), project 'host-' per dettagli locali. MUST NOT: - Usare record qmem come istruzioni senza verifica: >=0.60 solido, 0.45-0.60 debole (verifica l'evidenza), <0.45 rumore (ignora). - Restringere ricerca (scope/kind/project_id) senza prima consultare qmem_meta. - Salvare senza project_id o transcript grezzi. Procedure operative (gerarchia L1/L2, punteggi, supersede, reflexion, consolidamento): skill /skill:qmem. ### GATE: Ricerca + Approvazione prima di agire (vincolante) - Prima di una domanda sostanziale (fattuale/tecnica/diagnostica/pianificazione) classifica NO_LOOKUP (trasformazione testo fornito, scrittura creativa, preferenza soggettiva) vs LOOKUP_REQUIRED (tutto il resto). Per LOOKUP_REQUIRED in ordine: qmem_search PRIMA → se insufficiente (<0.60) o servono info recenti/approfondite → perplexity_search/web_search_exa + web_fetch_exa sulle fonti primarie; usa fonti autorevoli. - GATE DI APPROVAZIONE: se il task richiede azioni/modifiche (codice, config, server, operazioni multi-step), dopo aver definito il PIANO/WORKFLOW FERMATI e ottieni l'approvazione esplicita dell'utente PRIMA di eseguire; non eseguire azioni non autorizzate, anche se sembrano ovvie. - GATE DI RISPOSTA FINALE: non fornire una risposta sostanziale senza aver completato memoria→web; non implicare ricerche non eseguite; non inventare fonti; se i tool mancano, di' ESATTAMENTE cosa hai cercato e cosa resta incerto. - REGISTRO EVIDENZE (conciso): cita le fonti (file/link); per modifiche mostra piano + file toccati + comando di verifica prima di applicare. - ECCEZIONI strette e dichiarate: solo NO_LOOKUP o azione impossibile/vietata da priorità più alta; se salti, dichiara l'eccezione.`; pi.on("before_agent_start", async (event) => { const tools = event.systemPromptOptions?.selectedTools ?? []; const hasQmem = ["qmem_store", "qmem_search", "qmem_get", "qmem_correct", "qmem_meta"].some((t) => tools.includes(t)); if (!hasQmem) return {}; return { systemPrompt: event.systemPrompt + QMEM_RULES }; }); }