{"content":"Dev journal — feat/thinking-tool-render (f44d8daf): DSH thinking now renders as per-round Think rows interleaved with tool calls, matching the deepseek-harness webui timeline (think → tools → think → tools → reply). Root cause: DshEventMapper held one streaming ThinkingBlock across every tool round of a turn (thinkingHeld), stranding a single ever-scrolling Think row above the whole tool pile. Removed the cross-round hold: each assistant step finalizes its own settled Think message at assistant/message; the next round's reasoning opens a fresh row below the tool rows; the off-mode textRidesThinking path settles per round the same way. Added the lightbulb icon to the Think row for DSH ReasoningRow parity. Rewrote 4 mapper tests to pin the new interleaved semantics — 35/35 green; renderer/echo tests, tsc, eslint clean. Pre-existing fixture failure (coworkDshIntegration: store.getSessionWithoutMessages) reproduced on main, unrelated.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}