feat: Add plugins — catalogue on/off à effet réel (v7.58.0, phase 8/8)
- app/services/plugins.py + migration 35 : table plugins (slug, name,
description, enabled) pré-remplie avec 3 modules câblés — web-tools,
web-clipper, automations ; ligne absente = activé (défaut sûr)
- automations OFF → dépendance FastAPI posée à l'include_router dans main.py
(aucun router touché) → toutes les routes /workspace/automations* refusées +
garde de tick du scheduler en arrière-plan
- web-clipper OFF → GET /extensions et tout /api/v2/web-clipper/* refusés
- web-tools OFF → web_search et fetch_url retirés du schéma ET de execute()
via ToolRegistry._all() : le LLM ne les voit plus
- UI rendue côté serveur : global Jinja plugin_enabled(slug) — nav
« Extensions » / « Automations » en {% if %} (absentes du DOM), sections
conditionnées en x-show dans settings.html
- menu + : l'entrée « Add plugins » devient vivante (fini disabled:true) —
liste des 3 plugins avec bascule, GET/PATCH /api/agent/plugins[/slug]
(slug inconnu → 404, 401 sans session)
- tests : tests/test_v758_plugins.py (10 tests) — routes refusées (302 hors
/api, 404 JSON pour /api*), outils retirés, nav disparue, persistance,
câblage ; assertions disabled:true == 0 dans les tests des phases 1/3/4/5/7
- livraison : VERSION + app/main = 7.58.0, OpenAPI 525 chemins, CHANGELOG,
ROADMAP phase 8 cochée (menu + complet), avenant phase 8 (docs)
This commit is contained in:
@@ -1,5 +1,35 @@
|
||||
# Changelog - FlowDeck
|
||||
|
||||
## v7.58.0 (2026-10-06) — Add plugins : catalogue on/off à effet réel (phase 8/8)
|
||||
|
||||
### Added
|
||||
|
||||
- **`app/services/plugins.py` + migration 35** — table `plugins` (`slug`,
|
||||
`name`, `description`, `enabled`) pré-remplie avec **3 modules câblés** :
|
||||
`web-tools`, `web-clipper`, `automations`. Ligne absente = activé (défaut
|
||||
sûr : rien n'est coupé par accident).
|
||||
- **Effet réel, jamais un simple drapeau** :
|
||||
- `automations` OFF → dépendance FastAPI posée **à l'`include_router`**
|
||||
(3 lignes dans `main.py`, aucun router touché) → toutes les routes
|
||||
`/workspace/automations*` refusées, **et** le scheduler de fond passe en
|
||||
veille (garde sur chaque tick) ;
|
||||
- `web-clipper` OFF → `GET /extensions` + tout `/api/v2/web-clipper/*`
|
||||
refusés ;
|
||||
- `web-tools` OFF → `web_search` et `fetch_url` retirés du **schéma** de
|
||||
l'agent et de `execute()` (`ToolRegistry._all()`) : le LLM ne les voit plus.
|
||||
- **UI masquée côté serveur** — nouveau global Jinja `plugin_enabled(slug)` :
|
||||
`settings.html` rend la nav « Extensions » / « Automations » sous
|
||||
`{% if %}` (élément **absent** du DOM, pas seulement caché) et conditionne
|
||||
les sections en `x-show`.
|
||||
- **Menu +** — l'entrée « Add plugins » devient une vraie section : liste des
|
||||
3 plugins (état + description) avec bascule ;
|
||||
`GET /api/agent/plugins` + `PATCH /api/agent/plugins/{slug}` (slug inconnu →
|
||||
404, 401 sans session).
|
||||
- **Tests** — `tests/test_v758_plugins.py` : **10 tests** — catalogue,
|
||||
persistance en base, routes refusées (302 hors `/api` + 404 JSON pour
|
||||
`/api*`, handler unifié de `main.py`), outils retirés du registre, nav
|
||||
disparue du `/settings` rendu, câblage du menu, 401.
|
||||
|
||||
## v7.57.0 (2026-10-06) — Connecteurs : Discord, Telegram, Teams, MCP (phase 7/8)
|
||||
|
||||
### Added
|
||||
|
||||
Reference in New Issue
Block a user