{
  "app": "REPO Mod Keeper",
  "author": "慕沄",
  "version": "2.3.3",
  "mandatory": false,
  "published": "2026-09-28 19:44:11",
  "notes": "v2.3.3 依赖能直接搜到 · 模组版本可升可降\n· 模组库新增「含依赖库」开关：一输关键字就自动勾上，REPOLib / MenuLib 这类 Libraries 分类的包\n  能直接搜出来（勾选后给条目打「依赖库」标记，纯地图与整合包仍然排除）\n· 新增版本升降级：点开任意模组详情，出现「切换版本」下拉，列出该模组**全部**历史版本\n  （带发布日期），选好点一下即可升级或降级 —— 降级与升级走同一条路\n· 详情弹层底部按钮会跟着变：已装同版本显示「已安装 vX」，不同版本显示「升级到 / 降级到 vX」\n· 已安装列表每个模组多了一个「版本」按钮，一键跳到详情切版本\n· 依赖清单重做：每个依赖显示「需 ≥ vX / 已装 vY」与状态（已满足 / 版本偏低 / 未安装），\n  点名字可跳到该依赖的详情，缺的或版本不够的直接「补装」\n· 降级时旧版本多出来的文件会自动清退，不会留下孤儿；被禁用的模组切完版本仍保持禁用\n· 依赖只升不降：切到旧版时，已装的依赖不会被拖回低版本",
  "announcement": "欢迎使用 REPO 模组管家 2.0.0。模组与地图均来自 Thunderstore，安装需联网。安装模组前请先完全退出游戏。",
  "file": "REPO模组管家.zip",
  "entry": "REPO模组管家.exe",
  "size": 29408443,
  "sha256": "f1e153ea4485828110b7888faa8a3ab448122d188f0f738c859d565c8dd65279",
  "requires": "win10+ x64",
  "history": [
    {
      "version": "2.3.3",
      "date": "2026-09-28",
      "notes": "v2.3.3 依赖能直接搜到 · 模组版本可升可降\n· 模组库新增「含依赖库」开关：一输关键字就自动勾上，REPOLib / MenuLib 这类 Libraries 分类的包\n  能直接搜出来（勾选后给条目打「依赖库」标记，纯地图与整合包仍然排除）\n· 新增版本升降级：点开任意模组详情，出现「切换版本」下拉，列出该模组**全部**历史版本\n  （带发布日期），选好点一下即可升级或降级 —— 降级与升级走同一条路\n· 详情弹层底部按钮会跟着变：已装同版本显示「已安装 vX」，不同版本显示「升级到 / 降级到 vX」\n· 已安装列表每个模组多了一个「版本」按钮，一键跳到详情切版本\n· 依赖清单重做：每个依赖显示「需 ≥ vX / 已装 vY」与状态（已满足 / 版本偏低 / 未安装），\n  点名字可跳到该依赖的详情，缺的或版本不够的直接「补装」\n· 降级时旧版本多出来的文件会自动清退，不会留下孤儿；被禁用的模组切完版本仍保持禁用\n· 依赖只升不降：切到旧版时，已装的依赖不会被拖回低版本"
    },
    {
      "version": "2.3.2",
      "date": "2026-09-28",
      "notes": "v2.3.2 「实用模组」改名「模组」，模组库支持实时搜索\n· 顶部标签「实用模组」改名为「模组」\n· 模组页简化为两段：模组库 / 已安装（原「热门模组」与「全部模组」合并为模组库）\n· 搜索框常驻在模组库顶部：**边输边搜**（320ms 防抖），不用再回车、也不用先切到\"全部模组\"\n· 留空即回到热门列表（按下载量），排序切换（下载量 / 名称 / 大小）立即生效\n· 搜索结果与热门列表一样直接勾选安装，依赖自动补齐、已装自动跳过"
    },
    {
      "version": "2.3.1",
      "date": "2026-09-28",
      "notes": "v2.3.1 修正模组安装落位：依赖不再钻进模组文件夹，带资源的模组不再丢资源\n· 依赖库（REPOLib / MenuLib 这类纯 dll）现在平铺到 BepInEx/plugins/ 根目录，不再额外建 <包id>/ 子文件夹 —— 依赖不会钻进「对应模组的文件夹」，启用 / 禁用 / 删除互不牵连\n· 修复「带配套资源的模组装上就缺资源」：像 ExtractionPointConfirmButton 这种自带 extractionpointconfirmbutton_assets 的模组，Thunderstore 明确要求「assets 必须与模组 DLL 放在同一个文件夹」，现在这类包会整体安装到 BepInEx/plugins/<包id>/，dll 与资源同目录，不再只搬 dll 而把资源丢掉\n· 安装时自动去重同名 dll：不少模组会把依赖 dll 一起打进自己的包，导致同一程序集在 plugins/ 根目录和模组子目录各有一份；BepInEx 5 会递归扫描并把两份都加载，引发类型冲突 / 插件重复初始化。现在同名 dll 只保留最外层那份，并从索引里同步摘除副本\n· 覆盖保护：装包时若覆盖了已存在的同名文件会明确告警；旧版子目录布局的残留文件会在重装时自动清退，不留孤儿\n· 建议：如果你之前装过带配套资源的模组（如 ExtractionPointConfirmButton），升级后在「已安装」页把它重新装一次，即可补齐缺失的资源文件"
    },
    {
      "version": "2.3.0",
      "date": "2026-09-28",
      "notes": "v2.3.0 房间实时化 + 模组开关模型 + 界面全新配色\n· 房间通信升级为 WebSocket 实时推送（服务端纯标准库手写实现，无需任何第三方依赖）：房主改清单，成员端 1 秒内收到并自动对齐，不再依赖定时轮询；旧版服务端自动退回定时刷新，功能不受影响\n· 模组对齐改为「开关模型」：房主有的启用、房主没有的禁用，绝不删除任何文件（目录型整体移入 BepInEx/_repo_disabled，散装 dll 改名 .disabled，BepInEx 本体永不参与）\n· 退出房间 / 关闭程序时，自动把本次房间关掉的模组重新开起来；换房间先还原上一间的状态再对齐新房，随时可以加入别人的房间\n· 「已安装」列表支持单个模组手动启用 / 禁用，被禁用的模组不会被自动修复误判为缺失而重装\n· 界面推倒重做：石墨深色配色 + 单一暖橙强调色，移除全部蓝紫渐变与发光效果；浅色主题同步更新\n· 房间页新增实时通道状态指示与「自动跟随房主」开关（关掉后只提醒，由你手动对齐）\n· 后端部署包同步更新：update_server.py 已内置 WebSocket 支持（/ws 端点），解压替换即可"
    },
    {
      "version": "2.2.1",
      "date": "2026-09-27",
      "notes": "v2.2.1 内置汉化包换代：toored / Chinese_Translation 0.4.406\n· 汉化资源包更换为 Thunderstore「toored-Chinese_Translation 0.4.406」：含游戏本体 + 80 余个常用模组的简体中文翻译，共 1 万余条词条\n· 词条结构升级为 config/Translation/zh（*.txt + Localizations/*.tsv + plugins/**）并内置中文字体；资源包体积由 49 MB 降到 9.4 MB\n· 一键汉化时会自动「备份并移除」旧版汉化残留（plugins/AutoTranslator、patchers/SimplifiedChinesePatch.dll、config/Fonts、config/Translation/zh_cn 等），避免新旧插件/Patch 被 BepInEx 重复加载；卸载时按备份精确还原\n· 模组对账把旧版汉化路径一并视为汉化托管，不会被误登记为模组或误删\n· 汉化页改为分组展示翻译词条统计（本体 / 官方本地化 / 模组翻译）"
    },
    {
      "version": "2.2.0",
      "date": "2026-09-27",
      "notes": "v2.2.0 新增「房间」：和朋友联机前自动对齐模组\n- 房主点「创建房间」得到 4 位房间码，房主当前的已装模组/地图清单一起上报服务器\n- 朋友输入 4 位码进房，客户端按房主的清单自动算出「需要补装 / 需要升级 / 已一致 / 我多装的」\n- 同步只做加法：补齐你缺的和版本低的，绝不删除你已有的任何模组（多出来的单独列出提示）\n- 进房时若房主的客户端或 BepInEx 版本比你新，弹窗提示先更新，可选择更新或仍然继续\n- 玩家名存在「用户信息.json」（与程序同目录）：首次运行随机生成，可自定义，也可随时重掷\n  · 换电脑会重新随机；把这个文件拷过去就是同一个人（名字与房间身份都跟着走）\n- 房间成员列表显示每个人的头像、客户端版本；版本和你不一样的人会被标红\n- 服务端 /room 接口：建/加/心跳/离开/改清单/关房，4 位码 1000-9999，房主令牌鉴权防冒名，\n  同一 IP 一分钟内 20 次「找不到房间」限流防爆破，房主断线 1 小时房间自动回收\n- 注意事项：房间功能需要重新部署新版 server/update_server.py（静态托管只支持自动更新）"
    },
    {
      "version": "2.1.2",
      "date": "2026-09-27",
      "notes": "v2.1.2 修复「下载到的不是有效的安装包」：\n- 客户端更新地址支持三种写法：完整 URL / 带子目录相对路径（如 releases/REPO模组管家.zip）/ 仅文件名，自动与更新源正确拼接\n- 下载日志与提示对更新源地址做脱敏，只显示路径，不暴露内置域名\n- 下载失败时给出可诊断信息：HTTP 状态码、Content-Type、响应头部片段，能区分「404 路径不对」「返回的是网页而非 zip」「包损坏」\n- 校验顺序调整：先判内容是否为 zip，再校验大小/哈希，任何异常都能给出最精准的定位\n- 自建服务端支持任意多级路径按文件名兜底取包（/x.zip、/releases/x.zip、/download/x.zip 均可）\n- 服务端首页新增「自检」，直接显示包名能否在 releases/ 找到、期望路径与现有文件"
    },
    {
      "version": "2.1.1",
      "date": "2026-09-27",
      "notes": "v2.1.1 修复严重缺陷：安装汉化不再搬走已装模组。\n- 汉化安装的备份范围改为「仅汉化包自己占用的路径」，不再整份搬走 BepInEx 目录\n- 备份新增清单文件，卸载时按清单精确还原；旧格式备份改为合并还原，绝不删除用户模组\n- 汉化包与模组可任意顺序安装/卸载，互不影响"
    },
    {
      "version": "2.1.0",
      "date": "2026-09-27",
      "notes": "v2.1.0 客户端自更新增强：服务器下发 zip 整包，客户端本地解压并写入版本文件，版本比对后自动替换并重启；模组/地图页统一多选导出与增删改；更新源内置隐藏。"
    },
    {
      "version": "2.0.0",
      "date": "2026-09-27",
      "notes": "v2.1.0 客户端自更新增强：服务器下发 zip 整包，客户端本地解压并写入版本文件，版本比对后自动替换并重启；模组/地图页统一多选导出与增删改；更新源内置隐藏。"
    },
    {
      "version": "1.1.0",
      "date": "2026-09-27",
      "notes": "内置必装模组清单、依赖自动补齐、白天/黑夜主题"
    },
    {
      "version": "1.0.0",
      "date": "2026-09-25",
      "notes": "首版：全盘扫描游戏目录、一键简中汉化、备份与还原"
    }
  ],
  "generated": "2026-09-28 19:44:11"
}