diff --git a/src/plugins/plugin-version-drift.test.ts b/src/plugins/plugin-version-drift.test.ts index c871b182d99c..52323c4442e0 100644 --- a/src/plugins/plugin-version-drift.test.ts +++ b/src/plugins/plugin-version-drift.test.ts @@ -348,6 +348,19 @@ describe("resolvePluginVersionDriftUpdateCommand", () => { ).toBe("openclaw plugins update @openclaw/brave-plugin@2026.6.10-beta.1"); }); + it("prefers the parsed exact npm spec package over inconsistent drift metadata", () => { + expect( + resolvePluginVersionDriftUpdateCommand({ + pluginId: "brave", + installedVersion: "2026.6.9", + gatewayVersion: "2026.6.10-beta.1", + source: "npm", + packageName: "@openclaw/other-plugin", + spec: "@openclaw/brave-plugin@2026.6.9", + }), + ).toBe("openclaw plugins update @openclaw/brave-plugin@2026.6.10-beta.1"); + }); + it("keeps plugin-id updates for floating npm install records", () => { expect( resolvePluginVersionDriftUpdateCommand({ diff --git a/src/plugins/plugin-version-drift.ts b/src/plugins/plugin-version-drift.ts index 81d8845fb7c4..32c04da9f3a0 100644 --- a/src/plugins/plugin-version-drift.ts +++ b/src/plugins/plugin-version-drift.ts @@ -31,7 +31,7 @@ function resolveExactNpmPinPackageName(entry: PluginVersionDriftEntry): string | if (parsed?.selectorKind !== "exact-version") { return undefined; } - return entry.packageName ?? parsed.name; + return parsed.name; } /** Exact npm pins need a package@version target; id-only updates preserve the old pin. */