feat: outil propose_asset + auto-extension exposée, fin Phase 5 v1 (v0.27.0)

Outil local sanctionné chlova.propose_asset : l'agent propose un asset →
write+commit+version+doc → need-review (privilégié = BLOQUÉ). Notion
ToolSpec.sanctioned (autorisé par gatekeeper, audité). Flag
CHLOVA_AUTOEXT_ENABLED (off défaut) + CHLOVA_REPO_ROOT. Prompt impose un
palier honnête. 75 tests, 0 vuln, compose OK.

Palier de risque : privilégié (l'agent écrit+commit) — derrière flag +
Phase 2 ; l'asset produit n'est jamais exécuté, il reste sous review.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Kantin-Petit
2026-06-23 06:38:45 +02:00
parent bc61434f7c
commit 2bfa58f440
11 changed files with 213 additions and 4 deletions
+16 -3
View File
@@ -62,6 +62,19 @@ casse jamais l'agent. Le mail est envoyé par le workflow
`workflows-n8n/chlova-alerts.v1.0.0.json` (doc : `docs/assets/workflow-chlova-alerts.md`).
Le payload ne contient aucun secret.
## Reste à faire (Phase 4+)
- Auto-extension : CHLOVA génère commit + version + doc d'un asset **avant**
de le passer en need-review (Phase 4).
## Auto-extension (Phase 5 — implémenté)
Quand aucune capacité n'existe, l'agent appelle l'outil **sanctionné**
`chlova.propose_asset` (`src/autoext/`) qui :
1. écrit l'artefact (workflow/outil) + sa doc (gabarit) dans le dépôt ;
2. **commit + versionne** (commit ciblé, jamais `git add -A`) ;
3. enregistre l'asset en need-review (privilégié → **BLOQUÉ**, aucun sursis) ;
4. émet l'alerte `asset_created` (version + commit + doc).
L'asset n'est **jamais exécuté** par ce canal : il attend la review (/approve).
Un outil sanctionné est autorisé par le gatekeeper mais **audité** ; il ne touche
pas l'infra. Désactivé par défaut (`CHLOVA_AUTOEXT_ENABLED=false`) ; requiert un
dépôt git monté (`CHLOVA_REPO_ROOT`). Le LLM ne peut pas sous-classer un asset
privilégié (palier honnête imposé par le prompt + non négociable côté review).
## Reste à faire (Phase 6+)
- Voix : STT + wake-word + TTS dans l'UI (API déjà prête).