import { isEveProject } from "#setup/scaffold/index.js"; import { type Asker } from "../ask.js"; import { pathExists } from "../path-exists.js"; import { type ResolvedProjectPath, type SetupState } from "../state.js"; import type { SetupBox } from "../step.js"; /** Injected for tests; defaults to the real filesystem probes. */ export interface ResolveTargetDeps { pathExists: typeof pathExists; isEveProject: typeof isEveProject; } export interface ResolveTargetOptions { /** Resolves the name and directory questions; the composed stack decides how. */ asker: Asker; /** * Interactive-only notice surface for the duplicate-directory re-ask loop. * Narrower than the prompter it forwards to; goes away when notices get a * channel of their own. */ notify(message: string): void; /** * Skip the name question and use this value. Stays a factory option (not a * `withAnswers` rung) so it keeps short-circuiting before any ask while * still being validated, exactly as the dual-face box did. */ presetName?: string; /** Parent directory the project folder is created inside. Defaults to cwd. */ targetDirectory?: string; /** Force scaffolding into the target directory instead of a `./` child. */ inPlace?: boolean; /** * Treat an existing `./` that is already an eve project as resumable * instead of refusing it. Composed on for headless runs so re-runs converge; * interactive runs keep refusing so a human notices the collision. */ resumeExisting?: boolean; deps?: ResolveTargetDeps; } /** The name + directory decision gather produces. */ export interface ResolveTargetInput { agentName: string; inPlace: boolean; } export interface ResolveTargetPayload { agentName: string; projectPath: Extract; } /** * THE TARGET BOX (Q1 + Q2): resolve the agent name (the shared identity for * the directory and the Vercel project) and decide whether to scaffold in * place or into a new `./` child. The current-vs-new question only fires * when the target directory already looks like a project; otherwise creating a * new directory is the announced default. A headless re-run resumes an * existing eve project directory instead of refusing it (composed via * `resumeExisting`), so re-runs converge. */ export declare function resolveTarget(options: ResolveTargetOptions): SetupBox;