fix(plugins): pin beta-only external launch specs

This commit is contained in:
Vincent Koc
2026-05-03 02:50:02 -07:00
parent 310b1987e1
commit e7b6e0ff90
4 changed files with 29 additions and 3 deletions

View File

@@ -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.

View File

@@ -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"
}

View File

@@ -11,7 +11,7 @@
"label": "ACPX Runtime"
},
"install": {
"npmSpec": "@openclaw/acpx",
"npmSpec": "@openclaw/acpx@beta",
"defaultChoice": "npm",
"minHostVersion": ">=2026.4.25"
}

View File

@@ -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);
});
});