skill-harness 0.1.2

Lifecycle management for AI agent skills — install, audit, eval, sync across environments
Documentation
use std::process::Command;

fn skill_harness() -> Command {
    Command::new(env!("CARGO_BIN_EXE_skill-harness"))
}

#[test]
fn install_file_warns_on_local_resource_links() {
    let source = tempfile::tempdir().unwrap();
    let skill = source.path().join("SKILL.md");
    std::fs::write(
        &skill,
        "# Context Skill\n\nUse `runbooks/context.md` before answering.\n",
    )
    .unwrap();

    let project = tempfile::tempdir().unwrap();
    let output = skill_harness()
        .args([
            "install",
            "context-skill",
            "--file",
            skill.to_str().unwrap(),
            "--harness",
            "generic",
            "--root",
            project.path().to_str().unwrap(),
        ])
        .output()
        .unwrap();

    assert!(
        output.status.success(),
        "stdout:\n{}\nstderr:\n{}",
        String::from_utf8_lossy(&output.stdout),
        String::from_utf8_lossy(&output.stderr)
    );
    let stderr = String::from_utf8_lossy(&output.stderr);
    assert!(stderr.contains("warning:"));
    assert!(stderr.contains("runbooks/context.md"));
    assert!(stderr.contains("install-dir"));
    assert!(
        project
            .path()
            .join(".agent/skills/context-skill/SKILL.md")
            .is_file()
    );
    assert!(
        !project
            .path()
            .join(".agent/skills/context-skill/runbooks/context.md")
            .exists()
    );
}

#[test]
fn okf_validate_reports_invalid_bundle() {
    let bundle = tempfile::tempdir().unwrap();
    std::fs::write(bundle.path().join("concept.md"), "# Missing Frontmatter\n").unwrap();

    let output = skill_harness()
        .args(["okf", "validate", bundle.path().to_str().unwrap()])
        .output()
        .unwrap();

    assert!(!output.status.success());
    let stdout = String::from_utf8_lossy(&output.stdout);
    let stderr = String::from_utf8_lossy(&output.stderr);
    assert!(stdout.contains("OKF bundle:"));
    assert!(stderr.contains("concept file must start with YAML frontmatter"));
}