tinyhumansai/openhuman · error · Error

[openhuman] Extraction failed — binary not found after unpac

Error message

[openhuman] Extraction failed — binary not found after unpack.

What it means

After unpacking, the installer expects the binary at binDest (binDir/openhuman-core renamed into place on unix, the expanded path on Windows); if extraction nominally succeeded but binDest still does not exist, the archive layout did not match expectations and install fails.

Source

Thrown at packages/npm/install.js:157

      ],
      { stdio: 'inherit', env: { ...process.env, TC_SRC: tmpTarball, TC_DEST: binDir } }
    );
    const extracted = path.join(binDir, 'openhuman-core.exe');
    if (fs.existsSync(extracted)) fs.renameSync(extracted, binDest);
  } else {
    execFileSync('tar', ['-xzf', tmpTarball, '-C', binDir], { stdio: 'inherit' });
    const extracted = path.join(binDir, 'openhuman-core');
    if (fs.existsSync(extracted)) {
      fs.renameSync(extracted, binDest);
      fs.chmodSync(binDest, 0o755);
    }
  }

  // Clean up archive
  fs.rmSync(tmpTarball, { force: true });

  if (!fs.existsSync(binDest)) {
    throw new Error('[openhuman] Extraction failed — binary not found after unpack.');
  }

  console.log(`[openhuman] Installed at ${binDest}`);
}

main().catch((err) => {
  console.error('\n[openhuman] Installation failed:', err.message);
  console.error('You can file a bug at https://github.com/tinyhumansai/openhuman/issues');
  process.exit(1);
});

View on GitHub (pinned to a221052e0d)

Solutions

  1. Clear the temp/cache directory and re-run install so a fresh, matching tarball extracts
  2. Inspect what actually unpacked (list binDir) and check the archive layout with tar -tzf on the cached tarball
  3. Verify the downloaded target triple matches your machine and check release notes for layout changes; file an issue with the tar -tzf output
Defensive patterns

Strategy: retry

Validate before calling

// Inspect the cached archive layout before extraction:
// tar -tzf openhuman-core-<target>.tar.gz  must list ./openhuman-core at the root
const { execFileSync } = require('child_process');
const listing = execFileSync('tar', ['-tzf', tmpTarball]).toString();
if (!listing.split('\n').some(l => l.replace(/^\./, '') === '/openhuman-core')) {
  throw new Error('unexpected archive layout');
}

Try / catch

try {
  await install();
} catch (e) {
  if (String(e.message).includes('binary not found after unpack')) {
    // stale/corrupt artifact: clear cache so the next install fetches a fresh one
    await clearInstallCache();
    return;
  }
  throw e;
}

Prevention

When it happens

Trigger: The tarball unpacks a different binary name or a nested directory instead of ./openhuman-core at the archive root (release layout change, or a wrong-target artifact that still extracts); Windows PowerShell expand producing an unexpected path; a rename that failed silently.

Common situations: Cached old tarball paired with a newer installer; release published with a nested folder like openhuman-core-vX/openhuman-core.

Related errors


AI-assisted analysis of tinyhumansai/openhuman@a221052e0d (2026-08-16). Data as JSON: /api/errors/d175ef7ade7d8c35. Report an issue: GitHub.