/**
 * Structured prompt profile — the system prompt as named, addressable sections
 * instead of one opaque blob. The self-improvement loop targets ONE evolvable
 * `domain` section at a time (via `applyDomainPatch`); the role, environment,
 * tool conventions, and skill roster stay fixed so a candidate diff is
 * attributable to a single section rather than a whole-prompt rewrite.
 *
 * `renderProfile` emits the prompt in a fixed five-zone order — role,
 * Environment, Tool conventions, Skills, Domain guidance — mirroring the layout
 * of Harvey LAB's `harness/system_prompt.md` (workspace root, read-only
 * documents, output dir, skills dir). `profileToSurface` is the bridge to the
 * loop's string `MutableSurface`: a profile renders to exactly the text a
 * candidate is scored on.
 *
 * Distinct from the canonical `AgentProfile` exported by
 * `@tangle-network/agent-interface`. This helper builds prompt content that can
 * be rendered into an agent-interface profile's `prompt.systemPrompt`.
 */
import { type BaselineRoleKey } from './baselines';
export { BASELINE_ROLES, type BaselineRoleKey, engineerRole, generalistRole, researcherRole, } from './baselines';
/** A named, addressable region of the system prompt. `evolvable` marks whether
 *  the self-improvement loop is allowed to patch its body; fixed scaffolding
 *  (e.g. a compliance preamble) sets `evolvable: false`. */
export interface AgentProfileSection {
    id: string;
    title: string;
    body: string;
    evolvable: boolean;
}
/** A skill the agent can invoke. `triggers` are the phrases/conditions that
 *  should activate it; `scriptsDir` points at its executable scripts when the
 *  skill ships code (mirrors Harvey's `skills/<name>/scripts/`). */
export interface ProfileSkill {
    name: string;
    description: string;
    triggers: string[];
    scriptsDir?: string;
}
/** The structured system prompt. The first four fields are fixed scaffolding;
 *  `domain` is the evolvable surface the loop optimizes. */
export interface PromptProfile {
    role: string;
    environment: string;
    toolConventions: string;
    skills: ProfileSkill[];
    domain: AgentProfileSection[];
}
/**
 * Emit the sectioned system prompt in fixed order: role text, then
 * `## Environment`, `## Tool conventions`, `## Skills` (each skill as
 * `### <name>` + description + triggers), `## Domain guidance` (each section as
 * `### <title>` + body). The order is load-bearing — the loop diffs rendered
 * text, and reordering would make every candidate look like a full rewrite.
 */
export declare function renderProfile(p: PromptProfile): string;
/** The string `MutableSurface` the self-improvement loop scores — a profile
 *  renders to exactly the text a candidate is graded on. */
export declare function profileToSurface(p: PromptProfile): string;
/**
 * The fixed-scaffolding baseline: a `role`/`environment`/`toolConventions`
 * profile with the stock skill roster and NO domain guidance. The
 * production profile is this plus shipped domain sections.
 */
export declare function baselineProfile(args: {
    role: string;
    environment?: string;
    toolConventions?: string;
    skills?: ProfileSkill[];
}): PromptProfile;
/**
 * Baseline from one of the strong generic roles (`'engineer' | 'researcher' |
 * 'generalist'`) — the common case: pick a role foundation, optionally override
 * the environment to describe THIS product's sandbox, then layer domain via
 * `prodProfile`. Domain guidance stays in the product repo; this only supplies
 * the generically-useful role + stock scaffolding.
 */
export declare function baselineProfileFromRole(role: BaselineRoleKey, args?: {
    environment?: string;
    toolConventions?: string;
    skills?: ProfileSkill[];
}): PromptProfile;
/** The production profile: the baseline scaffolding plus the domain sections
 *  shipped after self-improvement. Differs from the baseline ONLY in `domain`
 *  (and any skills the caller layered into the baseline) — the role,
 *  environment, and tool conventions are carried through unchanged. */
export declare function prodProfile(baseline: PromptProfile, shipped: AgentProfileSection[]): PromptProfile;
/**
 * Section-scoped edit — replace the body of ONE domain section by id, leaving
 * every other section byte-identical. This is how the loop targets a single
 * evolvable surface. Throws on an unknown section id (a patch that hits no
 * section is a silent no-op otherwise — fail loud). Throws when the targeted
 * section is `evolvable: false`.
 */
export declare function applyDomainPatch(p: PromptProfile, sectionId: string, newBody: string): PromptProfile;
/**
 * Content hash of a single section — its loop identity. Delegates to the
 * campaign provenance `surfaceContentHash` (the same helper the loop's
 * provenance record uses for full surfaces), so a section hash is byte-for-byte
 * comparable with the `sha256:`-prefixed content hashes that record carries.
 * Two sections that render identically (same title + body) share a hash; the
 * `id` and `evolvable` flag are excluded — they are routing metadata, not
 * content.
 */
export declare function sectionHash(section: AgentProfileSection): string;
//# sourceMappingURL=index.d.ts.map