feat: project_id obbligatorio (gateway v2.4.0 + estensione v1.4.0)

- gateway: MemoryIn.project_id required (min_length=1) → POST senza project_id = 422
- estensione: qmem_store project_id Type.String (non più Optional), descrizione con obbligo e rinvio a qmem_meta; qmem_correct resta opzionale (eredita dal superseduto)
- README/playbook sez. 11.5 aggiornati
This commit is contained in:
enne2
2026-08-13 13:24:22 +02:00
parent 334f9c6b44
commit 72ebb949c8
5 changed files with 19 additions and 6 deletions
+7 -2
View File
@@ -124,7 +124,8 @@ export default function qmemExtension(pi: ExtensionAPI) {
"Nessun LLM in scrittura: salva fatti, decisioni, preferenze o episodi deliberati e strutturati. " +
"Usa kind=decision per scelte con motivazione, kind=fact per fatti stabili, kind=preference per " +
"preferenze utente, kind=episode per esiti di azioni completate. Non salvare transcript grezzi: " +
"salva un record compatto e ad alto segnale per evento significativo.",
"salva un record compatto e ad alto segnale per evento significativo. " +
"project_id è OBBLIGATORIO: consulta qmem_meta per i progetti esistenti e riusa l'id appropriato.",
parameters: Type.Object({
text: Type.String({ description: "Il contenuto del record di memoria (compatto, ad alto segnale)." }),
kind: Type.Optional(
@@ -134,7 +135,11 @@ export default function qmemExtension(pi: ExtensionAPI) {
),
),
agent_id: Type.Optional(Type.String({ description: "Nome dell'agente che scrive (solo provenienza, nessun isolamento)." })),
project_id: Type.Optional(Type.String({ description: "Progetto di appartenenza (organizzativo)." })),
project_id: Type.String({
description:
"OBBLIGATORIO: progetto/dominio di appartenenza (kebab-case, es. pi-qmem, domotics, frigate-tts). " +
"Consulta qmem_meta per i progetti esistenti e riusa l'id appropriato; per domini nuovi crea un id coerente.",
}),
scope: Type.Optional(
Type.Union([Type.Literal("agent"), Type.Literal("project"), Type.Literal("org")], {
description: "Scope organizzativo (default: agent).",