| 124 | } |
| 125 | |
| 126 | pub(super) fn build_effective_skill_registry( |
| 127 | agent_registry: Option<&SkillRegistry>, |
| 128 | opts: &SessionOptions, |
| 129 | ) -> Arc<SkillRegistry> { |
| 130 | let base_registry = agent_registry |
| 131 | .map(|r| r.fork()) |
| 132 | .unwrap_or_else(SkillRegistry::with_builtins); |
| 133 | |
| 134 | if let Some(ref registry) = opts.skill_registry { |
| 135 | for skill in registry.all() { |
| 136 | base_registry.register_unchecked(skill); |
| 137 | } |
| 138 | } |
| 139 | |
| 140 | for dir in &opts.skill_dirs { |
| 141 | if let Err(e) = base_registry.load_from_dir(dir) { |
| 142 | tracing::warn!( |
| 143 | dir = %dir.display(), |
| 144 | error = %e, |
| 145 | "Failed to load session skill dir - skipping" |
| 146 | ); |
| 147 | } |
| 148 | } |
| 149 | |
| 150 | Arc::new(base_registry) |
| 151 | } |
| 152 | |
| 153 | fn register_task_capability( |
| 154 | code_config: &CodeConfig, |