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

推荐订阅源

Martin Fowler
Martin Fowler
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
博客园_首页
宝玉的分享
宝玉的分享
S
SegmentFault 最新的问题
Jina AI
Jina AI
Hugging Face - Blog
Hugging Face - Blog
V
Visual Studio Blog
美团技术团队
IT之家
IT之家
罗磊的独立博客
Blog — PlanetScale
Blog — PlanetScale
Google DeepMind News
Google DeepMind News
月光博客
月光博客
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
博客园 - 叶小钗
M
MIT News - Artificial intelligence
B
Blog RSS Feed
有赞技术团队
有赞技术团队
Y
Y Combinator 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
refactor(cli): remove stale path policy helpers · opencla...
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({