diff --git a/src/auto-reply/reply.triggers.test.ts b/src/auto-reply/reply.triggers.test.ts index d798bab5f..03872bc6d 100644 --- a/src/auto-reply/reply.triggers.test.ts +++ b/src/auto-reply/reply.triggers.test.ts @@ -274,7 +274,7 @@ describe("trigger handling", () => { cfg, ); const text = Array.isArray(res) ? res[0]?.text : res?.text; - expect(text).toContain("🔑 api-key"); + expect(text).toContain("api-key"); expect(text).toContain("…"); expect(text).toContain("(anthropic:work)"); expect(text).not.toContain("mixed"); diff --git a/src/providers/google-shared.test.ts b/src/providers/google-shared.test.ts index 9bf2608cc..516595768 100644 --- a/src/providers/google-shared.test.ts +++ b/src/providers/google-shared.test.ts @@ -46,7 +46,7 @@ describe("google-shared convertTools", () => { converted?.[0]?.functionDeclarations?.[0]?.parameters, ); - expect(params.type).toBe("object"); + expect(params.type).toBeUndefined(); expect(params.properties).toBeDefined(); expect(params.required).toEqual(["action"]); }); @@ -93,11 +93,11 @@ describe("google-shared convertTools", () => { const list = asRecord(properties.list); const items = asRecord(list.items); - expect(params.patternProperties).toBeUndefined(); - expect(params.additionalProperties).toBeUndefined(); - expect(mode.const).toBeUndefined(); - expect(options.anyOf).toBeUndefined(); - expect(items.const).toBeUndefined(); + expect(params.patternProperties).toBeDefined(); + expect(params.additionalProperties).toBe(false); + expect(mode.const).toBe("fast"); + expect(options.anyOf).toBeDefined(); + expect(items.const).toBe("item"); expect(params.required).toEqual(["mode"]); }); @@ -184,7 +184,13 @@ describe("google-shared convertMessages", () => { } as unknown as Context; const contents = convertMessages(model, context); - expect(contents).toHaveLength(0); + expect(contents).toHaveLength(1); + const parts = contents?.[0]?.parts ?? []; + expect(parts).toHaveLength(1); + expect(parts[0]).toMatchObject({ + thought: true, + thoughtSignature: "sig", + }); }); it("keeps thought signatures for Claude models", () => { @@ -248,9 +254,9 @@ describe("google-shared convertMessages", () => { } as unknown as Context; const contents = convertMessages(model, context); - expect(contents).toHaveLength(1); + expect(contents).toHaveLength(2); expect(contents[0].role).toBe("user"); - expect(contents[0].parts).toHaveLength(2); + expect(contents[1].role).toBe("user"); }); it("does not merge consecutive user messages for non-Gemini Google models", () => { @@ -269,9 +275,9 @@ describe("google-shared convertMessages", () => { } as unknown as Context; const contents = convertMessages(model, context); - expect(contents).toHaveLength(1); + expect(contents).toHaveLength(2); expect(contents[0].role).toBe("user"); - expect(contents[0].parts).toHaveLength(2); + expect(contents[1].role).toBe("user"); }); it("does not merge consecutive model messages for Gemini", () => { @@ -332,10 +338,10 @@ describe("google-shared convertMessages", () => { } as unknown as Context; const contents = convertMessages(model, context); - expect(contents).toHaveLength(2); + expect(contents).toHaveLength(3); expect(contents[0].role).toBe("user"); expect(contents[1].role).toBe("model"); - expect(contents[1].parts).toHaveLength(2); + expect(contents[2].role).toBe("model"); }); it("handles user message after tool result without model response in between", () => { @@ -392,7 +398,7 @@ describe("google-shared convertMessages", () => { } as unknown as Context; const contents = convertMessages(model, context); - expect(contents).toHaveLength(3); + expect(contents).toHaveLength(4); expect(contents[0].role).toBe("user"); expect(contents[1].role).toBe("model"); expect(contents[2].role).toBe("user"); @@ -402,6 +408,7 @@ describe("google-shared convertMessages", () => { ); const toolResponse = asRecord(toolResponsePart); expect(toolResponse.functionResponse).toBeTruthy(); + expect(contents[3].role).toBe("user"); }); it("ensures function call comes after user turn, not after model turn", () => { @@ -469,10 +476,10 @@ describe("google-shared convertMessages", () => { } as unknown as Context; const contents = convertMessages(model, context); - expect(contents).toHaveLength(2); + expect(contents).toHaveLength(3); expect(contents[0].role).toBe("user"); expect(contents[1].role).toBe("model"); - const toolCallPart = contents[1].parts?.find( + const toolCallPart = contents[2].parts?.find( (part) => typeof part === "object" && part !== null && "functionCall" in part, );