fix(doctor): keep plugin allowlists passive · openclaw/openclaw@eeed33e
vincentkoc
·
2026-05-04
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -57,6 +57,7 @@ Docs: https://docs.openclaw.ai
|
57 | 57 | - Gateway/restart: verify listener PIDs by argv when `lsof` reports only the Node process name, so stale gateway cleanup can find macOS `cnode` listeners. Fixes #70664. |
58 | 58 | - Gateway/logging: expand leading `~` in `logging.file` before creating the file logger, preventing startup crash loops for home-relative log paths. Fixes #73587. |
59 | 59 | - Channels/CLI: keep `openclaw channels list --json` usable when provider usage fetching fails, and report per-provider usage errors without aborting the channel list. Refs #67595. |
| 60 | +- Doctor/plugins: do not treat `plugins.allow` entries as configured plugins during missing-plugin repair, so restrictive allowlists no longer install allowed-but-unused plugins. Thanks @vincentkoc. |
60 | 61 | - Agents/messaging: deliver distinct final commentary after same-target `message` tool sends while still deduping text/media already sent by the tool, so short closing remarks are no longer silently dropped. Fixes #76915. Thanks @hclsys. |
61 | 62 | - Agents/messaging: preserve string thread IDs when matching message-tool reply dedupe routes, avoiding precision loss on numeric-looking topic IDs before channel plugin comparison. Thanks @vincentkoc. |
62 | 63 | - Channels/streaming: honor `agents.defaults.toolProgressDetail: "raw"` in Slack, Discord, Telegram, Matrix, and Microsoft Teams progress drafts, so tool-start lines include raw command/detail output when debugging. Thanks @vincentkoc. |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -939,6 +939,23 @@ describe("repairMissingConfiguredPluginInstalls", () => {
|
939 | 939 | expect(result).toEqual({ changes: [], warnings: [] }); |
940 | 940 | }); |
941 | 941 | |
| 942 | +it("does not install plugins merely listed in plugins.allow", async () => { |
| 943 | +const { repairMissingConfiguredPluginInstalls } = |
| 944 | +await import("./missing-configured-plugin-install.js"); |
| 945 | +const result = await repairMissingConfiguredPluginInstalls({ |
| 946 | +cfg: { |
| 947 | +plugins: { |
| 948 | +allow: ["codex"], |
| 949 | +}, |
| 950 | +}, |
| 951 | +env: {}, |
| 952 | +}); |
| 953 | + |
| 954 | +expect(mocks.installPluginFromNpmSpec).not.toHaveBeenCalled(); |
| 955 | +expect(mocks.writePersistedInstalledPluginIndexInstallRecords).not.toHaveBeenCalled(); |
| 956 | +expect(result).toEqual({ changes: [], warnings: [] }); |
| 957 | +}); |
| 958 | + |
942 | 959 | it("installs a missing third-party downloadable plugin from npm only", async () => { |
943 | 960 | mocks.installPluginFromNpmSpec.mockResolvedValueOnce({ |
944 | 961 | ok: true, |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -109,10 +109,6 @@ function collectConfiguredPluginIds(cfg: OpenClawConfig, env?: NodeJS.ProcessEnv
|
109 | 109 | if (plugins?.enabled === false) { |
110 | 110 | return ids; |
111 | 111 | } |
112 | | -const allow = Array.isArray(plugins?.allow) ? plugins.allow : []; |
113 | | -for (const value of allow) { |
114 | | -addConfiguredPluginId(ids, value); |
115 | | -} |
116 | 112 | const entries = asObjectRecord(plugins?.entries); |
117 | 113 | for (const [pluginId, entry] of Object.entries(entries ?? {})) { |
118 | 114 | if (asObjectRecord(entry)?.enabled === false) { |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。