From 462074c4c2e20be9646810fe50b9fbd2c3647778 Mon Sep 17 00:00:00 2001 From: Gustavo Madeira Santana Date: Fri, 17 Apr 2026 14:16:58 -0400 Subject: [PATCH] Fix check type errors --- src/agents/auth-health.test.ts | 3 +- src/commands/configure.channels.ts | 30 ++++++++---- src/flows/channel-setup.status.test.ts | 68 ++++++++++++++++++++------ src/flows/channel-setup.test.ts | 9 +++- 4 files changed, 83 insertions(+), 27 deletions(-) diff --git a/src/agents/auth-health.test.ts b/src/agents/auth-health.test.ts index fe782ec3039..232b3e23069 100644 --- a/src/agents/auth-health.test.ts +++ b/src/agents/auth-health.test.ts @@ -1,7 +1,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import type { CodexCliCredential } from "./cli-credentials.js"; const { readCodexCliCredentialsCachedMock } = vi.hoisted(() => ({ - readCodexCliCredentialsCachedMock: vi.fn(() => null), + readCodexCliCredentialsCachedMock: vi.fn((): CodexCliCredential | null => null), })); vi.mock("./cli-credentials.js", () => ({ diff --git a/src/commands/configure.channels.ts b/src/commands/configure.channels.ts index 69321f09f95..cbd849b9f1a 100644 --- a/src/commands/configure.channels.ts +++ b/src/commands/configure.channels.ts @@ -16,9 +16,20 @@ type ConfiguredChannelRemovalChoice = { }; type ChannelRemovalSelectValue = { kind: "channel"; id: string } | { kind: "done" }; +type ChannelRemovalSelectOption = + | { + value: { kind: "channel"; id: string }; + label: string; + hint?: string; + } + | { + value: { kind: "done" }; + label: string; + hint?: string; + }; const RESERVED_CHANNEL_CONFIG_KEYS = new Set(["defaults", "modelByChannel"]); -const DONE_VALUE: ChannelRemovalSelectValue = { kind: "done" }; +const DONE_VALUE = { kind: "done" } as const; function listConfiguredChannelRemovalChoices( cfg: OpenClawConfig, @@ -77,17 +88,18 @@ export async function removeChannelConfigWizard( return next; } + const options: ChannelRemovalSelectOption[] = [ + ...configured.map((meta) => ({ + value: { kind: "channel" as const, id: meta.id }, + label: meta.label, + hint: "Deletes tokens + settings from config (credentials stay on disk)", + })), + { value: DONE_VALUE, label: "Done" }, + ]; const choice = guardCancel( await select({ message: "Remove which channel config?", - options: [ - ...configured.map((meta) => ({ - value: { kind: "channel" as const, id: meta.id }, - label: meta.label, - hint: "Deletes tokens + settings from config (credentials stay on disk)", - })), - { value: DONE_VALUE, label: "Done" }, - ], + options, }), runtime, ); diff --git a/src/flows/channel-setup.status.test.ts b/src/flows/channel-setup.status.test.ts index b9f3816d428..2e4e59ed9bc 100644 --- a/src/flows/channel-setup.status.test.ts +++ b/src/flows/channel-setup.status.test.ts @@ -1,5 +1,31 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; +type MockChannelSetupEntry = { + id: string; + pluginId?: string; + meta: { + id: string; + label: string; + selectionLabel?: string; + docsPath?: string; + docsLabel?: string; + blurb?: string; + selectionDocsPrefix?: string; + selectionExtras?: readonly string[]; + exposure?: { setup?: boolean }; + showInSetup?: boolean; + quickstartAllowFrom?: boolean; + }; +}; + +type MockChannelSetupEntries = { + entries: MockChannelSetupEntry[]; + installedCatalogEntries: MockChannelSetupEntry[]; + installableCatalogEntries: MockChannelSetupEntry[]; + installedCatalogById: Map; + installableCatalogById: Map; +}; + const listChatChannels = vi.hoisted(() => vi.fn(() => [ { id: "discord", label: "Discord" }, @@ -7,21 +33,29 @@ const listChatChannels = vi.hoisted(() => ]), ); const resolveChannelSetupEntries = vi.hoisted(() => - vi.fn(() => ({ - entries: [], - installedCatalogEntries: [], - installableCatalogEntries: [], - installedCatalogById: new Map(), - installableCatalogById: new Map(), - })), + vi.fn( + (_params?: unknown): MockChannelSetupEntries => ({ + entries: [], + installedCatalogEntries: [], + installableCatalogEntries: [], + installedCatalogById: new Map(), + installableCatalogById: new Map(), + }), + ), ); const formatChannelPrimerLine = vi.hoisted(() => - vi.fn((meta: { label: string; blurb: string }) => `${meta.label}: ${meta.blurb}`), + vi.fn((meta: unknown) => { + const channel = meta as { label: string; blurb: string }; + return `${channel.label}: ${channel.blurb}`; + }), ); const formatChannelSelectionLine = vi.hoisted(() => - vi.fn((meta: { label: string; blurb: string }) => `${meta.label} — ${meta.blurb}`), + vi.fn((meta: unknown, _docsLink?: unknown) => { + const channel = meta as { label: string; blurb: string }; + return `${channel.label} — ${channel.blurb}`; + }), ); -const isChannelConfigured = vi.hoisted(() => vi.fn(() => false)); +const isChannelConfigured = vi.hoisted(() => vi.fn((_cfg?: unknown, _channelId?: string) => false)); vi.mock("../channels/chat-meta.js", () => ({ listChatChannels: () => listChatChannels(), @@ -64,12 +98,14 @@ describe("resolveChannelSetupSelectionContributions", () => { installedCatalogById: new Map(), installableCatalogById: new Map(), }); - formatChannelPrimerLine.mockImplementation( - (meta: { label: string; blurb: string }) => `${meta.label}: ${meta.blurb}`, - ); - formatChannelSelectionLine.mockImplementation( - (meta: { label: string; blurb: string }) => `${meta.label} — ${meta.blurb}`, - ); + formatChannelPrimerLine.mockImplementation((meta: unknown) => { + const channel = meta as { label: string; blurb: string }; + return `${channel.label}: ${channel.blurb}`; + }); + formatChannelSelectionLine.mockImplementation((meta: unknown) => { + const channel = meta as { label: string; blurb: string }; + return `${channel.label} — ${channel.blurb}`; + }); isChannelConfigured.mockReturnValue(false); }); diff --git a/src/flows/channel-setup.test.ts b/src/flows/channel-setup.test.ts index 040c2ea4b46..0678da39c22 100644 --- a/src/flows/channel-setup.test.ts +++ b/src/flows/channel-setup.test.ts @@ -11,7 +11,14 @@ const getChannelSetupPlugin = vi.hoisted(() => vi.fn((_channel?: unknown) => und const listChannelSetupPlugins = vi.hoisted(() => vi.fn((): unknown[] => [])); const listActiveChannelSetupPlugins = vi.hoisted(() => vi.fn((): unknown[] => [])); const loadChannelSetupPluginRegistrySnapshotForChannel = vi.hoisted(() => - vi.fn((_params?: unknown) => ({ channels: [], channelSetups: [] })), + vi.fn( + ( + _params?: unknown, + ): { + channels: unknown[]; + channelSetups: unknown[]; + } => ({ channels: [], channelSetups: [] }), + ), ); const resolveChannelSetupEntries = vi.hoisted(() => vi.fn(