1use std::path::{Path, PathBuf};
10
11const SKILL_BODY: &str = include_str!("skill/SKILL.md");
13
14#[must_use]
16pub fn render(command_reference: &str) -> String {
17 format!(
18 "{}\n\n## Command reference\n\nAuto-generated from `conclave --help` — the authoritative, always-current flag list for every verb.\n\n{}\n",
19 SKILL_BODY.trim_end(),
20 command_reference.trim_end(),
21 )
22}
23
24#[must_use]
26pub fn install_path(skills_dir: &Path) -> PathBuf {
27 skills_dir.join("conclave").join("SKILL.md")
28}
29
30#[cfg(test)]
31mod tests {
32 #![allow(clippy::unwrap_used)]
34
35 use super::*;
36 use pretty_assertions::assert_eq;
37
38 #[test]
39 fn skill_render_has_frontmatter_and_appends_the_reference() {
40 let rendered = render("### conclave register\n```\n--username ...\n```");
41 assert!(rendered.starts_with("---\n"), "skill must start with YAML frontmatter: {}", &rendered[..40]);
43 assert!(rendered.contains("name: conclave"));
44 assert!(rendered.contains("join_channel"), "skill must document joining via the bridge tool");
46 assert!(rendered.contains("## Command reference"));
47 assert!(rendered.contains("conclave register"));
48 }
49
50 #[test]
51 fn skill_install_path_targets_the_conclave_skill_dir() {
52 assert_eq!(install_path(Path::new("/home/x/.claude/skills")), Path::new("/home/x/.claude/skills/conclave/SKILL.md"));
53 }
54}