import type { LlmClient } from "@slowcook-ai/core";
import { type VibeFileBlock } from "./emit.js";
export declare const AS_BUILT_VIBE_SYSTEM = "You are slowcook's as-built vibe agent. You are given the PRODUCTION\nsource of ONE existing surface. Produce a FAITHFUL, self-contained mock\nre-render of it for design review.\n\nRules, non-negotiable:\n- Output ONLY /...\">\u2026 blocks. No prose.\n- FAITHFUL means: same structure, same copy, same states as the source \u2014\n you are transcribing what IS, not designing. Do not improve, rename,\n restyle or add features. Uncertain behaviour becomes a code comment\n \"AS-BUILT-UNCLEAR: \u2026\", never an invention.\n- Self-contained: react only; no imports from the production tree or any\n package the mock app does not already use. Data the source fetches\n becomes inline fixtures marked \"@slowcook-honest: as-built fixture,\n shaped from \".\n- The FIRST line of every file must be a comment IN THAT FILE TYPE'S native\n comment syntax (// for ts/tsx, /* \u2026 */ for css, for html):\n @slowcook-as-built-from @ \u2014 prod-first: this mock\n mirrors production; edits here are PROPOSALS, not truth.\n- STYLING CONTRACT (style-drift post-mortem, 2026-07-08): tokens come from\n the mock app's CSS variables; recurring patterns (cards, buttons, chips,\n headings, inputs) use the design system's classes (.sc-*/Tailwind\n utilities). Inline style={{\u2026}} is allowed ONLY for one-off geometry\n (flex/grid math, sizes, positions) \u2014 never for color/background/border/\n font/shadow/radius. Do not invent a palette.";
export interface AsBuiltVibeInput {
repoRoot: string;
fromPath: string;
surface: string;
sha: string | null;
sources: {
path: string;
body: string;
}[];
brandYaml: string | null;
}
export declare function collectAsBuiltInput(repoRoot: string, fromPath: string, surface?: string): AsBuiltVibeInput;
export declare function buildAsBuiltVibePrompt(input: AsBuiltVibeInput): string;
export interface AsBuiltVibeResult {
written: string[];
files: VibeFileBlock[];
violations: string[];
}
export declare function runAsBuiltVibe(llm: LlmClient, model: string, input: AsBuiltVibeInput, opts?: {
dryRun?: boolean;
}): Promise;
//# sourceMappingURL=as-built.d.ts.map