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

推荐订阅源

H
Help Net Security
大猫的无限游戏
大猫的无限游戏
雷峰网
雷峰网
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 聂微东
V
Visual Studio Blog
爱范儿
爱范儿
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
美团技术团队
有赞技术团队
有赞技术团队
云风的 BLOG
云风的 BLOG
Google DeepMind News
Google DeepMind News
Blog — PlanetScale
Blog — PlanetScale
The Cloudflare Blog
Engineering at Meta
Engineering at Meta
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
Vercel News
Vercel News
F
Fortinet All Blogs
Last Week in AI
Last Week in AI
M
MIT News - Artificial intelligence
小众软件
小众软件
月光博客
月光博客
A
About on SuperTechFans

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: dedupe agent event mock reads · openclaw/openclaw@c...
steipete · 2026-05-13 · via Recent Commits to openclaw:main

@@ -174,17 +174,30 @@ describe("agent event handler", () => {

174174

expectRecordFields(requireRecord(payload.data, "event payload data"), fields);

175175

}

176176177+

function requireMockCall(mock: ReturnType<typeof vi.fn>, index: number, label: string) {

178+

const call = mock.mock.calls[index];

179+

if (!call) {

180+

throw new Error(`missing ${label} call ${index + 1}`);

181+

}

182+

return call;

183+

}

184+185+

function requireMockArg(

186+

mock: ReturnType<typeof vi.fn>,

187+

index: number,

188+

argIndex: number,

189+

label: string,

190+

) {

191+

return requireMockCall(mock, index, label)[argIndex];

192+

}

193+177194

function requireMockPayload(

178195

mock: ReturnType<typeof vi.fn>,

179196

index: number,

180197

payloadIndex: number,

181198

label: string,

182199

) {

183-

const call = mock.mock.calls.at(index);

184-

if (!call) {

185-

throw new Error(`missing ${label} call ${index + 1}`);

186-

}

187-

return requireRecord(call[payloadIndex], label);

200+

return requireRecord(requireMockArg(mock, index, payloadIndex, label), label);

188201

}

189202190203

const FALLBACK_LIFECYCLE_DATA = {

@@ -1022,7 +1035,7 @@ describe("agent event handler", () => {

10221035

});

1023103610241037

expect(broadcastToConnIds).toHaveBeenCalledTimes(1);

1025-

expect(broadcastToConnIds.mock.calls.at(0)?.[0]).toBe("session.tool");

1038+

expect(requireMockArg(broadcastToConnIds, 0, 0, "session tool event")).toBe("session.tool");

10261039

const sessionToolPayload = requireMockPayload(broadcastToConnIds, 0, 1, "session tool payload");

10271040

expectRecordFields(sessionToolPayload, {

10281041

runId: "run-session-tool",

@@ -1045,8 +1058,12 @@ describe("agent event handler", () => {

10451058

toolCallId: "tool-session-1",

10461059

args: { command: "echo hi" },

10471060

});

1048-

expect(broadcastToConnIds.mock.calls.at(0)?.[2]).toEqual(new Set(["conn-session"]));

1049-

expect(broadcastToConnIds.mock.calls.at(0)?.[3]).toEqual({ dropIfSlow: true });

1061+

expect(requireMockArg(broadcastToConnIds, 0, 2, "session tool recipients")).toEqual(

1062+

new Set(["conn-session"]),

1063+

);

1064+

expect(requireMockArg(broadcastToConnIds, 0, 3, "session tool options")).toEqual({

1065+

dropIfSlow: true,

1066+

});

10501067

resetAgentRunContextForTest();

10511068

});

10521069

@@ -1087,7 +1104,7 @@ describe("agent event handler", () => {

10871104

});

1088110510891106

expect(broadcastToConnIds).toHaveBeenCalledTimes(1);

1090-

expect(broadcastToConnIds.mock.calls.at(0)?.[0]).toBe("agent");

1107+

expect(requireMockArg(broadcastToConnIds, 0, 0, "run tool event")).toBe("agent");

10911108

const runToolPayload = requireMockPayload(broadcastToConnIds, 0, 1, "run tool payload");

10921109

expectRecordFields(runToolPayload, {

10931110

runId: "run-tool-owner",

@@ -1110,7 +1127,9 @@ describe("agent event handler", () => {

11101127

toolCallId: "tool-run-1",

11111128

args: { command: "echo hi" },

11121129

});

1113-

expect(broadcastToConnIds.mock.calls.at(0)?.[2]).toEqual(new Set(["conn-run"]));

1130+

expect(requireMockArg(broadcastToConnIds, 0, 2, "run tool recipients")).toEqual(

1131+

new Set(["conn-run"]),

1132+

);

11141133

resetAgentRunContextForTest();

11151134

});

11161135

@@ -1139,7 +1158,7 @@ describe("agent event handler", () => {

11391158

},

11401159

});

114111601142-

const payload = nodeSendToSession.mock.calls.at(0)?.[2] as {

1161+

const payload = requireMockArg(nodeSendToSession, 0, 2, "node tool-search payload") as {

11431162

stream?: string;

11441163

data?: { name?: string; args?: Record<string, unknown> };

11451164

};

@@ -1203,8 +1222,8 @@ describe("agent event handler", () => {

12031222

},

12041223

});

120512241206-

expect(nodeSendToSession.mock.calls.at(0)?.[0]).toBe("session-1");

1207-

expect(nodeSendToSession.mock.calls.at(0)?.[1]).toBe("agent");

1225+

expect(requireMockArg(nodeSendToSession, 0, 0, "node tool session")).toBe("session-1");

1226+

expect(requireMockArg(nodeSendToSession, 0, 1, "node tool event")).toBe("agent");

12081227

const nodeToolPayload = requireMockPayload(nodeSendToSession, 0, 2, "node tool payload");

12091228

expectRecordFields(nodeToolPayload, {

12101229

runId: "run-tool-node",

@@ -1362,8 +1381,10 @@ describe("agent event handler", () => {

13621381

},

13631382

});

136413831365-

expect(broadcastToConnIds.mock.calls.at(0)?.[0]).toBe("sessions.changed");

1366-

expectPayloadFields(broadcastToConnIds.mock.calls.at(0)?.[1], {

1384+

expect(requireMockArg(broadcastToConnIds, 0, 0, "sessions changed event")).toBe(

1385+

"sessions.changed",

1386+

);

1387+

expectPayloadFields(requireMockArg(broadcastToConnIds, 0, 1, "sessions changed payload"), {

13671388

sessionKey: "session-finished",

13681389

phase: "end",

13691390

spawnedBy: "agent:main:main",

@@ -1382,8 +1403,12 @@ describe("agent event handler", () => {

13821403

estimatedCostUsd: 0.12,

13831404

lastThreadId: 42,

13841405

});

1385-

expect(broadcastToConnIds.mock.calls.at(0)?.[2]).toEqual(new Set(["conn-session"]));

1386-

expect(broadcastToConnIds.mock.calls.at(0)?.[3]).toEqual({ dropIfSlow: true });

1406+

expect(requireMockArg(broadcastToConnIds, 0, 2, "sessions changed recipients")).toEqual(

1407+

new Set(["conn-session"]),

1408+

);

1409+

expect(requireMockArg(broadcastToConnIds, 0, 3, "sessions changed options")).toEqual({

1410+

dropIfSlow: true,

1411+

});

13871412

});

1388141313891414

it("keeps tool output for Control UI recipients when verbose is on", () => {

@@ -1409,7 +1434,7 @@ describe("agent event handler", () => {

14091434

});

1410143514111436

expect(broadcastToConnIds).toHaveBeenCalledTimes(1);

1412-

const payload = broadcastToConnIds.mock.calls.at(0)?.[1] as {

1437+

const payload = requireMockArg(broadcastToConnIds, 0, 1, "tool output payload") as {

14131438

data?: Record<string, unknown>;

14141439

};

14151440

expect(payload.data?.result).toEqual({ content: [{ type: "text", text: "secret" }] });

@@ -1440,7 +1465,7 @@ describe("agent event handler", () => {

14401465

});

1441146614421467

expect(broadcastToConnIds).toHaveBeenCalledTimes(1);

1443-

const payload = broadcastToConnIds.mock.calls.at(0)?.[1] as {

1468+

const payload = requireMockArg(broadcastToConnIds, 0, 1, "full tool output payload") as {

14441469

data?: Record<string, unknown>;

14451470

};

14461471

expect(payload.data?.result).toEqual(result);

@@ -1723,7 +1748,7 @@ describe("agent event handler", () => {

17231748

expect(broadcast.mock.calls.some(([event]) => event === "agent")).toBe(false);

17241749

expect(nodeSendToSession).not.toHaveBeenCalled();

17251750

const persistParams = requireRecord(

1726-

persistGatewaySessionLifecycleEventMock.mock.calls.at(0)?.[0],

1751+

requireMockArg(persistGatewaySessionLifecycleEventMock, 0, 0, "persist lifecycle params"),

17271752

"persist lifecycle params",

17281753

);

17291754

expect(persistParams.sessionKey).toBe("session-hidden");

@@ -1776,7 +1801,9 @@ describe("agent event handler", () => {

17761801

});

1777180217781803

expect(broadcastToConnIds).toHaveBeenCalledTimes(1);

1779-

const payload = broadcastToConnIds.mock.calls.at(0)?.[1] as { runId?: string };

1804+

const payload = requireMockArg(broadcastToConnIds, 0, 1, "remapped tool payload") as {

1805+

runId?: string;

1806+

};

17801807

expect(payload.runId).toBe("run-tool-client");

17811808

resetAgentRunContextForTest();

17821809

});