/**
 * `defineAgent` — the single blueprint generator, and `toAgentConfig` — the
 * bridge from a finished blueprint into the runtime's `AgentConfig`.
 *
 * Where a naive design ships a family of `createReviewAgent` / `createCoderAgent`
 * / `createResearchAgent` factories that differ only by a tool factory and a few
 * prompt lines, Smithy ships *one* generator over a data table. {@link defineAgent}
 * takes a caller's spec (which must at least name the agent), optionally seeds it
 * from a starter {@link PROFILES | profile}, merges the two with the spec winning
 * on every field, fills any remaining gap from a baseline default, and validates
 * the completed object as an {@link AgentBlueprint}. The result is a fully-formed,
 * checked blueprint — or a {@link BlueprintError} if the merge could not satisfy
 * the schema.
 *
 * {@link toAgentConfig} is the second half: it turns that validated blueprint into
 * the immutable `AgentConfig` the agent runtime consumes, resolving the named tool
 * collection into a runnable `ToolBox` via the capabilities layer.
 */
import type { AgentConfig } from "../../runtime";
import { type AgentBlueprint } from "./blueprint";
/** The minimum a caller must supply: at least the agent's name. */
export type AgentSpec = Partial<AgentBlueprint> & {
    name: string;
};
/**
 * Build a complete, validated {@link AgentBlueprint} from a partial spec and an
 * optional starter profile.
 *
 * Precedence, highest first: the caller's `spec`, then the named `profile`'s
 * defaults, then the module {@link BASELINE}. `tags` from the spec replace (do not
 * merge with) the profile's tags, so a caller stays in full control of labelling.
 *
 * @param spec    The caller's blueprint fragment; must include `name`.
 * @param profile Optional starter profile name (e.g. `coder`); ignored if absent.
 * @throws BlueprintError when the merged result fails schema validation, or when
 *         a non-empty `profile` does not name a known profile.
 */
export declare function defineAgent(spec: AgentSpec, profile?: string): AgentBlueprint;
/**
 * Project a validated {@link AgentBlueprint} onto the runtime's immutable
 * {@link AgentConfig}.
 *
 * The blueprint's `systemPrompt` becomes the config's `system` preamble, the
 * `model` is passed through, and the named `toolCollection` is resolved into a
 * runnable `ToolBox` by the capabilities layer. `cwd` roots the resulting tools
 * at a working directory (defaults to the process cwd inside `toolBox`).
 *
 * @param blueprint A blueprint that has already passed {@link defineAgent}.
 * @param cwd       Optional working directory the tools operate within.
 */
export declare function toAgentConfig(blueprint: AgentBlueprint, cwd?: string): AgentConfig;
