diff --git a/CHANGELOG.md b/CHANGELOG.md index a494056a546..188dc0bef90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ Docs: https://docs.openclaw.ai - Gateway/Tailscale: let Tailscale-authenticated Control UI operator sessions with browser device identity skip the device-pairing round trip while still rejecting device-less and node-role connections. Refs #71986. Thanks @jokedul. - Doctor: honor `OPENCLAW_SERVICE_REPAIR_POLICY=external` by reporting gateway service health while skipping service install/start/restart/bootstrap, supervisor rewrites, and legacy service cleanup for externally managed environments. Thanks @shakkernerd. +- CLI/update: run package post-update doctor with `--fix` so package updates repair config migrations before restart. Thanks @shakkernerd. - Agents/Discord: keep raw `Agent failed before reply` runner failures out of Discord group/channel chats and show detailed runner errors in direct chats only when `/verbose` is enabled. Thanks @codex. - Package: include patched dependency files in the published npm package so downstream installs can resolve `patchedDependencies`. (#69224) Thanks @gucasbrg and @vincentkoc. - Plugins/channels: treat malformed bundled channel plugin loaders that return `undefined` as unavailable instead of crashing config and help paths. Fixes #69044. Thanks @frankhli843 and @vincentkoc. diff --git a/src/cli/update-cli.test.ts b/src/cli/update-cli.test.ts index 97887259237..fe63dde9f83 100644 --- a/src/cli/update-cli.test.ts +++ b/src/cli/update-cli.test.ts @@ -1202,7 +1202,7 @@ describe("update-cli", () => { await updateCommand({ yes: true }); expect(runCommandWithTimeout).toHaveBeenCalledWith( - [expect.stringMatching(/node/), entryPath, "doctor", "--non-interactive"], + [expect.stringMatching(/node/), entryPath, "doctor", "--non-interactive", "--fix"], expect.objectContaining({ env: expect.objectContaining({ OPENCLAW_UPDATE_IN_PROGRESS: "1", @@ -1271,7 +1271,7 @@ describe("update-cli", () => { expect.any(Object), ); expect(runCommandWithTimeout).toHaveBeenCalledWith( - [expect.stringMatching(/node/), entryPath, "doctor", "--non-interactive"], + [expect.stringMatching(/node/), entryPath, "doctor", "--non-interactive", "--fix"], expect.any(Object), ); expect(updateNpmInstalledPlugins).toHaveBeenCalled(); diff --git a/src/cli/update-cli/update-command.ts b/src/cli/update-cli/update-command.ts index 19537de54ce..50af145670e 100644 --- a/src/cli/update-cli/update-command.ts +++ b/src/cli/update-cli/update-command.ts @@ -439,7 +439,7 @@ async function runPackageInstallUpdate(params: { if (entryPath) { const doctorStep = await runUpdateStep({ name: `${CLI_NAME} doctor`, - argv: [resolveNodeRunner(), entryPath, "doctor", "--non-interactive"], + argv: [resolveNodeRunner(), entryPath, "doctor", "--non-interactive", "--fix"], env: { ...process.env, OPENCLAW_UPDATE_IN_PROGRESS: "1",