From ad9c49a604ceaaebcd922ca80023d34768982bfb Mon Sep 17 00:00:00 2001 From: abhiasap Date: Thu, 19 Feb 2026 14:14:02 +0100 Subject: [PATCH] fix(core): ensure user rejections update tool outcome for telemetry (#18982) --- packages/core/src/scheduler/scheduler.test.ts | 4 ++++ packages/core/src/scheduler/scheduler.ts | 14 ++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/core/src/scheduler/scheduler.test.ts b/packages/core/src/scheduler/scheduler.test.ts index f909a11d23..dd26ba4c03 100644 --- a/packages/core/src/scheduler/scheduler.test.ts +++ b/packages/core/src/scheduler/scheduler.test.ts @@ -973,6 +973,10 @@ describe('Scheduler (Orchestrator)', () => { CoreToolCallStatus.Cancelled, 'User denied execution.', ); + expect(mockStateManager.setOutcome).toHaveBeenCalledWith( + 'call-1', + ToolConfirmationOutcome.Cancel, + ); expect(mockStateManager.cancelAllQueued).toHaveBeenCalledWith( 'User cancelled operation', ); diff --git a/packages/core/src/scheduler/scheduler.ts b/packages/core/src/scheduler/scheduler.ts index d71381eb33..deb28d33a5 100644 --- a/packages/core/src/scheduler/scheduler.ts +++ b/packages/core/src/scheduler/scheduler.ts @@ -487,15 +487,17 @@ export class Scheduler { }); outcome = result.outcome; lastDetails = result.lastDetails; - } else { - this.state.setOutcome(callId, ToolConfirmationOutcome.ProceedOnce); } + this.state.setOutcome(callId, outcome); + // Handle Policy Updates - await updatePolicy(toolCall.tool, outcome, lastDetails, { - config: this.config, - messageBus: this.messageBus, - }); + if (decision === PolicyDecision.ASK_USER && outcome) { + await updatePolicy(toolCall.tool, outcome, lastDetails, { + config: this.config, + messageBus: this.messageBus, + }); + } // Handle cancellation (cascades to entire batch) if (outcome === ToolConfirmationOutcome.Cancel) {