kai-tool 0.1.20

CLI helpers for AI coding, Codex credentials, and git worktree management.
#![cfg(unix)]

use std::env;
use std::fs;
use std::os::unix::fs::PermissionsExt;

use assert_cmd::Command;
use tempfile::tempdir;

#[test]
fn supervised_fast_agent_preserves_invocation_directory() {
    let root = tempdir().unwrap();
    let bin_dir = root.path().join("bin");
    let launch_dir = root.path().join("workspace");
    let cwd_path = root.path().join("cwd");
    let args_path = root.path().join("args");
    fs::create_dir_all(&bin_dir).unwrap();
    fs::create_dir(&launch_dir).unwrap();

    let fake_codex = bin_dir.join("codex");
    fs::write(
        &fake_codex,
        concat!(
            "#!/bin/sh\n",
            "set -eu\n",
            "if [ \"${1-}\" = --version ]; then\n",
            "  printf 'codex-cli 0.147.0+k\\n'\n",
            "  exit 0\n",
            "fi\n",
            "printf '%s\\n' \"$PWD\" > \"$KAI_TEST_CWD\"\n",
            "printf '%s\\n' \"$@\" > \"$KAI_TEST_ARGS\"\n",
        ),
    )
    .unwrap();
    fs::set_permissions(&fake_codex, fs::Permissions::from_mode(0o700)).unwrap();
    let path = env::join_paths(
        std::iter::once(bin_dir).chain(env::split_paths(&env::var_os("PATH").unwrap())),
    )
    .unwrap();

    Command::cargo_bin("kai")
        .unwrap()
        .current_dir(&launch_dir)
        .env("PATH", path)
        .env("KAI_TEST_CWD", &cwd_path)
        .env("KAI_TEST_ARGS", &args_path)
        .args(["--quota-auto-restart", "yes", "a", "--fast"])
        .assert()
        .success();

    assert_eq!(
        fs::read_to_string(cwd_path).unwrap(),
        format!("{}\n", launch_dir.display())
    );
    assert_eq!(
        fs::read_to_string(args_path).unwrap(),
        concat!(
            "--dangerously-bypass-approvals-and-sandbox\n",
            "-c\n",
            "service_tier=fast\n",
            "--exit-on-quota-exceeded\n",
        )
    );
}