From d2e2a073275d63dd5ae2289adf5e24367c349225 Mon Sep 17 00:00:00 2001 From: yiliang114 <1204183885@qq.com> Date: Wed, 10 Dec 2025 00:46:07 +0800 Subject: [PATCH] chore(vscode-ide-companion): bump version to 0.4.1 and add semver dependency and improve cli version checking with semver package --- package-lock.json | 3 +- packages/vscode-ide-companion/NOTICES.txt | 21 +++++++ packages/vscode-ide-companion/package.json | 1 + .../src/cli/cliVersionManager.ts | 60 ++++--------------- .../src/services/qwenConnectionHandler.ts | 4 -- 5 files changed, 35 insertions(+), 54 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4a373697..bcc891fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20189,7 +20189,7 @@ }, "packages/vscode-ide-companion": { "name": "qwen-code-vscode-ide-companion", - "version": "0.4.0", + "version": "0.4.1", "license": "LICENSE", "dependencies": { "@modelcontextprotocol/sdk": "^1.15.1", @@ -20198,6 +20198,7 @@ "markdown-it": "^14.1.0", "react": "^19.1.0", "react-dom": "^19.1.0", + "semver": "^7.7.2", "zod": "^3.25.76" }, "devDependencies": { diff --git a/packages/vscode-ide-companion/NOTICES.txt b/packages/vscode-ide-companion/NOTICES.txt index 81e528c4..afbf750d 100644 --- a/packages/vscode-ide-companion/NOTICES.txt +++ b/packages/vscode-ide-companion/NOTICES.txt @@ -1,5 +1,26 @@ This file contains third-party software notices and license terms. +============================================================ +semver@7.7.2 +(git+https://github.com/npm/node-semver.git) + +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ============================================================ @modelcontextprotocol/sdk@1.15.1 (git+https://github.com/modelcontextprotocol/typescript-sdk.git) diff --git a/packages/vscode-ide-companion/package.json b/packages/vscode-ide-companion/package.json index 0b52f41c..c278976f 100644 --- a/packages/vscode-ide-companion/package.json +++ b/packages/vscode-ide-companion/package.json @@ -152,6 +152,7 @@ "vitest": "^3.2.4" }, "dependencies": { + "semver": "^7.7.2", "@modelcontextprotocol/sdk": "^1.15.1", "cors": "^2.8.5", "express": "^5.1.0", diff --git a/packages/vscode-ide-companion/src/cli/cliVersionManager.ts b/packages/vscode-ide-companion/src/cli/cliVersionManager.ts index 3e0d241e..72ef3d2e 100644 --- a/packages/vscode-ide-companion/src/cli/cliVersionManager.ts +++ b/packages/vscode-ide-companion/src/cli/cliVersionManager.ts @@ -4,47 +4,20 @@ * SPDX-License-Identifier: Apache-2.0 */ +import semver from 'semver'; import { CliDetector, type CliDetectionResult } from './cliDetector.js'; export const MIN_CLI_VERSION_FOR_SESSION_METHODS = '0.4.0'; -/** - * CLI Feature Flags based on version - */ export interface CliFeatureFlags { - /** - * Whether the CLI supports session/list ACP method - */ supportsSessionList: boolean; - - /** - * Whether the CLI supports session/load ACP method - */ supportsSessionLoad: boolean; } -/** - * CLI Version Information - */ export interface CliVersionInfo { - /** - * Detected version string - */ version: string | undefined; - - /** - * Whether the version meets the minimum requirement - */ isSupported: boolean; - - /** - * Feature flags based on version - */ features: CliFeatureFlags; - - /** - * Raw detection result - */ detectionResult: CliDetectionResult; } @@ -86,30 +59,19 @@ export class CliVersionManager { return false; } - // TODO: - // Simple version comparison (assuming semantic versioning) - try { - const versionParts = version.split('.').map(Number); - const minVersionParts = minVersion.split('.').map(Number); + // Use semver for robust comparison (handles v-prefix, pre-release, etc.) + const v = semver.valid(version) ?? semver.coerce(version)?.version ?? null; + const min = + semver.valid(minVersion) ?? semver.coerce(minVersion)?.version ?? null; - for ( - let i = 0; - i < Math.min(versionParts.length, minVersionParts.length); - i++ - ) { - if (versionParts[i] > minVersionParts[i]) { - return true; - } else if (versionParts[i] < minVersionParts[i]) { - return false; - } - } - - // If all compared parts are equal, check if version has more parts - return versionParts.length >= minVersionParts.length; - } catch (error) { - console.error('[CliVersionManager] Failed to parse version:', error); + if (!v || !min) { + console.warn( + `[CliVersionManager] Invalid semver: version=${version}, min=${minVersion}`, + ); return false; } + console.log(`[CliVersionManager] Version ${v} meets requirements: ${min}`); + return semver.gte(v, min); } /** diff --git a/packages/vscode-ide-companion/src/services/qwenConnectionHandler.ts b/packages/vscode-ide-companion/src/services/qwenConnectionHandler.ts index 9fd9f7cf..11e7199a 100644 --- a/packages/vscode-ide-companion/src/services/qwenConnectionHandler.ts +++ b/packages/vscode-ide-companion/src/services/qwenConnectionHandler.ts @@ -56,10 +56,6 @@ export class QwenConnectionHandler { // Show warning if CLI version is below minimum requirement if (!versionInfo.isSupported) { - console.warn( - `[QwenAgentManager] CLI version ${versionInfo.version} is below minimum required version ${MIN_CLI_VERSION_FOR_SESSION_METHODS}`, - ); - // Wait to determine release version number vscode.window.showWarningMessage( `Qwen Code CLI version ${versionInfo.version} is below the minimum required version. Some features may not work properly. Please upgrade to version ${MIN_CLI_VERSION_FOR_SESSION_METHODS} or later.`,