From 0e3f9657da9631f9107cbc4dda3cc9f5e944e39a Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 11 Apr 2026 19:58:05 +0100 Subject: [PATCH] fix(plugins): preserve bundled host compatibility floor --- extensions/bluebubbles/package.json | 2 +- extensions/discord/package.json | 2 +- extensions/feishu/package.json | 2 +- extensions/googlechat/package.json | 2 +- extensions/irc/package.json | 2 +- extensions/line/package.json | 2 +- extensions/matrix/package.json | 2 +- extensions/mattermost/package.json | 2 +- extensions/memory-lancedb/package.json | 2 +- extensions/msteams/package.json | 2 +- extensions/nextcloud-talk/package.json | 2 +- extensions/nostr/package.json | 2 +- extensions/qa-channel/package.json | 2 +- extensions/qa-lab/package.json | 2 +- extensions/qqbot/package.json | 2 +- extensions/synology-chat/package.json | 2 +- extensions/tlon/package.json | 2 +- extensions/twitch/package.json | 2 +- extensions/voice-call/package.json | 2 +- extensions/whatsapp/package.json | 2 +- extensions/zalo/package.json | 2 +- extensions/zalouser/package.json | 2 +- scripts/sync-plugin-versions.ts | 18 ++---------------- src/scripts/sync-plugin-versions.test.ts | 4 ++-- 24 files changed, 26 insertions(+), 40 deletions(-) diff --git a/extensions/bluebubbles/package.json b/extensions/bluebubbles/package.json index 2eeaeb47156..e7ba94fa002 100644 --- a/extensions/bluebubbles/package.json +++ b/extensions/bluebubbles/package.json @@ -40,7 +40,7 @@ "install": { "npmSpec": "@openclaw/bluebubbles", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" }, "compat": { "pluginApi": ">=2026.4.11" diff --git a/extensions/discord/package.json b/extensions/discord/package.json index 32596583f8c..393e155256c 100644 --- a/extensions/discord/package.json +++ b/extensions/discord/package.json @@ -49,7 +49,7 @@ "install": { "npmSpec": "@openclaw/discord", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" }, "compat": { "pluginApi": ">=2026.4.11" diff --git a/extensions/feishu/package.json b/extensions/feishu/package.json index b4f03915279..c90f252dc3f 100644 --- a/extensions/feishu/package.json +++ b/extensions/feishu/package.json @@ -40,7 +40,7 @@ "install": { "npmSpec": "@openclaw/feishu", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" }, "compat": { "pluginApi": ">=2026.4.11" diff --git a/extensions/googlechat/package.json b/extensions/googlechat/package.json index 8967f137d81..69ad064fa50 100644 --- a/extensions/googlechat/package.json +++ b/extensions/googlechat/package.json @@ -43,7 +43,7 @@ "install": { "npmSpec": "@openclaw/googlechat", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" } } } diff --git a/extensions/irc/package.json b/extensions/irc/package.json index 18013922c22..a47b9b33124 100644 --- a/extensions/irc/package.json +++ b/extensions/irc/package.json @@ -11,7 +11,7 @@ "./index.ts" ], "install": { - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" }, "setupEntry": "./setup-entry.ts", "channel": { diff --git a/extensions/line/package.json b/extensions/line/package.json index 0ccae8a8b24..d70f97f5d51 100644 --- a/extensions/line/package.json +++ b/extensions/line/package.json @@ -36,7 +36,7 @@ "install": { "npmSpec": "@openclaw/line", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" } } } diff --git a/extensions/matrix/package.json b/extensions/matrix/package.json index 37438fdd4c3..385b0a59942 100644 --- a/extensions/matrix/package.json +++ b/extensions/matrix/package.json @@ -45,7 +45,7 @@ "install": { "npmSpec": "@openclaw/matrix", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11", + "minHostVersion": ">=2026.4.10", "allowInvalidConfigRecovery": true } } diff --git a/extensions/mattermost/package.json b/extensions/mattermost/package.json index 587e3575c04..be975658519 100644 --- a/extensions/mattermost/package.json +++ b/extensions/mattermost/package.json @@ -36,7 +36,7 @@ "install": { "npmSpec": "@openclaw/mattermost", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" } } } diff --git a/extensions/memory-lancedb/package.json b/extensions/memory-lancedb/package.json index 72eaa7cac04..b89cdf79507 100644 --- a/extensions/memory-lancedb/package.json +++ b/extensions/memory-lancedb/package.json @@ -18,7 +18,7 @@ "install": { "npmSpec": "@openclaw/memory-lancedb", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" }, "compat": { "pluginApi": ">=2026.4.11" diff --git a/extensions/msteams/package.json b/extensions/msteams/package.json index 27db11d64c6..6424302f3c4 100644 --- a/extensions/msteams/package.json +++ b/extensions/msteams/package.json @@ -45,7 +45,7 @@ "install": { "npmSpec": "@openclaw/msteams", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" }, "compat": { "pluginApi": ">=2026.4.11" diff --git a/extensions/nextcloud-talk/package.json b/extensions/nextcloud-talk/package.json index 5eaf4541fef..f60d8c92742 100644 --- a/extensions/nextcloud-talk/package.json +++ b/extensions/nextcloud-talk/package.json @@ -37,7 +37,7 @@ "install": { "npmSpec": "@openclaw/nextcloud-talk", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" }, "compat": { "pluginApi": ">=2026.4.11" diff --git a/extensions/nostr/package.json b/extensions/nostr/package.json index 640fdf02536..b7928df5827 100644 --- a/extensions/nostr/package.json +++ b/extensions/nostr/package.json @@ -36,7 +36,7 @@ "install": { "npmSpec": "@openclaw/nostr", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" }, "compat": { "pluginApi": ">=2026.4.11" diff --git a/extensions/qa-channel/package.json b/extensions/qa-channel/package.json index a03a2eb8a4f..cb1f40d0bba 100644 --- a/extensions/qa-channel/package.json +++ b/extensions/qa-channel/package.json @@ -40,7 +40,7 @@ "install": { "npmSpec": "@openclaw/qa-channel", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" } } } diff --git a/extensions/qa-lab/package.json b/extensions/qa-lab/package.json index 01b9728617f..ab5de1e9664 100644 --- a/extensions/qa-lab/package.json +++ b/extensions/qa-lab/package.json @@ -23,7 +23,7 @@ "install": { "npmSpec": "@openclaw/qa-lab", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" }, "compat": { "pluginApi": ">=2026.4.11" diff --git a/extensions/qqbot/package.json b/extensions/qqbot/package.json index f876c3a01d7..3745bb36633 100644 --- a/extensions/qqbot/package.json +++ b/extensions/qqbot/package.json @@ -41,7 +41,7 @@ "npmSpec": "@openclaw/qqbot", "localPath": "extensions/qqbot", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" }, "compat": { "pluginApi": ">=2026.4.11" diff --git a/extensions/synology-chat/package.json b/extensions/synology-chat/package.json index 13027ce483a..fec93b41b38 100644 --- a/extensions/synology-chat/package.json +++ b/extensions/synology-chat/package.json @@ -23,7 +23,7 @@ "install": { "npmSpec": "@openclaw/synology-chat", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" } } } diff --git a/extensions/tlon/package.json b/extensions/tlon/package.json index 95f062e70ee..f142a98572f 100644 --- a/extensions/tlon/package.json +++ b/extensions/tlon/package.json @@ -39,7 +39,7 @@ "install": { "npmSpec": "@openclaw/tlon", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" } } } diff --git a/extensions/twitch/package.json b/extensions/twitch/package.json index 1d169dbbfe1..b7cf2edbb32 100644 --- a/extensions/twitch/package.json +++ b/extensions/twitch/package.json @@ -16,7 +16,7 @@ "./index.ts" ], "install": { - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" }, "channel": { "id": "twitch", diff --git a/extensions/voice-call/package.json b/extensions/voice-call/package.json index 8eb62db46fd..253d87eafbb 100644 --- a/extensions/voice-call/package.json +++ b/extensions/voice-call/package.json @@ -25,7 +25,7 @@ "./index.ts" ], "install": { - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" }, "compat": { "pluginApi": ">=2026.4.11" diff --git a/extensions/whatsapp/package.json b/extensions/whatsapp/package.json index fecd5cc49bd..b5c6e02fd98 100644 --- a/extensions/whatsapp/package.json +++ b/extensions/whatsapp/package.json @@ -41,7 +41,7 @@ "install": { "npmSpec": "@openclaw/whatsapp", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" }, "compat": { "pluginApi": ">=2026.4.11" diff --git a/extensions/zalo/package.json b/extensions/zalo/package.json index ceb7216ebda..da2245a3096 100644 --- a/extensions/zalo/package.json +++ b/extensions/zalo/package.json @@ -39,7 +39,7 @@ "install": { "npmSpec": "@openclaw/zalo", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" }, "compat": { "pluginApi": ">=2026.4.11" diff --git a/extensions/zalouser/package.json b/extensions/zalouser/package.json index 5c013384d11..25c83545017 100644 --- a/extensions/zalouser/package.json +++ b/extensions/zalouser/package.json @@ -40,7 +40,7 @@ "install": { "npmSpec": "@openclaw/zalouser", "defaultChoice": "npm", - "minHostVersion": ">=2026.4.11" + "minHostVersion": ">=2026.4.10" }, "compat": { "pluginApi": ">=2026.4.11" diff --git a/scripts/sync-plugin-versions.ts b/scripts/sync-plugin-versions.ts index 5fa7d5af9d8..24c7d5976ba 100644 --- a/scripts/sync-plugin-versions.ts +++ b/scripts/sync-plugin-versions.ts @@ -37,20 +37,6 @@ function syncOpenClawDependencyRange( return true; } -function syncMinHostVersion(pkg: PackageJson, targetVersion: string): boolean { - const installConfig = pkg.openclaw?.install; - const current = installConfig?.minHostVersion; - if (!current || !OPENCLAW_VERSION_RANGE_RE.test(current)) { - return false; - } - const next = `>=${targetVersion}`; - if (current === next) { - return false; - } - installConfig.minHostVersion = next; - return true; -} - function syncPluginApiVersion(pkg: PackageJson, targetVersion: string): boolean { const compat = pkg.openclaw?.compat; const current = compat?.pluginApi; @@ -136,14 +122,14 @@ export function syncPluginVersions(rootDir = resolve(".")) { const versionChanged = pkg.version !== targetVersion; const devDependencyChanged = syncOpenClawDependencyRange(pkg.devDependencies, targetVersion); const peerDependencyChanged = syncOpenClawDependencyRange(pkg.peerDependencies, targetVersion); - const minHostVersionChanged = syncMinHostVersion(pkg, targetVersion); + // minHostVersion is a compatibility floor, not release alignment metadata. + // Keep it stable unless the owning plugin intentionally raises it. const pluginApiChanged = syncPluginApiVersion(pkg, targetVersion); const buildOpenClawVersionChanged = syncBuildOpenClawVersion(pkg, targetVersion); const packageChanged = versionChanged || devDependencyChanged || peerDependencyChanged || - minHostVersionChanged || pluginApiChanged || buildOpenClawVersionChanged; if (!packageChanged) { diff --git a/src/scripts/sync-plugin-versions.test.ts b/src/scripts/sync-plugin-versions.test.ts index 85cd612f23f..5fb9c0597ab 100644 --- a/src/scripts/sync-plugin-versions.test.ts +++ b/src/scripts/sync-plugin-versions.test.ts @@ -16,7 +16,7 @@ describe("syncPluginVersions", () => { cleanupTempDirs(tempDirs); }); - it("preserves workspace openclaw devDependencies while bumping plugin host constraints", () => { + it("preserves workspace openclaw devDependencies and plugin host floors", () => { const rootDir = makeTempDir(tempDirs, "openclaw-sync-plugin-versions-"); writeJson(path.join(rootDir, "package.json"), { @@ -69,7 +69,7 @@ describe("syncPluginVersions", () => { expect(updatedPackage.version).toBe("2026.4.1"); expect(updatedPackage.devDependencies?.openclaw).toBe("workspace:*"); expect(updatedPackage.peerDependencies?.openclaw).toBe(">=2026.4.1"); - expect(updatedPackage.openclaw?.install?.minHostVersion).toBe(">=2026.4.1"); + expect(updatedPackage.openclaw?.install?.minHostVersion).toBe(">=2026.3.30"); expect(updatedPackage.openclaw?.compat?.pluginApi).toBe(">=2026.4.1"); expect(updatedPackage.openclaw?.build?.openclawVersion).toBe("2026.4.1"); });