import type { ProjectConfig, SuiteConfig } from "./types.js"; import type { EnvironmentConfig, GradingEnvironmentConfig } from "../eval/types.js"; /** * Merge two string arrays, detecting entries that appear in both. * In "error" mode (default), throws on duplicates; in "warn" mode, * deduplicates without throwing. Logging, if desired, is left to the caller. */ export declare function dedup(a: string[] | undefined, b: string[] | undefined, label: string, onConflict?: "error" | "warn"): string[]; /** * Merge two file-mapping arrays, throwing if both define the same destination * with a different source (conflict) or identical source (redundant duplicate). * * Destination identity is `(dest_root, dest)`: the same `dest` under `workdir` * and under `assets` names two different locations, so only entries targeting * the same root can collide. */ export declare function dedupFiles(a: NonNullable | undefined, b: NonNullable | undefined): NonNullable; /** * Merge two already-resolved EnvironmentConfig objects — concatenate skills, * files, and commands while detecting conflicts and duplicates. */ export declare function mergeResolvedEnvironments(root: EnvironmentConfig, stimulus: EnvironmentConfig): EnvironmentConfig; /** * Merge a root and a stimulus {@link GradingEnvironmentConfig} — concatenate * their grader-only `files`, detecting conflicts and duplicates the same way * agent-environment files are merged. Returns `undefined` when neither side * stages any grader file. */ export declare function mergeGradingEnvironments(root: GradingEnvironmentConfig | undefined, stimulus: GradingEnvironmentConfig | undefined): GradingEnvironmentConfig | undefined; export declare class ProjectContext { readonly config: ProjectConfig; constructor(config: ProjectConfig); /** Factory: load .vally.yaml and wrap in a ProjectContext. */ static load(startDir: string): Promise; /** The directory where .vally.yaml was found (empty string if defaults). */ get dir(): string; /** Resolve eval directories to absolute paths. */ resolveEvalDirs(fallbackDir?: string): string[]; /** Look up a suite by name. Throws with fuzzy suggestion if not found. */ resolveSuite(name: string): SuiteConfig; } //# sourceMappingURL=context.d.ts.map