From 85c7748520489290e169a313f37c1b9b4b1f83b0 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 11 Apr 2026 01:44:58 +0100 Subject: [PATCH] lint: enable no extraneous class --- .oxlintrc.json | 2 +- extensions/acpx/src/service.test.ts | 2 +- .../diagnostics-otel/src/service.test.ts | 23 ++++++------- extensions/discord/src/components.ts | 2 +- extensions/discord/src/monitor.test.ts | 4 ++- .../src/monitor/provider.proxy.test.ts | 34 +++++++------------ .../src/monitor/provider.startup.test.ts | 10 +++--- .../discord/src/monitor/provider.test.ts | 8 ++--- .../src/test-support/provider.test-support.ts | 12 +++---- extensions/googlechat/src/targets.test.ts | 2 +- .../matrix/src/matrix/sdk/transport.test.ts | 6 ++-- extensions/matrix/src/test-mocks.ts | 8 +++-- .../msteams/src/monitor.lifecycle.test.ts | 4 +-- extensions/msteams/src/probe.test.ts | 2 +- .../src/monitor/provider.interop.test.ts | 4 +-- extensions/telegram/src/send.proxy.test.ts | 2 +- extensions/telegram/src/send.test-harness.ts | 2 +- extensions/twitch/src/probe.test.ts | 2 +- extensions/twitch/src/twitch-client.test.ts | 6 ++-- src/acp/server.startup.test.ts | 11 +++--- src/agents/model-catalog.test-harness.ts | 2 +- src/agents/model-catalog.test.ts | 6 ++-- .../compact.hooks.harness.ts | 6 ++-- .../attempt.spawn-workspace.test-support.ts | 4 +-- .../pi-model-discovery.compat.e2e.test.ts | 4 +-- src/agents/subagent-registry-run-manager.ts | 3 +- src/infra/plain-object.test.ts | 4 ++- ui/src/ui/app-gateway.sessions.node.test.ts | 2 +- 28 files changed, 84 insertions(+), 93 deletions(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index c2eab7f31e42..947c86c89925 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -19,7 +19,7 @@ "oxc/no-map-spread": "off", "typescript/consistent-return": "error", "typescript/no-explicit-any": "error", - "typescript/no-extraneous-class": "off", + "typescript/no-extraneous-class": "error", "typescript/no-unnecessary-type-conversion": "error", "typescript/no-unsafe-type-assertion": "off", "unicorn/consistent-function-scoping": "off", diff --git a/extensions/acpx/src/service.test.ts b/extensions/acpx/src/service.test.ts index 81b5dca6c5c8..25a6ded277a0 100644 --- a/extensions/acpx/src/service.test.ts +++ b/extensions/acpx/src/service.test.ts @@ -19,7 +19,7 @@ vi.mock("../runtime-api.js", () => ({ vi.mock("./runtime.js", () => ({ ACPX_BACKEND_ID: "acpx", - AcpxRuntime: class {}, + AcpxRuntime: function AcpxRuntime() {}, createAgentRegistry: vi.fn(() => ({})), createFileSessionStore: vi.fn(() => ({})), })); diff --git a/extensions/diagnostics-otel/src/service.test.ts b/extensions/diagnostics-otel/src/service.test.ts index c8d08d07f1bf..35c32dde50c6 100644 --- a/extensions/diagnostics-otel/src/service.test.ts +++ b/extensions/diagnostics-otel/src/service.test.ts @@ -52,23 +52,21 @@ vi.mock("@opentelemetry/sdk-node", () => ({ })); vi.mock("@opentelemetry/exporter-metrics-otlp-proto", () => ({ - OTLPMetricExporter: class {}, + OTLPMetricExporter: function OTLPMetricExporter() {}, })); vi.mock("@opentelemetry/exporter-trace-otlp-proto", () => ({ - OTLPTraceExporter: class { - constructor(options?: unknown) { - traceExporterCtor(options); - } + OTLPTraceExporter: function OTLPTraceExporter(options?: unknown) { + traceExporterCtor(options); }, })); vi.mock("@opentelemetry/exporter-logs-otlp-proto", () => ({ - OTLPLogExporter: class {}, + OTLPLogExporter: function OTLPLogExporter() {}, })); vi.mock("@opentelemetry/sdk-logs", () => ({ - BatchLogRecordProcessor: class {}, + BatchLogRecordProcessor: function BatchLogRecordProcessor() {}, LoggerProvider: class { getLogger = vi.fn(() => ({ emit: logEmit, @@ -78,19 +76,18 @@ vi.mock("@opentelemetry/sdk-logs", () => ({ })); vi.mock("@opentelemetry/sdk-metrics", () => ({ - PeriodicExportingMetricReader: class {}, + PeriodicExportingMetricReader: function PeriodicExportingMetricReader() {}, })); vi.mock("@opentelemetry/sdk-trace-base", () => ({ - ParentBasedSampler: class {}, - TraceIdRatioBasedSampler: class {}, + ParentBasedSampler: function ParentBasedSampler() {}, + TraceIdRatioBasedSampler: function TraceIdRatioBasedSampler() {}, })); vi.mock("@opentelemetry/resources", () => ({ resourceFromAttributes: vi.fn((attrs: Record) => attrs), - Resource: class { - // eslint-disable-next-line @typescript-eslint/no-useless-constructor - constructor(_value?: unknown) {} + Resource: function Resource(_value?: unknown) { + // Constructor shape required by the mocked OpenTelemetry API. }, })); diff --git a/extensions/discord/src/components.ts b/extensions/discord/src/components.ts index 44ab0c2b7c7a..9f4647637f6d 100644 --- a/extensions/discord/src/components.ts +++ b/extensions/discord/src/components.ts @@ -65,7 +65,7 @@ export type { } from "./components.types.js"; // Some test-only module graphs partially mock `@buape/carbon` and can drop `Modal`. // Keep dynamic form definitions loadable instead of crashing unrelated suites. -const ModalBase: typeof Modal = Modal ?? class {}; +const ModalBase: typeof Modal = Modal ?? (function ModalFallback() {} as unknown as typeof Modal); export const DISCORD_COMPONENT_ATTACHMENT_PREFIX = "attachment://"; diff --git a/extensions/discord/src/monitor.test.ts b/extensions/discord/src/monitor.test.ts index 5013e06776f3..e77830fe4da1 100644 --- a/extensions/discord/src/monitor.test.ts +++ b/extensions/discord/src/monitor.test.ts @@ -72,7 +72,9 @@ beforeEach(() => { }); describe("registerDiscordListener", () => { - class FakeListener {} + class FakeListener { + readonly testListener = true; + } it("dedupes listeners by constructor", () => { const listeners: object[] = []; diff --git a/extensions/discord/src/monitor/provider.proxy.test.ts b/extensions/discord/src/monitor/provider.proxy.test.ts index 1f9eac6887c3..dbc757307e63 100644 --- a/extensions/discord/src/monitor/provider.proxy.test.ts +++ b/extensions/discord/src/monitor/provider.proxy.test.ts @@ -92,22 +92,17 @@ vi.mock("https-proxy-agent", () => ({ })); vi.mock("undici", () => ({ - ProxyAgent: class { - proxyUrl: string; - constructor(proxyUrl: string) { - this.proxyUrl = proxyUrl; - undiciProxyAgentSpy(proxyUrl); - restProxyAgentSpy(proxyUrl); - } + ProxyAgent: function ProxyAgent(this: { proxyUrl: string }, proxyUrl: string) { + this.proxyUrl = proxyUrl; + undiciProxyAgentSpy(proxyUrl); + restProxyAgentSpy(proxyUrl); }, fetch: undiciFetchMock, })); vi.mock("ws", () => ({ - default: class MockWebSocket { - constructor(url: string, options?: { agent?: unknown }) { - webSocketSpy(url, options); - } + default: function MockWebSocket(url: string, options?: { agent?: unknown }) { + webSocketSpy(url, options); }, })); @@ -132,19 +127,14 @@ describe("createDiscordGatewayPlugin", () => { return { HttpsProxyAgentCtor: HttpsProxyAgent as unknown as typeof import("https-proxy-agent").HttpsProxyAgent, - ProxyAgentCtor: class { - proxyUrl: string; - constructor(proxyUrl: string) { - this.proxyUrl = proxyUrl; - undiciProxyAgentSpy(proxyUrl); - restProxyAgentSpy(proxyUrl); - } + ProxyAgentCtor: function ProxyAgentCtor(this: { proxyUrl: string }, proxyUrl: string) { + this.proxyUrl = proxyUrl; + undiciProxyAgentSpy(proxyUrl); + restProxyAgentSpy(proxyUrl); } as unknown as typeof import("undici").ProxyAgent, undiciFetch: undiciFetchMock, - webSocketCtor: class { - constructor(url: string, options?: { agent?: unknown }) { - webSocketSpy(url, options); - } + webSocketCtor: function WebSocketCtor(url: string, options?: { agent?: unknown }) { + webSocketSpy(url, options); } as unknown as new (url: string, options?: { agent?: unknown }) => import("ws").WebSocket, registerClient: async (_plugin: unknown, client: unknown) => { baseRegisterClientSpy(client); diff --git a/extensions/discord/src/monitor/provider.startup.test.ts b/extensions/discord/src/monitor/provider.startup.test.ts index 9b3094a360c1..7f0cd821193b 100644 --- a/extensions/discord/src/monitor/provider.startup.test.ts +++ b/extensions/discord/src/monitor/provider.startup.test.ts @@ -58,11 +58,11 @@ vi.mock("./gateway-supervisor.js", () => ({ })); vi.mock("./listeners.js", () => ({ - DiscordMessageListener: class DiscordMessageListener {}, - DiscordPresenceListener: class DiscordPresenceListener {}, - DiscordReactionListener: class DiscordReactionListener {}, - DiscordReactionRemoveListener: class DiscordReactionRemoveListener {}, - DiscordThreadUpdateListener: class DiscordThreadUpdateListener {}, + DiscordMessageListener: function DiscordMessageListener() {}, + DiscordPresenceListener: function DiscordPresenceListener() {}, + DiscordReactionListener: function DiscordReactionListener() {}, + DiscordReactionRemoveListener: function DiscordReactionRemoveListener() {}, + DiscordThreadUpdateListener: function DiscordThreadUpdateListener() {}, registerDiscordListener: vi.fn(), })); diff --git a/extensions/discord/src/monitor/provider.test.ts b/extensions/discord/src/monitor/provider.test.ts index dac5b4aae8f1..01566d2aeac2 100644 --- a/extensions/discord/src/monitor/provider.test.ts +++ b/extensions/discord/src/monitor/provider.test.ts @@ -77,8 +77,8 @@ function createConfigWithDiscordAccount(overrides: Record = {}) vi.mock("../voice/manager.runtime.js", () => { voiceRuntimeModuleLoadedMock(); return { - DiscordVoiceManager: class DiscordVoiceManager {}, - DiscordVoiceReadyListener: class DiscordVoiceReadyListener {}, + DiscordVoiceManager: function DiscordVoiceManager() {}, + DiscordVoiceReadyListener: function DiscordVoiceReadyListener() {}, }; }); describe("monitorDiscordProvider", () => { @@ -173,8 +173,8 @@ describe("monitorDiscordProvider", () => { providerTesting.setLoadDiscordVoiceRuntime(async () => { voiceRuntimeModuleLoadedMock(); return { - DiscordVoiceManager: class DiscordVoiceManager {}, - DiscordVoiceReadyListener: class DiscordVoiceReadyListener {}, + DiscordVoiceManager: function DiscordVoiceManager() {}, + DiscordVoiceReadyListener: function DiscordVoiceReadyListener() {}, } as never; }); providerTesting.setLoadDiscordProviderSessionRuntime( diff --git a/extensions/discord/src/test-support/provider.test-support.ts b/extensions/discord/src/test-support/provider.test-support.ts index 44deecc28342..3fe9ed8409b5 100644 --- a/extensions/discord/src/test-support/provider.test-support.ts +++ b/extensions/discord/src/test-support/provider.test-support.ts @@ -341,7 +341,7 @@ vi.mock("@buape/carbon/gateway", () => ({ })); vi.mock("@buape/carbon/voice", () => ({ - VoicePlugin: class VoicePlugin {}, + VoicePlugin: function VoicePlugin() {}, })); vi.mock("openclaw/plugin-sdk/acp-runtime", async () => { @@ -472,11 +472,11 @@ vi.mock(buildDiscordSourceModuleId("monitor/gateway-plugin.js"), () => ({ })); vi.mock(buildDiscordSourceModuleId("monitor/listeners.js"), () => ({ - DiscordMessageListener: class DiscordMessageListener {}, - DiscordPresenceListener: class DiscordPresenceListener {}, - DiscordReactionListener: class DiscordReactionListener {}, - DiscordReactionRemoveListener: class DiscordReactionRemoveListener {}, - DiscordThreadUpdateListener: class DiscordThreadUpdateListener {}, + DiscordMessageListener: function DiscordMessageListener() {}, + DiscordPresenceListener: function DiscordPresenceListener() {}, + DiscordReactionListener: function DiscordReactionListener() {}, + DiscordReactionRemoveListener: function DiscordReactionRemoveListener() {}, + DiscordThreadUpdateListener: function DiscordThreadUpdateListener() {}, registerDiscordListener: vi.fn(), })); diff --git a/extensions/googlechat/src/targets.test.ts b/extensions/googlechat/src/targets.test.ts index e0f2225f88ee..ed3c88df8665 100644 --- a/extensions/googlechat/src/targets.test.ts +++ b/extensions/googlechat/src/targets.test.ts @@ -27,7 +27,7 @@ vi.mock("../runtime-api.js", async () => { }); vi.mock("google-auth-library", () => ({ - GoogleAuth: class {}, + GoogleAuth: function GoogleAuth() {}, OAuth2Client: class { verifyIdToken = mocks.verifyIdToken; }, diff --git a/extensions/matrix/src/matrix/sdk/transport.test.ts b/extensions/matrix/src/matrix/sdk/transport.test.ts index 73b1e76b8efa..26095563c22b 100644 --- a/extensions/matrix/src/matrix/sdk/transport.test.ts +++ b/extensions/matrix/src/matrix/sdk/transport.test.ts @@ -136,9 +136,9 @@ describe("performMatrixRequest", () => { }); }); (globalThis as Record)[TEST_UNDICI_RUNTIME_DEPS_KEY] = { - Agent: class MockAgent {}, - EnvHttpProxyAgent: class MockEnvHttpProxyAgent {}, - ProxyAgent: class MockProxyAgent {}, + Agent: function MockAgent() {}, + EnvHttpProxyAgent: function MockEnvHttpProxyAgent() {}, + ProxyAgent: function MockProxyAgent() {}, fetch: runtimeFetch, }; diff --git a/extensions/matrix/src/test-mocks.ts b/extensions/matrix/src/test-mocks.ts index 687b94459ea6..d270d77c7183 100644 --- a/extensions/matrix/src/test-mocks.ts +++ b/extensions/matrix/src/test-mocks.ts @@ -36,7 +36,7 @@ export function createMatrixBotSdkMock(params: MatrixBotSdkMockParams = {}): Mat warn = vi.fn(); error = vi.fn(); }, - MatrixClient: params.matrixClient ?? class {}, + MatrixClient: params.matrixClient ?? function MatrixClient() {}, LogService: { setLogger: vi.fn(), ...(params.includeVerboseLogService @@ -47,7 +47,9 @@ export function createMatrixBotSdkMock(params: MatrixBotSdkMockParams = {}): Mat } : {}), }, - SimpleFsStorageProvider: params.simpleFsStorageProvider ?? class {}, - RustSdkCryptoStorageProvider: params.rustSdkCryptoStorageProvider ?? class {}, + SimpleFsStorageProvider: + params.simpleFsStorageProvider ?? function SimpleFsStorageProvider() {}, + RustSdkCryptoStorageProvider: + params.rustSdkCryptoStorageProvider ?? function RustSdkCryptoStorageProvider() {}, }; } diff --git a/extensions/msteams/src/monitor.lifecycle.test.ts b/extensions/msteams/src/monitor.lifecycle.test.ts index 83eafc48df5a..fcc49e916a9f 100644 --- a/extensions/msteams/src/monitor.lifecycle.test.ts +++ b/extensions/msteams/src/monitor.lifecycle.test.ts @@ -104,8 +104,8 @@ const jwtValidate = vi.hoisted(() => vi.fn().mockResolvedValue(true)); const loadMSTeamsSdkWithAuth = vi.hoisted(() => vi.fn(async () => ({ sdk: { - ActivityHandler: class {}, - MsalTokenProvider: class {}, + ActivityHandler: function ActivityHandler() {}, + MsalTokenProvider: function MsalTokenProvider() {}, authorizeJWT: () => (_req: unknown, _res: unknown, next: ((err?: unknown) => void) | undefined) => next?.(), diff --git a/extensions/msteams/src/probe.test.ts b/extensions/msteams/src/probe.test.ts index 68c8b950a24c..9cfbf22b1de4 100644 --- a/extensions/msteams/src/probe.test.ts +++ b/extensions/msteams/src/probe.test.ts @@ -23,7 +23,7 @@ vi.mock("@microsoft/teams.apps", () => ({ })); vi.mock("@microsoft/teams.api", () => ({ - Client: class {}, + Client: function Client() {}, })); import { probeMSTeams } from "./probe.js"; diff --git a/extensions/slack/src/monitor/provider.interop.test.ts b/extensions/slack/src/monitor/provider.interop.test.ts index 3e761cb45f19..9cb3ace4ceab 100644 --- a/extensions/slack/src/monitor/provider.interop.test.ts +++ b/extensions/slack/src/monitor/provider.interop.test.ts @@ -2,8 +2,8 @@ import { describe, expect, it } from "vitest"; import { __testing } from "./provider.js"; describe("resolveSlackBoltInterop", () => { - class FakeApp {} - class FakeHTTPReceiver {} + function FakeApp() {} + function FakeHTTPReceiver() {} it("uses the default import when it already exposes named exports", () => { const resolved = __testing.resolveSlackBoltInterop({ diff --git a/extensions/telegram/src/send.proxy.test.ts b/extensions/telegram/src/send.proxy.test.ts index afba01cedf51..da762b6408e0 100644 --- a/extensions/telegram/src/send.proxy.test.ts +++ b/extensions/telegram/src/send.proxy.test.ts @@ -59,7 +59,7 @@ vi.mock("grammy", () => ({ GrammyError: class GrammyError extends Error { description = ""; }, - InputFile: class {}, + InputFile: function InputFile() {}, })); let deleteMessageTelegram: typeof import("./send.js").deleteMessageTelegram; diff --git a/extensions/telegram/src/send.test-harness.ts b/extensions/telegram/src/send.test-harness.ts index 25b04af44798..03ac546f6a2d 100644 --- a/extensions/telegram/src/send.test-harness.ts +++ b/extensions/telegram/src/send.test-harness.ts @@ -124,7 +124,7 @@ vi.mock("grammy", () => ({ GrammyError: class GrammyError extends Error { description = ""; }, - InputFile: class {}, + InputFile: function InputFile() {}, })); vi.mock("undici", () => ({ diff --git a/extensions/twitch/src/probe.test.ts b/extensions/twitch/src/probe.test.ts index 5dc4619d3ea7..8b925786a326 100644 --- a/extensions/twitch/src/probe.test.ts +++ b/extensions/twitch/src/probe.test.ts @@ -47,7 +47,7 @@ vi.mock("@twurple/chat", () => ({ })); vi.mock("@twurple/auth", () => ({ - StaticAuthProvider: class {}, + StaticAuthProvider: function StaticAuthProvider() {}, })); describe("probeTwitch", () => { diff --git a/extensions/twitch/src/twitch-client.test.ts b/extensions/twitch/src/twitch-client.test.ts index 64f6904171a7..cefc333b29ab 100644 --- a/extensions/twitch/src/twitch-client.test.ts +++ b/extensions/twitch/src/twitch-client.test.ts @@ -58,10 +58,8 @@ const mockAuthProvider = { }; vi.mock("@twurple/auth", () => ({ - StaticAuthProvider: class { - constructor(...args: unknown[]) { - mockAuthProvider.constructor(...args); - } + StaticAuthProvider: function StaticAuthProvider(...args: unknown[]) { + mockAuthProvider.constructor(...args); }, RefreshingAuthProvider: class { addUserForToken = mockAddUserForToken; diff --git a/src/acp/server.startup.test.ts b/src/acp/server.startup.test.ts index 3eec8052f153..364d50338eb2 100644 --- a/src/acp/server.startup.test.ts +++ b/src/acp/server.startup.test.ts @@ -56,11 +56,12 @@ class MockGatewayClient { } vi.mock("@agentclientprotocol/sdk", () => ({ - AgentSideConnection: class { - constructor(factory: (conn: unknown) => unknown, stream: unknown) { - mockState.agentSideConnectionCtor(factory, stream); - factory({}); - } + AgentSideConnection: function AgentSideConnection( + factory: (conn: unknown) => unknown, + stream: unknown, + ) { + mockState.agentSideConnectionCtor(factory, stream); + factory({}); }, ndJsonStream: vi.fn(() => ({ type: "mock-stream" })), })); diff --git a/src/agents/model-catalog.test-harness.ts b/src/agents/model-catalog.test-harness.ts index f5e7dad11fe4..ce934e210894 100644 --- a/src/agents/model-catalog.test-harness.ts +++ b/src/agents/model-catalog.test-harness.ts @@ -39,7 +39,7 @@ export function mockCatalogImportFailThenRecover() { } return { discoverAuthStorage: () => ({}), - AuthStorage: class {}, + AuthStorage: function AuthStorage() {}, ModelRegistry: class { getAll() { return [{ id: "gpt-4.1", name: "GPT-4.1", provider: "openai" }]; diff --git a/src/agents/model-catalog.test.ts b/src/agents/model-catalog.test.ts index 4b8e310abe0c..38031b97352a 100644 --- a/src/agents/model-catalog.test.ts +++ b/src/agents/model-catalog.test.ts @@ -25,7 +25,7 @@ function mockCatalogImportFailThenRecover() { } return { discoverAuthStorage: () => ({}), - AuthStorage: class {}, + AuthStorage: function AuthStorage() {}, ModelRegistry: class { getAll() { return [{ id: "gpt-4.1", name: "GPT-4.1", provider: "openai" }]; @@ -41,7 +41,7 @@ function mockPiDiscoveryModels(models: unknown[]) { async () => ({ discoverAuthStorage: () => ({}), - AuthStorage: class {}, + AuthStorage: function AuthStorage() {}, ModelRegistry: class { getAll() { return models; @@ -118,7 +118,7 @@ describe("loadModelCatalog", () => { async () => ({ discoverAuthStorage: () => ({}), - AuthStorage: class {}, + AuthStorage: function AuthStorage() {}, ModelRegistry: class { getAll() { return [ diff --git a/src/agents/pi-embedded-runner/compact.hooks.harness.ts b/src/agents/pi-embedded-runner/compact.hooks.harness.ts index 03fe461c0a5e..e4242a1a9fcd 100644 --- a/src/agents/pi-embedded-runner/compact.hooks.harness.ts +++ b/src/agents/pi-embedded-runner/compact.hooks.harness.ts @@ -230,8 +230,8 @@ export async function loadCompactHooksHarness(): Promise<{ }); vi.doMock("@mariozechner/pi-coding-agent", () => ({ - AuthStorage: class AuthStorage {}, - ModelRegistry: class ModelRegistry {}, + AuthStorage: function AuthStorage() {}, + ModelRegistry: function ModelRegistry() {}, createAgentSession: vi.fn(async () => { const session = { sessionId: "session-1", @@ -261,7 +261,7 @@ export async function loadCompactHooksHarness(): Promise<{ }; return { session }; }), - DefaultResourceLoader: class DefaultResourceLoader {}, + DefaultResourceLoader: function DefaultResourceLoader() {}, SessionManager: { open: vi.fn(() => ({})), }, diff --git a/src/agents/pi-embedded-runner/run/attempt.spawn-workspace.test-support.ts b/src/agents/pi-embedded-runner/run/attempt.spawn-workspace.test-support.ts index 537e15f505d4..20f532285132 100644 --- a/src/agents/pi-embedded-runner/run/attempt.spawn-workspace.test-support.ts +++ b/src/agents/pi-embedded-runner/run/attempt.spawn-workspace.test-support.ts @@ -161,11 +161,11 @@ vi.mock("@mariozechner/pi-coding-agent", async () => { const actual = await vi.importActual( "@mariozechner/pi-coding-agent", ); - class AuthStorage {} + function AuthStorage() {} class DefaultResourceLoader { async reload() {} } - class ModelRegistry {} + function ModelRegistry() {} return { ...actual, diff --git a/src/agents/pi-model-discovery.compat.e2e.test.ts b/src/agents/pi-model-discovery.compat.e2e.test.ts index a7e18c58ad8c..ee90be800947 100644 --- a/src/agents/pi-model-discovery.compat.e2e.test.ts +++ b/src/agents/pi-model-discovery.compat.e2e.test.ts @@ -8,8 +8,8 @@ describe("pi-model-discovery module compatibility", () => { it("loads when InMemoryAuthStorageBackend is not exported", async () => { vi.resetModules(); vi.doMock("@mariozechner/pi-coding-agent", () => { - class MockAuthStorage {} - class MockModelRegistry {} + function MockAuthStorage() {} + function MockModelRegistry() {} return { AuthStorage: MockAuthStorage, diff --git a/src/agents/subagent-registry-run-manager.ts b/src/agents/subagent-registry-run-manager.ts index 58da55eab3f0..8185c124a2c3 100644 --- a/src/agents/subagent-registry-run-manager.ts +++ b/src/agents/subagent-registry-run-manager.ts @@ -277,8 +277,7 @@ export function createSubagentRunManager(params: { const runId = registerParams.runId.trim(); const childSessionKey = registerParams.childSessionKey.trim(); const requesterSessionKey = registerParams.requesterSessionKey.trim(); - const controllerSessionKey = - registerParams.controllerSessionKey?.trim() || requesterSessionKey; + const controllerSessionKey = registerParams.controllerSessionKey?.trim() || requesterSessionKey; if (!runId || !childSessionKey || !requesterSessionKey) { return; } diff --git a/src/infra/plain-object.test.ts b/src/infra/plain-object.test.ts index 8bb8b6696fd4..cf67e73589f1 100644 --- a/src/infra/plain-object.test.ts +++ b/src/infra/plain-object.test.ts @@ -6,7 +6,9 @@ describe("isPlainObject", () => { {}, { a: 1 }, Object.create(null), - new (class X {})(), + new (class X { + readonly marker = true; + })(), { [Symbol.toStringTag]: "Object" }, ])("accepts object-tag values: %j", (value) => { expect(isPlainObject(value)).toBe(true); diff --git a/ui/src/ui/app-gateway.sessions.node.test.ts b/ui/src/ui/app-gateway.sessions.node.test.ts index 86b507205c23..1905efda85bf 100644 --- a/ui/src/ui/app-gateway.sessions.node.test.ts +++ b/ui/src/ui/app-gateway.sessions.node.test.ts @@ -44,7 +44,7 @@ vi.mock("./controllers/sessions.ts", () => ({ subscribeSessions: vi.fn(), })); vi.mock("./gateway.ts", () => ({ - GatewayBrowserClient: class {}, + GatewayBrowserClient: function GatewayBrowserClient() {}, resolveGatewayErrorDetailCode: () => null, }));