From 5d235952baf01ef57eb3948cdb0c11666906f71a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=96=84=E6=98=8E=E8=89=B2=E3=81=AE=E5=BF=98=E3=82=8C?= =?UTF-8?q?=E8=B7=AF?= Date: Fri, 20 Feb 2026 02:28:06 +0900 Subject: [PATCH] Fix: Avoid tool confirmation timeout when no UI listeners are present (#17955) --- .../core/src/confirmation-bus/message-bus.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/core/src/confirmation-bus/message-bus.ts b/packages/core/src/confirmation-bus/message-bus.ts index b9033fd67d..1600f2f5b2 100644 --- a/packages/core/src/confirmation-bus/message-bus.ts +++ b/packages/core/src/confirmation-bus/message-bus.ts @@ -79,8 +79,21 @@ export class MessageBus extends EventEmitter { }); break; case PolicyDecision.ASK_USER: - // Pass through to UI for user confirmation - this.emitMessage(message); + // Pass through to UI for user confirmation if any listeners exist. + // If no listeners are registered (e.g., headless/ACP flows), + // immediately request user confirmation to avoid long timeouts. + if ( + this.listenerCount(MessageBusType.TOOL_CONFIRMATION_REQUEST) > 0 + ) { + this.emitMessage(message); + } else { + this.emitMessage({ + type: MessageBusType.TOOL_CONFIRMATION_RESPONSE, + correlationId: message.correlationId, + confirmed: false, + requiresUserConfirmation: true, + }); + } break; default: throw new Error(`Unknown policy decision: ${decision}`);