{
  "current": "3.0.39",
  "packages": {
    "2.0.1": {
      "file": "update-2.0.1.zip",
      "size": 417724,
      "sha256": "7b54076fb20ddfbb5f552d690ca93b6273233ca2c30ab768a14aa36915b7dd94",
      "from": "2.0.0",
      "to": "2.0.1",
      "date": "2026-10-14 16:12",
      "changelog": "hot-update chain verification"
    },
    "2.0.2": {
      "file": "update-2.0.2.zip",
      "size": 417761,
      "sha256": "86faee03bc4ec6cb2ee264dfda072033f6cb257a6583623c80f5a2eadb401758",
      "from": "2.0.1",
      "to": "2.0.2",
      "date": "2026-10-14 16:15",
      "changelog": "code volume now ships packaging tooling (update.py/install_master.py/common.py)"
    },
    "3.0.1": {
      "file": "update-3.0.1.zip",
      "size": 431764,
      "sha256": "97964f7153311ac0ac2ab68b49425903f9bb9b8346d8b704bd18df553283e9bf",
      "from": "2.0.2",
      "to": "3.0.1",
      "date": "2026-10-14 17:57",
      "changelog": "面板集成热更新：自动检查+弹窗一键更新+更新后自动重启"
    },
    "3.0.2": {
      "file": "update-3.0.2.zip",
      "size": 433417,
      "sha256": "dfa75974dccfaf37e414b5fb6e2ed8fb6fce64772d8d451323d9ccd5066816d9",
      "from": "3.0.1",
      "to": "3.0.2",
      "date": "2026-10-14 18:15",
      "changelog": "修复安装脚本加载（不再依赖 packaging import）+ 向导分步安装/实时进度条"
    },
    "3.0.3": {
      "file": "update-3.0.3.zip",
      "size": 433436,
      "sha256": "1ec7c4d9f46346cb6741591c94b06d29f4b6d363e442ce45ac1f5af3bdef69d9",
      "from": "3.0.2",
      "to": "3.0.3",
      "date": "2026-10-14 18:20",
      "changelog": "SDK 安装修复：自动装便携 JRE17（sdkmanager 免 Java）+ licenses 自动应答 y + 失败打印完整诊断"
    },
    "3.0.4": {
      "file": "update-3.0.4.zip",
      "size": 482703,
      "sha256": "168921aa02b061c65920551c588e34ebaf9944cb44514b7d8e09e39721969ead",
      "from": "3.0.3",
      "to": "3.0.4",
      "date": "2026-10-14 18:21",
      "changelog": "SDK 安装修复：自动装便携 JRE17 + licenses 自动应答 y + 失败打印完整诊断；热更新白名单加入 packaging/"
    },
    "3.0.5": {
      "file": "update-3.0.5.zip",
      "size": 483864,
      "sha256": "141c06cb767e103d0d9b15c3c89d5b0df9cba832e92b2c669832faa0a7809825",
      "from": "3.0.4",
      "to": "3.0.5",
      "date": "2026-10-14 18:47",
      "changelog": "SDK 安装 Java 修复 v2：curl 下载绕过 TLS 指纹拦截 + 三镜像源（Adoptium/TUNA/华为）"
    },
    "3.0.6": {
      "file": "update-3.0.6.zip",
      "size": 486095,
      "sha256": "e05e20848e3b6215f2b0498618d9ca863ca5db0c5fd34f1c6d41dacf8edc8a4a",
      "from": "3.0.5",
      "to": "3.0.6",
      "date": "2026-10-14 18:58",
      "changelog": "Java 改服务器分发：jdk17.zip 已在服务器就绪(41MB JRE)，SDK 步骤优先从服务器下载，镜像兜底 TUNA/华为"
    },
    "3.0.7": {
      "file": "update-3.0.7.zip",
      "size": 486910,
      "sha256": "fc790919161d9dbd764972e4192d947b302b38b35f28f7c57169158bdff50c19",
      "from": "3.0.6",
      "to": "3.0.7",
      "date": "2026-10-14 19:09",
      "changelog": "SDK 安装防卡死：子进程强制无缓冲(实时输出)+下载全改 curl(超时/速度检测)+cmdline-tools 缓存保留+看门狗超时终止"
    },
    "3.0.8": {
      "file": "update-3.0.8.zip",
      "size": 490149,
      "sha256": "e6727f7a89a2a419acfc7990e131b192ced6c00418820968ad6a14b104216f15",
      "from": "3.0.7",
      "to": "3.0.8",
      "date": "2026-10-14 19:19",
      "changelog": "向导日志首行显示代码版本号；新增 install-sdk.bat 独立安装器(绕过面板版本)"
    },
    "3.0.9": {
      "file": "update-3.0.9.zip",
      "size": 490296,
      "sha256": "46b038dc491d497553cc396e756f7d67446a15a85e6ac76034a3d253ef0f4194",
      "from": "3.0.8",
      "to": "3.0.9",
      "date": "2026-10-14 19:24",
      "changelog": "SDK 横幅动态读 version.json（消除 v3.0.7 旧字符串）；安装器校验放宽为 banner 存在即可"
    },
    "3.0.10": {
      "file": "update-3.0.10.zip",
      "size": 493185,
      "sha256": "4b521cc18903cab7088c1c8fe1e77284d03aa3882bd3f71956c7dd1a86e9ef38",
      "from": "3.0.9",
      "to": "3.0.10",
      "date": "2026-10-14 19:30",
      "changelog": "新增 sdk_install_manual.py：纯下载官方zip直装(无sdkmanager/Java，不会卡licenses)；install-sdk.bat 默认走 manual 模式"
    },
    "3.0.11": {
      "file": "update-3.0.11.zip",
      "size": 493257,
      "sha256": "b0f0f019353da1fdb7e85234fd7cf766c7a4295e21e0f559ee6fe4847d77e03c",
      "from": "3.0.10",
      "to": "3.0.11",
      "date": "2026-10-14 19:32",
      "changelog": "licenses 首次即自动喂 y（不再等 120s 超时）；sdkmanager 超时改为明确报错"
    },
    "3.0.12": {
      "file": "update-3.0.12.zip",
      "size": 494749,
      "sha256": "6396876963fc93fe9a303addda025e6bfe8e75eaa8ea5784151b83dba4bb598f",
      "from": "3.0.11",
      "to": "3.0.12",
      "date": "2026-10-14 19:45",
      "changelog": "fix: build_golden_template ADB path now resolved from --sdk-dir (was hardcoded D:\\AndroidSDK); golden AVD step 4 no longer hangs on deployment machines"
    },
    "3.0.13": {
      "file": "update-3.0.13.zip",
      "size": 494746,
      "sha256": "6b2a49a8b483491e1e09516d3c524d280a9027b1946dabe4f1813d66e3459be9",
      "from": "3.0.12",
      "to": "3.0.13",
      "date": "2026-10-14 19:48",
      "changelog": "fix: app/main.py missing module logger crashed hot-update thread (NameError at 6s); ADB resolved from --sdk-dir in build_golden_template"
    },
    "3.0.14": {
      "file": "update-3.0.14.zip",
      "size": 495054,
      "sha256": "467c630c78da0cde1fd2b5a86f63027a3cedc97899e1188287c7753aa6ff4aaf",
      "from": "3.0.13",
      "to": "3.0.14",
      "date": "2026-10-14 19:53",
      "changelog": "feat: main window title shows code version; golden AVD check now requires .golden_ok marker + ramdisk.img (no more false green); build_golden writes .golden_ok on success"
    },
    "3.0.15": {
      "file": "update-3.0.15.zip",
      "size": 495299,
      "sha256": "f0aa944344c12b4b7414a4b90d9e7f1c24b37fbd73fc64053ce66ad716f32928",
      "from": "3.0.14",
      "to": "3.0.15",
      "date": "2026-10-14 20:05",
      "changelog": "fix: AVD ini now synced to \\$HOME\\\\.android\\\\avd (WMI-spawned emulator did not inherit ANDROID_AVD_HOME -> Unknown AVD name crash on deployment machines)"
    },
    "3.0.16": {
      "file": "update-3.0.16.zip",
      "size": 3056245,
      "sha256": "6bb281c9a9d7e67fec90fc0fdb79d2df2d44a5f18615e320884d7420d27a8cba",
      "from": "3.0.15",
      "to": "3.0.16",
      "date": "2026-10-16 16:01",
      "changelog": "3.0.16：① 实例 tab 拆分重构（instances.py 独立 703 行，MainWindow 瘦身，零行为变化）；② 新增「手动注入仿真数据」按钮（重放当前指纹档案，不重建指纹/不自动启停，可多选批量）；③ 批量删除：实例删除改为真批量（一次确认删全部选中，template 跳过），代理/账号表格支持多选并新增「删除所选」（代理删除自动停网关+解绑实例，账号删除级联清指纹/会话）；④ M3/M4 雷电化收尾（删除官方模拟器引擎，向导 3 项检查，ADB 默认雷电自带）；⑤ 客户端热更新白名单与 packaging 对齐（补 packaging/ 路径）"
    },
    "3.0.18": {
      "file": "update-3.0.18.zip",
      "size": 3085165,
      "sha256": "f911b44cdd7873d257fc91939a2d81126812b3ae1e1c261da9e9c592ebf4907c",
      "from": "any",
      "to": "3.0.18",
      "date": "2026-10-16 21:50",
      "changelog": "3.0.18：一键 Mask 安装按钮 + 代理出口加固（清 guest 系统代理 + 启动后等 adb 稳定）"
    },
    "3.0.19": {
      "file": "update-3.0.19.zip",
      "size": 3098762,
      "sha256": "0a7d4b321315a0d9f2ece6a40bc4eb649527242c50fc80b7f2af8d74fb752597",
      "from": "any",
      "to": "3.0.19",
      "date": "2026-10-17 11:10",
      "changelog": "hide_su mother-disk, SNI gateway, proxy bind counts, horizontal tables, create_standalone_instance.py"
    },
    "3.0.20": {
      "file": "update-3.0.20.zip",
      "size": 3105796,
      "sha256": "33a95a675c0f9d06673b35e29bdcd6ff9d02bdf6009a74a6dbf709e5255d5d2d",
      "from": "any",
      "to": "3.0.20",
      "date": "2026-10-17 11:41",
      "changelog": "3.0.20: TikTok package corrected to com.zhiliaoapp.musically (wizard 5-App check + install list); installer re-downloads code pack (no stale cache); installer hard-gates on version match; panel-installer.zip rebuilt from current bat; proxy bind-instance counts + full proxy status in bind dialog + horizontally scrollable tables"
    },
    "3.0.21": {
      "file": "update-3.0.21.zip",
      "size": 3112555,
      "sha256": "f200eb28ea91c096dcd39c0431cb33b03dfccf6b5f886496c1626535a6a212a2",
      "from": "any",
      "to": "3.0.21",
      "date": "2026-10-17 13:38",
      "changelog": "3.0.21: Mask install step checklist (resume missing steps); PID-kill VM restart + remount rw before Direct Install; grant LDPlayer Superuser prompt; Magisk Manager show/hide via magisk su (pm unhide/hide); panel toolbar+context menu"
    },
    "3.0.22": {
      "file": "update-3.0.22.zip",
      "size": 3113208,
      "sha256": "d5ae9975c360ed1f1a65f6c861ed443e939973855b487ceedfd7a09c8eca6cdc",
      "from": "any",
      "to": "3.0.22",
      "date": "2026-10-17 15:22",
      "changelog": "3.0.22: fresh-instance Mask install proven on mask-test5 (all checks green). Auto WMI launch if stopped; serial from list2 index; PID-kill VM restart; remount rw; grant Superuser prompt; wait after Magisk reboot; auto-download full Kitsune APK from farm server if missing/stub"
    },
    "3.0.23": {
      "file": "update-3.0.23.zip",
      "size": 3113676,
      "sha256": "a50e6c6670fc46f28dc6cd0bb065e30b92ce7cbddb81e75f04cf9ad361bcda8b",
      "from": "any",
      "to": "3.0.23",
      "date": "2026-10-17 15:54",
      "changelog": "3.0.23: after Direct Install skip adb root (it hung wait-for-device on new machine at Remove built-in su). Use /sbin/magisk su to remount+rm su+INSERT policy. UTF-8 log so checklist is readable."
    },
    "3.0.24": {
      "file": "update-3.0.24.zip",
      "size": 3114156,
      "sha256": "a96051d43e4091730a019e7e6c68dce7d8737332e5ee50d6ee9ed84ffa99827b",
      "from": "any",
      "to": "3.0.24",
      "date": "2026-10-17 17:20",
      "changelog": "3.0.24: bound instance DNS no longer DNATs to Clash 1053 (7890 HK hop kept). Proxy tab OK + instance no-net was 1053 blackhole. Watchdog autostart. Magisk su fallback. Bind shows guest apply result."
    },
    "3.0.25": {
      "file": "update-3.0.25.zip",
      "size": 3114875,
      "sha256": "0854084aea80ecf6da878b9e950acebfec0d6b41426c73642943275e7d80532e",
      "from": "any",
      "to": "3.0.25",
      "date": "2026-10-17 18:23",
      "changelog": "3.0.25: live adb serial from ldconsole list2 index (DB adb_serial goes stale). Bind/watchdog/Mask use live serial and rewrite DB. Fixes AI 'ADB serial mismatch'."
    },
    "3.0.26": {
      "file": "update-3.0.26.zip",
      "size": 3115431,
      "sha256": "d9aab01598a88718b573bea0d93df7eeb41a89fd124928b17bd5cd2f9384f90d",
      "from": "any",
      "to": "3.0.26",
      "date": "2026-10-17 18:29",
      "changelog": "3.0.26: Magisk su rc=1 no longer aborts pxd bootstrap (bound IP looked saved, guest had no net). apply_instance_proxy surfaces CommandError. Live serial still from list2."
    },
    "3.0.27": {
      "file": "update-3.0.27.zip",
      "size": 3115641,
      "sha256": "601eb8074da6fe549ee7148abfac72ab4b3f9c7c6948f50b0878df67669fd953",
      "from": "any",
      "to": "3.0.27",
      "date": "2026-10-17 18:41",
      "changelog": "3.0.27: Magisk su swallows wc -c < file (empty remote size vs 617104). Verify with wc -c path. Rebind after update."
    },
    "3.0.28": {
      "file": "update-3.0.28.zip",
      "size": 3115692,
      "sha256": "a7d43c8fa186f8d406e1f22b88ca0362cb6562ff29711baf546b769a4cc8d19c",
      "from": "any",
      "to": "3.0.28",
      "date": "2026-10-17 18:50",
      "changelog": "3.0.28: pxd size check via adb shell not Magisk su (3.0.27 wc -c path still empty). Watchdog can then finish guest=proxy."
    },
    "3.0.29": {
      "file": "update-3.0.29.zip",
      "size": 3115838,
      "sha256": "45355482fb7beb999deb7cfcdf636f15726a408a108cf3ec2f2f004b4ea3bcae",
      "from": "any",
      "to": "3.0.29",
      "date": "2026-10-17 18:59",
      "changelog": "3.0.29: pxd start via /data/local/tmp/pxd-start.sh; status ps via adb shell not Magisk su. Do not restore builtin su (5 apps would see root). Rebind after panel restart."
    },
    "3.0.30": {
      "file": "update-3.0.30.zip",
      "size": 3116449,
      "sha256": "786f611a7cc03be5ef1fb76f9f7deaf900eb9aaade2f4d3315e23716720073f5",
      "from": "any",
      "to": "3.0.30",
      "date": "2026-10-17 19:09",
      "changelog": "3.0.30: if pxd fails, fallback settings put global http_proxy to 172.16.1.2:gateway (still via TAG 7890). LDPlayer NIC bridge is NOT used (that is host LAN IP)."
    },
    "3.0.31": {
      "file": "update-3.0.31.zip",
      "size": 3118985,
      "sha256": "5435b1c660f73189c18f8a1dccc2825d5213e23b7a31561dc4b3be8ed30e99f9",
      "from": "any",
      "to": "3.0.31",
      "date": "2026-10-17 22:34",
      "changelog": "3.0.31 re-publish: installer python fix - after silent 3.12 install use C:\\Program Files\\Python312\\python.exe (not where python, PATH stale old python won); install_master rebuilds .venv when existing interpreter <3.10"
    },
    "3.0.32": {
      "file": "update-3.0.32.zip",
      "size": 3119693,
      "sha256": "61bc702db2f1f07deeee0163caa6ebbb8b46473786ed608a75c8588de8215138",
      "from": "any",
      "to": "3.0.32",
      "date": "2026-10-17 22:38",
      "changelog": "3.0.32: window arrange fix - find LDPlayer9 windows via dnplayer process (qemu-system-x86_64 never matched), restore minimized windows before grid placement"
    },
    "3.0.33": {
      "file": "update-3.0.33.zip",
      "size": 3120276,
      "sha256": "ca86f08bb2f6a120cd354caefaf7bf05577f9c86b6111d45a792a3d367ed5695",
      "from": "any",
      "to": "3.0.33",
      "date": "2026-10-17 23:33",
      "changelog": "3.0.33 (CRLF bat): panel-installer.bat converted to CRLF line endings for reliable cmd parsing"
    },
    "3.0.34": {
      "file": "update-3.0.34.zip",
      "size": 3126297,
      "sha256": "4db40c03476ad86bbe9cc76f5b6d9829386104390d928021574209c302aa50ff",
      "from": "any",
      "to": "3.0.34",
      "date": "2026-10-18 11:34",
      "changelog": "3.0.34 fingerprint pool: 9 regions x 11-14 models (68 unique Android devices), resolution table completed, 1000-profile (10x100) zero-collision verified"
    },
    "3.0.35": {
      "file": "update-3.0.35.zip",
      "size": 3126986,
      "sha256": "58944c9af16ec7d1b82d743dd34e745c3c15a9f0d3b75e01f5e8709c14f5aa5c",
      "from": "any",
      "to": "3.0.35",
      "date": "2026-10-18 13:07",
      "changelog": "热更新检查修复（无代理直连+失败显示真实原因）；全量代码包与安装器对齐 3.0.35"
    },
    "3.0.36": {
      "file": "update-3.0.36.zip",
      "size": 3127887,
      "sha256": "79196d2c66a02fad52b5488894d397f93f624b70fd3154e3eacbcac5d242c8f9",
      "from": "any",
      "to": "3.0.36",
      "date": "2026-10-18 14:49",
      "changelog": "面板删除实例彻底化：remove 不静默、运行中先 quit、删除后验证生效；全量包/安装器对齐 3.0.36"
    },
    "3.0.37": {
      "file": "update-3.0.37.zip",
      "size": 3128159,
      "sha256": "d23485db49073df772c4b41fa9492106c044e2c412f5816132ce74d456a6f10f",
      "from": "any",
      "to": "3.0.37",
      "date": "2026-10-18 19:56",
      "changelog": "修复检查更新弹窗：跨线程信号替代 QTimer.singleShot（手动+定时检查都能弹窗）；定时检查同修"
    },
    "3.0.38": {
      "file": "update-3.0.38.zip",
      "size": 3162048,
      "sha256": "784437873bdd8a76025c8a91aadafd0db6195376a5064c24d79e5e6a8ddfa798",
      "from": "3.0.37",
      "to": "3.0.38",
      "date": "2026-10-19 17:45",
      "changelog": "启动异步化(①)+pxd快速失败(②)+apply 30s deadline(③) — 部署机启动转圈修复；PxdUnavailableError 直走 reverse fallback"
    },
    "3.0.39": {
      "file": "update-3.0.39.zip",
      "size": 3165307,
      "sha256": "bd07e02d82161db8422d6f4db64e94fcdc54d4a416b7daa52b270e7b59ee83af",
      "from": "any",
      "to": "3.0.39",
      "date": "2026-10-19 18:23",
      "changelog": "全量包含 assets/api28_devices.json；热更打不开请用此包重装。重启走 start_panel.bat"
    }
  },
  "history": [
    {
      "file": "update-3.0.39.zip",
      "size": 3165307,
      "sha256": "bd07e02d82161db8422d6f4db64e94fcdc54d4a416b7daa52b270e7b59ee83af",
      "from": "any",
      "to": "3.0.39",
      "date": "2026-10-19 18:23",
      "changelog": "全量包含 assets/api28_devices.json；热更打不开请用此包重装。重启走 start_panel.bat"
    },
    {
      "file": "update-3.0.37.zip",
      "size": 3128159,
      "sha256": "d23485db49073df772c4b41fa9492106c044e2c412f5816132ce74d456a6f10f",
      "from": "any",
      "to": "3.0.37",
      "date": "2026-10-18 19:56",
      "changelog": "修复检查更新弹窗：跨线程信号替代 QTimer.singleShot（手动+定时检查都能弹窗）；定时检查同修"
    },
    {
      "file": "update-3.0.36.zip",
      "size": 3127887,
      "sha256": "79196d2c66a02fad52b5488894d397f93f624b70fd3154e3eacbcac5d242c8f9",
      "from": "any",
      "to": "3.0.36",
      "date": "2026-10-18 14:49",
      "changelog": "面板删除实例彻底化：remove 不静默、运行中先 quit、删除后验证生效；全量包/安装器对齐 3.0.36"
    },
    {
      "file": "update-3.0.35.zip",
      "size": 3126986,
      "sha256": "58944c9af16ec7d1b82d743dd34e745c3c15a9f0d3b75e01f5e8709c14f5aa5c",
      "from": "any",
      "to": "3.0.35",
      "date": "2026-10-18 13:07",
      "changelog": "热更新检查修复（无代理直连+失败显示真实原因）；全量代码包与安装器对齐 3.0.35"
    },
    {
      "file": "update-3.0.34.zip",
      "size": 3126297,
      "sha256": "4db40c03476ad86bbe9cc76f5b6d9829386104390d928021574209c302aa50ff",
      "from": "any",
      "to": "3.0.34",
      "date": "2026-10-18 11:34",
      "changelog": "3.0.34 fingerprint pool: 9 regions x 11-14 models (68 unique Android devices), resolution table completed, 1000-profile (10x100) zero-collision verified"
    },
    {
      "file": "update-3.0.33.zip",
      "size": 3120276,
      "sha256": "ca86f08bb2f6a120cd354caefaf7bf05577f9c86b6111d45a792a3d367ed5695",
      "from": "any",
      "to": "3.0.33",
      "date": "2026-10-17 23:33",
      "changelog": "3.0.33 (CRLF bat): panel-installer.bat converted to CRLF line endings for reliable cmd parsing"
    },
    {
      "file": "update-3.0.33.zip",
      "size": 3120255,
      "sha256": "0797df38fcd8c1a196e565f4f00037748af87440c8d795811b2ecb5f6fd53d33",
      "from": "any",
      "to": "3.0.33",
      "date": "2026-10-17 23:27",
      "changelog": "3.0.33 (re-pack): python setup excluded from code volumes (uploaded separately); same installer logic"
    },
    {
      "file": "update-3.0.33.zip",
      "size": 29794115,
      "sha256": "4e94a483e76ac0f707ca51222418a073214aaf28974a297a5cd845cdda8d5d21",
      "from": "any",
      "to": "3.0.33",
      "date": "2026-10-17 23:24",
      "changelog": "3.0.33: installer python reliability - Python 3.12.10 setup mirrored on our server (fast for CN deploys, python.org fallback); per-user silent install (no admin) -> C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312 detected by fixed path; version hard-check rejects MS Store python stubs and stale old PATH pythons"
    },
    {
      "file": "update-3.0.32.zip",
      "size": 3119693,
      "sha256": "61bc702db2f1f07deeee0163caa6ebbb8b46473786ed608a75c8588de8215138",
      "from": "any",
      "to": "3.0.32",
      "date": "2026-10-17 22:38",
      "changelog": "3.0.32: window arrange fix - find LDPlayer9 windows via dnplayer process (qemu-system-x86_64 never matched), restore minimized windows before grid placement"
    },
    {
      "file": "update-3.0.31.zip",
      "size": 3118985,
      "sha256": "5435b1c660f73189c18f8a1dccc2825d5213e23b7a31561dc4b3be8ed30e99f9",
      "from": "any",
      "to": "3.0.31",
      "date": "2026-10-17 22:34",
      "changelog": "3.0.31 re-publish: installer python fix - after silent 3.12 install use C:\\Program Files\\Python312\\python.exe (not where python, PATH stale old python won); install_master rebuilds .venv when existing interpreter <3.10"
    },
    {
      "file": "update-3.0.31.zip",
      "size": 3117516,
      "sha256": "97950bf216ee6fb9144e789a87d45a69d142a15e0de6fe14eda96b5b9ae28a85",
      "from": "any",
      "to": "3.0.31",
      "date": "2026-10-17 19:24",
      "changelog": "3.0.31: panel port-forwarding fallback when pxd fails - per-instance adb reverse (18000+id) maps guest 127.0.0.1:port to host gateway, then settings http_proxy 127.0.0.1:<guest_port> (via TAG 7890 -> bound SOCKS5). NAT-alias http_proxy kept as last resort."
    },
    {
      "file": "update-3.0.30.zip",
      "size": 3116449,
      "sha256": "786f611a7cc03be5ef1fb76f9f7deaf900eb9aaade2f4d3315e23716720073f5",
      "from": "any",
      "to": "3.0.30",
      "date": "2026-10-17 19:09",
      "changelog": "3.0.30: if pxd fails, fallback settings put global http_proxy to 172.16.1.2:gateway (still via TAG 7890). LDPlayer NIC bridge is NOT used (that is host LAN IP)."
    },
    {
      "file": "update-3.0.29.zip",
      "size": 3115838,
      "sha256": "45355482fb7beb999deb7cfcdf636f15726a408a108cf3ec2f2f004b4ea3bcae",
      "from": "any",
      "to": "3.0.29",
      "date": "2026-10-17 18:59",
      "changelog": "3.0.29: pxd start via /data/local/tmp/pxd-start.sh; status ps via adb shell not Magisk su. Do not restore builtin su (5 apps would see root). Rebind after panel restart."
    },
    {
      "file": "update-3.0.28.zip",
      "size": 3115692,
      "sha256": "a7d43c8fa186f8d406e1f22b88ca0362cb6562ff29711baf546b769a4cc8d19c",
      "from": "any",
      "to": "3.0.28",
      "date": "2026-10-17 18:50",
      "changelog": "3.0.28: pxd size check via adb shell not Magisk su (3.0.27 wc -c path still empty). Watchdog can then finish guest=proxy."
    },
    {
      "file": "update-3.0.27.zip",
      "size": 3115641,
      "sha256": "601eb8074da6fe549ee7148abfac72ab4b3f9c7c6948f50b0878df67669fd953",
      "from": "any",
      "to": "3.0.27",
      "date": "2026-10-17 18:41",
      "changelog": "3.0.27: Magisk su swallows wc -c < file (empty remote size vs 617104). Verify with wc -c path. Rebind after update."
    },
    {
      "file": "update-3.0.26.zip",
      "size": 3115431,
      "sha256": "d9aab01598a88718b573bea0d93df7eeb41a89fd124928b17bd5cd2f9384f90d",
      "from": "any",
      "to": "3.0.26",
      "date": "2026-10-17 18:29",
      "changelog": "3.0.26: Magisk su rc=1 no longer aborts pxd bootstrap (bound IP looked saved, guest had no net). apply_instance_proxy surfaces CommandError. Live serial still from list2."
    },
    {
      "file": "update-3.0.25.zip",
      "size": 3114875,
      "sha256": "0854084aea80ecf6da878b9e950acebfec0d6b41426c73642943275e7d80532e",
      "from": "any",
      "to": "3.0.25",
      "date": "2026-10-17 18:23",
      "changelog": "3.0.25: live adb serial from ldconsole list2 index (DB adb_serial goes stale). Bind/watchdog/Mask use live serial and rewrite DB. Fixes AI 'ADB serial mismatch'."
    },
    {
      "file": "update-3.0.24.zip",
      "size": 3114156,
      "sha256": "a96051d43e4091730a019e7e6c68dce7d8737332e5ee50d6ee9ed84ffa99827b",
      "from": "any",
      "to": "3.0.24",
      "date": "2026-10-17 17:20",
      "changelog": "3.0.24: bound instance DNS no longer DNATs to Clash 1053 (7890 HK hop kept). Proxy tab OK + instance no-net was 1053 blackhole. Watchdog autostart. Magisk su fallback. Bind shows guest apply result."
    },
    {
      "file": "update-3.0.23.zip",
      "size": 3113676,
      "sha256": "a50e6c6670fc46f28dc6cd0bb065e30b92ce7cbddb81e75f04cf9ad361bcda8b",
      "from": "any",
      "to": "3.0.23",
      "date": "2026-10-17 15:54",
      "changelog": "3.0.23: after Direct Install skip adb root (it hung wait-for-device on new machine at Remove built-in su). Use /sbin/magisk su to remount+rm su+INSERT policy. UTF-8 log so checklist is readable."
    },
    {
      "file": "update-3.0.22.zip",
      "size": 3113208,
      "sha256": "d5ae9975c360ed1f1a65f6c861ed443e939973855b487ceedfd7a09c8eca6cdc",
      "from": "any",
      "to": "3.0.22",
      "date": "2026-10-17 15:22",
      "changelog": "3.0.22: fresh-instance Mask install proven on mask-test5 (all checks green). Auto WMI launch if stopped; serial from list2 index; PID-kill VM restart; remount rw; grant Superuser prompt; wait after Magisk reboot; auto-download full Kitsune APK from farm server if missing/stub"
    },
    {
      "file": "update-3.0.21.zip",
      "size": 3112555,
      "sha256": "f200eb28ea91c096dcd39c0431cb33b03dfccf6b5f886496c1626535a6a212a2",
      "from": "any",
      "to": "3.0.21",
      "date": "2026-10-17 13:38",
      "changelog": "3.0.21: Mask install step checklist (resume missing steps); PID-kill VM restart + remount rw before Direct Install; grant LDPlayer Superuser prompt; Magisk Manager show/hide via magisk su (pm unhide/hide); panel toolbar+context menu"
    },
    {
      "file": "update-3.0.20.zip",
      "size": 3105796,
      "sha256": "33a95a675c0f9d06673b35e29bdcd6ff9d02bdf6009a74a6dbf709e5255d5d2d",
      "from": "any",
      "to": "3.0.20",
      "date": "2026-10-17 11:41",
      "changelog": "3.0.20: TikTok package corrected to com.zhiliaoapp.musically (wizard 5-App check + install list); installer re-downloads code pack (no stale cache); installer hard-gates on version match; panel-installer.zip rebuilt from current bat; proxy bind-instance counts + full proxy status in bind dialog + horizontally scrollable tables"
    },
    {
      "file": "update-3.0.19.zip",
      "size": 3098762,
      "sha256": "0a7d4b321315a0d9f2ece6a40bc4eb649527242c50fc80b7f2af8d74fb752597",
      "from": "any",
      "to": "3.0.19",
      "date": "2026-10-17 11:10",
      "changelog": "hide_su mother-disk, SNI gateway, proxy bind counts, horizontal tables, create_standalone_instance.py"
    },
    {
      "file": "update-3.0.18.zip",
      "size": 3085165,
      "sha256": "f911b44cdd7873d257fc91939a2d81126812b3ae1e1c261da9e9c592ebf4907c",
      "from": "any",
      "to": "3.0.18",
      "date": "2026-10-16 21:50",
      "changelog": "3.0.18：一键 Mask 安装按钮 + 代理出口加固（清 guest 系统代理 + 启动后等 adb 稳定）"
    },
    {
      "file": "update-2.0.1.zip",
      "size": 417724,
      "sha256": "7b54076fb20ddfbb5f552d690ca93b6273233ca2c30ab768a14aa36915b7dd94",
      "from": "2.0.0",
      "to": "2.0.1",
      "date": "2026-10-14 16:12",
      "changelog": "hot-update chain verification"
    },
    {
      "file": "update-2.0.2.zip",
      "size": 417761,
      "sha256": "86faee03bc4ec6cb2ee264dfda072033f6cb257a6583623c80f5a2eadb401758",
      "from": "2.0.1",
      "to": "2.0.2",
      "date": "2026-10-14 16:15",
      "changelog": "code volume now ships packaging tooling (update.py/install_master.py/common.py)"
    },
    {
      "file": "update-3.0.1.zip",
      "size": 431764,
      "sha256": "97964f7153311ac0ac2ab68b49425903f9bb9b8346d8b704bd18df553283e9bf",
      "from": "2.0.2",
      "to": "3.0.1",
      "date": "2026-10-14 17:57",
      "changelog": "面板集成热更新：自动检查+弹窗一键更新+更新后自动重启"
    },
    {
      "file": "update-3.0.2.zip",
      "size": 433417,
      "sha256": "dfa75974dccfaf37e414b5fb6e2ed8fb6fce64772d8d451323d9ccd5066816d9",
      "from": "3.0.1",
      "to": "3.0.2",
      "date": "2026-10-14 18:15",
      "changelog": "修复安装脚本加载（不再依赖 packaging import）+ 向导分步安装/实时进度条"
    },
    {
      "file": "update-3.0.3.zip",
      "size": 433436,
      "sha256": "1ec7c4d9f46346cb6741591c94b06d29f4b6d363e442ce45ac1f5af3bdef69d9",
      "from": "3.0.2",
      "to": "3.0.3",
      "date": "2026-10-14 18:20",
      "changelog": "SDK 安装修复：自动装便携 JRE17（sdkmanager 免 Java）+ licenses 自动应答 y + 失败打印完整诊断"
    },
    {
      "file": "update-3.0.4.zip",
      "size": 482703,
      "sha256": "168921aa02b061c65920551c588e34ebaf9944cb44514b7d8e09e39721969ead",
      "from": "3.0.3",
      "to": "3.0.4",
      "date": "2026-10-14 18:21",
      "changelog": "SDK 安装修复：自动装便携 JRE17 + licenses 自动应答 y + 失败打印完整诊断；热更新白名单加入 packaging/"
    },
    {
      "file": "update-3.0.5.zip",
      "size": 483864,
      "sha256": "141c06cb767e103d0d9b15c3c89d5b0df9cba832e92b2c669832faa0a7809825",
      "from": "3.0.4",
      "to": "3.0.5",
      "date": "2026-10-14 18:47",
      "changelog": "SDK 安装 Java 修复 v2：curl 下载绕过 TLS 指纹拦截 + 三镜像源（Adoptium/TUNA/华为）"
    },
    {
      "file": "update-3.0.6.zip",
      "size": 486095,
      "sha256": "e05e20848e3b6215f2b0498618d9ca863ca5db0c5fd34f1c6d41dacf8edc8a4a",
      "from": "3.0.5",
      "to": "3.0.6",
      "date": "2026-10-14 18:58",
      "changelog": "Java 改服务器分发：jdk17.zip 已在服务器就绪(41MB JRE)，SDK 步骤优先从服务器下载，镜像兜底 TUNA/华为"
    },
    {
      "file": "update-3.0.7.zip",
      "size": 486910,
      "sha256": "fc790919161d9dbd764972e4192d947b302b38b35f28f7c57169158bdff50c19",
      "from": "3.0.6",
      "to": "3.0.7",
      "date": "2026-10-14 19:09",
      "changelog": "SDK 安装防卡死：子进程强制无缓冲(实时输出)+下载全改 curl(超时/速度检测)+cmdline-tools 缓存保留+看门狗超时终止"
    },
    {
      "file": "update-3.0.8.zip",
      "size": 490149,
      "sha256": "e6727f7a89a2a419acfc7990e131b192ced6c00418820968ad6a14b104216f15",
      "from": "3.0.7",
      "to": "3.0.8",
      "date": "2026-10-14 19:19",
      "changelog": "向导日志首行显示代码版本号；新增 install-sdk.bat 独立安装器(绕过面板版本)"
    },
    {
      "file": "update-3.0.9.zip",
      "size": 490296,
      "sha256": "46b038dc491d497553cc396e756f7d67446a15a85e6ac76034a3d253ef0f4194",
      "from": "3.0.8",
      "to": "3.0.9",
      "date": "2026-10-14 19:24",
      "changelog": "SDK 横幅动态读 version.json（消除 v3.0.7 旧字符串）；安装器校验放宽为 banner 存在即可"
    },
    {
      "file": "update-3.0.10.zip",
      "size": 493185,
      "sha256": "4b521cc18903cab7088c1c8fe1e77284d03aa3882bd3f71956c7dd1a86e9ef38",
      "from": "3.0.9",
      "to": "3.0.10",
      "date": "2026-10-14 19:30",
      "changelog": "新增 sdk_install_manual.py：纯下载官方zip直装(无sdkmanager/Java，不会卡licenses)；install-sdk.bat 默认走 manual 模式"
    },
    {
      "file": "update-3.0.11.zip",
      "size": 493257,
      "sha256": "b0f0f019353da1fdb7e85234fd7cf766c7a4295e21e0f559ee6fe4847d77e03c",
      "from": "3.0.10",
      "to": "3.0.11",
      "date": "2026-10-14 19:32",
      "changelog": "licenses 首次即自动喂 y（不再等 120s 超时）；sdkmanager 超时改为明确报错"
    },
    {
      "file": "update-3.0.12.zip",
      "size": 494749,
      "sha256": "6396876963fc93fe9a303addda025e6bfe8e75eaa8ea5784151b83dba4bb598f",
      "from": "3.0.11",
      "to": "3.0.12",
      "date": "2026-10-14 19:45",
      "changelog": "fix: build_golden_template ADB path now resolved from --sdk-dir (was hardcoded D:\\AndroidSDK); golden AVD step 4 no longer hangs on deployment machines"
    },
    {
      "file": "update-3.0.13.zip",
      "size": 494746,
      "sha256": "6b2a49a8b483491e1e09516d3c524d280a9027b1946dabe4f1813d66e3459be9",
      "from": "3.0.12",
      "to": "3.0.13",
      "date": "2026-10-14 19:48",
      "changelog": "fix: app/main.py missing module logger crashed hot-update thread (NameError at 6s); ADB resolved from --sdk-dir in build_golden_template"
    },
    {
      "file": "update-3.0.14.zip",
      "size": 495054,
      "sha256": "467c630c78da0cde1fd2b5a86f63027a3cedc97899e1188287c7753aa6ff4aaf",
      "from": "3.0.13",
      "to": "3.0.14",
      "date": "2026-10-14 19:53",
      "changelog": "feat: main window title shows code version; golden AVD check now requires .golden_ok marker + ramdisk.img (no more false green); build_golden writes .golden_ok on success"
    },
    {
      "file": "update-3.0.15.zip",
      "size": 495299,
      "sha256": "f0aa944344c12b4b7414a4b90d9e7f1c24b37fbd73fc64053ce66ad716f32928",
      "from": "3.0.14",
      "to": "3.0.15",
      "date": "2026-10-14 20:05",
      "changelog": "fix: AVD ini now synced to \\$HOME\\\\.android\\\\avd (WMI-spawned emulator did not inherit ANDROID_AVD_HOME -> Unknown AVD name crash on deployment machines)"
    },
    {
      "file": "update-3.0.16.zip",
      "size": 3056245,
      "sha256": "6bb281c9a9d7e67fec90fc0fdb79d2df2d44a5f18615e320884d7420d27a8cba",
      "from": "3.0.15",
      "to": "3.0.16",
      "date": "2026-10-16 16:01",
      "changelog": "3.0.16：① 实例 tab 拆分重构（instances.py 独立 703 行，MainWindow 瘦身，零行为变化）；② 新增「手动注入仿真数据」按钮（重放当前指纹档案，不重建指纹/不自动启停，可多选批量）；③ 批量删除：实例删除改为真批量（一次确认删全部选中，template 跳过），代理/账号表格支持多选并新增「删除所选」（代理删除自动停网关+解绑实例，账号删除级联清指纹/会话）；④ M3/M4 雷电化收尾（删除官方模拟器引擎，向导 3 项检查，ADB 默认雷电自带）；⑤ 客户端热更新白名单与 packaging 对齐（补 packaging/ 路径）"
    },
    {
      "file": "update-3.0.35.zip",
      "size": 3127016,
      "sha256": "92aaa8027c0baae98e2d160d02e9b26e790f0e82360cc096a3f66f4534c827aa",
      "from": "3.0.34",
      "to": "3.0.35",
      "date": "2026-10-18 12:45",
      "changelog": "热更新修复：更新检查/下载绕过系统代理直连服务器；网络失败显示真实原因不再误报已最新"
    },
    {
      "file": "update-3.0.36.zip",
      "size": 3127913,
      "sha256": "268013c994d715462986dfa12837dcd0b3bfd238f805b842c76b484560088522",
      "from": "3.0.35",
      "to": "3.0.36",
      "date": "2026-10-18 14:46",
      "changelog": "面板删除实例彻底化：remove 不再静默（找不到实例明确报错）、运行中实例自动 quit 后再删、删除后验证生效"
    },
    {
      "file": "update-3.0.38.zip",
      "size": 3162048,
      "sha256": "784437873bdd8a76025c8a91aadafd0db6195376a5064c24d79e5e6a8ddfa798",
      "from": "3.0.37",
      "to": "3.0.38",
      "date": "2026-10-19 17:45",
      "changelog": "启动异步化(①)+pxd快速失败(②)+apply 30s deadline(③) — 部署机启动转圈修复；PxdUnavailableError 直走 reverse fallback"
    },
    {
      "file": "update-3.0.39.zip",
      "size": 3164237,
      "sha256": "cae111a568c262acb741670122c20a507f71b36c73c7443e77db47b9b3d3c84a",
      "from": "3.0.38",
      "to": "3.0.39",
      "date": "2026-10-19 18:13",
      "changelog": "热更新重启修复(延迟3s走start_panel.bat释放SQLite，解压前语法检查)+跳过guest Clash乱点+USB等待缩短+去掉17890 reverse；修publish_installer_zip语法错误。3.0.37→3.0.38打不开根因=WMI拉python.exe时旧进程仍占库"
    }
  ]
}