本次更新内容
- 新增本地引用链接(reflink)整理方式,支持复制优先尝试写时复制及自动回退,在支持的文件系统上减少复制耗时和空间占用。
- 订阅新增首次下载与洗版来源记录,修复全集洗版规则、整季资源选择及重复资源退避,减少重复下载和通知。
- 刮削新增季图片写入剧集根目录、图片兼容别名和 Fanart 4K 背景图开关;规范图片格式并复用下载,减少重复请求。
- 完善 115 云盘覆盖、同名文件处理和历史回执恢复,补齐源文件清理的人工复核操作,恢复整理失败后的 AI 接管。
- 修复音乐多碟专辑及发行规格识别,避免音轨混淆和已整理歌曲重复提交;改善 Emby 媒体年份读取。
- 优化 Agent 交互任务与后台服务隔离、流式反馈及 Telegram 最终消息更新,完善飞书资源选择卡片信息。
- 支持从部署 secrets 文件读取敏感配置并避免回写配置文件;新增 Cheaper Inference 提供商,改进 ChatGPT OAuth 刷新和默认模型配置。
- 修复站点连通性检测、分类透传、用户等级与分享率显示,完善站点统计、插件版本历史操作及豆瓣评论布局。
- 修复 DoH 对 CNAME 应答的处理,解析器全部失败后自动冷却并回退系统 DNS,减少重复超时和告警。
- 升级前后端安全依赖与 moviepilot-rust 0.3.10,完善容器系统包更新及镜像基线校验,修复 TMDB 请求超时和跨设备符号链接移动问题。
完整变更记录
- fix(setup): 更新 Anthropic 默认模型为 claude-sonnet-4-6 by @pcbeingused333 (a8f260b)
- fix(telegram): omit buttons without valid actions (#7074) by @jxxghp (9e02d26)
- feat(subscribe): record initial and upgrade download provenance (#7061) by @jxxghp (379c26a)
- feat(storage): 本地存储增加引用链接(reflink)整理方式 (#7077) by @AkimioJR (114c2ce)
- fix(storage): 修复 reflink 同存储回退语义与测试稳定性 (#7081) by @jxxghp (6e5c9d0)
- fix(download): 复用下载器已有任务时不再重复通知与记录文件明细 (#7078) by @JontyLee (0609ac9)
- fix(music): 重复提交守卫改按整理交付事实判定,单曲移出媒体库不再重投整包 (#7079) by @JontyLee (80ce5c1)
- feat(storage): 本地复制优先尝试写时复制(reflink)并支持自动回退 (#7082) by @AkimioJR (8b5e536)
- feat(agent): isolate interactive execution from background services (#7083) by @jxxghp (c85f9b2)
- fix(indexer): 透传 mTorrent、HDDolby、Yema 的站点分类 (#7080) by @GuanAllen (458329b)
- fix(feishu): 补充资源选择卡片的站点、大小和做种数 (#7085) by @jxxghp (cfec949)
- fix(transfer): ignore timestamps in cleanup identity checks by @jxxghp (9f03157)
- feat(storage): 本地复制支持仅限关键字参数 try_reflink 并新增实验室配置项 (#7089) by @AkimioJR (e3d32e4)
- feat(llm): add Cheaper Inference provider (#7088) by @aiapienthusiast (75ee313)
- fix(douban): normalize person search image URLs by @jxxghp (c6cfef1)
- fix(llm): serialize ChatGPT OAuth token refresh (#7092) by @paysenyu (1f7e91b)
- fix(notification): preserve download template titles by @jxxghp (80a92dd)
- fix(music): strip Gazelle slash-separated release specs by @jxxghp (d0f70e4)
- chore(architecture): sync download notification dependencies by @jxxghp (c732844)
- fix(transfer): preserve valid u115 overwrite filenames by @jxxghp (1b62418)
- fix(metainfo): 副标题中被否定的季集号不再识别为资源季集 by @flipped0119 (4df028d)
- ci: round startup median budgets up to whole seconds by @jxxghp (cdb6560)
- chore: bump moviepilot-rust to 0.3.9 by @jxxghp (8985558)
- fix(mediaserver): request production year in Emby projections by @jxxghp (04e7ceb)
- fix(transfer): keep exact byte size in 115 instant upload receipts by @jxxghp (95606bb)
- fix(site): test MTorrent compatible sites through profile API by @jxxghp (2c0f1ac)
- fix(transfer): scope completed torrent cleanup to its own tasks by @jxxghp (84e4abc)
- fix(site): preserve MTorrent role names and nullable share ratios by @jxxghp (842320a)
- fix(transfer): retain boolean types across dynamic job view by @jxxghp (e65e0bb)
- fix(site): route API connectivity checks by site protocol (#7105) by @jxxghp (ec7e4ac)
- fix(transfer): recover legacy 115 receipts and isolate cloud copies by @jxxghp (6766a05)
- fix(download): 重复接受且零新增交付的种子按资源退避,订阅改试其他资源 (#7107) by @JontyLee (d57af79)
- fix(setup): 更新 Google 默认模型并兼容 Gemini 3.8 思考级别 (#7109) by @pcbeingused333 (14b9ea6)
- fix(image): 图片跳转校验沿用已配置的非公网放行网段 (#7110) by @clone-fan (38d7ca3)
- fix(subscribe): 全集洗版始终使用洗版规则筛选资源 (#7111) by @jxxghp (43424e5)
- ci(startup): 固定冷导入耗时上限为三秒 by @jxxghp (6c68225)
- fix(agent): avoid replaying delivered streaming progress by @jxxghp (53c5344)
- feat(config): support deployment secrets without persisting values by @jxxghp (85af231)
- feat(scraping): make season image root copies optional by @jxxghp (a1d0bf1)
- fix(music): 识别碟号后缀目录,修复多碟专辑音轨键塌陷 by jianlin6 (d89ad92)
- fix(transfer): continue overwrite after target cleanup by @jxxghp (f090d22)
- fix(transmission): confirm torrent state around episode selection by @jxxghp (4bf11c3)
- fix(themoviedb): 让声明的 TMDB 请求超时真正生效 (#7123) by @JontyLee (453a956)
- fix(types): clear host mypy debt and prevent typing regressions by @jxxghp (6d4ce83)
- fix(fsworker): rename symlinks by link device by @jxxghp (2393f19)
- fix(search): restore complete packs before initial parts by @jxxghp (9d534d1)
- fix(telegram): wait for final streaming edit interval by @jxxghp (cc2e027)
- fix(scraping): normalize artwork and reuse downloads for aliases by @jxxghp (fa67be8)
- fix(transfer): restore AI takeover for failed transfers by @jxxghp (17a866f)
- test(storage): exercise image links through storage chain by @jxxghp (6ea561b)
- test(progress): preserve coverage for helper snapshots by @jxxghp (6d7499f)
- chore(release): publish v3.1.9 by @jxxghp (2fbc1c4)
- fix(deps): upgrade pillow, aiohttp and certifi for security advisories by @InfinityPacer (2b6d14d)
- chore: bump moviepilot-rust to 0.3.10 (#7132) by @DDSRem-Bot (517169b)
- fix(deps): upgrade mako to 1.4.3 for GHSA-5639-2j2p-m4mx by @InfinityPacer (80def95)
- build(docker): decouple browser system deps from the venv layer by @InfinityPacer (a76fc9f)
- build(docker): refresh system packages against a tracked baseline by @InfinityPacer (cba9779)
- feat(update): require image system baseline before installing updates by @InfinityPacer (ec92286)
- fix(doh): skip CNAME answers and cool down failed resolvers (#7135) by @MiCat-S (c8517eb)
- ci(release): add OSV pass to dependency audit by @InfinityPacer (9e24ea0)
- fix(subscribe): preserve custom categories from edit forms (#7138) by @jxxghp (0a429cd)
- fix(music): match verified bilingual artist and title aliases by @jxxghp (5fc4f2e)