fix(plugins): clear error when npm package not found (Closes #24993) (#25073)

This commit is contained in:
Dale Yarborough
2026-02-26 21:16:28 -06:00
committed by GitHub
parent 7aa233790b
commit efdba59e49
2 changed files with 26 additions and 1 deletions

View File

@@ -244,6 +244,24 @@ describe("packNpmSpecToArchive", () => {
});
});
it("returns friendly error for 404 (package not on npm)", async () => {
const cwd = await createFixtureDir();
mockPackCommandResult({
stdout: "",
stderr: "npm error code E404\nnpm error 404 '@openclaw/whatsapp@*' is not in this registry.",
code: 1,
});
const result = await runPack("@openclaw/whatsapp", cwd);
expect(result.ok).toBe(false);
if (!result.ok) {
expect(result.error).toContain("Package not found on npm");
expect(result.error).toContain("@openclaw/whatsapp");
expect(result.error).toContain("docs.openclaw.ai/tools/plugin");
}
});
it("returns explicit error when npm pack produces no archive name", async () => {
const cwd = await createFixtureDir();
mockPackCommandResult({

View File

@@ -207,7 +207,14 @@ export async function packNpmSpecToArchive(params: {
},
);
if (res.code !== 0) {
return { ok: false, error: `npm pack failed: ${res.stderr.trim() || res.stdout.trim()}` };
const raw = res.stderr.trim() || res.stdout.trim();
if (/E404|is not in this registry/i.test(raw)) {
return {
ok: false,
error: `Package not found on npm: ${params.spec}. See https://docs.openclaw.ai/tools/plugin for installable plugins.`,
};
}
return { ok: false, error: `npm pack failed: ${raw}` };
}
const parsedJson = parseNpmPackJsonOutput(res.stdout || "");