import yargs from "yargs"; import { hideBin } from "yargs/helpers"; import path from "path"; export type CliArgs = { evalName: string; evalDir: string; taskFile: string; }; /** * Parses command line arguments and resolves paths */ export async function parseCliArgs(dirname: string): Promise { const argv = await yargs(hideBin(process.argv)) .usage("Usage: $0 [options]") .command("$0 ", "Run an evaluation") .positional("eval-name", { describe: "Name of the evaluation to run", type: "string", }) .help() .alias("h", "help") .parseAsync(); const evalName = argv["eval-name"]; // Ensure evalName is provided if (!evalName) { throw new Error("eval-name is required"); } // Support both directory path and direct task.yml path let evalDir: string; let taskFile: string; if (evalName.endsWith("task.yml") || evalName.endsWith(".yml") || evalName.endsWith(".yaml")) { // Direct path to task file taskFile = path.isAbsolute(evalName) ? evalName : path.join(dirname, evalName); evalDir = path.dirname(taskFile); } else { // Directory path (original behavior) evalDir = path.join(dirname, evalName); taskFile = path.join(evalDir, "task.yml"); } return { evalName, evalDir, taskFile, }; }