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

推荐订阅源

GbyAI
GbyAI
The GitHub Blog
The GitHub Blog
小众软件
小众软件
美团技术团队
博客园 - 司徒正美
G
Google Developers Blog
Blog — PlanetScale
Blog — PlanetScale
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
大猫的无限游戏
大猫的无限游戏
罗磊的独立博客
Recent Announcements
Recent Announcements
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Docker
J
Java Code Geeks
Last Week in AI
Last Week in AI
V
Visual Studio Blog
Microsoft Azure Blog
Microsoft Azure Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Proofpoint News Feed
V
V2EX
C
Check Point Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MyScale Blog
MyScale Blog

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
fix: reserve auth CLI root from plugin allowlist gating ·...
steipete · 2026-05-03 · via Recent Commits to openclaw:main

Lines changed: 1 addition & 0 deletions

Original file line numberDiff line numberDiff line change

@@ -12,6 +12,7 @@ Docs: https://docs.openclaw.ai

1212
1313

### Fixes

1414
15+

- CLI/plugins: stop treating the non-plugin `auth` command root as a bundled plugin id, so restrictive `plugins.allow` configs no longer tell users to add stale `auth` plugin entries.

1516

- Plugins/externalization: repair missing configured plugin installs from npm by default, reserve ClawHub downloads for explicit `clawhubSpec` metadata, and cover agent-runtime/env-selected plugin repair. Thanks @vincentkoc.

1617

- Upgrade/config: validate configured web-search providers and statically suppressed model/provider pairs against the active plugin set at config load, so stale plugin state fails loud before runtime fallback.

1718

- Status/update: resolve beta update-channel checks from the installed version when config still says `stable`, and let `status --deep` reuse live gateway channel credential state instead of warning on command-path-only token misses.

Lines changed: 7 additions & 0 deletions

Original file line numberDiff line numberDiff line change

@@ -50,6 +50,13 @@ describe("command-registration-policy", () => {

5050

hasBuiltinPrimary: false,

5151

}),

5252

).toBe(false);

53+

expect(

54+

shouldSkipPluginCommandRegistration({

55+

argv: ["node", "openclaw", "auth", "login"],

56+

primary: "auth",

57+

hasBuiltinPrimary: false,

58+

}),

59+

).toBe(true);

5360

expect(

5461

shouldSkipPluginCommandRegistration({

5562

argv: ["node", "openclaw", "tool", "image_generate"],

Lines changed: 1 addition & 1 deletion

Original file line numberDiff line numberDiff line change

@@ -1,7 +1,7 @@

11

import { isTruthyEnvValue } from "../infra/env.js";

22

import { resolveCliArgvInvocation } from "./argv-invocation.js";

33
4-

const RESERVED_NON_PLUGIN_COMMAND_ROOTS = new Set(["tool", "tools"]);

4+

const RESERVED_NON_PLUGIN_COMMAND_ROOTS = new Set(["auth", "tool", "tools"]);

55
66

export function isReservedNonPluginCommandRoot(primary: string | null | undefined): boolean {

77

return typeof primary === "string" && RESERVED_NON_PLUGIN_COMMAND_ROOTS.has(primary);

Lines changed: 1 addition & 0 deletions

Original file line numberDiff line numberDiff line change

@@ -400,6 +400,7 @@ describe("runCli exit behavior", () => {

400400

});

401401
402402

it.each([

403+

["auth", ["node", "openclaw", "auth", "--help"]],

403404

["tool", ["node", "openclaw", "tool", "image_generate"]],

404405

["tools", ["node", "openclaw", "tools", "effective"]],

405406

])("keeps reserved %s command roots out of plugin command discovery", async (_name, argv) => {

Lines changed: 8 additions & 6 deletions

Original file line numberDiff line numberDiff line change

@@ -214,12 +214,14 @@ describe("resolveMissingPluginCommandMessage", () => {

214214

});

215215
216216

it("does not classify reserved non-plugin command roots as plugin allowlist misses", () => {

217-

const message = resolveMissingPluginCommandMessage("tool", {

218-

plugins: {

219-

allow: ["browser"],

220-

},

221-

});

222-

expect(message).toBeNull();

217+

for (const root of ["auth", "tool"]) {

218+

const message = resolveMissingPluginCommandMessage(root, {

219+

plugins: {

220+

allow: ["browser"],

221+

},

222+

});

223+

expect(message).toBeNull();

224+

}

223225

});

224226
225227

it("explains that dreaming is a runtime slash command, not a CLI command", () => {