fix provider thinking compatibility

- claude: handle DeepSeek thinking blocks defensively, unsigned placeholder; fix kept-vs-seen thinking detection
- gemini: clamp unsupported max/xhigh thinking levels to high
- testUtils: probe Cloud Code Assist for gemini-cli/antigravity with 401 refresh retry
- tests: add translator regression coverage

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Mink Nguyen
2026-06-26 10:12:48 +07:00
committed by decolua
co-authored by Cursor
parent cb65a45e1f
commit c4f80d30d8
5 changed files with 140 additions and 17 deletions
+25 -3
View File
@@ -3,6 +3,7 @@ import { describe, it, expect } from "vitest";
import "./registerAll.js";
import { translateRequest } from "../../open-sse/translator/index.js";
import { FORMATS } from "../../open-sse/translator/formats.js";
import { prepareClaudeRequest } from "../../open-sse/translator/formats/claude.js";
// anthropic-compatible provider so prepareClaudeRequest runs the openai→claude path
const T = (body) =>
@@ -16,9 +17,7 @@ describe("OpenAI → Claude context mapping", () => {
expect(JSON.stringify(out.system), "Claude Code prompt injected").not.toContain("Claude Code");
});
// openai-to-claude.js:268-273 — assistant.reasoning_content not mapped to a thinking block
// KNOWN BUG
it.fails("assistant reasoning_content becomes a thinking block", () => {
it("assistant reasoning_content becomes a thinking block", () => {
const out = T({
messages: [
{ role: "user", content: "q" },
@@ -27,6 +26,11 @@ describe("OpenAI → Claude context mapping", () => {
],
});
expect(JSON.stringify(out), "reasoning_content lost").toContain("my hidden reasoning");
const assistant = out.messages.find((m) => m.role === "assistant");
expect(assistant.content[0]).toEqual(expect.objectContaining({
type: "thinking",
thinking: "my hidden reasoning",
}));
});
// openai-to-claude.js:298 — tool_choice "none" mapped to {type:"auto"} (loses "do not call" intent)
@@ -62,4 +66,22 @@ describe("OpenAI → Claude context mapping", () => {
});
expect(JSON.stringify(out), "remote image dropped").toContain("pic.png");
});
it("DeepSeek Claude transport adds a thinking placeholder before tool_use in thinking mode", () => {
const out = prepareClaudeRequest({
model: "deepseek-v4-pro",
thinking: { type: "enabled" },
messages: [
{ role: "user", content: [{ type: "text", text: "q" }] },
{ role: "assistant", content: [{ type: "tool_use", id: "toolu_1", name: "Read", input: { file_path: "x" } }] },
{ role: "user", content: [{ type: "tool_result", tool_use_id: "toolu_1", content: "ok" }] },
{ role: "user", content: [{ type: "text", text: "continue" }] },
],
}, "deepseek");
const assistant = out.messages.find((m) => m.role === "assistant");
expect(assistant.content[0]).toEqual({ type: "thinking", thinking: "." });
expect(assistant.content[1]).toEqual(expect.objectContaining({ type: "tool_use", id: "toolu_1" }));
expect(assistant.content[0].signature).toBeUndefined();
});
});