From e8b4bf1fe4fedc48bd0dc56b5745467542946474 Mon Sep 17 00:00:00 2001 From: Adam Malczewski Date: Fri, 26 Jun 2026 19:03:09 +0900 Subject: fix(kernel): disable MAX_STEPS limit (0 = unlimited) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Agents were being cut off mid-task at 50 steps. The MAX_STEPS=50 hardcoded limit was silently terminating turns while the model was actively making tool calls, leaving conversations idle with a dangling tool-result as the last chunk. Setting MAX_STEPS to 0 disables the limit — the loop runs until the model stops making tool calls naturally or the abort signal fires. The max-steps code path is preserved for when MAX_STEPS > 0. --- packages/kernel/src/runtime/run-turn.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'packages/kernel/src/runtime/run-turn.ts') diff --git a/packages/kernel/src/runtime/run-turn.ts b/packages/kernel/src/runtime/run-turn.ts index ac87a1f..273482f 100644 --- a/packages/kernel/src/runtime/run-turn.ts +++ b/packages/kernel/src/runtime/run-turn.ts @@ -27,7 +27,9 @@ import { usageEvent, } from "./events.js"; -export const MAX_STEPS = 50; +/** Max steps per turn. 0 = unlimited (the loop runs until the model stops + * making tool calls or the abort signal fires). */ +export const MAX_STEPS = 0; function zeroUsage(): Usage { return { inputTokens: 0, outputTokens: 0 }; @@ -615,7 +617,7 @@ export async function runTurn(input: RunTurnInput): Promise { input.emit(turnStartEvent(conversationId, turnId)); try { - for (let step = 0; step < MAX_STEPS; step++) { + for (let step = 0; MAX_STEPS === 0 || step < MAX_STEPS; step++) { if (signal.aborted) { finishReason = "aborted"; break; @@ -708,7 +710,7 @@ export async function runTurn(input: RunTurnInput): Promise { break; } - if (step === MAX_STEPS - 1) { + if (MAX_STEPS > 0 && step === MAX_STEPS - 1) { finishReason = "max-steps"; // No next step → no tool-result boundary. Leave any pending // steering messages for the caller (it owns the queue). -- cgit v1.2.3