Show reasoning traces: live Thinking block + persisted disclosure

New reasoning_delta event; traces persist as a display sidecar stripped from provider feeds.
Sources: compat vendors' reasoning_content and Gemini thought summaries (include_thoughts).
Live-verified on GLM via Together and Gemini 3; Gemini tool loops stay healthy.
This commit is contained in:
Rohit C Prasad
2026-07-22 16:15:11 -07:00
committed by Rohit P
parent f1eb652d61
commit 0e8b85e6f3
16 changed files with 421 additions and 67 deletions
+21
View File
@@ -648,6 +648,27 @@ export async function mockApi(page: import("@playwright/test").Page) {
});
return;
}
// A reasoning model's turn: thinking deltas tick in slowly, then the answer —
// the assistant_message carries the full trace like the real engine's payload.
if (/think hard/i.test(msg.text)) {
const thoughts = ["Weighing options. ", "Comparing tradeoffs. ", "Settling it. "];
let tick = 0;
const timer = setInterval(() => {
if (tick < thoughts.length) {
send("reasoning_delta", { text: thoughts[tick] });
tick += 1;
return;
}
clearInterval(timer);
send("assistant_delta", { text: "Decision made." });
send("assistant_message", {
text: "Decision made.",
reasoning: thoughts.join(""),
});
send("turn_done");
}, 120);
return;
}
// A turn that dies on a provider error; the follow-up {type:"retry"} recovers.
if (/fail the turn/i.test(msg.text)) {
send("error", { error: "model unreachable" });