From d91da30c708fda9a15587393f88328d8d36dc333 Mon Sep 17 00:00:00 2001 From: ai-hpc Date: Tue, 28 Apr 2026 16:51:18 +0000 Subject: [PATCH] fix(cli): match closed prompt errors by type --- src/cli/plugins-cli-test-helpers.ts | 7 +++++++ src/cli/plugins-cli.uninstall.test.ts | 6 ++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/cli/plugins-cli-test-helpers.ts b/src/cli/plugins-cli-test-helpers.ts index 1eef4d23caf..c751944caac 100644 --- a/src/cli/plugins-cli-test-helpers.ts +++ b/src/cli/plugins-cli-test-helpers.ts @@ -74,6 +74,12 @@ const uninstallPlugin: AsyncUnknownMock = vi.fn(); export const updateNpmInstalledPlugins: AsyncUnknownMock = vi.fn(); export const updateNpmInstalledHookPacks: AsyncUnknownMock = vi.fn(); export const promptYesNo: AsyncUnknownMock = vi.fn(); +export class PromptInputClosedError extends Error { + constructor() { + super("Prompt input closed before an answer was received."); + this.name = "PromptInputClosedError"; + } +} export const installPluginFromNpmSpec: AsyncUnknownMock = vi.fn(); export const installPluginFromPath: AsyncUnknownMock = vi.fn(); export const installPluginFromClawHub: AsyncUnknownMock = vi.fn(); @@ -455,6 +461,7 @@ vi.mock("../hooks/update.js", () => ({ })); vi.mock("./prompt.js", () => ({ + PromptInputClosedError, promptYesNo: ((...args: Parameters<(typeof import("./prompt.js"))["promptYesNo"]>) => invokeMock< Parameters<(typeof import("./prompt.js"))["promptYesNo"]>, diff --git a/src/cli/plugins-cli.uninstall.test.ts b/src/cli/plugins-cli.uninstall.test.ts index 2de9c85b101..20212154bc8 100644 --- a/src/cli/plugins-cli.uninstall.test.ts +++ b/src/cli/plugins-cli.uninstall.test.ts @@ -7,6 +7,7 @@ import { buildPluginSnapshotReport, loadConfig, planPluginUninstall, + PromptInputClosedError, promptYesNo, refreshPluginRegistry, replaceConfigFile, @@ -163,9 +164,6 @@ describe("plugins cli uninstall", () => { }, }, } as OpenClawConfig; - const promptClosedError = new Error("prompt closed"); - promptClosedError.name = "PromptInputClosedError"; - loadConfig.mockReturnValue(baseConfig); setInstalledPluginIndexInstallRecords(baseConfig.plugins?.installs ?? {}); buildPluginDiagnosticsReport.mockReturnValue({ @@ -187,7 +185,7 @@ describe("plugins cli uninstall", () => { }, directoryRemoval: null, }); - promptYesNo.mockRejectedValueOnce(promptClosedError); + promptYesNo.mockRejectedValueOnce(new PromptInputClosedError()); await expect(runPluginsCommand(["plugins", "uninstall", "alpha"])).rejects.toThrow( "__exit__:1",