tftio-prompter 4.0.2

A CLI tool for composing reusable prompt snippets from a library using TOML profiles
Documentation
//! Integration tests for the restricted `prompter` agent surface.
//!
//! Ported from the monorepo crate and written without `unwrap`/`expect`/`panic`
//! so it satisfies this crate's stricter integration-test lints.

use std::process::Command;

type TestResult = Result<(), Box<dyn std::error::Error>>;

const TEST_TOKEN: &str = "phase7-test-token";

const fn prompter_bin() -> &'static str {
    env!("CARGO_BIN_EXE_prompter")
}

fn agent_command(args: &[&str]) -> Command {
    let mut command = Command::new(prompter_bin());
    command.args(args);
    command
        .env("TFTIO_AGENT_TOKEN", TEST_TOKEN)
        .env("TFTIO_AGENT_TOKEN_EXPECTED", TEST_TOKEN);
    command
}

#[test]
fn agent_surface_help_lists_only_visible_capabilities() -> TestResult {
    let output = agent_command(&["--agent-help"]).output()?;
    assert!(
        output.status.success(),
        "stderr: {}",
        String::from_utf8_lossy(&output.stderr)
    );

    let stdout = String::from_utf8_lossy(&output.stdout);
    for capability in [
        "render-prompts",
        "render-system-base",
        "list-profiles",
        "tree-profiles",
        "validate-profiles",
    ] {
        assert!(stdout.contains(capability), "stdout: {stdout}");
    }
    for hidden in ["doctor", "license", "version", "completions", "init"] {
        assert!(!stdout.contains(hidden), "stdout: {stdout}");
    }
    Ok(())
}

#[test]
fn agent_surface_skill_renders_render_prompts_contract() -> TestResult {
    let output = agent_command(&["--agent-skill", "render-prompts"]).output()?;
    assert!(
        output.status.success(),
        "stderr: {}",
        String::from_utf8_lossy(&output.stderr)
    );

    let stdout = String::from_utf8_lossy(&output.stdout);
    assert!(
        stdout.contains("capability:\n- render-prompts"),
        "stdout: {stdout}"
    );
    assert!(stdout.contains("commands:\n- run"), "stdout: {stdout}");
    for hidden in ["doctor", "license", "version", "completions", "init"] {
        assert!(!stdout.contains(hidden), "stdout: {stdout}");
    }
    Ok(())
}

#[test]
fn agent_surface_hides_privileged_commands() -> TestResult {
    for args in [
        &["doctor"][..],
        &["license"][..],
        &["version"][..],
        &["completions", "bash"][..],
        &["init"][..],
    ] {
        let output = agent_command(args).output()?;
        assert!(
            !output.status.success(),
            "stdout: {}",
            String::from_utf8_lossy(&output.stdout)
        );
        let stderr = String::from_utf8_lossy(&output.stderr);
        assert!(
            stderr.contains("unrecognized subcommand") || stderr.contains("invalid value"),
            "stderr: {stderr}"
        );
    }
    Ok(())
}