From d41b9b5b2529401a9f0e9bee7ff4843439a2cd2e Mon Sep 17 00:00:00 2001 From: Vincent Koc <25068+vincentkoc@users.noreply.github.com> Date: Tue, 23 Jun 2026 12:10:34 +0800 Subject: [PATCH] fix(cli): validate plugin drift update target --- src/plugins/plugin-version-drift.test.ts | 13 +++++++++++++ src/plugins/plugin-version-drift.ts | 5 ++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/plugins/plugin-version-drift.test.ts b/src/plugins/plugin-version-drift.test.ts index 52323c4442e0..2c2b66921d5d 100644 --- a/src/plugins/plugin-version-drift.test.ts +++ b/src/plugins/plugin-version-drift.test.ts @@ -373,4 +373,17 @@ describe("resolvePluginVersionDriftUpdateCommand", () => { }), ).toBe("openclaw plugins update brave"); }); + + it("keeps plugin-id updates when the gateway version is not a registry version", () => { + expect( + resolvePluginVersionDriftUpdateCommand({ + pluginId: "brave", + installedVersion: "2026.6.9", + gatewayVersion: "unknown", + source: "npm", + packageName: "@openclaw/brave-plugin", + spec: "@openclaw/brave-plugin@2026.6.9", + }), + ).toBe("openclaw plugins update brave"); + }); }); diff --git a/src/plugins/plugin-version-drift.ts b/src/plugins/plugin-version-drift.ts index 32c04da9f3a0..747c96fa0dd2 100644 --- a/src/plugins/plugin-version-drift.ts +++ b/src/plugins/plugin-version-drift.ts @@ -38,7 +38,10 @@ function resolveExactNpmPinPackageName(entry: PluginVersionDriftEntry): string | export function resolvePluginVersionDriftUpdateCommand(entry: PluginVersionDriftEntry): string { const exactNpmPackageName = resolveExactNpmPinPackageName(entry); if (exactNpmPackageName) { - return `openclaw plugins update ${exactNpmPackageName}@${entry.gatewayVersion}`; + const exactNpmTarget = `${exactNpmPackageName}@${entry.gatewayVersion}`; + if (parseRegistryNpmSpec(exactNpmTarget)?.selectorKind === "exact-version") { + return `openclaw plugins update ${exactNpmTarget}`; + } } return `openclaw plugins update ${entry.pluginId}`; }