From 7eae0a7d30da907f686ae3eea61aec01fce0f773 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Sun, 1 Feb 2026 00:14:49 +0100 Subject: [PATCH] fix(coding-agent): make setThinkingLevel idempotent switchSession() was appending spurious thinking_level_change entries to session log on resume because setThinkingLevel() unconditionally persisted. Now only persists if the level actually changes. fixes #1118 --- packages/coding-agent/CHANGELOG.md | 1 + packages/coding-agent/src/core/agent-session.ts | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 2c6d4bdf..5366ead3 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -8,6 +8,7 @@ ### Fixed +- Fixed `switchSession()` appending spurious `thinking_level_change` entry to session log on resume. `setThinkingLevel()` is now idempotent. ([#1118](https://github.com/badlogic/pi-mono/issues/1118)) - Fixed clipboard image paste on WSL2/WSLg writing invalid PNG files when clipboard provides `image/bmp` format. BMP images are now converted to PNG before saving. ([#1112](https://github.com/badlogic/pi-mono/pull/1112) by [@lightningRalf](https://github.com/lightningRalf)) ## [0.50.7] - 2026-01-31 diff --git a/packages/coding-agent/src/core/agent-session.ts b/packages/coding-agent/src/core/agent-session.ts index 21caa860..f85ce35c 100644 --- a/packages/coding-agent/src/core/agent-session.ts +++ b/packages/coding-agent/src/core/agent-session.ts @@ -1236,14 +1236,21 @@ export class AgentSession { /** * Set thinking level. * Clamps to model capabilities based on available thinking levels. - * Saves to session and settings. + * Saves to session and settings only if the level actually changes. */ setThinkingLevel(level: ThinkingLevel): void { const availableLevels = this.getAvailableThinkingLevels(); const effectiveLevel = availableLevels.includes(level) ? level : this._clampThinkingLevel(level, availableLevels); + + // Only persist if actually changing + const isChanging = effectiveLevel !== this.agent.state.thinkingLevel; + this.agent.setThinkingLevel(effectiveLevel); - this.sessionManager.appendThinkingLevelChange(effectiveLevel); - this.settingsManager.setDefaultThinkingLevel(effectiveLevel); + + if (isChanging) { + this.sessionManager.appendThinkingLevelChange(effectiveLevel); + this.settingsManager.setDefaultThinkingLevel(effectiveLevel); + } } /**