



























@@ -95,6 +95,13 @@ function requireFirstCallArg(mock: { mock: { calls: unknown[][] } }, label: stri
9595return arg;
9696}
979798+function requireRecord(value: unknown, label: string): Record<string, unknown> {
99+if (!value || typeof value !== "object" || Array.isArray(value)) {
100+throw new Error(`expected ${label} object`);
101+}
102+return value as Record<string, unknown>;
103+}
104+98105function createGatewayTimeoutError() {
99106const err = new Error("gateway timeout after 90000ms");
100107err.name = "GatewayTransportError";
@@ -214,12 +221,9 @@ describe("agentCliCommand", () => {
214221await agentCliCommand({ message: "hi", to: "+1555", model: "ollama/qwen3.5:9b" }, runtime);
215222216223expect(callGateway).toHaveBeenCalledTimes(1);
217-const request = requireFirstCallArg(callGateway, "gateway");
218-expect(request).toMatchObject({
219-params: {
220-model: "ollama/qwen3.5:9b",
221-},
222-});
224+const request = requireRecord(requireFirstCallArg(callGateway, "gateway"), "gateway request");
225+const params = requireRecord(request.params, "gateway request params");
226+expect(params.model).toBe("ollama/qwen3.5:9b");
223227});
224228});
225229@@ -254,13 +258,16 @@ describe("agentCliCommand", () => {
254258255259expect(callGateway).toHaveBeenCalledTimes(1);
256260expect(agentCommand).toHaveBeenCalledTimes(1);
257-const fallbackOpts = requireFirstCallArg(agentCommand, "embedded agent");
258-expect(fallbackOpts).toMatchObject({
259-resultMetaOverrides: {
260-transport: "embedded",
261-fallbackFrom: "gateway",
262-},
263-});
261+const fallbackOpts = requireRecord(
262+requireFirstCallArg(agentCommand, "embedded agent"),
263+"embedded agent options",
264+);
265+const resultMetaOverrides = requireRecord(
266+fallbackOpts.resultMetaOverrides,
267+"fallback metadata",
268+);
269+expect(resultMetaOverrides.transport).toBe("embedded");
270+expect(resultMetaOverrides.fallbackFrom).toBe("gateway");
264271expect(runtime.error).toHaveBeenCalledWith(
265272expect.stringContaining("EMBEDDED FALLBACK: Gateway agent failed"),
266273);
@@ -303,23 +310,25 @@ describe("agentCliCommand", () => {
303310304311expect(callGateway).toHaveBeenCalledTimes(1);
305312expect(agentCommand).toHaveBeenCalledTimes(1);
306-const fallbackOpts = requireFirstCallArg(agentCommand, "embedded agent") as {
307-sessionId?: string;
308-sessionKey?: string;
309-runId?: string;
310-resultMetaOverrides?: unknown;
311-};
312-expect(fallbackOpts.sessionId).toMatch(/^gateway-fallback-/);
313-expect(fallbackOpts.sessionId).not.toBe("locked-session");
314-expect(fallbackOpts.sessionKey).toBe(`agent:main:explicit:${fallbackOpts.sessionId}`);
315-expect(fallbackOpts.runId).toBe(fallbackOpts.sessionId);
316-expect(fallbackOpts.resultMetaOverrides).toMatchObject({
317-transport: "embedded",
318-fallbackFrom: "gateway",
319-fallbackReason: "gateway_timeout",
320-fallbackSessionId: fallbackOpts.sessionId,
321-fallbackSessionKey: fallbackOpts.sessionKey,
322-});
313+const fallbackOpts = requireRecord(
314+requireFirstCallArg(agentCommand, "embedded agent"),
315+"embedded agent options",
316+);
317+const fallbackSessionId = String(fallbackOpts.sessionId);
318+const fallbackSessionKey = String(fallbackOpts.sessionKey);
319+expect(fallbackSessionId).toMatch(/^gateway-fallback-/);
320+expect(fallbackSessionId).not.toBe("locked-session");
321+expect(fallbackSessionKey).toBe(`agent:main:explicit:${fallbackSessionId}`);
322+expect(fallbackOpts.runId).toBe(fallbackSessionId);
323+const resultMetaOverrides = requireRecord(
324+fallbackOpts.resultMetaOverrides,
325+"fallback metadata",
326+);
327+expect(resultMetaOverrides.transport).toBe("embedded");
328+expect(resultMetaOverrides.fallbackFrom).toBe("gateway");
329+expect(resultMetaOverrides.fallbackReason).toBe("gateway_timeout");
330+expect(resultMetaOverrides.fallbackSessionId).toBe(fallbackSessionId);
331+expect(resultMetaOverrides.fallbackSessionKey).toBe(fallbackSessionKey);
323332expect(runtime.error).toHaveBeenCalledWith(
324333expect.stringContaining(
325334"Gateway agent timed out; running embedded agent with fresh session",
@@ -388,35 +397,33 @@ describe("agentCliCommand", () => {
388397const result = await agentCliCommand({ message: "hi", to: "+1555", json: true }, jsonRuntime);
389398390399expect(agentCommand).toHaveBeenCalledTimes(1);
391-const fallbackOpts = requireFirstCallArg(agentCommand, "embedded agent");
392-expect(fallbackOpts).toMatchObject({
393-resultMetaOverrides: {
394-transport: "embedded",
395-fallbackFrom: "gateway",
396-},
397-});
400+const fallbackOpts = requireRecord(
401+requireFirstCallArg(agentCommand, "embedded agent"),
402+"embedded agent options",
403+);
404+const resultMetaOverrides = requireRecord(
405+fallbackOpts.resultMetaOverrides,
406+"fallback metadata",
407+);
408+expect(resultMetaOverrides.transport).toBe("embedded");
409+expect(resultMetaOverrides.fallbackFrom).toBe("gateway");
398410expect(jsonRuntime.error).toHaveBeenCalledWith(
399411expect.stringContaining("EMBEDDED FALLBACK: Gateway agent failed"),
400412);
401413expect(loggingState.forceConsoleToStderr).toBe(true);
402414expect(jsonRuntime.log).toHaveBeenCalledTimes(1);
403415const jsonPayload = requireFirstCallArg(jsonRuntime.log, "json runtime log");
404-const payload = JSON.parse(String(jsonPayload));
405-expect(payload).toMatchObject({
406-payloads: [{ text: "local" }],
407-meta: {
408-durationMs: 1,
409-transport: "embedded",
410-fallbackFrom: "gateway",
411-},
412-});
413-expect(result).toMatchObject({
414-meta: {
415-durationMs: 1,
416-transport: "embedded",
417-fallbackFrom: "gateway",
418-},
419-});
416+const payload = requireRecord(JSON.parse(String(jsonPayload)), "json log payload");
417+expect(payload.payloads).toEqual([{ text: "local" }]);
418+const payloadMeta = requireRecord(payload.meta, "json log metadata");
419+expect(payloadMeta.durationMs).toBe(1);
420+expect(payloadMeta.transport).toBe("embedded");
421+expect(payloadMeta.fallbackFrom).toBe("gateway");
422+const resultRecord = requireRecord(result, "command result");
423+const resultMeta = requireRecord(resultRecord.meta, "command result metadata");
424+expect(resultMeta.durationMs).toBe(1);
425+expect(resultMeta.transport).toBe("embedded");
426+expect(resultMeta.fallbackFrom).toBe("gateway");
420427});
421428});
422429@@ -435,11 +442,12 @@ describe("agentCliCommand", () => {
435442436443expect(callGateway).not.toHaveBeenCalled();
437444expect(agentCommand).toHaveBeenCalledTimes(1);
438-const localOpts = requireFirstCallArg(agentCommand, "embedded agent");
439-expect(localOpts).toMatchObject({
440-cleanupBundleMcpOnRunEnd: true,
441-cleanupCliLiveSessionOnRunEnd: true,
442-});
445+const localOpts = requireRecord(
446+requireFirstCallArg(agentCommand, "embedded agent"),
447+"embedded agent options",
448+);
449+expect(localOpts.cleanupBundleMcpOnRunEnd).toBe(true);
450+expect(localOpts.cleanupCliLiveSessionOnRunEnd).toBe(true);
443451expect(localOpts).not.toHaveProperty("resultMetaOverrides");
444452expect(runtime.log).toHaveBeenCalledWith("local");
445453});
@@ -453,11 +461,12 @@ describe("agentCliCommand", () => {
453461await agentCliCommand({ message: "hi", to: "+1555" }, runtime);
454462455463expect(agentCommand).toHaveBeenCalledTimes(1);
456-const fallbackOpts = requireFirstCallArg(agentCommand, "embedded agent");
457-expect(fallbackOpts).toMatchObject({
458-cleanupBundleMcpOnRunEnd: true,
459-cleanupCliLiveSessionOnRunEnd: true,
460-});
464+const fallbackOpts = requireRecord(
465+requireFirstCallArg(agentCommand, "embedded agent"),
466+"embedded agent options",
467+);
468+expect(fallbackOpts.cleanupBundleMcpOnRunEnd).toBe(true);
469+expect(fallbackOpts.cleanupCliLiveSessionOnRunEnd).toBe(true);
461470});
462471});
463472});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。