{"record":{"id":"573846a90ff37427","repo":"HKUDS/nanobot","slug":"downloaded-tui-archive-is-not-a-valid-zip-file","errorCode":null,"errorMessage":"downloaded TUI archive is not a valid ZIP file","messagePattern":"downloaded TUI archive is not a valid ZIP file","errorType":"exception","errorClass":"TuiUnavailableError","httpStatus":null,"severity":"error","filePath":"nanobot/cli/tui_launcher.py","lineNumber":350,"sourceCode":"    try:\n        with zipfile.ZipFile(io.BytesIO(raw)) as archive:\n            entries = archive.infolist()\n            names = [entry.filename for entry in entries if not entry.is_dir()]\n            if len(names) != len(entries) or len(names) != len(set(names)):\n                raise TuiUnavailableError(\"TUI release archive contains invalid entries\")\n            if set(names) != expected_names:\n                raise TuiUnavailableError(\"TUI release archive is incomplete\")\n            for entry in entries:\n                limit = 150 * 1024 * 1024 if entry.filename == asset else _TUI_RELEASE_LIMITS[\n                    entry.filename\n                ]\n                if entry.file_size == 0 or entry.file_size > limit:\n                    raise TuiUnavailableError(\n                        f\"TUI release file has an invalid size: {entry.filename}\"\n                    )\n                files[entry.filename] = archive.read(entry)\n    except zipfile.BadZipFile as exc:\n        raise TuiUnavailableError(\"downloaded TUI archive is not a valid ZIP file\") from exc\n\n    checksums = _release_manifest(files[\"MANIFEST.sha256\"], asset)\n    for name, expected in checksums.items():\n        if hashlib.sha256(files[name]).hexdigest() != expected:\n            raise TuiUnavailableError(f\"TUI release file failed verification: {name}\")\n    return files\n\n\ndef _cached_release_tui(target_dir: Path, asset: str) -> Path | None:\n    target = target_dir / asset\n    manifest = target_dir / \"MANIFEST.sha256\"\n    if not target.is_file() and not manifest.exists():\n        return None\n    try:\n        checksums = _release_manifest(manifest.read_bytes(), asset)\n        for name, expected in checksums.items():\n            if hashlib.sha256((target_dir / name).read_bytes()).hexdigest() != expected:\n                raise OSError(\"cached release checksum mismatch\")","sourceCodeStart":332,"sourceCodeEnd":368,"githubUrl":"https://github.com/HKUDS/nanobot/blob/42f37dc4c0e409eac7818a82d165c5f2757bc075/nanobot/cli/tui_launcher.py#L332-L368","documentation":"Error \"downloaded TUI archive is not a valid ZIP file\" thrown in HKUDS/nanobot.","triggerScenarios":"Thrown at nanobot/cli/tui_launcher.py:350 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"42f37dc4c0e409eac7818a82d165c5f2757bc075","analyzedAt":"2026-08-26T00:18:52.276Z","schemaVersion":2},"datasetVersion":"2026-08-26T04:18:47.238Z"}