walrus_core/agent/
parser.rs1use crate::{agent::config::AgentConfig, utils::split_yaml_frontmatter};
6use serde::Deserialize;
7
8#[derive(Deserialize)]
10struct AgentFrontmatter {
11 name: String,
12 #[serde(default)]
13 description: String,
14 #[serde(default)]
15 model: Option<String>,
16}
17
18pub fn parse_agent_md(content: &str) -> anyhow::Result<AgentConfig> {
23 let (frontmatter, body) = split_yaml_frontmatter(content)?;
24 let fm: AgentFrontmatter = serde_yaml::from_str(frontmatter)?;
25
26 let config = AgentConfig {
27 name: fm.name.into(),
28 description: fm.description.into(),
29 system_prompt: body.trim().to_owned(),
30 model: fm.model.map(Into::into),
31 ..AgentConfig::default()
32 };
33
34 Ok(config)
35}