From d30ab1b54f6b6be95a0cb47ddc38da1d5e088700 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Mon, 20 Jul 2026 00:54:05 +0300 Subject: feat: add plugin-driven agent views and startup hooks --- src/app/api/plugins/runtime.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'src/app/api/plugins/runtime.rs') diff --git a/src/app/api/plugins/runtime.rs b/src/app/api/plugins/runtime.rs index 0008def2..71004fe5 100644 --- a/src/app/api/plugins/runtime.rs +++ b/src/app/api/plugins/runtime.rs @@ -180,6 +180,41 @@ impl App { Ok(log) } + pub(crate) fn run_plugin_startup_hooks(&mut self) { + let mut context = self.current_plugin_context("plugin.startup"); + context.invocation_source = Some("startup".to_string()); + let mut plugins = self + .state + .installed_plugins + .values() + .filter(|plugin| { + plugin.enabled && plugin_manifest_available(plugin) && !plugin.startup.is_empty() + }) + .cloned() + .collect::>(); + plugins.sort_by(|left, right| left.plugin_id.cmp(&right.plugin_id)); + for plugin in plugins { + for startup in plugin.startup.clone() { + if ensure_platform_supported( + &effective_platforms(&startup.platforms, &plugin.platforms).clone(), + "startup", + ) + .is_err() + { + continue; + } + let _ = self.start_plugin_command( + &plugin, + None, + Some("startup".to_string()), + startup.command, + &context, + None, + ); + } + } + } + pub(crate) fn run_plugin_event_hooks(&mut self, event: &crate::api::schema::EventEnvelope) { let event_name = event.event.dot_name(); if !crate::api::schema::PLUGIN_HOOK_EVENT_KINDS.contains(&event.event) { -- cgit v1.2.3