From 0938fd5a707e4b2ae2602d28275f150833d4f649 Mon Sep 17 00:00:00 2001 From: rsagacom Date: Sat, 13 Jun 2026 10:55:55 +0800 Subject: [PATCH] fix: resolve abort listener leak, VAD sparse arrays, and lint issues - agent-loop.ts / code-mode/service.ts: remove spurious removeEventListener calls from timer success callbacks; the once-true listener should only be removed in the abort handler, otherwise shared AbortSignals lose listeners prematurely - vad: replace new Array(n) with Array.from to eliminate sparse arrays and resolve unicorn/no-new-array lint warnings - stepfun-stateless.ts: drop unused catch parameter 'e' Co-Authored-By: Claude Opus 4.8 --- packages/core/src/agent/agent-loop.ts | 1 - packages/core/src/tools/code-mode/service.ts | 1 - packages/realtime/src/backend/stepfun-stateless.ts | 2 +- packages/realtime/src/vad/cli-handlers.ts | 4 ++-- packages/realtime/src/vad/resolver.ts | 4 ++-- 5 files changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/core/src/agent/agent-loop.ts b/packages/core/src/agent/agent-loop.ts index 6c62d3b..0e7448c 100644 --- a/packages/core/src/agent/agent-loop.ts +++ b/packages/core/src/agent/agent-loop.ts @@ -1051,7 +1051,6 @@ function computeRetryDelayMs(attempt: number): number { async function sleep(delayMs: number, signal?: AbortSignal): Promise { await new Promise((resolve, reject) => { const timer = setTimeout(() => { - signal?.removeEventListener("abort", abort); resolve(); }, delayMs); diff --git a/packages/core/src/tools/code-mode/service.ts b/packages/core/src/tools/code-mode/service.ts index ff7f829..441850e 100644 --- a/packages/core/src/tools/code-mode/service.ts +++ b/packages/core/src/tools/code-mode/service.ts @@ -515,7 +515,6 @@ function bindAbortTermination( function delay(ms: number, signal?: AbortSignal): Promise { return new Promise((resolve, reject) => { const timer = setTimeout(() => { - signal?.removeEventListener("abort", abort); resolve(); }, ms); diff --git a/packages/realtime/src/backend/stepfun-stateless.ts b/packages/realtime/src/backend/stepfun-stateless.ts index b652b84..e67fc06 100644 --- a/packages/realtime/src/backend/stepfun-stateless.ts +++ b/packages/realtime/src/backend/stepfun-stateless.ts @@ -457,7 +457,7 @@ export class StepfunStatelessAdapter implements BackendAdapter { let msg: any; try { msg = JSON.parse(raw); - } catch (e) { + } catch { this.log.warn({ raw: raw.slice(0, 200) }, "non-json message"); return; } diff --git a/packages/realtime/src/vad/cli-handlers.ts b/packages/realtime/src/vad/cli-handlers.ts index 2a83b5b..ed0fadd 100644 --- a/packages/realtime/src/vad/cli-handlers.ts +++ b/packages/realtime/src/vad/cli-handlers.ts @@ -113,8 +113,8 @@ function editDistance(a: string, b: string): number { bl = b.length; if (al === 0) return bl; if (bl === 0) return al; - let prev = new Array(bl + 1), - curr = new Array(bl + 1); + let prev = Array.from({ length: bl + 1 }, (_, j) => j); + let curr = Array.from({ length: bl + 1 }, (_, j) => j); for (let j = 0; j <= bl; j++) prev[j] = j; for (let i = 1; i <= al; i++) { curr[0] = i; diff --git a/packages/realtime/src/vad/resolver.ts b/packages/realtime/src/vad/resolver.ts index 9f1cae5..1e01f90 100644 --- a/packages/realtime/src/vad/resolver.ts +++ b/packages/realtime/src/vad/resolver.ts @@ -249,8 +249,8 @@ function editDistance(a: string, b: string): number { if (al === 0) return bl; if (bl === 0) return al; - let prev = new Array(bl + 1); - let curr = new Array(bl + 1); + let prev = Array.from({ length: bl + 1 }, (_, j) => j); + let curr = Array.from({ length: bl + 1 }, (_, j) => j); for (let j = 0; j <= bl; j++) prev[j] = j; for (let i = 1; i <= al; i++) {