Files
IdeA/.ideai/memory/plugin-hot-reload-agent-facing-delivered.md

52 lines
3.2 KiB
Markdown

---
name: plugin-hot-reload-agent-facing-delivered
description: memory note plugin-hot-reload-agent-facing-delivered
metadata:
type: project
---
# Hot reload plugins agent-facing livre
Le chantier #269 a livre le hot reload des plugins sans relancer IdeA, integre localement sur `develop` par le merge `ad2c6b4` (commit backend `805b1b4`).
## Contrat livre
- Nouveau use case backend `ReloadPlugin` pour recharger un plugin installe depuis une source directory.
- Nouveau tool agent-facing `idea_plugin_reload({ pluginId, expectedContentHash? })` expose cote MCP/OpenAI/direct selon les catalogues existants.
- Le tool est une `WriteAction` et reste refuse/masque par defaut tant que les permissions ne l'autorisent pas explicitement.
- Le chemin agent-facing ne prend pas de chemin arbitraire: la source relodable vient du registry du plugin installe.
- Le reload revalide manifest/id, recalcule le hash, met a jour le registry avec `restart_required=false`, publie un evenement `plugin_reloaded`, et lance la reconciliation des serveurs MCP de plugin.
- Le resultat structure fournit notamment `changed`, anciens/nouveaux hashes, statuts MCP et warnings/erreurs.
## UX / Frontend
Aucune nouvelle surface humaine dediee n'a ete livree en V1. Decision UX/DevFrontend: le besoin principal est agent-facing; le resultat structure du tool et le flux agent existant suffisent.
Limite assumee: les contributions UI React des plugins (menus/layouts/commandes runtime frontend) restent chargees une fois par session par `PluginRuntimeProvider` et ne sont pas rafraichies apres `PluginReloaded` en V1. Cela n'affecte pas les tools MCP agent-facing.
## QA
QA #273 vert sur `feature/269-backend` avant merge:
- `cargo +stable test -p application plugin::tests -- --nocapture` => 32 passed.
- `cargo +stable test -p infrastructure --test mcp_server -- --nocapture` => 38 passed.
- `cargo +stable test -p backend openai_tools::tests -- --nocapture` => 10 passed.
- `cargo +stable test -p infrastructure --test plugin_install_load -- --nocapture` => 5 passed.
- `cargo +stable test -p infrastructure plugin -- --nocapture` => 10 passed.
- `cargo +stable test -p backend plugin_reloaded_relays_hashes_and_changed_flag_to_wire -- --nocapture` => 1 passed.
- `cargo +stable test -p app-tauri backend_core_builds_without_desktop_runtime -- --nocapture` => app-tauri compile OK.
Risque restant: IdeA garantit que serveur/registry/prochains `tools/list` voient le nouvel etat. Certains providers/CLIs actifs peuvent garder leur propre cache de tools et devoir relister les tools ou reconnecter MCP en interne; pas de redemarrage IdeA requis par le contrat backend.
## Note submodule test
Dans les worktrees de feature, `git worktree add` n'initialise pas `sdk/IdeaSDK`. Pour les tests `plugin_install_load`, Git a utilise le submodule local du worktree principal:
```bash
WT=<worktree>; MOD=$(git -C $WT rev-parse --git-path modules/sdk/IdeaSDK)
rm -rf "$MOD" $WT/sdk/IdeaSDK
git -C $WT \
-c submodule.sdk/IdeaSDK.url=/home/anthony/Documents/Projects/IdeA/sdk/IdeaSDK \
-c protocol.file.allow=always \
submodule update --init --recursive sdk/IdeaSDK
```
Aucun rebuild AppImage/live validation n'a ete fait dans ce cycle; creer un ticket dedie si validation live installee est demandee.