eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
34 lines (33 loc) • 1.75 kB
TypeScript
import { detectProjectResolution, type ProjectResolution } from "../project-resolution.js";
import type { Prompter } from "../prompter.js";
import { type SetupState } from "../state.js";
import type { SetupBox } from "../step.js";
import { linkProject, resolveProjectByNameOrId, unresolvedProject } from "../vercel-project.js";
/** Injected for tests; defaults to the real Vercel project helpers. */
export interface LinkProjectDeps {
linkProject: typeof linkProject;
detectProjectResolution: typeof detectProjectResolution;
resolveProjectByNameOrId: typeof resolveProjectByNameOrId;
unresolvedProject: typeof unresolvedProject;
}
export interface LinkProjectOptions {
/** Streams link progress and command output. The box never prompts through it. */
prompter: Prompter;
deps?: LinkProjectDeps;
}
/**
* THE PROJECT BOX. Executes the resolved Vercel project plan after scaffolding,
* once the project directory exists (so `vercel link` can write `.vercel/`).
* The gather prompts for nothing: every decision was made up front by the
* resolve-provisioning box, so `perform` owns all the work.
*
* The plan is authoritative. The box always re-links to the planned project so
* a stale or mismatched `.vercel` link can never silently win over the choice
* made up front. `vercel link --project X --yes` is an idempotent rewrite, so
* re-runs stay safe. The resolution read back from `.vercel/project.json` lands
* in `state.project`, which every later box reads.
*
* Named `linkVercelProject` because the setup island also exports the
* `linkProject` executor helper this box drives.
*/
export declare function linkVercelProject(options: LinkProjectOptions): SetupBox<SetupState, null, ProjectResolution>;