/**
* 0.15.0-α.1 — vibe's output parser + writer.
*
* Vibe emits multi-artifact XML-tagged blocks (matching testgen's shape):
* contents
* prose
*
* `parseVibeOutput` extracts the blocks. `writeVibeFiles` writes them to
* disk under repoRoot, with path-safety checks (no escapes, no absolute
* paths, must be under repoRoot).
*
* Component-change requests are surfaced separately; they don't write
* files. The plate agent (later) handles them by either applying or
* rejecting via PM iteration.
*/
export interface VibeFileBlock {
/** Repo-relative path; validated to be safe. */
path: string;
/** File contents verbatim. */
contents: string;
}
export interface VibeChangeRequest {
component: string;
path: string;
rationale: string;
}
export interface VibeOutput {
files: VibeFileBlock[];
changeRequests: VibeChangeRequest[];
}
export declare function parseVibeOutput(body: string): VibeOutput;
/**
* Validate a vibe-emitted path is safe to write under repoRoot.
* Rejects absolute paths, parent-dir escapes, and paths that normalize
* outside the repo.
*
* 0.16.0-α.4 — also requires the path start with `mock/`. Vibe writes
* ONLY into the mock app (per the singular-mock-app architecture); any
* write to `src/` or elsewhere is a sign the prompt steering failed.
* The hard signal here is structural — the agent can't accidentally
* leak into production source.
*
* Returns the absolute target path on success; throws on rejection.
*/
export declare function validateAndResolveVibePath(repoRoot: string, relPath: string): string;
export declare function writeVibeFiles(repoRoot: string, files: VibeFileBlock[]): string[];
//# sourceMappingURL=emit.d.ts.map