/**
 * `AgentBlueprint` — the validated description of one agent Smithy can mint.
 *
 * A blueprint is the small, declarative spec that fully determines a generated
 * agent: its name, a one-line description, the system prompt that gives it its
 * voice, which slice of the tool surface it is trusted with, the model that backs
 * it, and optional free-form tags for cataloguing. It is the unit that flows
 * through Smithy's persona layer — profiles supply partial blueprints, the
 * {@link defineAgent} generator merges and completes them, and the runtime
 * adapter turns a finished blueprint into a runnable `AgentConfig`.
 *
 * Everything here is *data plus validation*. The shape is mirrored by a zod
 * schema so a blueprint that arrives from disk, a profile table, or a user-typed
 * spec is checked before anything downstream trusts it. The tool-collection
 * literal union is intentionally identical to the three named collections the
 * capabilities layer publishes (`read-only` / `coding` / `all`); it is kept as a
 * local union so this schema validates standalone without importing that type.
 */
import { z } from "zod";
/**
 * The tool surface a generated agent is granted, named to match the capabilities
 * layer's collections:
 *   - `read-only` — observe the workspace and the web; never mutate.
 *   - `coding`    — read-only plus write/edit/bash/todo/process.
 *   - `all`       — every registered tool.
 */
export type ToolCollectionName = "read-only" | "coding" | "all";
/** The complete, validated description of an agent to be generated. */
export interface AgentBlueprint {
    /** A short, file-safe identifier for the agent (e.g. `code-reviewer`). */
    readonly name: string;
    /** A one-line summary of what the agent is for. */
    readonly description: string;
    /** The system prompt that establishes the agent's role and behaviour. */
    readonly systemPrompt: string;
    /** Which slice of the built-in tool surface the agent may call. */
    readonly toolCollection: ToolCollectionName;
    /** The model id the agent's runs are bound to. */
    readonly model: string;
    /** Optional free-form labels for grouping and search. */
    readonly tags?: readonly string[];
}
/** zod schema mirroring {@link AgentBlueprint}; the validation source of truth. */
export declare const agentBlueprintSchema: z.ZodType<AgentBlueprint>;
/** Raised when a candidate object fails {@link agentBlueprintSchema}. */
export declare class BlueprintError extends Error {
    /** The individual validation issues, in `path: message` form. */
    readonly issues: readonly string[];
    constructor(issues: readonly string[]);
}
/**
 * Validate an arbitrary value as an {@link AgentBlueprint}, throwing a
 * {@link BlueprintError} (with every issue collected) when it does not conform.
 *
 * Returns a fresh, typed object on success so callers never alias the input.
 */
export declare function validateBlueprint(candidate: unknown): AgentBlueprint;
/**
 * Non-throwing variant of {@link validateBlueprint}: returns the typed blueprint
 * or `undefined`, for callers that prefer to branch rather than catch.
 */
export declare function tryValidateBlueprint(candidate: unknown): AgentBlueprint | undefined;
/**
 * Serialize a blueprint to canonical, stable, pretty-printed JSON.
 *
 * Keys are emitted in a fixed order (independent of the object's own key order)
 * so two equal blueprints always produce byte-identical text — handy for diffing,
 * caching, and writing to a manifest.
 */
export declare function serializeBlueprint(blueprint: AgentBlueprint): string;
/**
 * Parse JSON text back into a validated {@link AgentBlueprint}. Malformed JSON
 * and schema failures both surface as a {@link BlueprintError}.
 */
export declare function deserializeBlueprint(text: string): AgentBlueprint;
