Skip to main content

roder_ext_task_subagent/
lib.rs

1mod task;
2
3use std::sync::Arc;
4
5use roder_api::{CapabilityRequest, ExtensionManifest, ExtensionRegistryBuilder, RoderExtension};
6
7pub use task::{SUBAGENT_TASK_EXECUTOR_ID, SubagentTaskExecutor};
8
9pub struct SubagentTaskExtension;
10
11impl RoderExtension for SubagentTaskExtension {
12    fn manifest(&self) -> ExtensionManifest {
13        ExtensionManifest {
14            id: "roder-ext-task-subagent".to_string(),
15            name: "Subagent Task Executor".to_string(),
16            version: semver::Version::new(0, 1, 0),
17            api_version: "0.1.0".to_string(),
18            description: Some("Background subagent task executor".to_string()),
19            provides: Vec::new(),
20            required_capabilities: vec![CapabilityRequest::new("process.spawn.roder")],
21        }
22    }
23
24    fn install(&self, registry: &mut ExtensionRegistryBuilder) -> anyhow::Result<()> {
25        if let Some(dispatcher) = registry.subagent_dispatchers.first().cloned() {
26            registry.task_executor(Arc::new(SubagentTaskExecutor::new(dispatcher)));
27        }
28        Ok(())
29    }
30}