diff --git a/packages/coding-agent/src/core/agent-session.ts b/packages/coding-agent/src/core/agent-session.ts index b75febf0..fe450e5e 100644 --- a/packages/coding-agent/src/core/agent-session.ts +++ b/packages/coding-agent/src/core/agent-session.ts @@ -40,6 +40,7 @@ import { prepareCompaction, shouldCompact, } from "./compaction/index.js"; +import { DEFAULT_THINKING_LEVEL } from "./defaults.js"; import { exportSessionToHtml, type ToolHtmlRenderer } from "./export-html/index.js"; import { createToolHtmlRenderer } from "./export-html/tool-renderer.js"; import { @@ -1094,6 +1095,8 @@ export class AgentSession { this._followUpMessages = []; this._pendingNextTurnMessages = []; + this.sessionManager.appendThinkingLevelChange(this.thinkingLevel); + // Run setup callback if provided (e.g., to append initial messages) if (options?.setup) { await options.setup(this.sessionManager); @@ -2303,9 +2306,19 @@ export class AgentSession { } } - // Restore thinking level if saved (setThinkingLevel clamps to model capabilities) - if (sessionContext.thinkingLevel) { + const hasThinkingEntry = this.sessionManager.getBranch().some((entry) => entry.type === "thinking_level_change"); + const defaultThinkingLevel = this.settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL; + + if (hasThinkingEntry) { + // Restore thinking level if saved (setThinkingLevel clamps to model capabilities) this.setThinkingLevel(sessionContext.thinkingLevel as ThinkingLevel); + } else { + const availableLevels = this.getAvailableThinkingLevels(); + const effectiveLevel = availableLevels.includes(defaultThinkingLevel) + ? defaultThinkingLevel + : this._clampThinkingLevel(defaultThinkingLevel, availableLevels); + this.agent.setThinkingLevel(effectiveLevel); + this.sessionManager.appendThinkingLevelChange(effectiveLevel); } this._reconnectToAgent(); diff --git a/packages/coding-agent/src/core/sdk.ts b/packages/coding-agent/src/core/sdk.ts index beca4417..6b191d2c 100644 --- a/packages/coding-agent/src/core/sdk.ts +++ b/packages/coding-agent/src/core/sdk.ts @@ -185,6 +185,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {} // Check if session has existing data to restore const existingSession = sessionManager.buildSessionContext(); const hasExistingSession = existingSession.messages.length > 0; + const hasThinkingEntry = sessionManager.getBranch().some((entry) => entry.type === "thinking_level_change"); let model = options.model; let modelFallbackMessage: string | undefined; @@ -222,7 +223,9 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {} // If session has data, restore thinking level from it if (thinkingLevel === undefined && hasExistingSession) { - thinkingLevel = existingSession.thinkingLevel as ThinkingLevel; + thinkingLevel = hasThinkingEntry + ? (existingSession.thinkingLevel as ThinkingLevel) + : (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL); } // Fall back to settings default @@ -329,6 +332,9 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {} // Restore messages if session has existing data if (hasExistingSession) { agent.replaceMessages(existingSession.messages); + if (!hasThinkingEntry) { + sessionManager.appendThinkingLevelChange(thinkingLevel); + } } else { // Save initial model and thinking level for new sessions so they can be restored on resume if (model) {