From b268e93a1ddb1a55e18a216170346b305422fc78 Mon Sep 17 00:00:00 2001 From: Adam Weidman Date: Fri, 20 Mar 2026 11:19:34 -0400 Subject: [PATCH] refactor(cli): handle max turns from stream end --- packages/cli/src/nonInteractiveCli.ts | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/packages/cli/src/nonInteractiveCli.ts b/packages/cli/src/nonInteractiveCli.ts index 72071d1c2d..4b7674c1a4 100644 --- a/packages/cli/src/nonInteractiveCli.ts +++ b/packages/cli/src/nonInteractiveCli.ts @@ -444,18 +444,6 @@ export async function runNonInteractive({ const errorCode = event._meta?.['code']; - if (errorCode === 'MAX_TURNS_EXCEEDED') { - if (streamFormatter) { - streamFormatter.emitEvent({ - type: JsonStreamEventType.ERROR, - timestamp: new Date().toISOString(), - severity: 'error', - message: event.message, - }); - } - break; - } - if (errorCode === 'AGENT_EXECUTION_BLOCKED') { if (config.getOutputFormat() === OutputFormat.TEXT) { process.stderr.write(`[WARNING] ${event.message}\n`); @@ -482,7 +470,20 @@ export async function runNonInteractive({ if (event.reason === 'aborted') { handleCancellationError(config); } else if (event.reason === 'max_turns') { - handleMaxTurnsExceededError(config); + const isSessionLimit = + typeof event.data?.['maxTurns'] === 'number' && + typeof event.data?.['turnCount'] === 'number'; + if (isSessionLimit) { + handleMaxTurnsExceededError(config); + } + if (streamFormatter) { + streamFormatter.emitEvent({ + type: JsonStreamEventType.ERROR, + timestamp: new Date().toISOString(), + severity: 'error', + message: 'Maximum session turns exceeded', + }); + } } const stopMessage =