Send display: summarized so Claude thinking renders (#4355)

The Agent SDK request never set thinking.display, so on Opus 4.7 and
later the API default of "omitted" applied and every thinking block
arrived with empty text. Paseo drops empty blocks, so Claude agents
never produced reasoning timeline items.

Closes #4342
This commit is contained in:
Jared
2026-10-04 09:15:14 +02:00
committed by GitHub
parent 8216e86ecb
commit cc8fe41e28
2 changed files with 12 additions and 4 deletions
@@ -1009,7 +1009,7 @@ describe("ClaudeAgentSession features", () => {
expect(queryFactory.mock.calls[0]?.[0].options).toMatchObject({
effort: "xhigh",
thinking: { type: "adaptive" },
thinking: { type: "adaptive", display: "summarized" },
settings: { ultracode: true },
});
@@ -1223,7 +1223,7 @@ describe("ClaudeAgentSession features", () => {
test.each([
["supported model", "claude-opus-4-8", { type: "disabled" }, undefined],
["unsupported model", "claude-fable-5", { type: "adaptive" }, "high"],
["unsupported model", "claude-fable-5", { type: "adaptive", display: "summarized" }, "high"],
["custom model", "openrouter/anthropic/claude-opus-4-8", undefined, undefined],
["provider default", null, undefined, undefined],
])("reconciles Off when switching to a %s", async (_label, modelId, thinking, effort) => {
@@ -3244,10 +3244,18 @@ class ClaudeAgentSession implements AgentSession {
return { thinking: { type: "disabled" }, effort: undefined, ultracode: false };
}
if (thinkingOptionId === CLAUDE_ULTRACODE_THINKING_OPTION_ID) {
return { thinking: { type: "adaptive" }, effort: "xhigh", ultracode: true };
return {
thinking: { type: "adaptive", display: "summarized" },
effort: "xhigh",
ultracode: true,
};
}
if (thinkingOptionId && isClaudeThinkingEffort(thinkingOptionId)) {
return { thinking: { type: "adaptive" }, effort: thinkingOptionId, ultracode: false };
return {
thinking: { type: "adaptive", display: "summarized" },
effort: thinkingOptionId,
ultracode: false,
};
}
return { thinking: undefined, effort: undefined, ultracode: false };
}