import { McpPhysicalConfig } from './mcp-physical-config.js'; export { DKG_SERVER_KEY, type McpClientConfigShape } from './mcp-config-document.js'; export type McpClientLocation = 'native' | 'windows-wsl'; type WindowsPaths = { USERPROFILE: string | null; APPDATA: string | null; }; /** One entry owns each client's identity, storage shape, paths and skill delivery. */ declare const MCP_CLIENT_REGISTRY: readonly [{ readonly target: { readonly format: "json"; readonly serverContainer: "mcpServers"; readonly id: "cursor"; readonly name: "Cursor"; }; readonly nativePaths: (home: string) => { configPath: string; displayPath: string; }; readonly windowsPath: (env: WindowsPaths) => string | null; readonly skillPath: readonly [".cursor", "skills", "dkg-node", "SKILL.md"]; }, { readonly target: { readonly format: "json"; readonly serverContainer: "mcpServers"; readonly id: "claude-code"; readonly name: "Claude Code"; }; readonly nativePaths: (home: string) => { configPath: string; displayPath: string; }; readonly skillPath: readonly [".claude", "skills", "dkg-node", "SKILL.md"]; }, { readonly target: { readonly format: "json"; readonly serverContainer: "mcpServers"; readonly id: "claude-desktop"; readonly name: "Claude Desktop"; }; readonly nativePaths: (_home: string, root: string) => { configPath: string; displayPath: string; }; readonly windowsPath: (env: WindowsPaths) => string | null; }, { readonly target: { readonly format: "json"; readonly serverContainer: "mcpServers"; readonly id: "windsurf"; readonly name: "Windsurf"; }; readonly nativePaths: (home: string) => { configPath: string; displayPath: string; }; readonly windowsPath: (env: WindowsPaths) => string | null; }, { readonly target: { readonly format: "jsonc"; readonly serverContainer: "servers"; readonly id: "vscode"; readonly name: "VSCode"; }; readonly nativePaths: (_home: string, root: string) => { configPath: string; displayPath: string; }; readonly windowsPath: (env: WindowsPaths) => string | null; }, { readonly target: { readonly format: "json"; readonly serverContainer: "mcpServers"; readonly id: "cline"; readonly name: "Cline"; }; readonly nativePaths: (_home: string, root: string) => { configPath: string; displayPath: string; }; readonly windowsPath: (env: WindowsPaths) => string | null; }, { readonly target: { readonly format: "toml"; readonly serverContainer: "mcp_servers"; readonly id: "codex-cli"; readonly name: "Codex CLI"; }; readonly nativePaths: (home: string) => { configPath: string; displayPath: string; }; }]; type McpClientDefinition = typeof MCP_CLIENT_REGISTRY[number]; export type McpClientId = McpClientDefinition['target']['id']; export declare const MCP_CLIENT_IDS: readonly ("cursor" | "claude-code" | "claude-desktop" | "windsurf" | "vscode" | "cline" | "codex-cli")[]; type NativeTarget = McpClientDefinition['target'] & { location: 'native'; }; type WindowsTarget = Extract['target'] & { location: 'windows-wsl'; }; /** Identity determines its config shape and supported locations in the registry. */ type WithDisplayName = T extends unknown ? Omit & { name: string; } : never; export type ClientTarget = WithDisplayName & { configPath: string; /** Pretty path for display, with `~` substituted back in. */ displayPath: string; }; /** Stable selector identity is independent of display names and detection results. */ export declare function parseMcpClientSelector(value: string): { id: McpClientId; location?: McpClientLocation; }; export interface McpConfigSelection { readonly file: McpPhysicalConfig; /** Logical clients selected by the caller; never replaced by a storage alias. */ readonly aliases: readonly ClientTarget[]; } export declare function mcpConfigClientNames(selection: McpConfigSelection): string; /** Select each physical owned leaf once while retaining the selected logical aliases. */ export declare function selectMcpClientTargets(clients: readonly ClientTarget[], selector?: ReturnType): McpConfigSelection[]; export declare function clientSkillPath(id: McpClientId, home: string): string | null; export declare function expandHome(p: string): string; export declare function tildify(p: string): string; /** * Exported for Codex Round-13 Fix 20 tests — direct unit testing * of WSL2 client-detection branch without going through the full * `mcpSetupAction` body. Production callers go via the action. * The resolver arg is test-only so WSL Windows path discovery can * be exercised without real cmd.exe / wslpath binaries. */ export declare function detectClients(resolveWslWindowsEnvPath?: (envVarName: string) => string | null): ClientTarget[]; //# sourceMappingURL=mcp-client-registry.d.ts.map