HKUDS/nanobot · error · TuiUnavailableError

downloaded TUI archive is not a valid ZIP file

Error message

downloaded TUI archive is not a valid ZIP file

What it means

Error "downloaded TUI archive is not a valid ZIP file" thrown in HKUDS/nanobot.

Source

Thrown at nanobot/cli/tui_launcher.py:350

    try:
        with zipfile.ZipFile(io.BytesIO(raw)) as archive:
            entries = archive.infolist()
            names = [entry.filename for entry in entries if not entry.is_dir()]
            if len(names) != len(entries) or len(names) != len(set(names)):
                raise TuiUnavailableError("TUI release archive contains invalid entries")
            if set(names) != expected_names:
                raise TuiUnavailableError("TUI release archive is incomplete")
            for entry in entries:
                limit = 150 * 1024 * 1024 if entry.filename == asset else _TUI_RELEASE_LIMITS[
                    entry.filename
                ]
                if entry.file_size == 0 or entry.file_size > limit:
                    raise TuiUnavailableError(
                        f"TUI release file has an invalid size: {entry.filename}"
                    )
                files[entry.filename] = archive.read(entry)
    except zipfile.BadZipFile as exc:
        raise TuiUnavailableError("downloaded TUI archive is not a valid ZIP file") from exc

    checksums = _release_manifest(files["MANIFEST.sha256"], asset)
    for name, expected in checksums.items():
        if hashlib.sha256(files[name]).hexdigest() != expected:
            raise TuiUnavailableError(f"TUI release file failed verification: {name}")
    return files


def _cached_release_tui(target_dir: Path, asset: str) -> Path | None:
    target = target_dir / asset
    manifest = target_dir / "MANIFEST.sha256"
    if not target.is_file() and not manifest.exists():
        return None
    try:
        checksums = _release_manifest(manifest.read_bytes(), asset)
        for name, expected in checksums.items():
            if hashlib.sha256((target_dir / name).read_bytes()).hexdigest() != expected:
                raise OSError("cached release checksum mismatch")

View on GitHub (pinned to 42f37dc4c0)

When it happens

Trigger: Thrown at nanobot/cli/tui_launcher.py:350 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of HKUDS/nanobot@42f37dc4c0 (2026-08-26). Data as JSON: /api/errors/573846a90ff37427. Report an issue: GitHub.