Parse a markdown file as an agent definition.
(path: &Path, base_dir: &Path)
| 727 | |
| 728 | /// Parse a markdown file as an agent definition. |
| 729 | fn parse_markdown_agent(path: &Path, base_dir: &Path) -> Option<(String, AgentConfig)> { |
| 730 | let content = fs::read_to_string(path).ok()?; |
| 731 | let (frontmatter, body) = split_frontmatter(&content); |
| 732 | |
| 733 | let name = derive_name_from_path(path, base_dir, &["agent", "agents", "mode", "modes"]); |
| 734 | |
| 735 | let mut config = if let Some(fm) = frontmatter { |
| 736 | serde_json::from_value::<AgentConfig>(serde_yaml_frontmatter_to_json(&fm)) |
| 737 | .unwrap_or_default() |
| 738 | } else { |
| 739 | AgentConfig::default() |
| 740 | }; |
| 741 | |
| 742 | config.prompt = Some(body.trim().to_string()); |
| 743 | |
| 744 | Some((name, config)) |
| 745 | } |
| 746 | |
| 747 | /// Split markdown content into optional YAML frontmatter and body. |
| 748 | fn split_frontmatter(content: &str) -> (Option<String>, String) { |