惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
J
Java Code Geeks
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
阮一峰的网络日志
阮一峰的网络日志
爱范儿
爱范儿
量子位
N
Netflix TechBlog - Medium
博客园 - 聂微东
博客园 - Franky
aimingoo的专栏
aimingoo的专栏
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
MyScale Blog
MyScale Blog
Google DeepMind News
Google DeepMind News
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
C
Check Point Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
B
Blog
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
plugins: clarify allowlist warning when entries don't mat...
lyfuci · 2026-06-23 · via Recent Commits to openclaw:main

@@ -8626,6 +8626,104 @@ module.exports = {

86268626

});

86278627

});

862886288629+

it("warns when plugins.allow entries do not match any discovered plugin ids", () => {

8630+

useNoBundledPlugins();

8631+

clearPluginLoaderCache();

8632+

const { workspaceDir } = writeWorkspacePlugin({

8633+

id: "warn-mismatch-allow-plugin",

8634+

});

8635+

const warnings: string[] = [];

8636+

loadOpenClawPlugins({

8637+

cache: false,

8638+

workspaceDir,

8639+

logger: createWarningLogger(warnings),

8640+

config: {

8641+

plugins: {

8642+

enabled: true,

8643+

// User configured a channel-style id that does not match the real plugin id.

8644+

allow: ["warn-mismatch-allow-channel"],

8645+

},

8646+

},

8647+

});

8648+

const emptyWarnings = warnings.filter((msg) => msg.includes("plugins.allow is empty"));

8649+

const mismatchWarnings = warnings.filter((msg) =>

8650+

msg.includes("do not match any discovered plugin ids"),

8651+

);

8652+

expect(emptyWarnings, "should not emit empty-allowlist warning").toHaveLength(0);

8653+

expect(mismatchWarnings, "should emit mismatch warning once").toHaveLength(1);

8654+

expect(mismatchWarnings[0]).toContain(`"warn-mismatch-allow-channel"`);

8655+

expect(mismatchWarnings[0]).toContain("warn-mismatch-allow-plugin");

8656+

expect(mismatchWarnings[0]).toContain("Use the plugin id");

8657+

});

8658+8659+

it("stays quiet when plugins.allow contains at least one matching plugin id", () => {

8660+

useNoBundledPlugins();

8661+

clearPluginLoaderCache();

8662+

const { workspaceDir } = writeWorkspacePlugin({

8663+

id: "warn-partial-allow-plugin",

8664+

});

8665+

const warnings: string[] = [];

8666+

loadOpenClawPlugins({

8667+

cache: false,

8668+

workspaceDir,

8669+

logger: createWarningLogger(warnings),

8670+

config: {

8671+

plugins: {

8672+

enabled: true,

8673+

// Allow contains one real plugin id plus a stray channel-style entry.

8674+

allow: ["warn-partial-allow-plugin", "warn-partial-allow-channel"],

8675+

},

8676+

},

8677+

});

8678+

const openAllowWarnings = warnings.filter(

8679+

(msg) =>

8680+

msg.includes("plugins.allow is empty") ||

8681+

msg.includes("do not match any discovered plugin ids"),

8682+

);

8683+

expect(openAllowWarnings, "should not emit allowlist warning when one id matches").toHaveLength(

8684+

0,

8685+

);

8686+

});

8687+8688+

it("stays quiet when plugins.allow matches only bundled plugin ids, even while workspace/global plugins are present", () => {

8689+

// Regression for Codex P2 feedback on #68389: the mismatch warning should be computed

8690+

// against the full discovered plugin set (bundled + workspace + global), not only the

8691+

// workspace/global subset that the warning talks about. An allowlist that intentionally

8692+

// trusts bundled ids like ["telegram"] is valid and must not trip the mismatch path just

8693+

// because some unrelated non-bundled plugin happens to be auto-discoverable.

8694+

useNoBundledPlugins();

8695+

clearPluginLoaderCache();

8696+

writeBundledPlugin({

8697+

id: "warn-bundled-allow-only-plugin",

8698+

body: simplePluginBody("warn-bundled-allow-only-plugin"),

8699+

});

8700+

const { workspaceDir } = writeWorkspacePlugin({

8701+

id: "warn-noise-workspace-plugin",

8702+

});

8703+

const warnings: string[] = [];

8704+

loadOpenClawPlugins({

8705+

cache: false,

8706+

workspaceDir,

8707+

logger: createWarningLogger(warnings),

8708+

config: {

8709+

plugins: {

8710+

enabled: true,

8711+

// Allowlist intentionally only trusts a bundled plugin id.

8712+

allow: ["warn-bundled-allow-only-plugin"],

8713+

},

8714+

},

8715+

});

8716+

const openAllowWarnings = warnings.filter(

8717+

(msg) =>

8718+

msg.includes("plugins.allow is empty") ||

8719+

msg.includes("do not match any discovered plugin ids"),

8720+

);

8721+

expect(

8722+

openAllowWarnings,

8723+

"bundled-only allowlists should not trip the mismatch warning",

8724+

).toHaveLength(0);

8725+

});

8726+86298727

it("handles workspace-discovered plugins according to trust and precedence", () => {

86308728

useNoBundledPlugins();

86318729

const scenarios = [