diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e8f4f653dc..242732f7d80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ Docs: https://docs.openclaw.ai - Gateway/restart: add `openclaw gateway restart --force` and `--wait `, log active task run IDs before restart deferral timers, and report timeout restarts as explicit forced restarts. - Discord: persist slash-command deploy hashes across process restarts so unchanged command sets skip redeploy and avoid restart-loop 429s. - Providers/LM Studio: normalize binary `off`/`on` reasoning metadata from Gemma 4 and other local models to LM Studio's accepted OpenAI-compatible `reasoning_effort` values. +- Plugins/externalization: keep official external install docs, update examples, and live Codex npm checks on default npm tags instead of `@beta`. Thanks @vincentkoc. - Plugins/externalization: keep ACPX, Google Chat, and LINE publishable plugin dist trees out of the core npm package file list. - Plugins/ClawHub: fall back to version metadata when the artifact resolver route is missing and keep the Docker ClawHub fixture aligned with npm-pack artifact resolution, avoiding false version-not-found failures during plugin install validation. Thanks @vincentkoc. - Status/channels: show configured channels in `openclaw status` and config-only `openclaw channels status` output even when the Gateway is unreachable, avoiding empty Channels tables on WSL and other no-Gateway paths. Thanks @vincentkoc. diff --git a/docs/channels/msteams.md b/docs/channels/msteams.md index 354f5d0c19c..184eab43c4b 100644 --- a/docs/channels/msteams.md +++ b/docs/channels/msteams.md @@ -19,8 +19,8 @@ install the npm package directly: openclaw plugins install @openclaw/msteams ``` -Use `@openclaw/msteams@beta` when following the OpenClaw beta channel and npmjs -shows `beta` ahead of `latest`. +Use the bare package to follow the current official release tag. Pin an exact +version only when you need a reproducible install. Local checkout (when running from a git repo): diff --git a/docs/channels/nextcloud-talk.md b/docs/channels/nextcloud-talk.md index b7f3059a9a1..9f02c881a12 100644 --- a/docs/channels/nextcloud-talk.md +++ b/docs/channels/nextcloud-talk.md @@ -21,8 +21,8 @@ Install via CLI (npm registry): openclaw plugins install @openclaw/nextcloud-talk ``` -Use `@openclaw/nextcloud-talk@beta` when following the OpenClaw beta channel and -npmjs shows `beta` ahead of `latest`. +Use the bare package to follow the current official release tag. Pin an exact +version only when you need a reproducible install. Local checkout (when running from a git repo): diff --git a/docs/channels/nostr.md b/docs/channels/nostr.md index bb87d6ab0af..44f0a170241 100644 --- a/docs/channels/nostr.md +++ b/docs/channels/nostr.md @@ -25,8 +25,8 @@ builds do not need a separate install. openclaw plugins install @openclaw/nostr ``` -Use `@openclaw/nostr@beta` when following the OpenClaw beta channel and npmjs -shows `beta` ahead of `latest`. +Use the bare package to follow the current official release tag. Pin an exact +version only when you need a reproducible install. Use a local checkout (dev workflows): diff --git a/docs/channels/tlon.md b/docs/channels/tlon.md index 9d0f181209b..b9d60ccdd53 100644 --- a/docs/channels/tlon.md +++ b/docs/channels/tlon.md @@ -26,8 +26,8 @@ Install via CLI (npm registry): openclaw plugins install @openclaw/tlon ``` -Use `@openclaw/tlon@beta` when following the OpenClaw beta channel and npmjs -shows `beta` ahead of `latest`. +Use the bare package to follow the current official release tag. Pin an exact +version only when you need a reproducible install. Local checkout (when running from a git repo): diff --git a/docs/channels/twitch.md b/docs/channels/twitch.md index fd1f480c104..8934bfd4756 100644 --- a/docs/channels/twitch.md +++ b/docs/channels/twitch.md @@ -29,8 +29,8 @@ If you are on an older build or a custom install that excludes Twitch, install t -Use `@openclaw/twitch@beta` when following the OpenClaw beta channel and npmjs -shows `beta` ahead of `latest`. +Use the bare package to follow the current official release tag. Pin an exact +version only when you need a reproducible install. Details: [Plugins](/tools/plugin) diff --git a/docs/channels/whatsapp.md b/docs/channels/whatsapp.md index 35e55df4630..d23dfc7741e 100644 --- a/docs/channels/whatsapp.md +++ b/docs/channels/whatsapp.md @@ -14,8 +14,8 @@ Status: production-ready via WhatsApp Web (Baileys). Gateway owns linked session - `openclaw channels login --channel whatsapp` also offers the install flow when the plugin is not present yet. - Dev channel + git checkout: defaults to the local plugin path. -- Stable/Beta: uses the npm package `@openclaw/whatsapp`; beta-channel updates - prefer `@openclaw/whatsapp@beta` when that tag is available. +- Stable/Beta: uses the npm package `@openclaw/whatsapp` on the current official + release tag. Manual install stays available: @@ -23,8 +23,8 @@ Manual install stays available: openclaw plugins install @openclaw/whatsapp ``` -Use `@openclaw/whatsapp@beta` when following the OpenClaw beta channel and npmjs -shows `beta` ahead of `latest`. +Use the bare package to follow the current official release tag. Pin an exact +version only when you need a reproducible install. diff --git a/docs/channels/zalo.md b/docs/channels/zalo.md index dfd10d9981a..3eff95dad56 100644 --- a/docs/channels/zalo.md +++ b/docs/channels/zalo.md @@ -16,7 +16,7 @@ If you are on an older build or a custom install that excludes Zalo, install the npm package directly: - Install via CLI: `openclaw plugins install @openclaw/zalo` -- Beta channel: `openclaw plugins install @openclaw/zalo@beta` +- Pinned version: `openclaw plugins install @openclaw/zalo@2026.5.2` - Or from a source checkout: `openclaw plugins install ./path/to/local/zalo-plugin` - Details: [Plugins](/tools/plugin) diff --git a/docs/channels/zalouser.md b/docs/channels/zalouser.md index 91dac8a7fd0..beaf240fb90 100644 --- a/docs/channels/zalouser.md +++ b/docs/channels/zalouser.md @@ -21,7 +21,7 @@ If you are on an older build or a custom install that excludes Zalo Personal, install the npm package directly: - Install via CLI: `openclaw plugins install @openclaw/zalouser` -- Beta channel: `openclaw plugins install @openclaw/zalouser@beta` +- Pinned version: `openclaw plugins install @openclaw/zalouser@2026.5.2` - Or from a source checkout: `openclaw plugins install ./path/to/local/zalouser-plugin` - Details: [Plugins](/tools/plugin) diff --git a/docs/cli/plugins.md b/docs/cli/plugins.md index f4db03cc72b..b7cda2ef8bc 100644 --- a/docs/cli/plugins.md +++ b/docs/cli/plugins.md @@ -308,7 +308,7 @@ openclaw plugins uninstall --keep-files openclaw plugins update openclaw plugins update --all openclaw plugins update --dry-run -openclaw plugins update @openclaw/voice-call@beta +openclaw plugins update @openclaw/voice-call openclaw plugins update openclaw-codex-app-server --dangerously-force-unsafe-install ``` diff --git a/docs/plugins/manage-plugins.md b/docs/plugins/manage-plugins.md index 7879f34cca0..dbb1061527b 100644 --- a/docs/plugins/manage-plugins.md +++ b/docs/plugins/manage-plugins.md @@ -50,7 +50,7 @@ openclaw plugins install npm: openclaw plugins install clawhub:@1.2.3 openclaw plugins install clawhub:@beta openclaw plugins install npm:@scope/openclaw-plugin@1.2.3 -openclaw plugins install npm:@openclaw/codex@beta +openclaw plugins install npm:@openclaw/codex # Install from git or a local development checkout. openclaw plugins install git:github.com/acme/openclaw-plugin@v1.0.0 diff --git a/docs/plugins/voice-call.md b/docs/plugins/voice-call.md index 518ca96f794..8715d654184 100644 --- a/docs/plugins/voice-call.md +++ b/docs/plugins/voice-call.md @@ -41,8 +41,8 @@ the Gateway, then restart the Gateway to load it. - Use `@openclaw/voice-call@beta` when following the OpenClaw beta channel and - npmjs shows `beta` ahead of `latest`. + Use the bare package to follow the current official release tag. Pin an + exact version only when you need a reproducible install. Restart the Gateway afterwards so the plugin loads. diff --git a/docs/plugins/zalouser.md b/docs/plugins/zalouser.md index 3ed656d4b76..32d0fdf4419 100644 --- a/docs/plugins/zalouser.md +++ b/docs/plugins/zalouser.md @@ -34,8 +34,8 @@ No external `zca`/`openzca` CLI binary is required. openclaw plugins install @openclaw/zalouser ``` -Use `@openclaw/zalouser@beta` when following the OpenClaw beta channel and npmjs -shows `beta` ahead of `latest`. +Use the bare package to follow the current official release tag. Pin an exact +version only when you need a reproducible install. Restart the Gateway afterwards. diff --git a/scripts/e2e/codex-npm-plugin-live-docker.sh b/scripts/e2e/codex-npm-plugin-live-docker.sh index 30c63b11847..bae0515dd49 100644 --- a/scripts/e2e/codex-npm-plugin-live-docker.sh +++ b/scripts/e2e/codex-npm-plugin-live-docker.sh @@ -47,7 +47,7 @@ if ! docker_e2e_run_with_harness \ -e OPENCLAW_CODEX_NPM_PLUGIN_ALLOW_BETA_COMPAT_DIAGNOSTICS="${OPENCLAW_CODEX_NPM_PLUGIN_ALLOW_BETA_COMPAT_DIAGNOSTICS:-0}" \ -e OPENCLAW_CODEX_NPM_PLUGIN_FORCE_UNSAFE_INSTALL="${OPENCLAW_CODEX_NPM_PLUGIN_FORCE_UNSAFE_INSTALL:-0}" \ -e OPENCLAW_CODEX_NPM_PLUGIN_MODEL="${OPENCLAW_CODEX_NPM_PLUGIN_MODEL:-codex/gpt-5.4}" \ - -e OPENCLAW_CODEX_NPM_PLUGIN_SPEC="${OPENCLAW_CODEX_NPM_PLUGIN_SPEC:-npm:@openclaw/codex@beta}" \ + -e OPENCLAW_CODEX_NPM_PLUGIN_SPEC="${OPENCLAW_CODEX_NPM_PLUGIN_SPEC:-npm:@openclaw/codex}" \ -e "OPENCLAW_TEST_STATE_SCRIPT_B64=$OPENCLAW_TEST_STATE_SCRIPT_B64" \ "${DOCKER_E2E_PACKAGE_ARGS[@]}" \ "${PROFILE_MOUNT[@]}" \ diff --git a/scripts/e2e/lib/codex-npm-plugin-live/assertions.mjs b/scripts/e2e/lib/codex-npm-plugin-live/assertions.mjs index ffb883bafa2..efe5b7b1e62 100644 --- a/scripts/e2e/lib/codex-npm-plugin-live/assertions.mjs +++ b/scripts/e2e/lib/codex-npm-plugin-live/assertions.mjs @@ -96,7 +96,7 @@ function readInstallRecords() { } function assertPlugin() { - const spec = process.argv[3] || "npm:@openclaw/codex@beta"; + const spec = process.argv[3] || "npm:@openclaw/codex"; const list = readJson("/tmp/openclaw-codex-plugins-list.json"); const inspect = readJson("/tmp/openclaw-codex-plugin-inspect.json"); const plugin = (list.plugins || []).find((entry) => entry.id === "codex"); diff --git a/src/plugins/install.npm-spec.test.ts b/src/plugins/install.npm-spec.test.ts index f71f669f107..cb66176fd3d 100644 --- a/src/plugins/install.npm-spec.test.ts +++ b/src/plugins/install.npm-spec.test.ts @@ -264,16 +264,16 @@ describe("installPluginFromNpmSpec", () => { const npmRoot = path.join(suiteTempRootTracker.makeTempDir(), "npm"); const warnings: string[] = []; mockNpmViewAndInstall({ - spec: "@openclaw/codex@beta", + spec: "@openclaw/codex", packageName: "@openclaw/codex", - version: "2026.5.1-beta.1", + version: "2026.5.2", pluginId: "codex", npmRoot, indexJs: `import { spawn } from "node:child_process";\nspawn("codex", ["app-server"]);`, }); const result = await installPluginFromNpmSpec({ - spec: "@openclaw/codex@beta", + spec: "@openclaw/codex", npmDir: npmRoot, logger: { info: () => {}, @@ -294,7 +294,7 @@ describe("installPluginFromNpmSpec", () => { expectNpmInstallIntoRoot({ calls: runCommandWithTimeoutMock.mock.calls, npmRoot, - spec: "@openclaw/codex@beta", + spec: "@openclaw/codex", }); });