/**
 * define* identity helpers — typed configuration authoring functions.
 *
 * Each function is a **pure identity function** that returns its input
 * unchanged. The value is purely at the type level: TypeScript narrows
 * the parameter type so authors get full IDE autocomplete and compile-
 * time validation when writing configuration files.
 *
 * Runtime validation is NOT performed here — it happens later in the
 * pipeline via Zod schemas. This separation keeps the authoring
 * experience fast (no schema import overhead at edit time) and lets
 * the pipeline control when and how validation errors are surfaced.
 *
 * Usage:
 * ```typescript
 * import { defineTask, env } from "@sanity/ailf"
 *
 * export default defineTask({
 *   id: "groq-projection-basics",
 *   mode: "literacy",
 *   title: "GROQ Projection Basics",
 *   // ... full autocomplete here
 * })
 * ```
 *
 * @see docs/design-docs/architecture-overhaul/typescript-configuration.md (canonical)
 */
import type { EvalConfig } from "./schemas/eval-config.js";
import type { CanaryTaskSetConfig } from "./schemas/canary-tasks.js";
import type { FeatureRegistry, RubricConfig, ThresholdConfig } from "./schemas/pipeline.js";
import type { SchedulesFile } from "./schemas/schedules.js";
import type { SinksFile } from "./schemas/sinks.js";
import type { TestBudgetConfig } from "./schemas/test-budgets.js";
import type { ModelsConfig } from "./types/index.js";
import type { GeneralizedTaskDefinition } from "./types/generalized-task.js";
import type { RepoConfig } from "./types/repo-config.js";
import type { PackageSurfaceConfig } from "./types/package-surface.js";
import type { PreflightScoringConfig } from "./types/preflight-scoring.js";
import type { ModeBase, PresetDefinition } from "./types/plugin-registry.js";
/**
 * Define a full AILF evaluation configuration (`EvalConfig`).
 *
 * This is the advanced, standalone config passed via `ailf run --config
 * <path>`. For the repo-level `.ailf/ailf.config.ts` that `ailf init`
 * scaffolds and `ailf run` auto-loads, use {@link defineRepoConfig} instead —
 * its shape is `RepoConfig` (with repo-only `triggers`/`owner` blocks),
 * not `EvalConfig`.
 */
export declare function defineConfig(config: EvalConfig): EvalConfig;
/**
 * Define an AILF repo configuration — the `.ailf/ailf.config.ts` file that
 * `ailf init` scaffolds and `ailf run` auto-loads.
 *
 * Narrows the parameter to `RepoConfig` so authors get full IDE autocomplete
 * for `source`, `triggers`, `execution`, `owner`, etc. Like the other
 * `define*` helpers this is a pure identity function — runtime validation
 * happens later via `RepoConfigSchema` when the pipeline loads the file.
 *
 * ```typescript
 * import { defineRepoConfig } from "@sanity/ailf"
 *
 * export default defineRepoConfig({
 *   source: { projectId: "abc123", dataset: "production" },
 * })
 * ```
 */
export declare function defineRepoConfig(config: RepoConfig): RepoConfig;
/**
 * Define an evaluation task with full type narrowing by mode.
 *
 * Setting `mode: "literacy"` narrows available fields to literacy-specific
 * options; `mode: "mcp-server"` narrows to MCP-specific options; etc.
 *
 * The returned value is the input unchanged — this is a type-only helper.
 */
export declare function defineTask(task: GeneralizedTaskDefinition): GeneralizedTaskDefinition;
/**
 * Define the model registry (models to evaluate and grader model).
 *
 * Used in `config/models.ts` for typed model configuration.
 *
 * Validates:
 * - Every `modes` entry is a canonical eval mode name
 * - Every `variants` key is a mode the model is enrolled in
 * - `openai:responses:` model ids are not used for agentic literacy variants
 *   (the in-house agentic loop dispatches to chat completions only)
 * - Responses-API-only fields (`reasoning`, `summary`, `verbosity`) are not
 *   set on a model that routes through the agentic provider — they would be
 *   silently dropped.
 *
 * @throws {Error} On invalid mode names, mismatched variant keys, or
 *                 misconfigured OpenAI Responses-API fields.
 */
export declare function defineModels(models: ModelsConfig): ModelsConfig;
/**
 * Define the framework-level package-surface manifest consumed by the
 * W0198 symbol-resolution preflight.
 *
 * Validates the obviously author-time errors:
 * - Each entry has a non-empty `pkg` and `semverPin`.
 * - `semverPin` is a single-major caret range (`^MAJOR.MINOR.PATCH`).
 *   Other range syntaxes (`>=`, `~`, `*`) are rejected because the
 *   resolver's stability commitment is "pinned to one major"; non-caret
 *   ranges either widen past a major (reintroducing churn) or are
 *   stricter than needed for an editorial pin.
 * - No duplicate `pkg` entries.
 *
 * @throws {Error} On invalid entries or duplicates.
 *
 * @see docs/design-docs/two-stage-grader-symbol-preflight.md
 */
export declare function definePackageSurface(config: PackageSurfaceConfig): PackageSurfaceConfig;
/**
 * Define the preflight-scoring config consumed by the W0198 two-stage
 * grader's score merge.
 *
 * The single knob is `codeCorrectnessWeight` — preflight's share of the
 * `code-correctness` dimension (`[0, 1]`). The complementary share belongs
 * to the LLM rubric. Validates the obviously author-time errors:
 *
 * - `codeCorrectnessWeight` is a finite number in `[0, 1]`. Weights outside
 *   that range either disable one lane entirely (use `0` / `1`) or land in
 *   nonsense territory (negative, > 1).
 *
 * @throws {Error} On out-of-range weights.
 */
export declare function definePreflightScoring(config: PreflightScoringConfig): PreflightScoringConfig;
/**
 * Define rubric templates and scoring profiles.
 *
 * Used in `config/rubrics.ts` for typed rubric configuration.
 */
export declare function defineRubrics(rubrics: RubricConfig): RubricConfig;
/**
 * Define quality thresholds for readiness gates and regression alerts.
 *
 * Used in `config/thresholds.ts` for typed threshold configuration.
 */
export declare function defineThresholds(thresholds: ThresholdConfig): ThresholdConfig;
/**
 * Define the product feature coverage registry.
 *
 * Used in `config/features.ts` for typed feature tracking.
 */
export declare function defineFeatures(features: FeatureRegistry): FeatureRegistry;
/**
 * Define report delivery sinks (Slack, BigQuery, webhooks).
 *
 * Used in `config/sinks.ts` for typed sink configuration.
 */
export declare function defineSinks(sinks: SinksFile): SinksFile;
/**
 * Define scheduled evaluation cron jobs and digest config.
 *
 * Used in `config/schedules.ts` for typed schedule configuration.
 */
export declare function defineSchedules(schedules: SchedulesFile): SchedulesFile;
/**
 * Define per-provider daily USD spend caps for Tier 3 (live-LLM) CI runs.
 *
 * Used in `config/test-budgets.ts` for typed budget configuration.
 *
 * @see docs/design-docs/testing-strategy.md — "Tier 3 — Live LLMs"
 */
export declare function defineTestBudgets(budgets: TestBudgetConfig): TestBudgetConfig;
/**
 * Define the curated canary task set for the Tier 3 nightly workflow.
 *
 * Used in `config/canary-tasks.ts`. Validation against the live task
 * inventory happens in `scripts/check-canary-tasks.ts`, not here.
 *
 * @see docs/design-docs/testing-strategy.md — "Tier 3 — Live LLMs"
 */
export declare function defineCanaryTasks(canary: CanaryTaskSetConfig): CanaryTaskSetConfig;
/**
 * Source configuration — typed inline until a dedicated schema exists.
 *
 * Sources define where documentation is fetched from (production, branch,
 * local). The shape matches config/sources.yaml entries.
 */
export interface SourceEntry {
    /** Source name (e.g., "production", "branch", "local") */
    name: string;
    /** Base URL for the documentation site */
    baseUrl: string;
    /** Sanity project ID */
    projectId?: string;
    /** Sanity dataset */
    dataset?: string;
    /** Content release perspective */
    perspective?: string;
    /** Whether this is the default source */
    default?: boolean;
}
/**
 * Define documentation source configurations.
 *
 * Used in `config/sources.ts` for typed source configuration.
 */
export declare function defineSources(sources: SourceEntry[]): SourceEntry[];
/**
 * Prompt template configuration — typed inline until a dedicated schema exists.
 */
export interface PromptEntry {
    /** Unique identifier (used in Promptfoo config references) */
    id?: string;
    /** Human-readable label (shown in results display) */
    label?: string;
    /** Prompt template name */
    name: string;
    /** Template string with `{{variable}}` placeholders */
    template: string;
    /** System message (for chat-format prompts) */
    systemMessage?: string;
    /** Supported modes for this prompt */
    modes?: string[];
}
/**
 * Define prompt templates.
 *
 * Used in `config/prompts.ts` for typed prompt configuration.
 */
export declare function definePrompts(prompts: PromptEntry[]): PromptEntry[];
/**
 * Define a domain preset — targets a mode base and adds domain-specific config.
 *
 * A domain preset declares which mode it targets (by ID), provides domain
 * configuration (sources, features, doc fetcher), and can optionally override
 * mode base defaults (rubrics, scoring profiles, prompt templates).
 *
 * Used in `.ailf/preset.ts` or npm packages for typed preset authoring.
 */
export declare function definePreset(preset: PresetDefinition): PresetDefinition;
/**
 * Define a mode base — shared evaluation methodology for a mode.
 *
 * A mode base defines HOW you evaluate (rubrics, scoring, prompts)
 * independently of WHAT you're evaluating. Domain presets target a mode
 * base and inherit its defaults.
 */
export declare function defineModeBase(base: ModeBase): ModeBase;
/**
 * A pricing table entry for cost estimation.
 */
export interface PricingEntry {
    /** Model ID (e.g., "openai:gpt-4o") */
    modelId: string;
    /** Cost per 1K input tokens in USD */
    inputPer1k: number;
    /** Cost per 1K output tokens in USD */
    outputPer1k: number;
    /** Optional label */
    label?: string;
}
/**
 * Define a pricing table for cost estimation.
 *
 * Used in `config/pricing.ts` for typed pricing configuration.
 */
export declare function definePricingTable(entries: PricingEntry[]): PricingEntry[];
