bot-forge 1.0.2

Rust CLI for installing agent skills and developer tools from configurable forms.
Documentation
#![cfg(windows)]

use std::process::Command;

#[test]
fn cmd_and_powershell_can_launch_bot_forge() {
    let binary = env!("CARGO_BIN_EXE_bot-forge");
    let cmd = Command::new("cmd")
        .args(["/C", binary, "--version"])
        .output()
        .unwrap();
    assert!(cmd.status.success());
    let powershell = Command::new("powershell")
        .args([
            "-NoProfile",
            "-Command",
            &format!("& '{}' --version", binary.replace('\'', "''")),
        ])
        .output()
        .unwrap();
    assert!(powershell.status.success());
}

#[test]
fn windows_data_and_path_overrides_are_honored() {
    let temp = std::env::temp_dir().join(format!("bot-forge-windows-{}", std::process::id()));
    let output = Command::new(env!("CARGO_BIN_EXE_bot-forge"))
        .env("BOT_FORGE_HOME", &temp)
        .env("BOT_FORGE_BIN_DIR", temp.join("managed-bin"))
        .arg("doctor")
        .output()
        .unwrap();
    assert!(output.status.success());
    let stdout = String::from_utf8_lossy(&output.stdout);
    assert!(stdout.contains(&temp.display().to_string()));
    assert!(stdout.contains("managed-bin"));
}

#[test]
fn windows_machine_output_and_cache_paths_handle_spaces() {
    let temp = std::env::temp_dir().join(format!("bot forge windows {}", std::process::id()));
    let status = Command::new(env!("CARGO_BIN_EXE_bot-forge"))
        .env("BOT_FORGE_HOME", &temp)
        .args(["cache", "status", "--format", "json"])
        .output()
        .unwrap();
    assert!(status.status.success());
    let value: serde_json::Value = serde_json::from_slice(&status.stdout).unwrap();
    assert_eq!(value["root"], temp.display().to_string());
    std::fs::remove_dir_all(temp).ok();
}