import type { McpServerConfig, ScenarioLimitsConfig } from "./config.js"; export interface Scenario { /** * Stable identifier. For on-disk JSON scenarios the loader derives it from the file path * (relative to the scenarios root, sans extension). For inline scenarios declared in * `axis.config.{js,ts,json}`, authors must provide it themselves. */ key: string; name: string; /** When true, the scenario is excluded from runs. */ skip?: boolean; setup?: LifecycleAction[]; prompt: string; judge: string | JudgeCriterion[]; teardown?: LifecycleAction[]; /** When set, only these agents run this scenario (overrides the global agents list). */ agents?: string[]; /** Skills specific to this scenario, merged with top-level and per-agent skills. */ skills?: string[]; /** MCP servers specific to this scenario, merged with top-level servers. */ mcp_servers?: Record; /** Per-scenario time/token limits. Overrides settings.limits.scenario defaults. */ limits?: ScenarioLimitsConfig; /** * Glob patterns (relative to the workspace) of files to capture into the report * after teardown. Merged with top-level `artifacts` from {@link AxisConfig}. */ artifacts?: string[]; /** * When defined, the scenario becomes a template. Only variants run; * the base scenario does not execute on its own. Each variant inherits * all fields from the parent and can override any of them. */ variants?: ScenarioVariant[]; } export interface ScenarioVariant { /** Variant identifier. Appended to the scenario key as `{scenarioKey}@{name}`. Must match /^[a-zA-Z0-9_-]+$/. */ name: string; skip?: boolean; setup?: LifecycleAction[]; prompt?: string; judge?: string | JudgeCriterion[]; teardown?: LifecycleAction[]; agents?: string[]; skills?: string[]; mcp_servers?: Record; /** Per-variant time/token limits. Overrides parent scenario and default limits. */ limits?: ScenarioLimitsConfig; /** Glob patterns of files to capture as artifacts. Replaces parent scenario's artifacts when set. */ artifacts?: string[]; } /** * User-facing authoring shape for scenarios. `key` is optional because the * loader derives it from the file path when the scenario lives as a standalone * file in the scenarios directory. * * When declared inline in the `scenarios` array of `axis.config.{js,ts,json}`, * `key` becomes required — there is no path to derive it from. That stricter * constraint is expressed at the `AxisConfig.scenarios` field type, not here. */ export type ScenarioInput = Omit & { key?: string; }; export type LifecycleAction = RunScriptAction | CopyAction; export interface RunScriptAction { action: "run_script"; command: string; } /** * Copy files matching `match` (a glob, resolved relative to the config * directory) into `destination` (relative to the agent workspace). Each * matched file's path relative to the longest non-glob prefix of `match` * is preserved under `destination`. */ export interface CopyAction { action: "copy"; match: string; destination: string; } export interface JudgeCriterion { check: string; weight?: number; } /** @deprecated Use {@link JudgeCriterion} instead. */ export type RubricCriterion = JudgeCriterion; //# sourceMappingURL=scenario.d.ts.map