import type { LanguageModel } from 'ai';
export interface RunBehavioursOptions {
    /**
     * Directory containing the analysed spec + facts sidecars. Must
     * contain `specs/skeleton.specly` and `facts/skeleton-provenance.json`
     * + `facts/facts.json`. Typically the output of `spv ai analyse
     * --no-behaviours <source>`.
     */
    analysedSpecDir: string;
    /**
     * Where to write the filled spec + microcall sidecars. Defaults to
     * `analysedSpecDir` (in-place fill). Set to a new dir for a clean
     * separation of analyse vs behaviours artifacts.
     */
    outputDir?: string;
    /** Pre-resolved LanguageModel (for cross-call session caching). */
    model?: LanguageModel;
    /** Externally-managed claude-cli session ID. */
    sessionId?: string;
    /** Per-call timeout. Default 5 minutes per microcall. */
    timeoutMsPerCall?: number;
    /** Concurrency cap for per-action micro-calls. Default 5. */
    microcallConcurrency?: number;
    /** Override the spec filename to read. Default 'skeleton.specly'. */
    specFilename?: string;
}
export interface RunBehavioursResult {
    /** Where the filled spec was written. */
    filledSpecPath: string;
    /** Microcall provenance — succeeded / failed / latency / etc. */
    microcallStats: {
        attempted: number;
        succeeded: number;
        failed: number;
        wallTimeMs: number;
    };
    /** Final validation after fill (or after surgical retry). */
    validateFinal: {
        ok: boolean;
        errors: string;
    };
    /** Number of surgical retry passes that fired. */
    surgicalRetryPasses: number;
}
/**
 * Run the LLM-heavy behaviours phase against an analysed spec dir.
 */
export declare function runBehaviours(opts: RunBehavioursOptions): Promise<RunBehavioursResult>;
//# sourceMappingURL=behaviours-runner.d.ts.map