import type { DependencyRequirements, Sample } from '../types/index.js'; export declare function parseYaml(text: string): unknown; export interface LoadSamplesResult { samples: Sample[]; requires?: DependencyRequirements; /** Samples bundle 的根目录,后续相对路径(mock.return_file / custom assertion fn / * test set hash 等)都该锚到这里: * - 单文件模式(samplesPath 指 .json/.yaml):baseDir = 文件所在目录 * - 目录模式(samplesPath 指目录):baseDir = 目录自身 * 之前下游代码用 dirname(samplesPath) 算 baseDir,目录模式下得到的是上层目录(/), * 导致 .omk/fixtures/*.json 这种自然布局找不到。 */ baseDir: string; /** 当 baseDir 是目录模式(用户传的是目录而不是单文件),目录里参与合并的所有 sample 文件 * 绝对路径列表(已按文件名排序)。computeTestSetHash 用它枚举,不再对目录 readFileSync 抛 EISDIR。 * 单文件模式下是 [samplesPath]。 */ sourceFiles: string[]; /** sample_id → source file。Authoring 命令需要把目录模式下的修复写回原文件。 */ sampleSourceById: Record; } /** * Load samples from a single file OR a directory of sample files. * * File mode (.json / .yaml / .yml): * - Array: `[ { sample_id, prompt, ... } ]` (legacy) * - Object wrapper: `{ requires?: { tools, files, env }, samples: [...] }` * * Directory mode (e.g. `/.omk/`): * - Glob `*.{json,yaml,yml}` minus reserved prefixes (report*, health*, _*) * - Concat samples in deterministic name-sorted order * - Cross-file `sample_id` must be unique * - `requires` from each file unioned together */ export declare function loadSamples(samplesPath: string): LoadSamplesResult; /** Pull `.json/.yaml/.yml` siblings out of a directory, skipping omk's own report/health * artifacts and any underscore-prefixed file (the convention for "not a sample"). * Exported so `omk sample --append` picks its target with the same sorted/filtered order * that directory-mode loading merges by (deterministic, predictable). */ export declare function listSampleFilesInDir(dir: string): string[]; export declare function validateSamples(samples: Sample[]): void;