/** Claude Code records installs as `enabledPlugins: { "@": true }`. */ export declare function readEnabledPlugins(homeDir: string): Record; /** * Returns the `@` key of an ENABLED mma plugin, or null. * Matches on the plugin name (before `@`) so the marketplace can be this repo, * a fork, or the community catalog. */ export declare function findEnabledMmaPlugin(homeDir: string): string | null; /** * The version Claude Code currently has installed for `pluginKey`, or null. * * Read from `~/.claude/plugins/installed_plugins.json`, which records one or * more install records per plugin key. The newest by `lastUpdated` is the one * in force. Returns null on any missing or malformed input rather than * guessing — `mma doctor` reports "unknown" for that, which is honest, whereas * a guessed version would be reported as drift or as agreement. */ export declare function readInstalledPluginVersion(homeDir: string, pluginKey: string): string | null; /** * Message for the auto-supersede path: the plugin is present, so the standalone * Claude Code install is redundant and gets retired. * * Deliberately one-directional. MMA owns `~/.claude/skills/mma-*` and may clean * up its own redundant copies, but it must NEVER uninstall the plugin: * - `sync-skills` runs from npm postinstall, so auto-removing the plugin would * mean `npm i -g @zhixuan92/multi-model-agent@latest` silently deleting a * Claude Code plugin the user chose. A package upgrade must not do that. * - the plugin is a strict SUPERSET (skills + commands + MCP server), so when * both exist the plugin is the one worth keeping. * Choosing standalone instead is an explicit user action (uninstall the plugin), * not something an upgrade decides. */ export declare function pluginSupersedesMessage(pluginKey: string, removed: number): string; //# sourceMappingURL=plugin-conflict.d.ts.map