From 5e4fc2ccf30f1f6f6f90dbb60b2db6a3878f80eb Mon Sep 17 00:00:00 2001 From: Evan Hu Date: Tue, 5 May 2026 00:29:39 +0900 Subject: [PATCH] chore(plugins): add [integrity] SHA-256 hashes for all hook scripts The daemon's `manifest_missing_integrity_hooks` check (#3804) hard-fails any registry install whose plugin.toml declares hooks but lacks an [integrity] entry for each one. All 11 plugins under plugins/ had the [hooks] table but were missing [integrity], so `librefang plugin install ` would error after download with "missing [integrity] hashes for hook script(s): ...". Compute and pin SHA-256 over each `hooks/*.py` under every plugin dir. The mempalace-indexer entries were already present and are unchanged (reordered alphabetically by the regenerator). Verified each plugin.toml still parses (Python tomllib). --- plugins/auto-summarizer/plugin.toml | 4 ++++ plugins/context-decay/plugin.toml | 4 ++++ plugins/conversation-logger/plugin.toml | 3 +++ plugins/episodic-memory/plugin.toml | 4 ++++ plugins/guardrails/plugin.toml | 3 +++ plugins/keyword-memory/plugin.toml | 3 +++ plugins/mempalace-indexer/plugin.toml | 3 +-- plugins/sentiment-tracker/plugin.toml | 3 +++ plugins/todo-tracker/plugin.toml | 4 ++++ plugins/topic-memory/plugin.toml | 4 ++++ plugins/user-profile/plugin.toml | 4 ++++ 11 files changed, 37 insertions(+), 2 deletions(-) diff --git a/plugins/auto-summarizer/plugin.toml b/plugins/auto-summarizer/plugin.toml index a9ec290..60f91c8 100644 --- a/plugins/auto-summarizer/plugin.toml +++ b/plugins/auto-summarizer/plugin.toml @@ -35,3 +35,7 @@ description = "Mantiene un resumen continuo de la conversación para que los age [i18n.fr] name = "Auto-résumé" description = "Maintient un résumé continu de la conversation pour que les agents ne perdent pas de contexte dans les longs échanges." + +[integrity] +"hooks/after_turn.py" = "fe24d5f8dd85348f855f7e2c27e607e57c4fad549d50d814101be14fa5ab34f1" +"hooks/ingest.py" = "0581dd415457bffc3160580acf3036a2fe9e211e86b49bbc51cc30118dc67e0e" diff --git a/plugins/context-decay/plugin.toml b/plugins/context-decay/plugin.toml index 1659371..d8bab8b 100644 --- a/plugins/context-decay/plugin.toml +++ b/plugins/context-decay/plugin.toml @@ -35,3 +35,7 @@ description = "Decaimiento de memoria basado en el tiempo con puntuación de rel [i18n.fr] name = "Déclin du contexte" description = "Déclin de mémoire basé sur le temps avec scoring de pertinence pour un oubli naturel." + +[integrity] +"hooks/after_turn.py" = "eb7801807e444bd9b804ee6c3b8b6cc68e29f08c3368f3d92e8047654eb0665b" +"hooks/ingest.py" = "f9a82df0a460720d9888f179c31e8be0afd9b4dbc90329988e5347f9b7acf941" diff --git a/plugins/conversation-logger/plugin.toml b/plugins/conversation-logger/plugin.toml index 68400d5..584db88 100644 --- a/plugins/conversation-logger/plugin.toml +++ b/plugins/conversation-logger/plugin.toml @@ -34,3 +34,6 @@ description = "Registra todas las conversaciones en archivos JSONL para auditor [i18n.fr] name = "Journal de conversations" description = "Enregistre toutes les conversations en JSONL pour audit, analytics et débogage." + +[integrity] +"hooks/after_turn.py" = "19a008af65e6797186ac0cc5b88e6d3c889fb1e312a099d65b9e10ee749eb65e" diff --git a/plugins/episodic-memory/plugin.toml b/plugins/episodic-memory/plugin.toml index 5810136..72470bc 100644 --- a/plugins/episodic-memory/plugin.toml +++ b/plugins/episodic-memory/plugin.toml @@ -35,3 +35,7 @@ description = "Segmentación y recuerdo de memoria por episodios para continuida [i18n.fr] name = "Mémoire épisodique" description = "Segmentation et rappel de mémoire par épisodes pour une continuité de contexte entre conversations." + +[integrity] +"hooks/after_turn.py" = "b3adcfd2d5032a849a69722f64260802b70b01f54719e67cbe46db4e4214d9f3" +"hooks/ingest.py" = "c33c0888b86a6f2058ceb1a0062420fd433a5c971e4abc44faccb1b775b0c1f5" diff --git a/plugins/guardrails/plugin.toml b/plugins/guardrails/plugin.toml index c3ca3d7..1ccb649 100644 --- a/plugins/guardrails/plugin.toml +++ b/plugins/guardrails/plugin.toml @@ -34,3 +34,6 @@ description = "Detecta patrones de contenido potencialmente dañinos e inyecta a [i18n.fr] name = "Garde-fous" description = "Détecte les motifs de contenu potentiellement nuisibles et injecte des avertissements dans le contexte de l'agent." + +[integrity] +"hooks/ingest.py" = "ed4920a0db5366fabce6a78e39c21ae1e0fd46549804fb63e5d3e87e38133378" diff --git a/plugins/keyword-memory/plugin.toml b/plugins/keyword-memory/plugin.toml index 3e8e3a4..f968371 100644 --- a/plugins/keyword-memory/plugin.toml +++ b/plugins/keyword-memory/plugin.toml @@ -34,3 +34,6 @@ description = "Extrae palabras clave y entidades de los mensajes del usuario y l [i18n.fr] name = "Mémoire par mots-clés" description = "Extrait mots-clés et entités nommées des messages utilisateur et les restitue comme mémoire contextuelle." + +[integrity] +"hooks/ingest.py" = "6e9de6524c394e6879e4ab694dfdfbffb2bd423c3df2ef374dd59bf006836330" diff --git a/plugins/mempalace-indexer/plugin.toml b/plugins/mempalace-indexer/plugin.toml index 3800edd..3b95e45 100644 --- a/plugins/mempalace-indexer/plugin.toml +++ b/plugins/mempalace-indexer/plugin.toml @@ -116,11 +116,10 @@ description = "Prune drawers older than this many days when running hooks/prune. # --------------------------------------------------------------------------- [integrity] -"hooks/ingest.py" = "621b17f2d0afbd6142a49963fb57187a500cfeac057c13cb80961b6222bd03e2" "hooks/after_turn.py" = "1c5bcdade4ca0d785878d60910105208fcff38f74872426ee821363ce5bf9811" +"hooks/ingest.py" = "621b17f2d0afbd6142a49963fb57187a500cfeac057c13cb80961b6222bd03e2" "hooks/prune.py" = "2dceeb9bb0d0b7ee224291bfce600f629f38b4a853cd437774d9b66ef226838d" - [i18n.zh] name = "MemPalace 索引器" description = "自动把对话索引进 MemPalace 并召回相关记忆。无需 API key、不依赖云端。" diff --git a/plugins/sentiment-tracker/plugin.toml b/plugins/sentiment-tracker/plugin.toml index 2b6cc8d..b1a813d 100644 --- a/plugins/sentiment-tracker/plugin.toml +++ b/plugins/sentiment-tracker/plugin.toml @@ -34,3 +34,6 @@ description = "Analiza el sentimiento de los mensajes del usuario e inyecta cont [i18n.fr] name = "Suivi de sentiment" description = "Analyse le sentiment des messages utilisateur et injecte un contexte émotionnel pour que l'agent réponde avec le bon ton." + +[integrity] +"hooks/ingest.py" = "1ce4a89e6b3de86d236d54d60b96b6fffb8306616666aef4802ba690ca8ae225" diff --git a/plugins/todo-tracker/plugin.toml b/plugins/todo-tracker/plugin.toml index 05c1953..eebaf91 100644 --- a/plugins/todo-tracker/plugin.toml +++ b/plugins/todo-tracker/plugin.toml @@ -35,3 +35,7 @@ description = "Detecta tareas y acciones mencionadas en las conversaciones, las [i18n.fr] name = "Suivi de tâches" description = "Détecte les actions et tâches mentionnées dans les conversations, les persiste et les rappelle comme contexte." + +[integrity] +"hooks/after_turn.py" = "5c9b524e0c2880152ddad2fcebb6cbe6fc548e3030871d2805a9a789eed80fdc" +"hooks/ingest.py" = "1cd6a11c07e94dd34bb335f21c19c353b74016ba67a0ebd9bd4cd7cbf227705f" diff --git a/plugins/topic-memory/plugin.toml b/plugins/topic-memory/plugin.toml index 890b4be..28f3a08 100644 --- a/plugins/topic-memory/plugin.toml +++ b/plugins/topic-memory/plugin.toml @@ -35,3 +35,7 @@ description = "Recuerdo de memoria consciente del tema con agrupamiento de palab [i18n.fr] name = "Mémoire par sujets" description = "Rappel de mémoire orienté sujet avec clustering de mots-clés pour un contexte inter-conversations." + +[integrity] +"hooks/after_turn.py" = "d2a52d8070250c6308de1af8739dfee0691b4dc73ee45448f32b7ed446645d28" +"hooks/ingest.py" = "9ee56481f5b7039a12d4a6f373b7f54af7ead8f790995280551739658997cc0f" diff --git a/plugins/user-profile/plugin.toml b/plugins/user-profile/plugin.toml index 2f338ac..39ecee9 100644 --- a/plugins/user-profile/plugin.toml +++ b/plugins/user-profile/plugin.toml @@ -35,3 +35,7 @@ description = "Perfilado persistente del usuario a partir de patrones de convers [i18n.fr] name = "Profil utilisateur" description = "Profilage persistant basé sur les motifs de conversation pour des réponses personnalisées." + +[integrity] +"hooks/after_turn.py" = "e1e12c2e6a3e32e2c26b4184836229f7f6cb32b0e14fcca82496354ff3b36f73" +"hooks/ingest.py" = "28ae3b2435b6e46ef7bfd71b913f2e8c96d1a89120b48eb4cd54ceaefc18501b"