diff --git a/extensions/active-memory/index.ts b/extensions/active-memory/index.ts index 6dc64794db1..6c1dc171b53 100644 --- a/extensions/active-memory/index.ts +++ b/extensions/active-memory/index.ts @@ -495,7 +495,7 @@ function normalizePluginConfig(pluginConfig: unknown): ResolvedActiveRecallPlugi return { enabled: raw.enabled !== false, agents: Array.isArray(raw.agents) - ? raw.agents.map((agentId) => String(agentId).trim()).filter(Boolean) + ? raw.agents.map((agentId) => agentId.trim()).filter(Boolean) : [], model: typeof raw.model === "string" && raw.model.trim() ? raw.model.trim() : undefined, modelFallbackPolicy: diff --git a/extensions/browser/src/browser/server.control-server.test-harness.ts b/extensions/browser/src/browser/server.control-server.test-harness.ts index b2b3fc3d8a6..5f02544f816 100644 --- a/extensions/browser/src/browser/server.control-server.test-harness.ts +++ b/extensions/browser/src/browser/server.control-server.test-harness.ts @@ -575,7 +575,7 @@ export function installBrowserControlServerHooks() { vi.stubGlobal( "fetch", vi.fn(async (url: string, init?: RequestInit) => { - const u = String(url); + const u = url; if (u.includes("/json/list")) { if (!state.reachable) { return makeResponse([]); diff --git a/extensions/browser/src/browser/server.post-tabs-open-profile-unknown-returns-404.test.ts b/extensions/browser/src/browser/server.post-tabs-open-profile-unknown-returns-404.test.ts index 6370e691aaa..590eb13d623 100644 --- a/extensions/browser/src/browser/server.post-tabs-open-profile-unknown-returns-404.test.ts +++ b/extensions/browser/src/browser/server.post-tabs-open-profile-unknown-returns-404.test.ts @@ -53,7 +53,7 @@ describe("profile CRUD endpoints", () => { vi.stubGlobal( "fetch", vi.fn(async (url: string) => { - const u = String(url); + const u = url; if (u.includes("/json/list")) { return makeResponse([]); } diff --git a/extensions/codex/src/commands.test.ts b/extensions/codex/src/commands.test.ts index e792b2882c8..11bbfb5592a 100644 --- a/extensions/codex/src/commands.test.ts +++ b/extensions/codex/src/commands.test.ts @@ -61,7 +61,7 @@ describe("codex command", () => { const deps = createDeps({ codexControlRequest: vi.fn( async (_pluginConfig: unknown, method: string, requestParams: unknown) => { - requests.push({ method: String(method), params: requestParams }); + requests.push({ method, params: requestParams }); return { thread: { id: "thread-123", cwd: "/repo" }, model: "gpt-5.4", diff --git a/extensions/google/oauth.test.ts b/extensions/google/oauth.test.ts index 7fe488db862..825122666f7 100644 --- a/extensions/google/oauth.test.ts +++ b/extensions/google/oauth.test.ts @@ -262,13 +262,13 @@ describe("extractGeminiCliCredentials", () => { }); mockRealpathSync.mockReturnValue(resolvedPath); mockReaddirSync.mockImplementation((p: string) => { - if (normalizePath(String(p)) === normalizePath(bundleDir)) { + if (normalizePath(p) === normalizePath(bundleDir)) { return [dirent("chunk-ABC123.js", false)]; } return []; }); mockReadFileSync.mockImplementation((p: string) => { - if (normalizePath(String(p)) === normalizePath(chunkPath)) { + if (normalizePath(p) === normalizePath(chunkPath)) { return params.bundleContent; } throw new Error(`Unexpected read for ${p}`); diff --git a/extensions/memory-core/src/memory/qmd-manager.test.ts b/extensions/memory-core/src/memory/qmd-manager.test.ts index 3054b11bdbe..4cdae40971f 100644 --- a/extensions/memory-core/src/memory/qmd-manager.test.ts +++ b/extensions/memory-core/src/memory/qmd-manager.test.ts @@ -2925,7 +2925,7 @@ describe("QmdMemoryManager", () => { return [ { collection: "sessions-main", - path: `${String(arg)}.md`, + path: `${arg}.md`, }, ]; default: diff --git a/extensions/minimax/index.test.ts b/extensions/minimax/index.test.ts index 786e2b8323c..16620564b28 100644 --- a/extensions/minimax/index.test.ts +++ b/extensions/minimax/index.test.ts @@ -92,7 +92,7 @@ describe("minimax provider hooks", () => { let resolvedApiModelId = ""; const captureApiModel: StreamFn = (model) => { - resolvedApiModelId = String(model.id ?? ""); + resolvedApiModelId = model.id ?? ""; return {} as ReturnType; }; const wrappedApiStream = apiProvider.wrapStreamFn?.({ @@ -114,7 +114,7 @@ describe("minimax provider hooks", () => { let resolvedPortalModelId = ""; const capturePortalModel: StreamFn = (model) => { - resolvedPortalModelId = String(model.id ?? ""); + resolvedPortalModelId = model.id ?? ""; return {} as ReturnType; }; const wrappedPortalStream = portalProvider.wrapStreamFn?.({ diff --git a/extensions/msteams/src/attachments.graph.test.ts b/extensions/msteams/src/attachments.graph.test.ts index 1792de9d60a..20ffee21497 100644 --- a/extensions/msteams/src/attachments.graph.test.ts +++ b/extensions/msteams/src/attachments.graph.test.ts @@ -326,7 +326,7 @@ describe("msteams graph attachments", () => { ); expectAttachmentMediaLength(media.media, 0); - const calledUrls = fetchMock.mock.calls.map((call) => String(call[0])); + const calledUrls = fetchMock.mock.calls.map((call) => call[0]); expect(calledUrls.some((url) => url.startsWith(GRAPH_SHARES_URL_PREFIX))).toBe(true); expect(calledUrls).not.toContain(escapedUrl); }); diff --git a/extensions/msteams/src/attachments.test.ts b/extensions/msteams/src/attachments.test.ts index 7ee9fa399c8..6784bd31d48 100644 --- a/extensions/msteams/src/attachments.test.ts +++ b/extensions/msteams/src/attachments.test.ts @@ -445,7 +445,7 @@ describe("msteams attachments", () => { expectAttachmentMediaLength(media, 1); expect(tokenProvider.getAccessToken).toHaveBeenCalledOnce(); - expect(fetchMock.mock.calls.map(([calledUrl]) => String(calledUrl))).toContain(redirectedUrl); + expect(fetchMock.mock.calls.map(([calledUrl]) => calledUrl)).toContain(redirectedUrl); }); it("continues scope fallback after non-auth failure and succeeds on later scope", async () => { diff --git a/extensions/openai/openai.live.test.ts b/extensions/openai/openai.live.test.ts index 2a4509027cc..a04495b71ad 100644 --- a/extensions/openai/openai.live.test.ts +++ b/extensions/openai/openai.live.test.ts @@ -240,7 +240,7 @@ describeLive("openai plugin live", () => { timeoutMs: 30_000, }); - const text = String(transcription?.text ?? "").toLowerCase(); + const text = (transcription?.text ?? "").toLowerCase(); expect(text.length).toBeGreaterThan(0); expect(text).toContain("openclaw"); expect(text).toMatch(/\bok\b/); @@ -330,7 +330,7 @@ describeLive("openai plugin live", () => { provider: "openai", }); - expect(String(description?.text ?? "").toLowerCase()).toContain("orange"); + expect((description?.text ?? "").toLowerCase()).toContain("orange"); } finally { await fs.rm(agentDir, { recursive: true, force: true }); } diff --git a/extensions/qa-channel/src/channel.test.ts b/extensions/qa-channel/src/channel.test.ts index 8b399143936..48be4e6d1ba 100644 --- a/extensions/qa-channel/src/channel.test.ts +++ b/extensions/qa-channel/src/channel.test.ts @@ -58,7 +58,7 @@ function createMockQaRuntime(): PluginRuntime { dispatcherOptions: { deliver: (payload: { text: string }) => Promise }; }) { await dispatcherOptions.deliver({ - text: `qa-echo: ${String(ctx.BodyForAgent ?? ctx.Body ?? "")}`, + text: `qa-echo: ${ctx.BodyForAgent ?? ctx.Body ?? ""}`, }); }, }, diff --git a/extensions/slack/src/monitor.tool-result.test.ts b/extensions/slack/src/monitor.tool-result.test.ts index 68fbc6ba774..0258c864802 100644 --- a/extensions/slack/src/monitor.tool-result.test.ts +++ b/extensions/slack/src/monitor.tool-result.test.ts @@ -268,9 +268,7 @@ describe("monitorSlackProvider tool results", () => { } function expectReactionNames(names: string[]) { - expect(reactMock.mock.calls.map(([args]) => String((args as { name: string }).name))).toEqual( - names, - ); + expect(reactMock.mock.calls.map(([args]) => (args as { name: string }).name)).toEqual(names); } async function runDefaultMessageAndExpectSentText(expectedText: string) { diff --git a/extensions/telegram/src/bot-message-dispatch.test.ts b/extensions/telegram/src/bot-message-dispatch.test.ts index e9e863d3ce5..d34bc8dede7 100644 --- a/extensions/telegram/src/bot-message-dispatch.test.ts +++ b/extensions/telegram/src/bot-message-dispatch.test.ts @@ -1991,7 +1991,7 @@ describe("dispatchTelegramMessage draft streaming", () => { ); expect(answerDraftStream.update).toHaveBeenCalledWith("3"); expect( - answerDraftStream.update.mock.calls.some((call) => String(call[0] ?? "").includes("")), + answerDraftStream.update.mock.calls.some((call) => (call[0] ?? "").includes("")), ).toBe(false); expect(editMessageTelegram).toHaveBeenCalledWith(123, 999, "3", expect.any(Object)); }); @@ -2021,9 +2021,9 @@ describe("dispatchTelegramMessage draft streaming", () => { expect(reasoningDraftStream.update).toHaveBeenCalledWith( "Reasoning:\n_Counting letters in strawberry_", ); - expect( - answerDraftStream.update.mock.calls.some((call) => String(call[0] ?? "").includes("<")), - ).toBe(false); + expect(answerDraftStream.update.mock.calls.some((call) => (call[0] ?? "").includes("<"))).toBe( + false, + ); expect(editMessageTelegram).toHaveBeenCalledWith( 123, 999, diff --git a/extensions/thread-ownership/index.ts b/extensions/thread-ownership/index.ts index 28fd39ecab1..59a70d7498e 100644 --- a/extensions/thread-ownership/index.ts +++ b/extensions/thread-ownership/index.ts @@ -31,8 +31,8 @@ function cleanExpiredMentions(): void { function resolveOwnershipAgent(config: OpenClawConfig): { id: string; name: string } { const list = Array.isArray(config.agents?.list) - ? config.agents.list.filter((entry): entry is AgentEntry => - Boolean(entry && typeof entry === "object"), + ? config.agents.list.filter( + (entry): entry is AgentEntry => entry !== null && typeof entry === "object", ) : []; const selected = list.find((entry) => entry.default === true) ?? list[0]; diff --git a/extensions/voice-call/src/webhook-security.test.ts b/extensions/voice-call/src/webhook-security.test.ts index c818bfa7903..e85c27a2b55 100644 --- a/extensions/voice-call/src/webhook-security.test.ts +++ b/extensions/voice-call/src/webhook-security.test.ts @@ -369,7 +369,7 @@ describe("verifyPlivoWebhook", () => { describe("verifyTelnyxWebhook", () => { it("marks replayed valid requests as replay without failing auth", () => { const { publicKey, privateKey } = crypto.generateKeyPairSync("ed25519"); - const pemPublicKey = publicKey.export({ format: "pem", type: "spki" }).toString(); + const pemPublicKey = publicKey.export({ format: "pem", type: "spki" }); const timestamp = String(Math.floor(Date.now() / 1000)); const rawBody = JSON.stringify({ data: { event_type: "call.initiated", payload: { call_control_id: "call-1" } }, @@ -395,7 +395,7 @@ describe("verifyTelnyxWebhook", () => { it("treats Base64 and Base64URL signatures as the same replayed request", () => { const { publicKey, privateKey } = crypto.generateKeyPairSync("ed25519"); - const pemPublicKey = publicKey.export({ format: "pem", type: "spki" }).toString(); + const pemPublicKey = publicKey.export({ format: "pem", type: "spki" }); const timestamp = String(Math.floor(Date.now() / 1000)); const rawBody = JSON.stringify({ data: { event_type: "call.initiated", payload: { call_control_id: "call-1" } }, diff --git a/extensions/whatsapp/src/monitor-inbox.test-harness.ts b/extensions/whatsapp/src/monitor-inbox.test-harness.ts index e2d9e4f67e5..71da4cb41c7 100644 --- a/extensions/whatsapp/src/monitor-inbox.test-harness.ts +++ b/extensions/whatsapp/src/monitor-inbox.test-harness.ts @@ -202,14 +202,11 @@ export function expectPairingPromptSent(sock: MockSock, jid: string, senderE164: expect(sock.sendMessage).toHaveBeenCalledTimes(1); const sendCall = sock.sendMessage.mock.calls[0]; expect(sendCall?.[0]).toBe(jid); - expectInboxPairingReplyText( - String((sendCall?.[1] as { text?: string } | undefined)?.text ?? ""), - { - channel: "whatsapp", - idLine: `Your WhatsApp phone number: ${senderE164}`, - code: "PAIRCODE", - }, - ); + expectInboxPairingReplyText((sendCall?.[1] as { text?: string } | undefined)?.text ?? "", { + channel: "whatsapp", + idLine: `Your WhatsApp phone number: ${senderE164}`, + code: "PAIRCODE", + }); } let authDir: string | undefined; diff --git a/extensions/whatsapp/src/test-helpers.ts b/extensions/whatsapp/src/test-helpers.ts index 53457e80a95..dd014295d5a 100644 --- a/extensions/whatsapp/src/test-helpers.ts +++ b/extensions/whatsapp/src/test-helpers.ts @@ -319,7 +319,7 @@ vi.mock("./auto-reply/monitor/runtime-api.js", () => ({ }, logVerbose: (_msg: string) => undefined, normalizeE164: (value: string) => { - const digits = String(value).replace(/\D+/g, ""); + const digits = value.replace(/\D+/g, ""); return digits ? `+${digits}` : null; }, readStoreAllowFromForDmPolicy: async () => [] as string[], @@ -363,7 +363,7 @@ vi.mock("./auto-reply/monitor/group-gating.runtime.js", () => ({ hasControlCommand: (body: string) => body.trim().startsWith("/"), implicitMentionKindWhen: (kind: string, enabled: boolean) => (enabled ? [kind] : []), normalizeE164: (value: string) => { - const digits = String(value).replace(/\D+/g, ""); + const digits = value.replace(/\D+/g, ""); return digits ? `+${digits}` : null; }, parseActivationCommand: (body: string) => ({ diff --git a/extensions/xai/index.test.ts b/extensions/xai/index.test.ts index 8a8d4570148..c4e61fc112c 100644 --- a/extensions/xai/index.test.ts +++ b/extensions/xai/index.test.ts @@ -42,7 +42,7 @@ describe("xai provider plugin", () => { let capturedModelId = ""; let capturedPayload: Record | undefined; const baseStreamFn: StreamFn = (model, _context, options) => { - capturedModelId = String(model.id); + capturedModelId = model.id; const payload: Record = { reasoning: { effort: "high" }, tools: [ diff --git a/extensions/xai/stream.test.ts b/extensions/xai/stream.test.ts index cf14b6ed1a8..8d19965ece8 100644 --- a/extensions/xai/stream.test.ts +++ b/extensions/xai/stream.test.ts @@ -97,7 +97,7 @@ describe("xai stream wrappers", () => { let capturedModelId = ""; let capturedPayload: XaiTestPayload | undefined; const baseStreamFn: StreamFn = (model, _context, options) => { - capturedModelId = String(model.id); + capturedModelId = model.id; const payload: XaiTestPayload = { reasoning: { effort: "high" }, tools: [