export declare const SLACK_CHANNEL_DEFAULT_ROUTE = "/eve/v1/slack";
export declare const DEFAULT_SLACK_CONNECTOR_SLUG = "my-agent";
declare const slackConnectorSlugBrand: unique symbol;
export type ChannelKind = "slack" | "web";
export type SlackConnectorSlug = string & {
    readonly [slackConnectorSlugBrand]: true;
};
export interface PackageJsonMutation {
    path: string;
    dependencies: string[];
    devDependencies: string[];
    scripts: string[];
}
export type ChannelMutationAction = "created" | "overwritten" | "skipped";
export type ChannelMutationResult = SlackChannelMutationResult | WebChannelMutationResult;
interface SlackChannelWrittenResult {
    kind: "slack";
    action: "created" | "overwritten";
    filesWritten: [string];
    filesOverwritten?: [string];
    filesSkipped: [];
    packageJsonUpdated: PackageJsonMutation[];
    slackConnectorSlug: SlackConnectorSlug;
}
interface SlackChannelSkippedResult {
    kind: "slack";
    action: "skipped";
    filesWritten: [];
    filesOverwritten?: [];
    filesSkipped: [string];
    packageJsonUpdated: [];
}
type SlackChannelMutationResult = SlackChannelWrittenResult | SlackChannelSkippedResult;
interface WebChannelWrittenResult {
    kind: "web";
    action: "created" | "overwritten";
    filesWritten: string[];
    filesOverwritten?: string[];
    competingNextConfigFiles?: string[];
    filesSkipped: string[];
    packageJsonUpdated: PackageJsonMutation[];
}
interface WebChannelSkippedResult {
    kind: "web";
    action: "skipped";
    skipReason: "nextjs-project";
    filesWritten: [];
    filesOverwritten?: [];
    filesSkipped: [string];
    packageJsonUpdated: [];
}
type WebChannelMutationResult = WebChannelWrittenResult | WebChannelSkippedResult;
export declare function normalizeSlackConnectorSlug(input: string): SlackConnectorSlug;
export declare function deriveSlackConnectorSlug(projectRoot: string, projectNameHint?: string): Promise<SlackConnectorSlug>;
export interface EnsureChannelOptions {
    projectRoot: string;
    kind: ChannelKind;
    force?: boolean;
    slackConnectorSlug?: SlackConnectorSlug;
    connectPackageVersion?: string;
    webPackageVersions?: WebPackageVersions;
    /** When false, Web Chat leaves Vercel Services config unwritten for preview-only scaffolds. */
    configureVercelServices?: boolean;
}
export interface WebPackageVersions {
    evePackageVersion?: string;
    aiPackageVersion?: string;
    nextPackageVersion?: string;
    reactPackageVersion?: string;
    reactDomPackageVersion?: string;
    streamdownPackageVersion?: string;
    zodPackageVersion?: string;
    tsgoPackageVersion?: string;
    typesNodePackageVersion?: string;
    typesReactPackageVersion?: string;
    typesReactDomPackageVersion?: string;
}
export declare function ensureChannel(options: EnsureChannelOptions): Promise<ChannelMutationResult>;
export declare function listAuthoredChannels(projectRoot: string): Promise<string[]>;
export {};
