@@ -306,12 +306,26 @@ function readPackedPackage(tarballPath, extractDir) {
306306 tar . x ( { file : tarballPath , cwd : extractDir , sync : true } ) ;
307307 const packageDir = path . join ( extractDir , "package" ) ;
308308 const packageJson = JSON . parse ( fs . readFileSync ( path . join ( packageDir , "package.json" ) , "utf8" ) ) ;
309+ const files = listFiles ( packageDir ) ;
309310 return {
310311 packageJson,
311- files : listFiles ( packageDir ) ,
312+ files,
313+ readme : readPackedPackageReadme ( packageDir , files ) ,
312314 } ;
313315}
314316
317+ export function findPackedPackageReadmePath ( files ) {
318+ return files . find ( ( file ) => / ^ r e a d m e (?: \. (?: m d | m a r k d o w n | t x t | r s t ) ) ? $ / 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 ) {
316330 const workingDir = fs . mkdtempSync ( path . join ( os . tmpdir ( ) , "openclaw-plugin-npm-runtime." ) ) ;
317331 try {
@@ -326,7 +340,18 @@ export async function verifyPublishedPluginRuntime(spec) {
326340 if ( errors . length > 0 ) {
327341 throw 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+ }
330355 return {
331356 packageName : packedPackage . packageJson . name ,
332357 version : packedPackage . packageJson . version ,
0 commit comments