[MD]# 更新日志
## [1.0.3] - 2026-08-21
### 新增
- LumenBridge 框架本体在线更新:从市场检查新版本 → 下载并 SHA-256 校验后暂存(幂等,已暂存不重复下载)→ 热重载生效。热重载走 Endstone 官方 `Server.reload()`(与 `/reload` 命令同一实现);旧版 Endstone 无该绑定时自动回退派发 `reload` 命令
- `/lumen update framework [-y]` 命令(两步确认):不带 `-y` 只检查新版本并下载校验暂存(不更新);带 `-y` 才执行更新并热重载。热重载会重载服务器内**全部**插件(等同 `/reload`),故 `updates.auto_update` 对框架本体只通知不自动更新,必须由管理员经命令或 WebUI 确认弹窗手动确认(弹窗明确提示将重载所有插件、面板短暂下线后自动恢复)
- 热重载失败自动回滚:移除失败的新 wheel → 放回备份旧 wheel → 再次触发 reload 恢复旧版本运行
- 三语言(zh_CN / zh_TW / en)框架更新命令与 WebUI 确认弹窗文案
- 子插件强制依赖(`requires`):`lumen.json` 新增 `requires` 字段,可声明对其它子插件与 Endstone 插件的强制依赖(支持 `>= <= > < == !=` 六种版本约束,比较符与版本号成对出现)。加载时按依赖拓扑排序(被依赖者先加载,循环依赖按原顺序各自报错)并强制检查:Endstone 插件依赖缺失时报错提示用户先安装并启用;子插件依赖缺失时在市场安装/升级/「补装依赖」时自动从市场按 `manifest_name` 精确匹配补装(像 pip 依赖一样递归安装,带循环依赖检测与版本约束选择,市场中找不到时提示手动安装)
- 卸载/禁用子插件前的反向依赖预检:其它子插件依赖目标插件时列出依赖方并警告
- 插件市场端配套(需同步更新市场 PHP 程序):上传 ZIP 时校验 `requires` 格式(非法声明拒绝发布)并按版本存储;插件列表 API 新增 `manifest_name` 精确搜索参数;公开 API 在插件列表/详情/版本接口输出 `manifest_name` 与 `requires`;社区页插件详情与后台审核视图展示依赖信息
- `/lumen update <子插件名>` 命令:更新指定子插件到最新版
- `/lumen update -A|--all` 命令:一键更新全部有新版本的市场子插件(单个失败不阻断其余,结果逐个回显)
- WebUI「检查插件更新」升级:发现新版本时弹出「可更新的子插件」卡片列表(支持选择目标版本单独更新,仅可更新到更高版本),底部支持一键更新全部;均为最新版时弹窗提示
- 子插件更新相关三语言(zh_CN / zh_TW / en)文案与命令权限配置项(`commands.update.allow_player`)
- WebUI 慢速读取(Slowloris)防护:请求体读取按 16KB/s 最低速率设置总超时,杜绝慢速滴漏攻击占满连接线程
### WebUI 优化
- 子插件卡片新增「插件依赖」徽章与「插件依赖缺失」红色标识,缺失时提供一键「补装依赖」入口(子插件依赖自动从市场安装,Endstone 插件依赖提示手动安装)
- 插件市场详情页版本列表展示「子插件依赖 / Endstone 插件依赖」
- 横屏(电脑端)子插件页面卡片改为两列并排,窄屏保持单列
- 子插件卡片大小严格一致:列轨道改用 `minmax(0, 1fr)` 切断长描述/长名称对列宽的影响,描述固定两行占位、标题行单行省略号截断,全部卡片等宽等高(名称截断后悬停可看全名)
- 插件市场图标修复为固定正方形(原先被拉伸为长方形)
- 「已是最新版」弹窗按钮移至右侧
### 修复
- 子插件升级数据丢失:改为递归备份全部非代码文件(原仅备份顶层白名单后缀文件)
- 市场清单检查时间改为原子写入,进程中断不再留下不完整文件
- 市场端依赖字段类型异常不再中断整个更新检查流程
- `/lumen pip`、`/lumen update` 命令在实例未完成初始化时崩溃:新增安全日志访问器逐级回退(tee logger → logger → 模块级 logger),后台线程日志不再丢失
- WebUI 安装端点(上传/链接安装)未持主线程操作锁可并发执行:补锁后冲突请求返回 409,防止并发主线程操作
- pip 卸载同步阻塞 WebUI 线程最长 60 秒:移入后台任务队列与进度跟踪(与安装一致)
- QQ 官方适配器事件在 WebSocket 线程内同步处理导致心跳停跳:新增独立派发队列与工作线程(与 WS 适配器同构),消除重连风暴
- WebSocket 派发线程退出泄漏:补双退出条件(哨兵值 + 运行标志),队列满丢哨兵时线程仍可退出
- 白名单文件损坏时被直接覆写丢失全部绑定:覆盖前自动备份 `.corrupt` 文件
- 子插件 ZIP 安装包解压无限制(ZIP 炸弹):新增条目数 / 单文件大小 / 总解压大小三级限额
- 子插件依赖版本约束解析失败:`~=` 兼容版本比较与通配符匹配按 PEP 440 实现
- 后台线程(pip 安装/卸载、市场更新)直接调用原始 logger 在 Windows 下与控制台输入线程竞争导致服务端崩溃:统一改用线程安全 tee logger
### 日志
- QQ 官方机器人「连接成功,群服互通已就绪」「会话已恢复(Resume 补投完成)」纳入后台静默日志开关(`suppress_connection_log`,默认开启):连接/重连不再刷屏,排障时可在连接管理卡片关闭开关查看全部日志;WS/AstrBot 适配器行为不变
[/MD]