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

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
CXSECURITY Database RSS Feed - CXSecurity.com
L
LINUX DO - 热门话题
S
Secure Thoughts
TaoSecurity Blog
TaoSecurity Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Threat Research - Cisco Blogs
AI
AI
B
Blog RSS Feed
S
Schneier on Security
雷峰网
雷峰网
Schneier on Security
Schneier on Security
Help Net Security
Help Net Security
Cloudbric
Cloudbric
L
LINUX DO - 最新话题
罗磊的独立博客
有赞技术团队
有赞技术团队
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Apple Machine Learning Research
Apple Machine Learning Research
P
Proofpoint News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
The Hacker News
The Hacker News
博客园 - Franky
Attack and Defense Labs
Attack and Defense Labs
The Cloudflare Blog
Webroot Blog
Webroot Blog
Last Week in AI
Last Week in AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园 - 叶小钗
美团技术团队
L
Lohrmann on Cybersecurity
T
The Blog of Author Tim Ferriss
The Last Watchdog
The Last Watchdog
T
Troy Hunt's Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Vercel News
Vercel News
Know Your Adversary
Know Your Adversary
O
OpenAI News
博客园 - 【当耐特】
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
Cybersecurity and Infrastructure Security Agency CISA
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
www.infosecurity-magazine.com
www.infosecurity-magazine.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
PCI Perspectives
PCI Perspectives
H
Heimdal Security Blog
I
InfoQ
GbyAI
GbyAI
T
Threatpost
C
Cisco Blogs

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 test: trim doctor command hotspots · openclaw/openclaw@c66f16a test: isolate agent auth and spawn hotspots · openclaw/openclaw@9285935 test: stabilize MCP startup disposal race · openclaw/openclaw@dd9d2eb test: merge browser contract server suites · openclaw/openclaw@5817a76 test: narrow ollama provider discovery setup · openclaw/openclaw@a0d9598 build: declare qa-lab aimock runtime dependency · openclaw/openclaw@24431e5 test: speed up safe-bins exec harness · openclaw/openclaw@ee856ab test: preserve tool helpers in embedded runner mocks · openclaw/openclaw@acd86a0 refactor: move memory embeddings into provider plugins · openclaw/openclaw@77e6e4c test: reuse system-run temp fixtures · openclaw/openclaw@7e9ff0f test: trim hotspot wait overhead · openclaw/openclaw@12a59b0 Check: avoid duplicate boundary prep · openclaw/openclaw@baf11b8 test: reduce hotspot fixture overhead · openclaw/openclaw@3a59edd feat(ui): overhaul settings and slash command UX (#67819) thanks @Bun… · openclaw/openclaw@2cfb660 QA Matrix: exit cleanly on failure · openclaw/openclaw@42805d2 QA Matrix: isolate scenario coverage · openclaw/openclaw@7e659e1 Matrix: refresh crypto bootstrap state · openclaw/openclaw@94081d8 QA Lab: add provider registry · openclaw/openclaw@bb7e982 Matrix: add plugin changelog · openclaw/openclaw@4acab55 test: trim more hotspot overhead · openclaw/openclaw@f485311 test: trim remaining hotspot tests · openclaw/openclaw@6ba8626 test: narrow hotspot mocks · openclaw/openclaw@dbc8179 test: isolate gemini embedding request helpers · openclaw/openclaw@cd330f5 test: trim memory and mcp hotspots · openclaw/openclaw@fd48dfa test: slim provider registry mocks · openclaw/openclaw@2e08c77 test: harden Parallels update smoke · openclaw/openclaw@1a98090 feat: default Anthropic to Opus 4.7 · openclaw/openclaw@628b454 fix: harden node-host shell payload mutability checks · openclaw/openclaw@75c551e fix: land node-host approval binding for native binaries (#66731) (th… · openclaw/openclaw@29919bb CI: add daily schedule to CodeQL workflow (#67645) · openclaw/openclaw@69d25f5 fix(gateway): capture config hash after plugin auto-enable to prevent… · openclaw/openclaw@8c11210 fix: repair sanitized replay tool results before send (#67620) (thank… · openclaw/openclaw@c3c7a99 fix: restrict HTML timeout short-circuit to transient statuses · openclaw/openclaw@de129a6 fix: keep TUI watchdog bound to active run (#67401) (thanks @xantorres) · openclaw/openclaw@3525273 Gateway/skills: dedupe skills prefix-match + drop dead fallback on log · openclaw/openclaw@d7f489f Extensions/lmstudio: back off inference preload after consecutive fai… · openclaw/openclaw@b555214 TUI/streaming: add watchdog that resets the activity indicator after … · openclaw/openclaw@f44ab20 Agents/tool-loop: enable unknown-tool stream guard by default · openclaw/openclaw@36ed367 Gateway/skills: invalidate session skills snapshot on config write · openclaw/openclaw@b23d59a fix: classify HTML provider error pages correctly (#67642) (thanks @s… · openclaw/openclaw@e588e90 fix(skills): remove unused model-usage import (#67641) · openclaw/openclaw@55f05df docs(changelog): credit codex fix superseded PRs · openclaw/openclaw@e485f24 fix(openai-codex): normalize stale transport metadata in resolution a… · openclaw/openclaw@90801ba CI: pin Docker-related GitHub Actions (#67632) · openclaw/openclaw@f697b01 Android: modernize WebView and discovery API usage (#67627) · openclaw/openclaw@44a6e50 fix(deps): bump hono to 4.12.14 and @hono/node-server to 1.19.14 (GHS… · openclaw/openclaw@fbccc18 fix(deps): bump dompurify to 3.4.0 (#67614) · openclaw/openclaw@2c2dc00 CI: add explicit permissions to all workflow jobs (fixes code-scannin… · openclaw/openclaw@01b7516 fix: register bundled TTS providers and route overrides correctly (#6… · openclaw/openclaw@6ea3cdd fix: align host tilde paths with OS home (#62804) (thanks @stainlu) · openclaw/openclaw@ecfaf64 fix: flush creds queue before reconnect socket open (#67464) (thanks … · openclaw/openclaw@405c63f fix: strip standalone <function> tool call tags from visible text (#6… · openclaw/openclaw@78df859 fix(agents): preserve cli session metadata before transcript persist … · openclaw/openclaw@898fd04 docs(changelog): move cli transcript entry · openclaw/openclaw@c1817c6 fix(agents): normalize cli transcript api field · openclaw/openclaw@3a3fae0 docs(changelog): note cli transcript persistence · openclaw/openclaw@6c343f1 fix(agents): persist cli transcript turns · openclaw/openclaw@b8ef507 fix(msteams): harden security-sensitive flows (#65841) · openclaw/openclaw@c56b56e [Dashboard] Fix exec approval modal overflow for long command content… · openclaw/openclaw@053c5b0 Docs: remove QA changelog entry · openclaw/openclaw@7fd5771 QA: fix private runtime source loading (#67428) · openclaw/openclaw@d5933af docs(gateway): correct protocol.md schema path, hello-ok example, aut… · openclaw/openclaw@489404d CI: pin Node 22 runners to 22.18.0 · openclaw/openclaw@4ffa621 models.authStatus: normalize provider ids + tighten env-backed escape… · openclaw/openclaw@f2fdb9d Update CHANGELOG.md · openclaw/openclaw@7694a92 test(parallels): clean up npm update guard jobs · openclaw/openclaw@045ea7b Plugins: prefer scanDir override paths · openclaw/openclaw@b2974da fix(dreaming): default storage.mode to "separate" so phase blocks sto… · openclaw/openclaw@8c392f0 fix(memory-core): skip dreaming transcript ingestion via session stor… · openclaw/openclaw@a1b01f0 fix: dedupe replayed exec.finished node events (#67281) · openclaw/openclaw@5dcf526
refactor(cli): remove stale path policy helpers · openclaw/openclaw@76bdb02
vincentkoc · 2026-06-19 · via Recent Commits to openclaw:main

@@ -3,12 +3,21 @@ import { describe, expect, it } from "vitest";

33

import {

44

resolveCliStartupPolicy,

55

shouldBypassConfigGuardForCommandPath,

6-

shouldEnsureCliPathForCommandPath,

7-

shouldHideCliBannerForCommandPath,

8-

shouldLoadPluginsForCommandPath,

9-

shouldSkipRouteConfigGuardForCommandPath,

106

} from "./command-startup-policy.js";

1178+

function resolvePolicy(params: {

9+

argv?: string[];

10+

commandPath: string[];

11+

jsonOutputMode?: boolean;

12+

env?: NodeJS.ProcessEnv;

13+

routeMode?: boolean;

14+

}) {

15+

return resolveCliStartupPolicy({

16+

jsonOutputMode: false,

17+

...params,

18+

});

19+

}

20+1221

describe("command-startup-policy", () => {

1322

it("matches config guard bypass commands", () => {

1423

expect(shouldBypassConfigGuardForCommandPath(["backup", "create"])).toBe(true);

@@ -21,161 +30,152 @@ describe("command-startup-policy", () => {

21302231

it("matches route-first config guard skip policy", () => {

2332

expect(

24-

shouldSkipRouteConfigGuardForCommandPath({

33+

resolvePolicy({

2534

commandPath: ["status"],

26-

suppressDoctorStdout: true,

27-

}),

35+

jsonOutputMode: true,

36+

routeMode: true,

37+

}).skipConfigGuard,

2838

).toBe(false);

2939

expect(

30-

shouldSkipRouteConfigGuardForCommandPath({

40+

resolvePolicy({

3141

commandPath: ["gateway", "status"],

32-

suppressDoctorStdout: false,

33-

}),

42+

routeMode: true,

43+

}).skipConfigGuard,

3444

).toBe(true);

3545

expect(

36-

shouldSkipRouteConfigGuardForCommandPath({

46+

resolvePolicy({

3747

commandPath: ["status"],

38-

suppressDoctorStdout: false,

39-

}),

48+

routeMode: true,

49+

}).skipConfigGuard,

4050

).toBe(false);

4151

});

42524353

it("matches plugin preload policy", () => {

4454

expect(

45-

shouldLoadPluginsForCommandPath({

55+

resolvePolicy({

4656

commandPath: ["status"],

47-

jsonOutputMode: false,

48-

}),

57+

}).loadPlugins,

4958

).toBe(false);

5059

expect(

51-

shouldLoadPluginsForCommandPath({

60+

resolvePolicy({

5261

commandPath: ["status"],

5362

jsonOutputMode: true,

54-

}),

63+

}).loadPlugins,

5564

).toBe(false);

5665

expect(

57-

shouldLoadPluginsForCommandPath({

66+

resolvePolicy({

5867

commandPath: ["health"],

59-

jsonOutputMode: false,

60-

}),

68+

}).loadPlugins,

6169

).toBe(false);

6270

expect(

63-

shouldLoadPluginsForCommandPath({

71+

resolvePolicy({

6472

commandPath: ["channels", "status"],

65-

jsonOutputMode: false,

66-

}),

73+

}).loadPlugins,

6774

).toBe(false);

6875

expect(

69-

shouldLoadPluginsForCommandPath({

76+

resolvePolicy({

7077

commandPath: ["channels", "list"],

71-

jsonOutputMode: false,

72-

}),

78+

}).loadPlugins,

7379

).toBe(false);

7480

expect(

75-

shouldLoadPluginsForCommandPath({

81+

resolvePolicy({

7682

commandPath: ["channels", "add"],

77-

jsonOutputMode: false,

78-

}),

83+

}).loadPlugins,

7984

).toBe(false);

8085

expect(

81-

shouldLoadPluginsForCommandPath({

86+

resolvePolicy({

8287

commandPath: ["channels", "logs"],

83-

jsonOutputMode: false,

84-

}),

88+

}).loadPlugins,

8589

).toBe(false);

8690

expect(

87-

shouldLoadPluginsForCommandPath({

91+

resolvePolicy({

8892

commandPath: ["message", "send"],

89-

jsonOutputMode: false,

90-

}),

93+

}).loadPlugins,

9194

).toBe(false);

9295

expect(

93-

shouldLoadPluginsForCommandPath({

96+

resolvePolicy({

9497

commandPath: ["message", "send"],

9598

jsonOutputMode: true,

96-

}),

99+

}).loadPlugins,

97100

).toBe(false);

98101

expect(

99-

shouldLoadPluginsForCommandPath({

102+

resolvePolicy({

100103

argv: ["node", "openclaw", "agent", "--json"],

101104

commandPath: ["agent"],

102105

jsonOutputMode: true,

103-

}),

106+

}).loadPlugins,

104107

).toBe(false);

105108

expect(

106-

shouldLoadPluginsForCommandPath({

109+

resolvePolicy({

107110

argv: ["node", "openclaw", "agent", "--json", "--local"],

108111

commandPath: ["agent"],

109112

jsonOutputMode: true,

110-

}),

113+

}).loadPlugins,

111114

).toBe(true);

112115

expect(

113-

shouldLoadPluginsForCommandPath({

116+

resolvePolicy({

114117

argv: ["node", "openclaw", "agent"],

115118

commandPath: ["agent"],

116-

jsonOutputMode: false,

117-

}),

119+

}).loadPlugins,

118120

).toBe(true);

119121

expect(

120-

shouldLoadPluginsForCommandPath({

122+

resolvePolicy({

121123

commandPath: ["agents"],

122-

jsonOutputMode: false,

123-

}),

124+

}).loadPlugins,

124125

).toBe(false);

125126

expect(

126-

shouldLoadPluginsForCommandPath({

127+

resolvePolicy({

127128

commandPath: ["agents", "list"],

128-

jsonOutputMode: false,

129-

}),

129+

}).loadPlugins,

130130

).toBe(false);

131131

expect(

132-

shouldLoadPluginsForCommandPath({

132+

resolvePolicy({

133133

commandPath: ["agents", "list"],

134134

jsonOutputMode: true,

135-

}),

135+

}).loadPlugins,

136136

).toBe(false);

137137

expect(

138-

shouldLoadPluginsForCommandPath({

138+

resolvePolicy({

139139

commandPath: ["agents", "bind"],

140-

jsonOutputMode: false,

141-

}),

140+

}).loadPlugins,

142141

).toBe(false);

143142

expect(

144-

shouldLoadPluginsForCommandPath({

143+

resolvePolicy({

145144

commandPath: ["agents", "bindings"],

146145

jsonOutputMode: true,

147-

}),

146+

}).loadPlugins,

148147

).toBe(false);

149148

expect(

150-

shouldLoadPluginsForCommandPath({

149+

resolvePolicy({

151150

commandPath: ["agents", "unbind"],

152-

jsonOutputMode: false,

153-

}),

151+

}).loadPlugins,

154152

).toBe(false);

155153

expect(

156-

shouldLoadPluginsForCommandPath({

154+

resolvePolicy({

157155

commandPath: ["agents", "set-identity"],

158-

jsonOutputMode: false,

159-

}),

156+

}).loadPlugins,

160157

).toBe(false);

161158

expect(

162-

shouldLoadPluginsForCommandPath({

159+

resolvePolicy({

163160

commandPath: ["agents", "delete"],

164161

jsonOutputMode: true,

165-

}),

162+

}).loadPlugins,

166163

).toBe(false);

167164

});

168165169166

it("matches banner suppression policy", () => {

170-

expect(shouldHideCliBannerForCommandPath(["update", "status"])).toBe(true);

171-

expect(shouldHideCliBannerForCommandPath(["completion"])).toBe(true);

167+

expect(resolvePolicy({ commandPath: ["update", "status"], env: {} }).hideBanner).toBe(true);

168+

expect(resolvePolicy({ commandPath: ["completion"], env: {} }).hideBanner).toBe(true);

172169

expect(

173-

shouldHideCliBannerForCommandPath(["status"], {

174-

...process.env,

175-

OPENCLAW_HIDE_BANNER: "1",

176-

}),

170+

resolvePolicy({

171+

commandPath: ["status"],

172+

env: {

173+

...process.env,

174+

OPENCLAW_HIDE_BANNER: "1",

175+

},

176+

}).hideBanner,

177177

).toBe(true);

178-

expect(shouldHideCliBannerForCommandPath(["status"], {})).toBe(false);

178+

expect(resolvePolicy({ commandPath: ["status"], env: {} }).hideBanner).toBe(false);

179179

});

180180181181

it("uses process env banner suppression when startup env is omitted", () => {

@@ -205,16 +205,6 @@ describe("command-startup-policy", () => {

205205

}

206206

});

207207208-

it("matches CLI PATH bootstrap policy", () => {

209-

expect(shouldEnsureCliPathForCommandPath(["status"])).toBe(false);

210-

expect(shouldEnsureCliPathForCommandPath(["sessions"])).toBe(false);

211-

expect(shouldEnsureCliPathForCommandPath(["config", "get"])).toBe(false);

212-

expect(shouldEnsureCliPathForCommandPath(["models", "status"])).toBe(false);

213-

expect(shouldEnsureCliPathForCommandPath(["tools", "effective"])).toBe(false);

214-

expect(shouldEnsureCliPathForCommandPath(["message", "send"])).toBe(true);

215-

expect(shouldEnsureCliPathForCommandPath([])).toBe(true);

216-

});

217-218208

it("aggregates startup policy for commander and route-first callers", () => {

219209

expect(

220210

resolveCliStartupPolicy({