From 8fe2b5f010f582773c2ae0fa67c901f642aa5e57 Mon Sep 17 00:00:00 2001 From: yushen Date: Wed, 4 Feb 2026 16:00:53 +0800 Subject: [PATCH] fix(agent): resolve reasoningMode from profile config and session meta - Read reasoningMode from profile config and storedMeta when not explicitly set via options (matching thinkingLevel pattern) - Skip extractThinking() call when reasoningMode is "off" - Clean up redundant ?? undefined casts in CLI entry points Co-Authored-By: Claude Opus 4.5 --- src/agent/cli/commands/run.ts | 3 ++- src/agent/cli/interactive.ts | 2 +- src/agent/cli/non-interactive.ts | 2 +- src/agent/cli/output.ts | 4 ++-- src/agent/runner.ts | 14 +++++++++++++- 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/agent/cli/commands/run.ts b/src/agent/cli/commands/run.ts index e404013b..df7127ab 100644 --- a/src/agent/cli/commands/run.ts +++ b/src/agent/cli/commands/run.ts @@ -7,6 +7,7 @@ */ import { Agent } from "../../runner.js"; +import type { AgentOptions } from "../../types.js"; import type { ToolsConfig } from "../../tools/policy.js"; import { cyan, yellow, dim } from "../colors.js"; @@ -198,7 +199,7 @@ export async function runCommand(args: string[]): Promise { baseUrl: opts.baseUrl, systemPrompt: opts.system, thinkingLevel: opts.thinking as any, - reasoningMode: (opts.reasoning as any) ?? undefined, + reasoningMode: opts.reasoning as AgentOptions["reasoningMode"], cwd: opts.cwd, sessionId: opts.session, debug: opts.debug, diff --git a/src/agent/cli/interactive.ts b/src/agent/cli/interactive.ts index bd6131ab..3a4e3659 100644 --- a/src/agent/cli/interactive.ts +++ b/src/agent/cli/interactive.ts @@ -349,7 +349,7 @@ class InteractiveCLI { model: this.opts.model, systemPrompt: this.opts.system, thinkingLevel: this.opts.thinking as AgentOptions["thinkingLevel"], - reasoningMode: (this.opts.reasoning as AgentOptions["reasoningMode"]) ?? undefined, + reasoningMode: this.opts.reasoning as AgentOptions["reasoningMode"], cwd: this.opts.cwd, sessionId, }); diff --git a/src/agent/cli/non-interactive.ts b/src/agent/cli/non-interactive.ts index 004facfc..2cff5c4f 100644 --- a/src/agent/cli/non-interactive.ts +++ b/src/agent/cli/non-interactive.ts @@ -177,7 +177,7 @@ async function main() { baseUrl: opts.baseUrl, systemPrompt: opts.system, thinkingLevel: opts.thinking as any, - reasoningMode: (opts.reasoning as any) ?? undefined, + reasoningMode: opts.reasoning as any, cwd: opts.cwd, sessionId: opts.session, debug: opts.debug, diff --git a/src/agent/cli/output.ts b/src/agent/cli/output.ts index b47468ac..fe4fa058 100644 --- a/src/agent/cli/output.ts +++ b/src/agent/cli/output.ts @@ -249,8 +249,8 @@ export function createAgentOutput(params: { state.streaming = false; state.lastAssistantText = text; - // Extract and store thinking content - const thinking = extractThinking(msg); + // Extract and store thinking content (skip when off) + const thinking = reasoningMode !== "off" ? extractThinking(msg) : ""; state.lastAssistantThinking = thinking; // Show thinking at end for "on" mode diff --git a/src/agent/runner.ts b/src/agent/runner.ts index c395e395..4440f237 100644 --- a/src/agent/runner.ts +++ b/src/agent/runner.ts @@ -70,7 +70,7 @@ export class Agent { private readonly skillManager?: SkillManager; private readonly contextWindowGuard: ContextWindowGuardResult; private readonly debug: boolean; - private readonly reasoningMode: ReasoningMode; + private reasoningMode: ReasoningMode; private toolsOptions: AgentOptions; private readonly originalToolsConfig?: ToolsConfig; private readonly stderr: NodeJS.WritableStream; @@ -267,6 +267,18 @@ export class Agent { this.agent.setThinkingLevel(options.thinkingLevel); } + // Resolve reasoningMode: options > profile config > storedMeta > default "stream" + if (!options.reasoningMode) { + const profileReasoningMode = this.profile?.getProfile()?.config?.reasoningMode; + const metaReasoningMode = storedMeta?.reasoningMode as ReasoningMode | undefined; + const resolved = profileReasoningMode ?? metaReasoningMode ?? "stream"; + if (resolved !== this.reasoningMode) { + this.reasoningMode = resolved; + // Re-create output with correct reasoningMode + this.output = createAgentOutput({ stdout, stderr: this.stderr, reasoningMode: this.reasoningMode }); + } + } + this.agent.setModel(model); // Save original tools config from options (for later merging during reload)