export interface McpSuccess<T> {
    ok: true;
    data: T;
    warning?: string;
}
export interface McpError {
    ok: false;
    error: {
        code: string;
        message: string;
        details?: Record<string, unknown>;
        onboardUrl?: string;
    };
}
export type McpResult<T> = McpSuccess<T> | McpError;
export type McpToolName = 'list_apps' | 'deploy_prepare' | 'logs' | 'env' | 'destroy';
export interface ListAppsInput {
    includeDestroyed?: boolean;
}
export interface ListAppsOutput {
    apps: Array<{
        id: string;
        appSlug: string;
        displayName: string | null;
        runtime: 'node' | 'static';
        status: string;
        url: string;
        lastDeployedAt: string | null;
        destroyedAt: string | null;
        retentionUntil: string | null;
    }>;
}
export interface DeployPrepareInput {
    appSlug: string;
    displayName?: string;
    detected?: {
        hasPackageJson: boolean;
        hasStartScript: boolean;
        hasIndexHtml: boolean;
        hasDockerfile?: boolean;
        hasRequirementsTxt?: boolean;
        hasGoMod?: boolean;
        hasPomXml?: boolean;
    };
}
export interface DeployPrepareOutput {
    appId: string | null;
    isFirstDeploy: boolean;
    runtime: 'node' | 'static';
    repoUrl: string;
    pushCredential: {
        token: string;
        expiresAt: string;
    };
    branch: 'main';
    suggestedCommitMessage: string;
    url: string;
    postDeployHint: string;
}
export interface LogsInput {
    appSlug: string;
    lines?: number;
}
export interface LogsOutput {
    appSlug: string;
    runtime: 'node' | 'static';
    logs: string;
    truncated: boolean;
    fetchedAt: string;
}
export type EnvAction = 'list' | 'get' | 'set' | 'unset';
export interface EnvInput {
    appSlug: string;
    action: EnvAction;
    key?: string;
    value?: string;
}
export interface DestroyInput {
    appSlug: string;
    confirm: true;
}
export interface DestroyOutput {
    appSlug: string;
    status: 'DESTROYED';
    destroyedAt: string;
    retentionUntil: string;
    restoreInstruction: string;
}
