diff --git a/scripts/package-inspector-nightly-scan.test.ts b/scripts/package-inspector-nightly-scan.test.ts index 74fe22f4..975f521a 100644 --- a/scripts/package-inspector-nightly-scan.test.ts +++ b/scripts/package-inspector-nightly-scan.test.ts @@ -160,13 +160,17 @@ describe("package-inspector-nightly-scan", () => { expect(config.plugin.id).toBe(expectedId); }); - it("accepts a UTF-8 BOM before a downloaded package.json", async () => { + it("accepts a UTF-8 BOM before downloaded plugin manifests", async () => { const pluginRoot = await mkdtemp(path.join(tmpdir(), "clawhub-inspector-package-json-")); temporaryRoots.push(pluginRoot); await writeFile( path.join(pluginRoot, "package.json"), '\uFEFF{"name":"eu-compliance-skill","version":"1.0.1"}\n', ); + await writeFile( + path.join(pluginRoot, "openclaw.plugin.json"), + '\uFEFF{"id":"eu-compliance-skill"}\n', + ); await expect( prepareExtractedPluginRoot(pluginRoot, "npm-pack", "eu-compliance-skill"), @@ -178,6 +182,9 @@ describe("package-inspector-nightly-scan", () => { expect(await readFile(path.join(pluginRoot, "package.json"), "utf8")).toBe( '{"name":"eu-compliance-skill","version":"1.0.1"}\n', ); + expect(await readFile(path.join(pluginRoot, "openclaw.plugin.json"), "utf8")).toBe( + '{"id":"eu-compliance-skill"}\n', + ); }); it.each([ diff --git a/scripts/package-inspector-nightly-scan.ts b/scripts/package-inspector-nightly-scan.ts index 6b920afb..d4d75f45 100644 --- a/scripts/package-inspector-nightly-scan.ts +++ b/scripts/package-inspector-nightly-scan.ts @@ -376,6 +376,7 @@ export async function prepareExtractedPluginRoot( if (artifactKind === "legacy-zip") { await removePosixArchiveMetadata(scanRoot); } + await readJsonIfExists(path.join(scanRoot, "openclaw.plugin.json")); await writeSyntheticConfigIfNeeded(scanRoot, packageName); return scanRoot; }