import type { Spec } from './spec/index.js';
/** Canonical provider identifiers supported by the registry. */
export type ProviderKind = 'claude' | 'gpt4' | 'gemini' | 'markdown';
/**
 * Parsed view of a unified spec.md ready for any adapter to render.
 *
 * Fields that may be missing (no Technical section, no signatures) are surfaced
 * via `warnings` rather than thrown — renderers are best-effort.
 */
export interface LoadedSpec {
    spec: Spec;
    /** Raw spec.md body excluding frontmatter (full unified body per SPEC-630). */
    specBody: string;
    /** Body of the `## Technical` section only, or null if absent. */
    technicalBody: string | null;
    /**
     * Parsed top-level function signatures from the Technical section.
     * Best-effort regex over `export function|interface|type|class|const`.
     */
    signatures: {
        name: string;
        signature: string;
    }[];
    /**
     * BDD scenarios parsed from `## Acceptance Criteria`.
     * Only scenarios with all three of GIVEN/WHEN/THEN are included.
     */
    scenarios: {
        title: string;
        given: string;
        when: string;
        then: string;
    }[];
    /** File lists parsed from `### Files to create` / `### Files to modify` under Technical. */
    filesToCreate: string[];
    filesToModify: string[];
    /** Non-fatal parser warnings surfaced via RenderOutput.extras.warnings. */
    warnings: string[];
}
export interface ProviderRenderInput {
    loadedSpec: LoadedSpec;
    projectPath: string;
}
export interface ProviderRenderOutput {
    provider: ProviderKind;
    /** Rendered content (markdown or JSON-shaped string). */
    content: string;
    /** Estimated token count of `content`. */
    tokenEstimate: number;
    /** Optional file written to disk (e.g. planu/context.md for markdown provider). */
    filePath?: string;
    /** Provider-specific extras (model hint, function declarations, warnings, etc). */
    extras?: Record<string, unknown>;
}
export interface SpecRenderer {
    readonly kind: ProviderKind;
    render(input: ProviderRenderInput): Promise<ProviderRenderOutput>;
}
/** Internal: factory signature for lazy provider resolution by the registry. */
export type ProviderRendererFactory = () => Promise<SpecRenderer>;
//# sourceMappingURL=provider-adapter.d.ts.map