/**
 * Default `Reemit` implementation — builds a feedback prompt from
 * verifier errors + previous file content and calls the LLM to
 * re-emit a single file.
 *
 * The realize-emit skill (at ~/.claude/skills/realize-emit/) is
 * auto-loaded by claude-cli when its description matches the prompt
 * shape — that carries all the per-owner emission conventions
 * (typing rules, _input convention, γ-stub shape, etc.) so the
 * feedback re-emit benefits from the same guidance as the original
 * emission.
 *
 * The prompt is intentionally minimal:
 *   - Errors (verifier-formatted)
 *   - Previous file content
 *   - A request to re-emit
 *
 * Future iterations may augment with AVAILABLE SPEC SURFACE (cross-
 * service signatures) when the errors are arity-shape — empirically,
 * the skill + basic prompt suffices for most null-safety / type
 * mismatch / unused-decl cases.
 */
import type { LanguageModel } from 'ai';
import type { Reemit, ReemitRequest } from './feedback-runner.js';
export interface BuildReemitOptions {
    /** LLM model — same shared model used by per-owner-emit. */
    model: LanguageModel;
    /** Max retries per file when the LLM produces empty / unparseable
     *  output. Default 1. */
    maxAttempts?: number;
    /** Per-call timeout. Default 3min — feedback re-emits are typically
     *  faster than fresh emissions because the LLM has the previous
     *  content to anchor on. */
    timeoutMs?: number;
    /**
     * Skills whose content should be inlined into the system prompt for
     * non-claude-cli providers. claude-cli auto-loads skills via
     * filesystem-based resolution; other providers (`openai-compatible`,
     * `anthropic`, `stub`) need explicit inlining of the skill content.
     *
     * Defaults to `['realize-emit']` — the realize-emit skill carries the
     * per-owner emission CONSTRAINTS / GUIDANCE / EXAMPLE that's directly
     * relevant to the feedback re-emit task (typing conventions, _input
     * convention, γ-stub shape).
     */
    skills?: string[];
    /**
     * Optional context loader (Phase 3 of
     * 2026-05-13-VERIFIER-DIAGNOSTIC-TREATMENT-SPLIT).
     *
     * For each owner whose file is being re-emitted, return the per-owner
     * realize-context snapshot (TARGET RUNTIME + [PRE-BAKED] step bullets
     * + cross-service surface + capabilities) as a markdown blob, or null
     * if no snapshot exists. The returned blob is prepended to the
     * reemit user prompt — same shape the original per-owner emit used.
     *
     * The default-built loader (in realize/index.ts) reads from
     * `<outputDir>/.realize-context/<Owner>.md`. Tests may inject fakes.
     */
    contextLoader?: (ownerName: string) => string | null;
}
/**
 * Build a `Reemit` callback that uses the provided LLM model.
 *
 * The returned closure can be passed straight to `runPostEmitFeedback`.
 */
export declare function buildLlmReemit(options: BuildReemitOptions): Reemit;
/**
 * Format the feedback prompt body. Caller's LLM provider (e.g.
 * claude-cli) loads the realize-emit skill as system context.
 *
 * The optional `ownerContext` (Phase 3) is the per-owner realize-context
 * snapshot — TARGET RUNTIME + [PRE-BAKED] step bullets + cross-service
 * surface + capabilities — prepended to the prompt so the LLM sees the
 * same input the original per-owner emit had. Without this, smaller
 * models (Ollama / MarrBox) hallucinate cross-file calls; with it,
 * they have the canonical contract to anchor against.
 *
 * Exported for tests + so callers can override the prompt shape.
 */
export declare function formatFeedbackPrompt(req: ReemitRequest, ownerContext?: string | null): string;
//# sourceMappingURL=reemit.d.ts.map