3.6.0
这是 3.6.0 正式稳定版,整合 3.6.0-alpha.1 到后续 alpha 测试期间完成的插件包、依赖管理、缓存、后台探测、头像缓存、过滤规则、前端模式和安全修复。正式版发布到 npm latest。
插件包(Plugin Bundle)
- 新增插件包能力,支持
koishi-plugin-pa-*、@scope/koishi-plugin-pa-*、market:packagekeyword 和koishi.bundle清单。 - 插件包安装不走普通一键安装,改为专用确认 GUI,展示插件包自身、成员清单、required / optional、版本范围、安装状态、来源、风险提示、预设配置和最终 diff。
koishi.bundlev1 要求members[].version必填;缺失 version、自引用、非法包名和直接循环会被后端拒绝。- 插件包成员配置默认停用,预设配置必须用户确认后才写入,不会静默启用成员插件。
- 安装插件包时会创建确定性插件包分组
group:pa-*,并在分组下创建成员配置副本。 - 成员原本已存在根层级或其它分组配置时,默认保留原配置;只有用户显式选择时才移动已有配置。
- 插件包归属记录写入 market-next 独立数据文件,用于依赖管理分组、成员来源展示、更新维护和卸载辅助。
- 插件包卸载弹窗支持只卸载包自身、卸载包自身加成员、只清插件包分组配置、保留成员等策略。
- 卸载插件包不会删除用户原本已有的根层级或外部分组配置;存在外部配置时,默认只清插件包分组下的配置副本。
- 依赖管理页、市场“修改”面板、插件配置详情页和包分组入口统一使用插件包专用安装 / 维护 / 卸载流程。
依赖管理与安装安全
- 依赖安装增加后端安装队列,避免连续点击安装 / 卸载 / 更新导致多个包管理器进程并发写入 lockfile 和
node_modules。 - 包管理器执行失败时回滚本次变更涉及的
dependencies键,减少失败后package.json与实际安装状态不一致的风险。 - npm 元数据 404 / not-found 负缓存链路修复:不存在的包不会反复冷查询,真实网络错误也不会误报成“版本不存在”。
market/registry批量查询改为单包失败隔离;某个包超时或镜像未同步时,不再拖垮整批正常包的版本数据。- 普通安装、批量应用和插件包安装后的配置补齐失败会继续显式反馈,避免依赖装上但配置分组未写入还显示成功。
- 插件包安装、普通卸载、批量应用和插件包卸载后的运行数据保存会等待后端确认,减少幽灵归属记录。
- 前端安装断线处理收紧,普通安装遇到 Console 断开时不再直接当成成功,而是提示状态未知并要求刷新确认。
空闲后台探测与 F5 行为
- 新增 Console 空闲后台探测:无人在线一段时间后自动探测市场索引与依赖 npm 元数据,更新缓存、latest 状态和路由统计。
- 新增
idleProbe、idleProbeDelay、idleProbeBootDelay、idleProbeInterval配置,并持久化到 Koishi 配置树。 - 浏览器 F5、WebSocket 重连和依赖页首次连接不再隐式触发 npm 元数据批量刷新;用户点击“刷新依赖”仍保持手动刷新语义。
- 空闲探测不会伪装成手动刷新,不清空当前市场 payload,不清除市场源 cooldown。
- 安装、卸载、更新依赖时会跳过空闲探测,避免后台任务干扰用户操作。
- 热重载或禁用插件时会清理空闲探测 timer,避免残留后台任务。
路由、缓存和弱网容灾
- market 与 npm registry 路由评分清理死分支,并避免 stale、dispose、race settle 等内部取消污染源评分。
- market 备用源增加指数退避冷却,连续失败的源会临时跳过;手动刷新会清理冷却并重新尝试。
- 插件销毁或刷新 supersede 时会 abort 正在进行的 market / npm 请求,减少热重载后的挂起请求。
- 市场索引缓存从单个大 JSON 拆分为轻量主索引和分源缓存文件,降低
market-next-index.json体积。 - 旧版单文件缓存可继续读取,并会在后续写入时迁移为拆分结构。
- HTTP 304、hash 命中和磁盘缓存恢复继续保留;网络失败但已有旧 payload 时不会清空市场列表。
- npm registry 路由统计继续持久化,重启后保留历史平均耗时、最近成功和失败信息。
市场过滤、排序与展示
- 删除插件评分相关 UI 和“按评分排序”入口,避免市场自动评分字段造成误导。
- 卡片原评分区域改为“几天前更新 / 刚刚更新”,并补充创建 / 更新时间高级筛选。
- 市场页新增创建时间、更新时间、最近 N 天内更新 / 创建等筛选条件。
- 配置页新增永久静默过滤规则,可按预览版、不安全、插件包、创建/更新时间和自定义搜索条件隐藏插件。
- 永久静默规则不会显示为市场搜索栏 token;市场左侧筛选仍作为临时条件使用。
- 默认排序恢复为更稳定的市场内置排序,缺少排序字段时再用更新时间兜底,避免 default 与更新时间排序完全等价。
前端模式与体验
- 前端显示模式继续区分
performance和polished,并修复切换后样式残留的问题。 frontendMode、depsLayout、marketLayout等显示配置回到 Koishi 配置树,不再依赖localStorage。- 缺失显示配置时会自动生成性能模式默认配置,保证生产环境可预测。
- 依赖管理页继续按状态分组:待应用、插件包、已下载未配置、可更新、已忽略、版本异常、工作区依赖、手动依赖和已安装。
- 精致模式优化市场页、依赖页、插件包弹窗、浮层操作、滚动条、深色 / 纯黑主题和小屏布局;性能模式保持低动效高密度。
- 修复多处黑框、白条、直角浮层、头像裁切、弹窗被分组滚动容器裁切和小屏无法滚动的问题。
- 插件包图标、侧边入口、卡片徽标和重复“插件包”标识做了统一整理。
头像缓存
- 维护者头像改为后端代理 + 身份 key 缓存,成功头像会缓存到
cache/market-next-avatars/。 - 头像缓存有 7 天 TTL、512 条上限和定期清理,避免缓存无限增长。
- 新增
plugin.clear-avatar-cache指令,可清理内存和磁盘头像缓存。 - 头像代理限制协议、私网 / localhost 目标、响应类型和最大大小,避免头像 URL 造成 SSRF 或大文件下载。
- 移除实验性的头像路由评分系统,避免单个用户无头像或默认头像把整个头像源错误打死。
- 前端头像加载不再用成功后的 data URL 替换已显示外链,减少头像一闪一闪的问题。
数据存储与兼容
override、updateIgnored、bundleRecords等运行数据迁移到data/market-next.json。- 插件配置项、显示模式、空闲探测和永久过滤规则仍保存在 Koishi 配置树。
- 启动时兼容迁移旧配置中的
updateIgnored和bundleRecords。 - 后端配置节点查找修复,market-next 放在普通分组或
group:*下时都能正确定位。 - 配置页“删除配置”和“卸载依赖 / 插件包”文案继续区分,避免把删除配置误解为卸载 npm 包。
文档与发布
- README 更新为 3.6.0 正式版说明,补充插件包、空闲探测、独立数据存储、市场过滤、头像缓存和发布流程。
npm run check:package继续检查构建产物、CSS 兼容文件和插件包清单。- 发布 workflow 根据 semver 后缀自动选择 dist-tag;
3.6.0会发布到latest。