export interface McpConfigTarget {
    /** Config file path relative to project root, e.g. ".claude/settings.json" */
    filePath: string;
    /** JSON key that holds MCP server entries, e.g. "mcpServers" or "servers" */
    rootKey: string;
    /** Extra fields merged into the server entry, e.g. { type: "stdio" } for VS Code */
    extraFields?: Record<string, string>;
}
export interface AgentConfig {
    displayName: string;
    skillsDir: string;
    detect: (root: string) => boolean;
    /** Project-level config files where MCP server entries can be auto-written */
    mcpConfig?: McpConfigTarget[];
    /** Fallback hint printed when the agent has no project-level config support */
    mcpHint?: string;
}
export declare function getAgentById(id: string): AgentConfig | undefined;
export declare function detectAgents(root: string): AgentConfig[];
export declare const AGENTS: readonly [{
    readonly id: "chatgpt-codex";
    readonly label: "ChatGPT (Codex)";
    readonly targetPath: "AGENTS.md";
}, {
    readonly id: "claude";
    readonly label: "Claude Code";
    readonly targetPath: "CLAUDE.md";
}, {
    readonly id: "copilot";
    readonly label: "GitHub Copilot";
    readonly targetPath: ".github/copilot-instructions.md";
}, {
    readonly id: "cursor";
    readonly label: "Cursor";
    readonly targetPath: ".cursor/rules/viteplus.mdc";
}, {
    readonly id: "jetbrains";
    readonly label: "JetBrains AI Assistant";
    readonly targetPath: ".aiassistant/rules/viteplus.md";
}, {
    readonly id: "amp";
    readonly label: "Amp";
    readonly targetPath: "AGENTS.md";
}, {
    readonly id: "opencode";
    readonly label: "OpenCode";
    readonly targetPath: "AGENTS.md";
}, {
    readonly id: "other";
    readonly label: "Other";
    readonly targetPath: "AGENTS.md";
}];
type AgentSelection = string | string[] | false;
export declare function selectAgentTargetPaths({ interactive, agent, onCancel, }: {
    interactive: boolean;
    agent?: AgentSelection;
    onCancel: () => void;
}): Promise<string[] | undefined>;
export declare function selectAgentTargetPath({ interactive, agent, onCancel, }: {
    interactive: boolean;
    agent?: AgentSelection;
    onCancel: () => void;
}): Promise<string | undefined>;
export declare function detectExistingAgentTargetPaths(projectRoot: string): string[] | undefined;
export declare function detectExistingAgentTargetPath(projectRoot: string): string | undefined;
export declare function hasExistingAgentInstructions(projectRoot: string): boolean;
export declare function resolveAgentTargetPaths(agent?: string | string[]): string[];
export declare function resolveAgentTargetPath(agent?: string): string;
export interface AgentConflictInfo {
    targetPath: string;
}
/**
 * Detect agent instruction files that would conflict (exist without markers).
 * Returns only files that need a user decision (append or skip).
 * Read-only — does not write or modify any files.
 */
export declare function detectAgentConflicts({ projectRoot, targetPaths, }: {
    projectRoot: string;
    targetPaths?: string[];
}): Promise<AgentConflictInfo[]>;
export declare function writeAgentInstructions({ projectRoot, targetPath, targetPaths, interactive, conflictDecisions, silent, }: {
    projectRoot: string;
    targetPath?: string;
    targetPaths?: string[];
    interactive: boolean;
    conflictDecisions?: Map<string, 'append' | 'skip'>;
    silent?: boolean;
}): Promise<void>;
export declare function replaceMarkedAgentInstructionsSection(existing: string, incoming: string): string | undefined;
export {};
