diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-20 00:54:05 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-20 00:55:36 +0300 |
| commit | d30ab1b54f6b6be95a0cb47ddc38da1d5e088700 (patch) | |
| tree | eb2002b408c856d9fcd7a573afe73b917f22cd97 /src/app/api/plugins/runtime.rs | |
| parent | 3f80947678a9723434aa7fddfe23750b5393e24c (diff) | |
feat: add plugin-driven agent views and startup hooks
Diffstat (limited to 'src/app/api/plugins/runtime.rs')
| -rw-r--r-- | src/app/api/plugins/runtime.rs | 35 |
1 files changed, 35 insertions, 0 deletions
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::<Vec<_>>(); + 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) { |
