export interface CrucibleConfig { /** Target binary path or docker image + command */ target: { binary: string; args?: string[]; /** Docker image for Glasshouse isolation */ image?: string; /** Input method: stdin (default), file, or arg */ inputMethod?: 'stdin' | 'file' | 'arg'; /** File path for file-based fuzzing (relative to container) */ inputFile?: string; }; /** Seed corpus directory */ seedDir: string; /** Output directory for crashes, hangs, and queue */ outputDir: string; /** Mutation budget */ budget?: { /** Total fuzz time in seconds (default: 3600) */ totalTimeSeconds?: number; /** Maximum mutations per seed (default: 1000) */ maxMutationsPerSeed?: number; /** Maximum total mutations (default: 1_000_000) */ maxTotalMutations?: number; }; /** Mutation strategy weights (0-1, sum normalizes) */ strategyWeights?: Partial>; /** Dictionary: tokens to insert during fuzzing */ dictionary?: string[]; /** Coverage tracking (requires binary instrumentation or ASAN coverage) */ trackCoverage?: boolean; /** Deduplicate crashes by stack hash */ deduplicateCrashes?: boolean; /** Glasshouse execution config for sandboxed runs */ glasshouseImage?: string; } export interface CrucibleResult { /** Total mutations performed */ totalMutations: number; /** Total executions */ totalExecutions: number; /** Unique crashes found (deduplicated by stack hash) */ uniqueCrashes: number; /** Total crash instances */ totalCrashes: number; /** Unique hangs found */ uniqueHangs: number; /** Total hang instances */ totalHangs: number; /** Execution rate (execs/sec) */ execsPerSec: number; /** Coverage: total edges discovered */ totalEdges: number; /** Coverage: bitmap size */ bitmapSize: number; /** Crashes with triage */ crashes: CrucibleCrash[]; /** Duration in seconds */ durationSeconds: number; /** Path to output directory with artifacts */ outputDir: string; } export interface CrucibleCrash { /** Crash input (hex-encoded) */ input: string; /** Input size in bytes */ inputSize: number; /** Stack hash for deduplication */ stackHash: string; /** Crash type from Glasshouse */ crashType: string; /** Crash address */ crashAddress: string; /** Sanitizer findings */ sanitizerFindings: { type: string; description: string; }[]; /** Exploitability classification */ exploitability: 'EXPLOITABLE' | 'PROBABLY_EXPLOITABLE' | 'UNKNOWN' | 'NOT_EXPLOITABLE'; /** Exploitability reasoning */ exploitabilityReason: string; /** Crash file path */ filePath: string; } export type MutationOp = 'bitflip' | 'byteflip' | 'arith' | 'interesting' | 'dictionary' | 'havoc' | 'splice' | 'delete' | 'insert' | 'clone' | 'overwrite' | 'crossover'; export declare function runCrucible(config: CrucibleConfig): CrucibleResult; //# sourceMappingURL=crucible.d.ts.map