diff --git a/src/tools/background-task/create-background-output.ts b/src/tools/background-task/create-background-output.ts index 78593a88..82ecb23e 100644 --- a/src/tools/background-task/create-background-output.ts +++ b/src/tools/background-task/create-background-output.ts @@ -106,6 +106,47 @@ export function createBackgroundOutput(manager: BackgroundOutputManager, client: } const isActive = resolvedTask.status === "pending" || resolvedTask.status === "running" +======= + const shouldBlock = args.block === true + const timeoutMs = Math.min(args.timeout ?? 60000, 600000) + + if (task.status === "completed") { + return await formatTaskResult(task, client) + } + + if (task.status === "error" || task.status === "cancelled" || task.status === "interrupt") { + return formatTaskStatus(task) + } + + if (shouldBlock) { + const startTime = Date.now() + while (Date.now() - startTime < timeoutMs) { + await delay(1000) + + const currentTask = manager.getTask(args.task_id) + if (!currentTask) { + return `Task was deleted: ${args.task_id}` + } + + if (currentTask.status === "completed") { + return await formatTaskResult(currentTask, client) + } + + if (currentTask.status === "error" || currentTask.status === "cancelled" || currentTask.status === "interrupt") { + return formatTaskStatus(currentTask) + } + } + + const finalTask = manager.getTask(args.task_id) + if (!finalTask) { + return `Task was deleted: ${args.task_id}` + } + return `Timeout exceeded (${timeoutMs}ms). Task still ${finalTask.status}.\n\n${formatTaskStatus(finalTask)}` + } + + const isActive = task.status === "pending" || task.status === "running" + const fullSession = args.full_session ?? isActive +>>>>>>> 20a1af47 (fix(background-output): prioritize block=true over fullSession auto-detection) const includeThinking = isActive || (args.include_thinking ?? false) const includeToolResults = isActive || (args.include_tool_results ?? false)