--- 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=; 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.