diff --git a/CHANGELOG.md b/CHANGELOG.md index 71733ada0ce..1511fc911e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ Docs: https://docs.openclaw.ai ### Fixes +- Plugins/externalization: pin beta-only official launch packages for ACPX, Google Chat, and LINE to explicit npm beta specs so catalog-driven installs do not trip the prerelease safety guard while npm `latest` still points at beta. Thanks @vincentkoc. - Control UI/Talk: fix Talk (OpenAI Realtime WebRTC) CORS failure by stripping server-side-only attribution headers (`originator`, `version`, `User-Agent`) from browser offer headers; `api.openai.com/v1/realtime/calls` only allows `authorization` and `content-type` in its CORS preflight, so forwarding these headers caused the browser SDP exchange to fail. Fixes #76435. Thanks @hclsys. - CLI/logs: auto-reconnect `openclaw logs --follow` on transient gateway disconnects (WebSocket close, timeout, connection drop) with bounded exponential backoff (up to 8 retries, capped at 30 s) and stderr retry warnings, while still exiting immediately on non-recoverable auth or configuration errors. Fixes #74782. (#75059) Thanks @shashank-poola. - Plugins/onboarding: trust optional official plugin and web-search installs selected from the official catalog so npm security scanning treats them like other source-linked official install paths. Thanks @vincentkoc. diff --git a/scripts/lib/official-external-channel-catalog.json b/scripts/lib/official-external-channel-catalog.json index fbd530304fc..92119d96627 100644 --- a/scripts/lib/official-external-channel-catalog.json +++ b/scripts/lib/official-external-channel-catalog.json @@ -176,7 +176,7 @@ ] }, "install": { - "npmSpec": "@openclaw/googlechat", + "npmSpec": "@openclaw/googlechat@beta", "defaultChoice": "npm", "minHostVersion": ">=2026.4.10" } @@ -201,7 +201,7 @@ "quickstartAllowFrom": true }, "install": { - "npmSpec": "@openclaw/line", + "npmSpec": "@openclaw/line@beta", "defaultChoice": "npm", "minHostVersion": ">=2026.4.10" } diff --git a/scripts/lib/official-external-plugin-catalog.json b/scripts/lib/official-external-plugin-catalog.json index dd2c50a46d7..67fc6721cff 100644 --- a/scripts/lib/official-external-plugin-catalog.json +++ b/scripts/lib/official-external-plugin-catalog.json @@ -11,7 +11,7 @@ "label": "ACPX Runtime" }, "install": { - "npmSpec": "@openclaw/acpx", + "npmSpec": "@openclaw/acpx@beta", "defaultChoice": "npm", "minHostVersion": ">=2026.4.25" } diff --git a/src/plugins/official-external-plugin-catalog.test.ts b/src/plugins/official-external-plugin-catalog.test.ts index b4ad7a301d5..29d3f622c2f 100644 --- a/src/plugins/official-external-plugin-catalog.test.ts +++ b/src/plugins/official-external-plugin-catalog.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from "vitest"; import { getOfficialExternalPluginCatalogEntry, + listOfficialExternalPluginCatalogEntries, resolveOfficialExternalPluginId, resolveOfficialExternalPluginInstall, } from "./official-external-plugin-catalog.js"; @@ -21,4 +22,28 @@ describe("official external plugin catalog", () => { "openclaw-plugin-yuanbao@2.11.0", ); }); + + it("opts current beta-only official launch packages into prerelease npm tags", () => { + expect( + resolveOfficialExternalPluginInstall(getOfficialExternalPluginCatalogEntry("acpx")!)?.npmSpec, + ).toBe("@openclaw/acpx@beta"); + expect( + resolveOfficialExternalPluginInstall(getOfficialExternalPluginCatalogEntry("googlechat")!) + ?.npmSpec, + ).toBe("@openclaw/googlechat@beta"); + expect( + resolveOfficialExternalPluginInstall(getOfficialExternalPluginCatalogEntry("line")!)?.npmSpec, + ).toBe("@openclaw/line@beta"); + }); + + it("keeps Matrix and Mattermost out of the external catalog until cutover", () => { + const ids = new Set( + listOfficialExternalPluginCatalogEntries() + .map((entry) => resolveOfficialExternalPluginId(entry)) + .filter(Boolean), + ); + + expect(ids.has("matrix")).toBe(false); + expect(ids.has("mattermost")).toBe(false); + }); });