feat(plugins,host): pluginRoot officiel transmis au contexte activate(ctx) des plugins — #285 (domain ports + infrastructure plugin: racine du package installé résolue depuis la même source de vérité que la substitution manifest ${pluginRoot}; application runtime_catalog + slash_command; backend dto + app-tauri dto_plugins; frontend domain + plugins runtime loader transmettent pluginRoot au contexte activé; bump pointeur IdeaSDK e3a0f46 via feature/285-plugin-root-runtime-api; QA verte: cargo check domain/application/infrastructure/backend/app-tauri, runtime_catalog 5/5, plugin_install_load 5/5, dto_plugins 2/2, frontend typecheck + 33 tests/3 fichiers, cargo fmt --check, git diff --check; réserves: rebuild AppImage + validation live ctx.pluginRoot dans le binaire actif restants)
This commit is contained in:
@ -440,6 +440,19 @@ pub trait PluginPackageStore: Send + Sync {
|
||||
/// Lists committed package roots.
|
||||
async fn list_installed(&self) -> Result<Vec<PluginPackageRef>, PluginStoreError>;
|
||||
|
||||
/// Resolves the host-local root of one committed plugin package.
|
||||
async fn installed_plugin_root(
|
||||
&self,
|
||||
plugin_id: &crate::PluginId,
|
||||
) -> Result<LocalPath, PluginStoreError> {
|
||||
self.list_installed()
|
||||
.await?
|
||||
.into_iter()
|
||||
.find(|package| package.plugin_id.as_ref() == Some(plugin_id))
|
||||
.map(|package| LocalPath::new(package.root))
|
||||
.ok_or(PluginStoreError::NotFound)
|
||||
}
|
||||
|
||||
/// Reads `idea-plugin.json` from a package root.
|
||||
async fn read_manifest(
|
||||
&self,
|
||||
|
||||
Reference in New Issue
Block a user