--- issueRef: "#285" version: 8 updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} updatedAt: 1788885132878 --- ## 2026-09-08 - Clarification SDK pluginRoot Demande issue de Main UnityPlugin ticket #8 : verifier si un plugin runtime peut resoudre son package/plugin root depuis `activate(ctx)` pour lancer un script packagé via `ctx.services.tasks.runCommand()`. Constat Architect : non, aucune API publique runtime n'expose aujourd'hui pluginRoot/package root/archive root/file URL exploitable. `workspace.getProjectRoot()` et `tasks.runCommand().cwd` sont bornes au project root. `${pluginRoot}` / `${appDataDir}` existent cote host uniquement pour les `contributes.mcpServers` declares dans le manifest. Docs modifiees dans le submodule `sdk/IdeaSDK` sur branche `feature/285-plugin-root-scope-docs` : - `docs/activation-context.md` : absence explicite de plugin install dir/package root et correction de la liste des champs publics. - `docs/services.md` : `runCommand()` project/workspace scoped, pas de resolution package-relative. - `docs/commands-and-feedback.md` : precondition + contre-exemple pour scripts packagés. - `docs/manifest.md` : section `MCP Server Paths`, substitution limitee aux serveurs MCP declares. QA : VERT. Commandes reelles executees dans `sdk/IdeaSDK` : `git status --short --branch`, `git diff -- ...`, `rg -n ...`, `npm run`, `npm run check`. `npm run check` a execute `build`, `typecheck:examples`, `package:hello-plugin` et a cree l'archive hello-plugin attendue sans fichier modifie hors docs. Git : commits locaux dans le submodule `sdk/IdeaSDK` : `5f9c2f9` (`docs(sdk): clarify pluginRoot scope for runtime plugins — #285`) puis merge local `68019de` sur `develop`. Pas de push. Le pointeur du depot parent est volontairement laisse sur `7db819c` et le submodule reparké dessus pour eviter de melanger avec le travail #284 en cours ; le bump sera fait plus tard par Git avec le sync local approprie. L'utilisateur UnityPlugin peut reprendre/mettre a jour le sous-module vers `68019de`. Risque residuel : validation documentaire uniquement, pas de test runtime host sur la substitution `${pluginRoot}` des MCP servers. Docs-only, pas de rebuild AppImage requis. ## 2026-09-08 - API runtime officielle `ctx.pluginRoot` Le constat documentaire precedent est remplace par une implementation runtime : le catalogue host projette la racine canonique du package installe actif, le DTO la transporte sous `pluginRoot`, et le loader l'injecte dans `activate(ctx)`. Le SDK expose ce champ obligatoire dans `ActivateContext`. L'exemple hello-plugin execute un script inclus dans son archive en construisant son chemin depuis `ctx.pluginRoot`. Fichiers modifies dans le depot parent : - `crates/domain/src/ports.rs` - `crates/infrastructure/src/plugin/mod.rs` - `crates/infrastructure/tests/plugin_install_load.rs` - `crates/application/src/plugin/mod.rs` - `crates/application/src/slash_command.rs` - `crates/backend/src/dto.rs` - `crates/app-tauri/tests/dto_plugins.rs` - `frontend/src/domain/index.ts` - `frontend/src/plugins/runtime/loader.ts` - `frontend/src/plugins/runtime/loader.test.ts` - `frontend/src/features/plugins/PluginRuntimeProvider.test.tsx` - `frontend/src/features/plugins/plugins.test.tsx` Fichiers modifies dans le submodule `sdk/IdeaSDK` : - `src/runtime.ts` - `docs/activation-context.md` - `docs/commands-and-feedback.md` - `docs/manifest.md` - `docs/services.md` - `examples/hello-plugin/README.md` - `examples/hello-plugin/src/core/workspace.ts` - `examples/hello-plugin/scripts/hello-task.mjs` (nouveau) - `scripts/package-hello-plugin.mjs` Commandes reelles et resultats : - `cargo fmt --all` : succes. - `cargo check -p domain -p application -p infrastructure -p backend -p app-tauri --lib` : succes. - `cargo test -p application runtime_catalog_ --lib` : 5 passes, 0 echec. - `cargo test -p infrastructure --test plugin_install_load` : 5 passes, 0 echec. - `cargo test -p app-tauri --test dto_plugins` : 2 passes, 0 echec. - `npm run check` dans `sdk/IdeaSDK` : succes (`build`, `typecheck:examples`, `package:hello-plugin`) ; archive hello-plugin creee. - `npm run typecheck` dans `frontend` : succes. - `npm test -- --run src/plugins/runtime/loader.test.ts src/features/plugins/PluginRuntimeProvider.test.tsx src/features/plugins/plugins.test.tsx` dans `frontend` : 3 fichiers, 33 tests passes, 0 echec. Reserves : - Aucun test end-to-end avec chargement dans l'AppImage en cours d'execution ; les validations couvrent les frontieres store/catalogue/DTO/loader et le packaging SDK. - Les avertissements Vite sur les options `esbuild` depreciees sont preexistants et non bloquants. - Aucun commit, push, bump ou merge du submodule effectue dans ce lot. ## 2026-09-08 - QA indépendante API `ctx.pluginRoot` Validation QA indépendante effectuée sur la branche parent `feature/285-plugin-root-runtime-api` et le submodule `sdk/IdeaSDK` également sur `feature/285-plugin-root-runtime-api`, sans commit ni action distante. Diffs relus/identifiés : - Parent : `PluginPackageStore::installed_plugin_root`, implémentation FS canonique, propagation `PluginRuntimePlugin.plugin_root`, DTO backend `pluginRoot`, loader frontend `IdeaPluginContext.pluginRoot`, tests catalogue/DTO/loader. - SDK : `ActivateContext.pluginRoot`, docs `activation-context`, `services`, `commands-and-feedback`, `manifest`, exemple hello-plugin et packaging du script `scripts/hello-task.mjs`. Commandes réelles QA : - Parent : `git status --short --branch` ; `git diff --name-status` ; `git diff --stat` ; `git diff -- crates/domain/src/ports.rs crates/infrastructure/src/plugin/mod.rs crates/application/src/plugin/mod.rs crates/backend/src/dto.rs frontend/src/domain/index.ts frontend/src/plugins/runtime/loader.ts`. - SDK : `git status --short --branch` ; `git diff --name-status` ; `git diff --stat` ; `git diff -- src/runtime.ts docs/activation-context.md docs/services.md docs/commands-and-feedback.md docs/manifest.md examples/hello-plugin/README.md examples/hello-plugin/src/core/workspace.ts scripts/package-hello-plugin.mjs`. - Docs : `rg -n "does not expose|does not currently provide|no public runtime|there is no public runtime|Packaged scripts cannot be launched|unavailable to|package-path resolver" docs src examples scripts` dans le SDK. Aucun ancien énoncé contradictoire sur l'absence de `pluginRoot` runtime ; seul match restant : commentaire SDK générique indiquant que `services` n'expose pas les gateways internes IdeA. - SDK occurrences : `rg -n "pluginRoot|installed plugin root|installed package|hello-task|package-relative|contributes\\.mcpServers" src docs examples scripts`. - Parent occurrences : `rg -n "pluginRoot|plugin_root|installed_plugin_root|runtime_catalog|missing installed plugin root" crates frontend/src`. - Script packagé : `sed -n '1,160p' examples/hello-plugin/scripts/hello-task.mjs`. - Rust : `cargo check -p domain -p application -p infrastructure -p backend -p app-tauri --lib` vert ; `cargo test -p application runtime_catalog_ --lib` 5/5 vert ; `cargo test -p infrastructure --test plugin_install_load` 5/5 vert ; `cargo test -p app-tauri --test dto_plugins` 2/2 vert. - Frontend : `npm run typecheck` dans `frontend` vert ; `npm test -- --run src/plugins/runtime/loader.test.ts src/features/plugins/PluginRuntimeProvider.test.tsx src/features/plugins/plugins.test.tsx` dans `frontend` 3 fichiers / 33 tests verts. - SDK : `npm run check` dans `sdk/IdeaSDK` vert (`build`, `typecheck:examples`, `package:hello-plugin`) ; `unzip -l examples/hello-plugin/build/hello-plugin-0.1.0.zip | rg "idea-plugin.json|dist/index.js|scripts/hello-task.mjs|README.md"` confirme l'inclusion du script packagé. - Hygiène : `cargo fmt --all -- --check` vert ; `git diff --check` parent vert ; `git diff --check` SDK vert. Verdict QA : VERT pour le périmètre source/test. Réserves : un rebuild AppImage puis une validation live sont nécessaires pour prouver l'usage réel de `ctx.pluginRoot` dans le binaire actuellement utilisé par l'application, car les tests exécutés valident les frontières source/store/catalogue/DTO/loader/SDK mais ne remplacent pas le binaire AppImage lancé. Le submodule reste dirty par ses modifications locales et le parent pointe vers ce submodule dirty ; aucun commit/bump/push/merge n'a été fait par QA. ## 2026-09-08 - Rebuild AppImage post-merge Git : commits et merges locaux effectués depuis les branches `feature/285-plugin-root-runtime-api` — submodule `9ce3a55` + merge `e3a0f46` vers develop SDK ; parent `e499a0f` (bump pointeur `e3a0f46`) + merge `b681433` vers develop + sync store `270c740`. Aucun push. Main : rebuild AppImage finale exécuté depuis `develop` après les merges. Commandes : `npm --prefix frontend run build` vert ; puis depuis `crates/app-tauri`, `CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage` vert. Artefact : `target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage`. Restant manuel : remplacement de l'AppImage installée + relance, puis validation live de `ctx.pluginRoot` (et du contact cross-project #284) dans le binaire actif — condition de clôture des tickets #284 et #285.