31 lines
2.6 KiB
TypeScript
31 lines
2.6 KiB
TypeScript
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: <hostname> (<OS>, <GPU>)' (verifica con hostname PRIMA di salvare), project 'host-<hostname>' 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 };
|
|
});
|
|
}
|