@@ -66,6 +66,7 @@ function summarizeSpawnOptions(options: Record<string, unknown>): Record<string,
6666 model : options . model ,
6767 includePartialMessages : options . includePartialMessages ,
6868 thinking : options . thinking ,
69+ effort : options . effort ,
6970 settingSources : options . settingSources ,
7071 enableFileCheckpointing : options . enableFileCheckpointing ,
7172 extraArgs : options . extraArgs ,
@@ -236,6 +237,7 @@ interface StartOptions {
236237 model ?: string ;
237238 permissionMode ?: string ;
238239 thinkingEnabled ?: boolean ;
240+ effort ?: "low" | "medium" | "high" | "max" ;
239241 resume ?: string ;
240242 /** Fork to a new session ID when resuming (model forgets messages after resumeSessionAt) */
241243 forkSession ?: boolean ;
@@ -244,10 +246,8 @@ interface StartOptions {
244246 mcpServers ?: McpServerInput [ ] ;
245247}
246248
247- function buildThinkingConfig ( thinkingEnabled ?: boolean ) : { type : "adaptive" } | { type : "disabled" } {
248- return thinkingEnabled === false
249- ? { type : "disabled" }
250- : { type : "adaptive" } ;
249+ function buildThinkingConfig ( ) : { type : "adaptive" } {
250+ return { type : "adaptive" } ;
251251}
252252
253253function logSdkCliPath ( context : string , cliPath ?: string ) : void {
@@ -275,7 +275,7 @@ async function revalidateClaudeModelsCache(cwd?: string): Promise<{ models: Arra
275275 const queryOptions : Record < string , unknown > = {
276276 cwd : cwd ?. trim ( ) || os . homedir ( ) ,
277277 includePartialMessages : true ,
278- thinking : buildThinkingConfig ( true ) ,
278+ thinking : buildThinkingConfig ( ) ,
279279 settingSources : [ "user" , "project" ] ,
280280 pathToClaudeCodeExecutable : cliPath ,
281281 ...fileCheckpointOptions ( ) ,
@@ -342,6 +342,8 @@ async function restartSession(
342342 getMainWindow : ( ) => BrowserWindow | null ,
343343 mcpServersOverride ?: McpServerInput [ ] ,
344344 cwdOverride ?: string ,
345+ effortOverride ?: StartOptions [ "effort" ] ,
346+ modelOverride ?: string ,
345347) : Promise < { ok ?: boolean ; error ?: string ; restarted ?: boolean } > {
346348 const session = sessions . get ( sessionId ) ;
347349 if ( ! session ?. queryHandle || ! session . startOptions ) {
@@ -375,7 +377,13 @@ async function restartSession(
375377 queryHandle : null ,
376378 eventCounter : session . eventCounter ,
377379 pendingPermissions : new Map ( ) ,
378- startOptions : { ...opts , cwd, mcpServers } ,
380+ startOptions : {
381+ ...opts ,
382+ cwd,
383+ mcpServers,
384+ ...( effortOverride ? { effort : effortOverride } : { } ) ,
385+ ...( modelOverride ? { model : modelOverride } : { } ) ,
386+ } ,
379387 } ;
380388
381389 const canUseTool = ( toolName : string , input : unknown , context : { toolUseID : string ; suggestions : unknown ; decisionReason : string } ) => {
@@ -397,7 +405,7 @@ async function restartSession(
397405 const queryOptions : Record < string , unknown > = {
398406 cwd,
399407 includePartialMessages : true ,
400- thinking : buildThinkingConfig ( opts . thinkingEnabled ) ,
408+ thinking : buildThinkingConfig ( ) ,
401409 canUseTool,
402410 settingSources : [ "user" , "project" ] ,
403411 pathToClaudeCodeExecutable : cliPath ,
@@ -416,7 +424,10 @@ async function restartSession(
416424 queryOptions . allowDangerouslySkipPermissions = true ;
417425 }
418426 }
419- if ( opts . model ) queryOptions . model = opts . model ;
427+ if ( modelOverride ?? opts . model ) queryOptions . model = modelOverride ?? opts . model ;
428+ if ( effortOverride ?? opts . effort ) {
429+ queryOptions . effort = effortOverride ?? opts . effort ;
430+ }
420431
421432 if ( mcpServers ?. length ) {
422433 queryOptions . mcpServers = await buildSdkMcpConfig ( mcpServers ) ;
@@ -494,7 +505,7 @@ export function register(getMainWindow: () => BrowserWindow | null): void {
494505 const queryOptions : Record < string , unknown > = {
495506 cwd : options . cwd || process . cwd ( ) ,
496507 includePartialMessages : true ,
497- thinking : buildThinkingConfig ( options . thinkingEnabled ) ,
508+ thinking : buildThinkingConfig ( ) ,
498509 canUseTool,
499510 settingSources : [ "user" , "project" ] ,
500511 pathToClaudeCodeExecutable : cliPath ,
@@ -527,6 +538,9 @@ export function register(getMainWindow: () => BrowserWindow | null): void {
527538 if ( options . model ) {
528539 queryOptions . model = options . model ;
529540 }
541+ if ( options . effort ) {
542+ queryOptions . effort = options . effort ;
543+ }
530544
531545 if ( options . mcpServers ?. length ) {
532546 queryOptions . mcpServers = await buildSdkMcpConfig ( options . mcpServers ) ;
@@ -666,14 +680,14 @@ export function register(getMainWindow: () => BrowserWindow | null): void {
666680 return { error : "Reasoning toggle is not supported by this Claude SDK version" } ;
667681 }
668682 try {
669- await session . queryHandle . setMaxThinkingTokens ( thinkingEnabled ? null : 0 ) ;
683+ await session . queryHandle . setMaxThinkingTokens ( null ) ;
670684 if ( session . startOptions ) {
671- session . startOptions . thinkingEnabled = thinkingEnabled ;
685+ session . startOptions . thinkingEnabled = true ;
672686 }
673- log ( "SET_THINKING" , `session=${ sessionId . slice ( 0 , 8 ) } thinkingEnabled =${ thinkingEnabled } ` ) ;
687+ log ( "SET_THINKING" , `session=${ sessionId . slice ( 0 , 8 ) } requested =${ thinkingEnabled } applied=true ` ) ;
674688 return { ok : true } ;
675689 } catch ( err ) {
676- log ( "SET_THINKING_ERR" , `session=${ sessionId . slice ( 0 , 8 ) } thinkingEnabled =${ thinkingEnabled } ${ extractErrorMessage ( err ) } ` ) ;
690+ log ( "SET_THINKING_ERR" , `session=${ sessionId . slice ( 0 , 8 ) } requested =${ thinkingEnabled } ${ extractErrorMessage ( err ) } ` ) ;
677691 return { error : extractErrorMessage ( err ) } ;
678692 }
679693 } ) ;
@@ -831,7 +845,19 @@ export function register(getMainWindow: () => BrowserWindow | null): void {
831845 } ) ;
832846
833847 // Restart the session with a new MCP server list (e.g., after add/remove)
834- ipcMain . handle ( "claude:restart-session" , async ( _event , { sessionId, mcpServers, cwd } : { sessionId : string ; mcpServers ?: McpServerInput [ ] ; cwd ?: string } ) => {
835- return restartSession ( sessionId , getMainWindow , mcpServers , cwd ) ;
848+ ipcMain . handle ( "claude:restart-session" , async ( _event , {
849+ sessionId,
850+ mcpServers,
851+ cwd,
852+ effort,
853+ model,
854+ } : {
855+ sessionId : string ;
856+ mcpServers ?: McpServerInput [ ] ;
857+ cwd ?: string ;
858+ effort ?: StartOptions [ "effort" ] ;
859+ model ?: string ;
860+ } ) => {
861+ return restartSession ( sessionId , getMainWindow , mcpServers , cwd , effort , model ) ;
836862 } ) ;
837863}
0 commit comments