
























@@ -306,12 +306,26 @@ function readPackedPackage(tarballPath, extractDir) {
306306tar.x({ file: tarballPath, cwd: extractDir, sync: true });
307307const packageDir = path.join(extractDir, "package");
308308const packageJson = JSON.parse(fs.readFileSync(path.join(packageDir, "package.json"), "utf8"));
309+const files = listFiles(packageDir);
309310return {
310311 packageJson,
311-files: listFiles(packageDir),
312+ files,
313+readme: readPackedPackageReadme(packageDir, files),
312314};
313315}
314316317+export function findPackedPackageReadmePath(files) {
318+return files.find((file) => /^readme(?:\.(?:md|markdown|txt|rst))?$/iu.test(file)) ?? "";
319+}
320+321+function readPackedPackageReadme(packageDir, files) {
322+const readmePath = findPackedPackageReadmePath(files);
323+if (!readmePath) {
324+return "";
325+}
326+return fs.readFileSync(path.join(packageDir, readmePath), "utf8").trim();
327+}
328+315329export async function verifyPublishedPluginRuntime(spec) {
316330const workingDir = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-plugin-npm-runtime."));
317331try {
@@ -326,7 +340,18 @@ export async function verifyPublishedPluginRuntime(spec) {
326340if (errors.length > 0) {
327341throw new Error(errors.join("\n"));
328342}
329-const readme = await verifyPublishedPackageReadme(spec);
343+let readme;
344+try {
345+readme = await verifyPublishedPackageReadme(spec);
346+} catch (error) {
347+if (!packedPackage.readme) {
348+throw error;
349+}
350+console.error(
351+`npm readme metadata for ${spec} was unavailable; verified README from published tarball instead.`,
352+);
353+readme = packedPackage.readme;
354+}
330355return {
331356packageName: packedPackage.packageJson.name,
332357version: packedPackage.packageJson.version,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。