diff --git a/packages/cli/src/commands/extensions/consent.ts b/packages/cli/src/commands/extensions/consent.ts index 2a8a9bcab..0f2321075 100644 --- a/packages/cli/src/commands/extensions/consent.ts +++ b/packages/cli/src/commands/extensions/consent.ts @@ -153,10 +153,10 @@ export function extensionConsentString( const output: string[] = []; if (originSource !== 'QwenCode') { output.push( - `⚠️ ${t( + t( 'You are installing an extension from {{originSource}}. Some features may not work perfectly with Qwen Code.', { originSource }, - )}`, + ), ); } const mcpServerEntries = Object.entries(extensionConfig.mcpServers || {}); @@ -230,6 +230,7 @@ export const requestConsentOrFail = async ( if (!options) return; const { extensionConfig, + originSource = 'QwenCode', commands = [], skills = [], subagents = [], @@ -243,6 +244,7 @@ export const requestConsentOrFail = async ( commands, skills, subagents, + originSource, ); if (previousExtensionConfig) { const previousExtensionConsent = extensionConsentString( @@ -250,6 +252,7 @@ export const requestConsentOrFail = async ( previousCommands, previousSkills, previousSubagents, + originSource, ); if (previousExtensionConsent === extensionConsent) { return; diff --git a/packages/core/src/extension/extensionManager.ts b/packages/core/src/extension/extensionManager.ts index 4553d99e9..d229aa0d0 100644 --- a/packages/core/src/extension/extensionManager.ts +++ b/packages/core/src/extension/extensionManager.ts @@ -249,31 +249,21 @@ async function convertGeminiOrClaudeExtension( pluginName?: string, ): Promise<{ extensionDir: string; originSource: ExtensionOriginSource }> { let newExtensionDir = extensionDir; - const qwenConfigPath = path.join(extensionDir, EXTENSIONS_CONFIG_FILENAME); - const geminiConfigPath = path.join(extensionDir, 'gemini-extension.json'); let originSource: ExtensionOriginSource = 'QwenCode'; - - if (fs.existsSync(qwenConfigPath)) { - // Already a Qwen extension — no conversion needed + const configFilePath = path.join(extensionDir, EXTENSIONS_CONFIG_FILENAME); + if (fs.existsSync(configFilePath)) { newExtensionDir = extensionDir; - } else if (fs.existsSync(geminiConfigPath)) { - // VALIDATE FIRST (maintainer requirement) - if (!isGeminiExtensionConfig(extensionDir)) { - throw new Error( - `Invalid gemini-extension.json: missing required fields (name/version)`, - ); - } - // THEN convert + } else if (isGeminiExtensionConfig(extensionDir)) { newExtensionDir = (await convertGeminiExtensionPackage(extensionDir)) .convertedDir; originSource = 'Gemini'; } else if (pluginName) { - // Claude plugin conversion (unchanged) newExtensionDir = ( await convertClaudePluginPackage(extensionDir, pluginName) ).convertedDir; originSource = 'Claude'; } + // Claude plugin conversion not yet implemented return { extensionDir: newExtensionDir, originSource }; }