use std::path::Path;
use crate::skill::metadata;
#[derive(Debug, Clone)]
pub struct EnvSpec {
pub language: String,
pub name: Option<String>,
pub compatibility: Option<String>,
pub resolved_packages: Option<Vec<String>>,
}
impl EnvSpec {
pub fn from_metadata(skill_dir: &Path, meta: &metadata::SkillMetadata) -> Self {
let language = metadata::detect_language(skill_dir, meta);
let language = if language == "bash" {
let has_pkg = skill_dir.join("package.json").exists();
let compat_has_agent_browser = meta
.compatibility
.as_ref()
.is_some_and(|c| c.to_lowercase().contains("agent-browser"));
let resolved_has_agent_browser = meta
.resolved_packages
.as_ref()
.is_some_and(|p| p.iter().any(|s| s.contains("agent-browser")));
if has_pkg || compat_has_agent_browser || resolved_has_agent_browser {
"node".to_string()
} else {
language
}
} else {
language
};
Self {
language,
name: Some(meta.name.clone()),
compatibility: meta.compatibility.clone(),
resolved_packages: meta.resolved_packages.clone(),
}
}
}