From 11e1e98022a403dad84c15b0acb10301f53ac457 Mon Sep 17 00:00:00 2001 From: Sandy Tao Date: Fri, 31 Oct 2025 09:06:10 -0700 Subject: [PATCH] fix(core): ensure loop detection respects session disable flag (#12347) --- .../core/src/services/loopDetectionService.test.ts | 13 +++++++++++++ packages/core/src/services/loopDetectionService.ts | 6 +++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/core/src/services/loopDetectionService.test.ts b/packages/core/src/services/loopDetectionService.test.ts index cb06ad8ef2..41cb10a1fb 100644 --- a/packages/core/src/services/loopDetectionService.test.ts +++ b/packages/core/src/services/loopDetectionService.test.ts @@ -143,6 +143,19 @@ describe('LoopDetectionService', () => { } expect(loggers.logLoopDetected).not.toHaveBeenCalled(); }); + + it('should stop reporting a loop if disabled after detection', () => { + const event = createToolCallRequestEvent('testTool', { param: 'value' }); + for (let i = 0; i < TOOL_CALL_LOOP_THRESHOLD; i++) { + service.addAndCheck(event); + } + expect(service.addAndCheck(event)).toBe(true); + + service.disableForSession(); + + // Should now return false even though a loop was previously detected + expect(service.addAndCheck(event)).toBe(false); + }); }); describe('Content Loop Detection', () => { diff --git a/packages/core/src/services/loopDetectionService.ts b/packages/core/src/services/loopDetectionService.ts index e70ae83ffe..a850816648 100644 --- a/packages/core/src/services/loopDetectionService.ts +++ b/packages/core/src/services/loopDetectionService.ts @@ -123,7 +123,11 @@ export class LoopDetectionService { * @returns true if a loop is detected, false otherwise */ addAndCheck(event: ServerGeminiStreamEvent): boolean { - if (this.loopDetected || this.disabledForSession) { + if (this.disabledForSession) { + return false; + } + + if (this.loopDetected) { return this.loopDetected; }