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

推荐订阅源

GbyAI
GbyAI
Martin Fowler
Martin Fowler
I
InfoQ
腾讯CDC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
爱范儿
爱范儿
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
D
Docker
博客园 - 三生石上(FineUI控件)
Y
Y Combinator Blog
博客园 - Franky
Engineering at Meta
Engineering at Meta
B
Blog
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
V
Visual Studio 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
test: tighten small command matcher assertions · openclaw...
steipete · 2026-05-10 · via Recent Commits to openclaw:main
Original file line numberDiff line numberDiff line change

@@ -56,7 +56,12 @@ describe("backupCreateCommand atomic archive write", () => {

5656

}

5757
5858

async function expectPathMissing(targetPath: string): Promise<void> {

59-

await expect(fs.access(targetPath)).rejects.toMatchObject({ code: "ENOENT" });

59+

try {

60+

await fs.access(targetPath);

61+

throw new Error(`expected missing path: ${targetPath}`);

62+

} catch (error) {

63+

expect((error as NodeJS.ErrnoException).code).toBe("ENOENT");

64+

}

6065

}

6166
6267

it("does not leave a partial final archive behind when tar creation fails", async () => {

Original file line numberDiff line numberDiff line change

@@ -123,13 +123,11 @@ describe("healthCommand", () => {

123123

runtime as never,

124124

);

125125
126-

expect(callGatewayMock).toHaveBeenCalledWith(

127-

expect.objectContaining({

128-

method: "health",

129-

token: "setup-token",

130-

password: "setup-password",

131-

}),

132-

);

126+

expect(callGatewayMock).toHaveBeenCalledOnce();

127+

const [gatewayRequest] = callGatewayMock.mock.calls[0] ?? [];

128+

expect(gatewayRequest?.method).toBe("health");

129+

expect(gatewayRequest?.token).toBe("setup-token");

130+

expect(gatewayRequest?.password).toBe("setup-password");

133131

});

134132
135133

it("formats per-account probe timings", () => {

Original file line numberDiff line numberDiff line change

@@ -44,21 +44,15 @@ describe("command control-plane plugin discovery", () => {

4444

const cfg = createColdPluginConfig(plugin.rootDir, plugin.pluginId);

4545

const env = createColdPluginHermeticEnv(workspaceDir);

4646
47-

expect(

48-

buildAuthChoiceOptions({

49-

store: {} as never,

50-

includeSkip: false,

51-

config: cfg,

52-

workspaceDir,

53-

env,

54-

}),

55-

).toContainEqual(

56-

expect.objectContaining({

57-

value: plugin.authChoiceId,

58-

label: "Cold Provider API key",

59-

groupId: plugin.providerId,

60-

}),

61-

);

47+

const authChoice = buildAuthChoiceOptions({

48+

store: {} as never,

49+

includeSkip: false,

50+

config: cfg,

51+

workspaceDir,

52+

env,

53+

}).find((choice) => choice.value === plugin.authChoiceId);

54+

expect(authChoice?.label).toBe("Cold Provider API key");

55+

expect(authChoice?.groupId).toBe(plugin.providerId);

6256

expect(

6357

formatAuthChoiceChoicesForCli({

6458

config: cfg,

Original file line numberDiff line numberDiff line change

@@ -84,9 +84,9 @@ describe("sandbox explain command", () => {

8484

} as unknown as Parameters<typeof sandboxExplainCommand>[1]);

8585
8686

const parsed = JSON.parse(logs.join(""));

87-

expect(parsed.sandbox.tools.allow).toEqual(

88-

expect.arrayContaining(["browser", "message", "tts"]),

89-

);

87+

expect(parsed.sandbox.tools.allow).toContain("browser");

88+

expect(parsed.sandbox.tools.allow).toContain("message");

89+

expect(parsed.sandbox.tools.allow).toContain("tts");

9090

expect(parsed.sandbox.tools.deny).not.toContain("browser");

9191

expect(parsed.sandbox.tools.sources.allow).toEqual({

9292

source: "agent",

Original file line numberDiff line numberDiff line change

@@ -8,9 +8,11 @@ function createSetupDeps(home: string) {

88

const configPath = path.join(home, ".openclaw", "openclaw.json");

99

return {

1010

createConfigIO: () => ({ configPath }),

11-

ensureAgentWorkspace: vi.fn(async (params?: { dir?: string }) => ({

12-

dir: params?.dir ?? path.join(home, ".openclaw", "workspace"),

13-

})),

11+

ensureAgentWorkspace: vi.fn(

12+

async (params?: { dir?: string; skipOptionalBootstrapFiles?: string[] }) => ({

13+

dir: params?.dir ?? path.join(home, ".openclaw", "workspace"),

14+

}),

15+

),

1416

formatConfigPath: (value: string) => value,

1517

logConfigUpdated: vi.fn(

1618

(runtime: { log: (message: string) => void }, opts: { path?: string; suffix?: string }) => {

@@ -132,12 +134,10 @@ describe("setupCommand", () => {

132134
133135

await setupCommand(undefined, runtime, deps);

134136
135-

expect(deps.ensureAgentWorkspace).toHaveBeenCalledWith(

136-

expect.objectContaining({

137-

dir: workspace,

138-

skipOptionalBootstrapFiles: ["IDENTITY.md", "USER.md"],

139-

}),

140-

);

137+

expect(deps.ensureAgentWorkspace).toHaveBeenCalledOnce();

138+

const [workspaceParams] = deps.ensureAgentWorkspace.mock.calls[0] ?? [];

139+

expect(workspaceParams?.dir).toBe(workspace);

140+

expect(workspaceParams?.skipOptionalBootstrapFiles).toEqual(["IDENTITY.md", "USER.md"]);

141141

});

142142

});

143143