import { SetupContext, SetupState, TemplateFramework } from "../flow/types.js";
export type DependencyMode = "Public" | "Private";
export type DockerAvailabilityIssue = {
    kind: "missing" | "not_running";
    message: string;
};
export type PromptPreset = NonNullable<SetupContext["selectedPromptPreset"]>;
export type SandboxTemplateRef = {
    id: string;
    version: string;
};
export type SetupHandlers = Partial<Record<SetupState, (context: SetupContext) => Promise<SetupContext | void>>>;
export type SetupUi = {
    error: (message: string) => never;
    log: (message: string) => void;
    renderSetupCompleteCard: (input: {
        contextName: string;
        designSystemName: string;
        projectUrl: string;
        shouldRunScan: boolean;
    }) => void;
    renderStep: (title: string) => void;
    renderTemplateReadyCard: (templateDestinationPath: string) => void;
};
export type ValidationService = {
    findParentGitDirectoryLocation(): string | null;
};
export type SetupDesignSystemServices = {
    ensureSandboxTemplateAccess: (workspaceId: string) => Promise<void>;
    ensureWorkspaceSetupEligibility: (workspaceId: string) => Promise<void>;
    promptDesignSystemId: () => Promise<string>;
    resolveDesignSystemName: (designSystemId: string) => Promise<string | undefined>;
    resolveWorkspaceIdForDesignSystem: (designSystemId: string) => Promise<string>;
    updateSelectedDesignSystem: (designSystemId: string) => void;
};
export type SetupScanServices = {
    persistAnalyzePackages: (componentPackages: string[]) => void;
    runScanAgainstSourcePath: (input: {
        componentPackages: string[];
        designSystemId: string;
        scanSourcePath: string;
    }) => Promise<string[]>;
    uploadAnalysisSnapshots: (input: {
        designSystemId: string;
        scanOutputPaths: string[];
    }) => Promise<{
        processingRunId?: string;
        snapshotIds: string[];
    }>;
    waitForAnalysisProcessing: (input: {
        designSystemId: string;
        processingRunId?: string;
    }) => Promise<void>;
};
export type SetupContainerServices = {
    detectDockerAvailabilityIssue: () => Promise<DockerAvailabilityIssue | undefined>;
    ensureTemplateRepository: (framework: TemplateFramework, destinationPath: string) => Promise<void>;
    ensureTemplateVersionIsUnique: (input: {
        workspaceId: string;
        designSystemId: string;
        templateDestinationPath: string;
    }) => Promise<void>;
    resolveTemplateUploadPath: (defaultPath: string) => Promise<string>;
    runTemplateUploadWithCleanup: (input: {
        dependencyMode?: DependencyMode;
        designSystemId: string;
        npmToken?: string;
        privateDependencyEntries?: string[];
        templateDestinationPath: string;
        workspaceId: string;
    }) => Promise<SandboxTemplateRef>;
};
export type SetupDependencyServices = {
    applyTemplateDependencyConfiguration: (context: SetupContext) => Promise<void>;
    createPrivateDependencyEntries: (packageNames: string[]) => string[];
    ensureLocalNpmrcFile: (templateDestinationPath: string) => Promise<string>;
    validateTemplateDependencies: (context: SetupContext) => Promise<void>;
};
export type SetupPrototypeServices = {
    createPrototypeProject: (input: {
        workspaceId: string;
        contextId: string;
        projectName: string;
        promptText: string;
    }) => Promise<{
        featureId: string;
        projectId: string;
    }>;
    ensureSharedContext: (input: {
        workspaceId: string;
        designSystemId: string;
        contextName: string;
        sandboxTemplate: SandboxTemplateRef;
    }) => Promise<string>;
    openBrowser: (url: string) => Promise<void>;
};
export type SetupServices = {
    validation: ValidationService;
    container: SetupContainerServices;
    debug: boolean;
    dependencies: SetupDependencyServices;
    designSystems: SetupDesignSystemServices;
    env: string;
    prototype: SetupPrototypeServices;
    scan: SetupScanServices;
    ui: SetupUi;
};
//# sourceMappingURL=runtime.d.ts.map