From 193781eb1bc8603d0eded7779ceedd3b3505b0f5 Mon Sep 17 00:00:00 2001 From: pingfanfan Date: Thu, 18 Jun 2026 12:34:17 +0100 Subject: [PATCH] chore: fix lint warnings in VAD, AEC, and stateless adapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Clears the oxlint warnings surfaced by `pnpm check` without touching the frozen README/.gitignore files (AGENTS.md ยง7): - Replace `new Array(length)` sparse-array construction in the VAD edit-distance helpers (cli-handlers.ts, resolver.ts) with `Array.from`, avoiding holey arrays. - Drop the unused `catch (e)` binding in the stateless backend adapter. - Use arrow functions in the browser AEC async iterator to avoid `const self = this` aliasing. Co-Authored-By: Claude Opus 4.8 (1M context) --- extensions/realtime-aec/src/browser-audio-driver.ts | 13 ++++++------- packages/realtime/src/backend/stepfun-stateless.ts | 2 +- packages/realtime/src/vad/cli-handlers.ts | 5 ++--- packages/realtime/src/vad/resolver.ts | 5 ++--- 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/extensions/realtime-aec/src/browser-audio-driver.ts b/extensions/realtime-aec/src/browser-audio-driver.ts index f41eaea4..fce21c78 100644 --- a/extensions/realtime-aec/src/browser-audio-driver.ts +++ b/extensions/realtime-aec/src/browser-audio-driver.ts @@ -150,23 +150,22 @@ export class BrowserAudioDriver implements AudioDriver { void this.ensureStarted().catch((err) => log.error({ err: String(err) }, "ensureStarted (capture) failed"), ); - const self = this; const stream: AsyncIterable = { - [Symbol.asyncIterator]() { + [Symbol.asyncIterator]: () => { return { - next(): Promise> { - if (self.captureStopped) { + next: (): Promise> => { + if (this.captureStopped) { return Promise.resolve({ value: undefined, done: true }); } - const queued = self.captureBuf.shift(); + const queued = this.captureBuf.shift(); if (queued) { return Promise.resolve({ value: queued, done: false }); } return new Promise>((resolve) => { - self.capturePending.push({ resolve }); + this.capturePending.push({ resolve }); }); }, - return(): Promise> { + return: (): Promise> => { return Promise.resolve({ value: undefined, done: true }); }, }; diff --git a/packages/realtime/src/backend/stepfun-stateless.ts b/packages/realtime/src/backend/stepfun-stateless.ts index b652b84b..e67fc06f 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 2a83b5b4..d612aa27 100644 --- a/packages/realtime/src/vad/cli-handlers.ts +++ b/packages/realtime/src/vad/cli-handlers.ts @@ -113,9 +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); - for (let j = 0; j <= bl; j++) prev[j] = j; + let prev = Array.from({ length: bl + 1 }, (_, j) => j), + curr = Array.from({ length: bl + 1 }, () => 0); for (let i = 1; i <= al; i++) { curr[0] = i; for (let j = 1; j <= bl; j++) { diff --git a/packages/realtime/src/vad/resolver.ts b/packages/realtime/src/vad/resolver.ts index 9f1cae5e..f56c126c 100644 --- a/packages/realtime/src/vad/resolver.ts +++ b/packages/realtime/src/vad/resolver.ts @@ -249,9 +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); - for (let j = 0; j <= bl; j++) prev[j] = j; + let prev = Array.from({ length: bl + 1 }, (_, j) => j); + let curr = Array.from({ length: bl + 1 }, () => 0); for (let i = 1; i <= al; i++) { curr[0] = i;