




















@@ -13,6 +13,22 @@ vi.mock("openclaw/plugin-sdk/agent-harness-runtime", async (importOriginal) => (
13131414const mockCallGatewayTool = vi.mocked(callGatewayTool);
151516+function mockCall(mock: { mock: { calls: unknown[][] } }, index = 0) {
17+return mock.mock.calls.at(index);
18+}
19+20+function mockCallArg(mock: { mock: { calls: unknown[][] } }, index = 0, argIndex = 0) {
21+return mockCall(mock, index)?.at(argIndex);
22+}
23+24+function gatewayToolCall(index = 0) {
25+return mockCall(mockCallGatewayTool, index);
26+}
27+28+function gatewayToolArg(index = 0, argIndex = 0) {
29+return mockCallArg(mockCallGatewayTool, index, argIndex);
30+}
31+1632function createParams(): EmbeddedRunAttemptParams {
1733return {
1834sessionKey: "agent:main:session-1",
@@ -262,11 +278,11 @@ describe("Codex app-server elicitation bridge", () => {
262278content: null,
263279_meta: null,
264280});
265-const approvalRequestCall = mockCallGatewayTool.mock.calls[0];
281+const approvalRequestCall = gatewayToolCall();
266282expect(approvalRequestCall?.[0]).toBe("plugin.approval.request");
267283expect(approvalRequestCall?.[1]).toStrictEqual({ timeoutMs: 130_000 });
268284expect(approvalRequestCall?.[3]).toStrictEqual({ expectFinal: false });
269-const approvalRequest = approvalRequestCall?.[2] as {
285+const approvalRequest = gatewayToolArg(0, 2) as {
270286description: string;
271287};
272288expect(approvalRequest.description).toContain("App: GitHub");
@@ -314,7 +330,7 @@ describe("Codex app-server elicitation bridge", () => {
314330turnId: "turn-1",
315331});
316332317-const approvalRequest = mockCallGatewayTool.mock.calls[0]?.[2] as {
333+const approvalRequest = gatewayToolArg(0, 2) as {
318334title: string;
319335description: string;
320336};
@@ -369,7 +385,7 @@ describe("Codex app-server elicitation bridge", () => {
369385turnId: "turn-1",
370386});
371387372-const approvalRequest = mockCallGatewayTool.mock.calls[0]?.[2] as {
388+const approvalRequest = gatewayToolArg(0, 2) as {
373389title: string;
374390description: string;
375391};
@@ -427,7 +443,7 @@ describe("Codex app-server elicitation bridge", () => {
427443turnId: "turn-1",
428444});
429445430-const approvalRequest = mockCallGatewayTool.mock.calls[0]?.[2] as {
446+const approvalRequest = gatewayToolArg(0, 2) as {
431447description: string;
432448};
433449expect(approvalRequest.description).toContain("- repo: openclaw/openclaw");
@@ -471,7 +487,7 @@ describe("Codex app-server elicitation bridge", () => {
471487turnId: "turn-1",
472488});
473489474-const approvalRequest = mockCallGatewayTool.mock.calls[0]?.[2] as {
490+const approvalRequest = gatewayToolArg(0, 2) as {
475491description: string;
476492};
477493expect(approvalRequest.description).toContain("payload");
@@ -504,7 +520,7 @@ describe("Codex app-server elicitation bridge", () => {
504520turnId: "turn-1",
505521});
506522507-const approvalRequest = mockCallGatewayTool.mock.calls[0]?.[2] as {
523+const approvalRequest = gatewayToolArg(0, 2) as {
508524description: string;
509525};
510526expect(approvalRequest.description).toContain("p0");
@@ -938,11 +954,11 @@ describe("Codex app-server elicitation bridge", () => {
938954},
939955_meta: null,
940956});
941-const approvalRequestCall = mockCallGatewayTool.mock.calls[0];
957+const approvalRequestCall = gatewayToolCall();
942958expect(approvalRequestCall?.[0]).toBe("plugin.approval.request");
943959expect(approvalRequestCall?.[1]).toStrictEqual({ timeoutMs: 130_000 });
944960expect(approvalRequestCall?.[3]).toStrictEqual({ expectFinal: false });
945-const approvalRequest = approvalRequestCall?.[2] as {
961+const approvalRequest = gatewayToolArg(0, 2) as {
946962title: string;
947963description: string;
948964};
@@ -1029,7 +1045,7 @@ describe("Codex app-server elicitation bridge", () => {
10291045content: null,
10301046_meta: null,
10311047});
1032-const [warningMessage, warningDetails] = warn.mock.calls[0] ?? [];
1048+const [warningMessage, warningDetails] = mockCall(warn) ?? [];
10331049expect(warningMessage).toBe(
10341050"codex MCP approval elicitation approved without a mappable response",
10351051);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。