github jxxghp/MoviePilot v3.1.7

4 hours ago

本次更新内容

  • 新增豆瓣短评与影评展示,区分作者与正文并补齐“加载更多”翻译;修复豆瓣推荐列表读取异常及评论分页契约告警。
  • 优化洗版订阅:新集使用普通订阅规则,已有集数升级使用洗版规则;修复洗版订阅状态筛选不准确的问题。
  • 改进搜索稳定性:避免站点持续长时间冷却阻塞整轮搜索,减少英文关键词的片段误匹配。
  • 加强文件整理安全:覆盖前先暂存新文件并备份旧文件,完善中断恢复、路径校验与事件重放中的媒体信息保留;修复音乐种子下载分类兜底。
  • 优化整理通知聚合:目录监控连续到达的文件按静默窗口合并通知,减少刷屏;改进持久通知恢复,降低异常任务相互影响。
  • 修复 Telegram 网络异常后的消息接收恢复和 Agent 流式发送限流,以及微信 access_token 过期或失效后的刷新。
  • 改善媒体服务器兼容性:修复媒体库同步误清空本地缓存、Emby 图片缓存刷新、Jellyfin 零时长播放进度及 Plex 继续观看的额外详情请求。
  • 修复 Transmission 排队状态与进度显示、rTorrent 原生 SCGI 登录和响应解析,完善下载器未连接或配置不完整时的处理。
  • 优化社区勋章等级标识与详情展示,支持后台预热和刷新,减少加载等待并保留刷新期间的已有展示。
  • 修复插件历史异常实例的恢复与更新提示来源判断,避免无关仓库版本触发更新角标。
  • 完善 Agent 图像输入能力识别、用户会话与执行权限隔离;MCP 新增可选的紧凑工具描述,改善部分客户端兼容性。
  • 加强工作流输入、下载结果与目录读取状态校验,并持续完善类型检查、异常处理和质量门禁,提升整体稳定性。

完整变更记录

  • fix: harden backend isolation and execution safety by @jxxghp (4955b7b)
  • refactor(types): govern media title parsing with strict mypy by @jxxghp (0ae48fb)
  • refactor(types): govern token stream with strict mypy by @jxxghp (70511cc)
  • refactor(types): govern URL query composition with strict mypy by @jxxghp (e59f1de)
  • refactor(types): govern challenge detection with strict mypy by @jxxghp (5457d13)
  • refactor(types): govern correlation middleware with strict mypy by @jxxghp (226a130)
  • refactor(types): govern agent display contract with strict mypy by @jxxghp (9d5ad08)
  • refactor(types): govern reflection helpers without changing runtime signatures by @jxxghp (95e936f)
  • refactor(types): govern IP address helpers with strict mypy by @jxxghp (e67f602)
  • refactor(types): govern torrent cache recognition result types by @jxxghp (65e86f8)
  • refactor(types): govern interpreter environment detection by @jxxghp (37a5787)
  • refactor(types): govern event registry and snapshot contracts by @jxxghp (e1b6d47)
  • refactor(types): govern event handler binding contracts by @jxxghp (2e897d9)
  • refactor(types): govern event dispatch callback types by @jxxghp (a59c9bb)
  • refactor(types): align sensitive event field lookup key types by @jxxghp (3858a82)
  • chore(types): include event payload snapshots in strict scope by @jxxghp (1d51fc0)
  • refactor(types): govern scheduler initializer instance lookup by @jxxghp (a696d47)
  • refactor(types): type singleton construction and cached instances by @jxxghp (55f4290)
  • refactor(types): govern singleton and remove thread metaclass ignore by @jxxghp (e06a051)
  • refactor(types): govern streaming platform lookup cache by @jxxghp (33213e8)
  • fix(telegram): rebuild polling session after network errors (#7016) by @ranzhigg (ea251b1)
  • fix(agent): prefer model catalog for image input support by @jxxghp (225da1a)
  • fix(transmission): normalize raw fallback progress (#7017) by @ranzhigg (383fb82)
  • fix(search): reject punctuated English word fragments (#7019) by @jxxghp (70aa163)
  • fix(plugin): restrict update badges to bound repositories by @jxxghp (7e24ce6)
  • fix(events): preserve video metadata when replaying durable events (#7024) by @jxxghp (11c4b03)
  • refactor(types): preserve deprecated callable signatures by @jxxghp (44f9528)
  • refactor(types): align database backup process runner contract by @jxxghp (dd3bd90)
  • refactor(types): govern resource response and proxy types by @jxxghp (802b7ae)
  • refactor(types): narrow RSA key verification and key derivation by @jxxghp (8a39ece)
  • refactor(types): keep resource response import type only by @jxxghp (7b3f6fb)
  • test: restore parent package references after agent reloads by @jxxghp (5b7b247)
  • test: separate summary responses from scripted agent actions by @jxxghp (3b3f620)
  • fix(transfer): debounce monitored file success notifications (#7026) by @jxxghp (8c59a89)
  • refactor(types): govern filesystem worker request and response contracts by @jxxghp (68a6504)
  • refactor(types): specify localization catalog value boundaries by @jxxghp (bd21d8a)
  • refactor(types): preserve configured service schema types by @jxxghp (ece4605)
  • refactor(types): specify plugin clone configuration values by @jxxghp (967860e)
  • test: require actual exit evidence in terminal sharing replay by @jxxghp (d39fd9b)
  • docs: refresh source metrics after upstream integration by @jxxghp (97c92dd)
  • fix(download): provide fallback category for music torrents by @jxxghp (2149eb2)
  • refactor(types): govern stored plugin configuration values by @jxxghp (2d7af4b)
  • refactor(types): govern plugin lifecycle configuration by @jxxghp (ca15f05)
  • refactor(types): preserve memory decorator call signatures by @jxxghp (0297216)
  • refactor(types): prove acquired plugin mutation context by @jxxghp (3ee3634)
  • docs: refresh source metrics after download integration by @jxxghp (bb31275)
  • test: verify steering before compaction and current skill version by @jxxghp (cb58100)
  • refactor(types): preserve retry and timing decorator contracts by @jxxghp (02fb895)
  • refactor(types): declare legacy settings update result by @jxxghp (7f61662)
  • refactor(types): govern raw plugin metadata mappings by @jxxghp (5e14615)
  • refactor(types): align plugin configuration command contracts by @jxxghp (fd22007)
  • refactor(types): preserve per-call agent task transaction results by @jxxghp (ba9a7b0)
  • refactor(types): specify text utility input and return contracts by @jxxghp (12f64ba)
  • refactor(types): define server reporting payload mappings by @jxxghp (81dea8e)
  • refactor(types): describe sync and async configuration reload callbacks by @jxxghp (9ad0c10)
  • chore(types): govern database backup application service by @jxxghp (f7fe0c8)
  • refactor(types): describe database cleanup batch report fields by @jxxghp (065a787)
  • chore(types): govern database application facade by @jxxghp (b759378)
  • refactor(types): infer configuration writes through governed executor by @jxxghp (1a62829)
  • test(system): publish subprocess tree PID markers atomically by @jxxghp (931a163)
  • refactor(types): declare progress snapshot fields by @jxxghp (e71b225)
  • refactor(types): type server sharing payload contracts by @jxxghp (16e2c97)
  • refactor(types): declare configured release group values by @jxxghp (08a00c0)
  • refactor(types): type release group matching contracts by @jxxghp (c67acc1)
  • refactor(types): declare configured customization values by @jxxghp (572e2e9)
  • refactor(types): type customization matching contracts by @jxxghp (6ed3271)
  • refactor(types): declare persisted storage configuration records by @jxxghp (0518b1b)
  • refactor(types): constrain service configuration contracts by @jxxghp (0c6b86c)
  • refactor(types): type downloader helper initialization by @jxxghp (b9871b1)
  • refactor(types): type notification helper initialization by @jxxghp (acb9b85)
  • refactor(types): describe lazy log message object contract by @jxxghp (9dd1ace)
  • refactor(types): narrow playback position before comparison by @jxxghp (464d23a)
  • refactor(types): declare music catalog source and identity types by @jxxghp (19cc142)
  • fix(auth): preserve leading zeros in generated TOTP codes by @jxxghp (b2cbb0b)
  • refactor(types): declare verified pyotp return contracts by @jxxghp (ad9f3f0)
  • fix(crypto): pad AES plaintext by UTF-8 byte length by @jxxghp (f256e5e)
  • fix(commands): reject missing registry entries before dispatch by @jxxghp (c9c6a6c)
  • refactor(types): declare agent facade provider result types by @jxxghp (47e5f1a)
  • refactor(types): aggregate dashboard counts with integer totals by @jxxghp (910df79)
  • refactor(types): declare plugin access comparison result by @jxxghp (661e9d9)
  • refactor(types): declare router initializer completion by @jxxghp (4815102)
  • refactor(types): type workflow initializer lifecycle results by @jxxghp (69ac057)
  • refactor(types): use ASGI contracts for HTTP metrics by @jxxghp (fc9aeea)
  • refactor(types): declare plugin catalog facade projections by @jxxghp (2b5e0ce)
  • refactor(types): preserve JSON location response contract by @jxxghp (ba99761)
  • refactor(types): declare ignored DingTalk client options by @jxxghp (778fa8f)
  • refactor(types): declare plugin data write completion by @jxxghp (eda5414)
  • refactor(types): declare optional site icon query results by @jxxghp (a85cab1)
  • refactor(types): declare user configuration query results by @jxxghp (ee1f417)
  • chore(architecture): record location JSON type dependency by @jxxghp (8cd533f)
  • refactor(types): declare site statistics query results by @jxxghp (3ce0c22)
  • refactor(types): declare plugin data model query results by @jxxghp (e78e018)
  • refactor(types): declare site user snapshot query results by @jxxghp (458f44d)
  • refactor(types): declare queried download failure records by @jxxghp (5477dbe)
  • chore(types): guard system configuration model with strict mypy by @jxxghp (3aac2da)
  • fix(mcp): 支持显式 opt-in 的 tools/list schema 紧凑投影 by @clone-fan (5ec9516)
  • refactor(types): declare passkey model query and mutation results by @jxxghp (810141f)
  • refactor(types): declare media server model query results by @jxxghp (8f2f4df)
  • refactor(types): declare site model query results by @jxxghp (c62d28e)
  • refactor(types): declare queried agent chat records by @jxxghp (64147fb)
  • refactor(types): declare queried agent task run records by @jxxghp (a305038)
  • refactor(types): specify persisted message field mapping by @jxxghp (fea8bd1)
  • refactor(types): specify agent task statements and query results by @jxxghp (2846ed6)
  • refactor(types): declare user lookup and mutation results by @jxxghp (1703a11)
  • refactor(types): specify subscription history query contracts by @jxxghp (cd1a714)
  • refactor(types): declare system config transaction callbacks by @jxxghp (5198cb0)
  • fix(types): acknowledge missing workflow lookup results by @jxxghp (a2bf0db)
  • refactor(types): specify workflow model query and transition results by @jxxghp (44df516)
  • refactor(types): declare database engine factory results by @jxxghp (3c916ad)
  • refactor(types): declare database session lifecycle results by @jxxghp (9e978cc)
  • refactor(types): specify agent chat message mappings by @jxxghp (38cec15)
  • refactor(types): declare download history and file query results by @jxxghp (751e223)
  • fix(types): preserve sequence contract for async transfer statistics by @jxxghp (b49fc90)
  • refactor(types): declare transfer history query and statistics results by @jxxghp (a1710c8)
  • refactor(types): bind subscription query results before model typing by @jxxghp (0e9e09c)
  • refactor(types): declare subscription identity query results by @jxxghp (94aeac9)
  • chore(types): gate plugin installation persistence contracts by @jxxghp (826ac5d)
  • refactor(types): bind plugin installation transaction results by @jxxghp (c3e1820)
  • chore(types): gate plugin identity contracts and migration decisions by @jxxghp (f13abd7)
  • chore(types): gate persisted plugin source identity model by @jxxghp (aadee8e)
  • chore(types): gate plugin installation journal model by @jxxghp (c4ff5a7)
  • refactor(types): declare passkey adapter contracts by @jxxghp (15dc036)
  • refactor(types): declare user adapter contracts by @jxxghp (d8f6778)
  • refactor(types): declare message adapter contracts by @jxxghp (ddcfe58)
  • chore(architecture): sync message schema dependency baseline by @jxxghp (d59ef50)
  • refactor(types): declare plugin catalog collection contracts by @jxxghp (ada0812)
  • refactor(types): declare transfer history adapter lifecycle contracts by @jxxghp (6cdf5f4)
  • refactor(types): declare download history adapter contracts by @jxxghp (b6c3629)
  • fix(indexer): normalize Audiences user levels (#7027) by @OpportunityLiu (5482415)
  • fix(agent): deny inaccessible web sessions without HTTP 500 (#7030) by @MiCat-S (3112ee2)
  • fix(transfer): look up torrent by hash without builtin tag filter (#7031) by @MiCat-S (f825134)
  • fix(transmission): 对齐 transmission-rpc 排队状态取值 (#7032) by @MiCat-S (6b50942)
  • fix(mediaserver): 修复媒体库同步清空本地缓存 (#7033) by @MiCat-S (3a88d6d)
  • fix(jellyfin): skip playback percentage when runtime is zero (#7034) by @MiCat-S (f75c32e)
  • refactor(types): declare site oper contracts by @jxxghp (18220d0)
  • fix(compat): preserve legacy site signatures by @jxxghp (f8ffcb7)
  • chore(types): ratchet site oper baseline by @jxxghp (8b5f92c)
  • refactor(types): declare media server oper contracts by @jxxghp (c05098e)
  • chore(types): ratchet media server oper baseline by @jxxghp (59ef3a1)
  • refactor(types): widen media server query contracts by @jxxghp (540c63b)
  • fix(types): preserve media server query inputs by @jxxghp (ea64ccd)
  • docs(types): refresh media server source metric by @jxxghp (21fb24a)
  • fix(types): keep mediaserver oper schema type-only by @jxxghp (fd935b5)
  • refactor(types): govern workflow oper session contracts by @jxxghp (ea365dd)
  • refactor(types): declare plugin system market port by @jxxghp (38dd03b)
  • test: isolate transactional download history rows by @jxxghp (992e0c8)
  • refactor(types): govern plugin sync candidate payloads by @jxxghp (6f77315)
  • refactor(types): govern plugin path candidate contracts by @jxxghp (2b5eb02)
  • refactor(types): govern plugin monitor candidate contracts by @jxxghp (22283b1)
  • refactor(types): govern search session oper contract by @jxxghp (7c0e83d)
  • chore(types): expand strict gate to 164 files by @jxxghp (091ebdf)
  • refactor(types): expose TMDb exception identity explicitly by @jxxghp (f3f6991)
  • refactor(types): define TMDb request and JSON response contracts by @jxxghp (cc5fc2a)
  • fix(tmdb): read authentication credentials from JSON dictionaries by @jxxghp (907276c)
  • fix(tmdb): read list creation results from JSON dictionaries by @jxxghp (dafc0c1)
  • refactor(types): govern TMDb genre response contract by @jxxghp (5fe7544)
  • refactor(types): govern TMDb certification response contract by @jxxghp (916170e)
  • refactor(types): govern TMDb configuration response contract by @jxxghp (3bedd80)
  • refactor(types): govern TMDb provider response contract by @jxxghp (2e33968)
  • refactor(types): govern TMDb credit response contract by @jxxghp (b002432)
  • refactor(types): govern TMDb group response contract by @jxxghp (69d0f1b)
  • refactor(types): govern TMDb network response contract by @jxxghp (ac6813b)
  • refactor(types): govern TMDb company response contract by @jxxghp (a406232)
  • chore(types): expand strict gate to 177 files and record TMDb debt reduction by @jxxghp (1a1bcbb)
  • refactor(types): govern TMDb keyword response contract by @jxxghp (21251ee)
  • refactor(types): govern TMDb review response contract by @jxxghp (a165cb8)
  • refactor(types): govern TMDb change response contract by @jxxghp (8f74a59)
  • fix(tmdb): accept numeric TVDB identities without coercing invalid values by @jxxghp (aaf2ae3)
  • refactor(types): govern TMDb account identity and list contracts by @jxxghp (250c816)
  • chore(types): expand strict gate to 182 files by @jxxghp (5b66cae)
  • fix(tmdb): preserve search pagination when adult filter is false by @jxxghp (36cf26d)
  • refactor(types): define DOM node and default value contracts by @jxxghp (9a94017)
  • refactor(types): describe XML reader and NFO byte output by @jxxghp (a36d126)
  • refactor(types): define Douban NFO and image contracts by @jxxghp (f9fc885)
  • refactor(types): expose actual Douban NFO byte output by @jxxghp (8dfe6db)
  • refactor(types): expose actual Bangumi NFO byte output by @jxxghp (d685ef2)
  • refactor(types): expose actual AniList NFO byte output by @jxxghp (f0bf8b7)
  • refactor(types): expose actual IMDb NFO byte output by @jxxghp (9706348)
  • refactor(types): preserve parsed WeChat XML root guarantee by @jxxghp (040a182)
  • test(recall): synchronize managed maintenance cancellation by @jxxghp (46788f7)
  • chore(types): expand strict gate to 185 files by @jxxghp (d01209f)
  • style(types): align DOM import spacing and source metrics by @jxxghp (3ecf947)
  • refactor(types): govern shared site parser contracts by @jxxghp (1006c70)
  • refactor(types): align shared contracts for bitpt site parser by @jxxghp (8fceb4d)
  • refactor(types): govern discuz site parser by @jxxghp (8de055c)
  • refactor(types): govern file_list site parser by @jxxghp (1e7dd5d)
  • refactor(types): govern gazelle site parser by @jxxghp (9b35d01)
  • refactor(types): govern hddolby site parser by @jxxghp (dc83ab9)
  • refactor(types): govern ipt site parser by @jxxghp (9844b80)
  • refactor(types): govern mtorrent site parser by @jxxghp (9d36adc)
  • refactor(types): govern nexus_audiences site parser by @jxxghp (1eaef2a)
  • refactor(types): govern nexus_hhanclub site parser by @jxxghp (92f2990)
  • refactor(types): govern nexus_php site parser by @jxxghp (66a5d81)
  • refactor(types): govern nexus_project site parser by @jxxghp (2bec218)
  • refactor(types): govern nexus_rabbit site parser by @jxxghp (1ed7763)
  • refactor(types): align shared contracts for rousi site parser by @jxxghp (13a0b2e)
  • refactor(types): govern small_horse site parser by @jxxghp (5523a3d)
  • refactor(types): align shared contracts for sunnypt site parser by @jxxghp (18dd8d2)
  • refactor(types): govern tnode site parser by @jxxghp (d82f30a)
  • refactor(types): govern torrent_leech site parser by @jxxghp (767aa88)
  • refactor(types): govern unit3d site parser by @jxxghp (a4710b4)
  • refactor(types): govern yema site parser by @jxxghp (62ef4bf)
  • refactor(types): align shared contracts for zhixing site parser by @jxxghp (89bf47c)
  • docs(types): remove obsolete parser compatibility note by @jxxghp (bbca548)
  • chore(types): expand strict gate to 204 files by @jxxghp (d71de02)
  • docs(architecture): sync parser type dependency count by @jxxghp (9b19f3d)
  • refactor(types): govern TVDB client response and query contracts by @jxxghp (7ae81fd)
  • chore(types): add TVDB client to strict gate by @jxxghp (451f5b0)
  • fix(wechat): preserve encryption errors and type crypto contracts by @jxxghp (ffbb3a7)
  • refactor(wechat): document successful decrypt payload contract by @jxxghp (62bf00e)
  • chore(types): gate WeChat crypto and lower mypy baseline by @jxxghp (259ee6b)
  • refactor(monitor): type watcher lifecycle and pending rescans by @jxxghp (ec8e66c)
  • refactor(agent): type streaming callback task lifecycle by @jxxghp (226ecd7)
  • chore(types): gate watcher and streaming callback contracts by @jxxghp (a55d456)
  • fix(rtorrent): restore native SCGI login and response decoding by @jxxghp (f28e573)
  • refactor(agent): type sanitizer container delimiter stack by @jxxghp (8df7bd4)
  • refactor(agent): type provider manager initialization by @jxxghp (f0b8bf7)
  • refactor(startup): type agent initialization and lazy class factory by @jxxghp (86bd9e1)
  • refactor(startup): type database initialization and migrations by @jxxghp (4916675)
  • chore(types): gate provider and startup contracts by @jxxghp (b18b640)
  • refactor(startup): describe request subscription repository capabilities by @jxxghp (1c1d0c0)
  • refactor(api): use runtime repository and transaction contracts by @jxxghp (632a1aa)
  • fix(subscription): normalize mapping payloads at the event boundary by @jxxghp (575ecb8)
  • chore(types): protect clean host modules with strict dependency contracts by @jxxghp (b678b82)
  • refactor(types): align response with typed route contracts by @jxxghp (7eac93b)
  • refactor(types): align anthropic with typed route contracts by @jxxghp (193c25f)
  • refactor(types): align openai with typed route contracts by @jxxghp (0c8b9fe)
  • refactor(types): align mcp with typed route contracts by @jxxghp (a9e6811)
  • refactor(types): align agent with typed route contracts by @jxxghp (769c79f)
  • refactor(types): align classification with typed route contracts by @jxxghp (92c1944)
  • refactor(types): align download with typed route contracts by @jxxghp (d2b560c)
  • refactor(types): align github with typed route contracts by @jxxghp (5c8877e)
  • refactor(types): align history with typed route contracts by @jxxghp (b6fed2b)
  • refactor(types): align identifier with typed route contracts by @jxxghp (d9cd184)
  • refactor(types): align login with typed route contracts by @jxxghp (c48ba3a)
  • refactor(types): align module with typed route contracts by @jxxghp (0f5e448)
  • refactor(types): align music with typed route contracts by @jxxghp (29113b7)
  • refactor(types): align plugin with typed route contracts by @jxxghp (a69471c)
  • refactor(types): align pluginclone with typed route contracts by @jxxghp (6314faf)
  • refactor(types): align pluginfolder with typed route contracts by @jxxghp (07b523b)
  • refactor(types): align plugininstance with typed route contracts by @jxxghp (5f5accc)
  • refactor(types): align pluginloglevel with typed route contracts by @jxxghp (efdcdf8)
  • refactor(types): align plugintarget with typed route contracts by @jxxghp (5b97781)
  • refactor(types): align recommend with typed route contracts by @jxxghp (1ee6a01)
  • refactor(types): align rule with typed route contracts by @jxxghp (69139aa)
  • refactor(types): align settings with typed route contracts by @jxxghp (c3a8937)
  • refactor(types): align site with typed route contracts by @jxxghp (669b7d1)
  • refactor(types): align storage with typed route contracts by @jxxghp (9b2d2cd)
  • refactor(types): align subexecution with typed route contracts by @jxxghp (470e0dd)
  • refactor(types): align submaintenance with typed route contracts by @jxxghp (0f9289c)
  • refactor(types): align system with typed route contracts by @jxxghp (232c325)
  • refactor(types): align transfer with typed route contracts by @jxxghp (34643d1)
  • refactor(types): align user with typed route contracts by @jxxghp (3c7fe9e)
  • refactor(types): align workflow with typed route contracts by @jxxghp (851c313)
  • refactor(types): use Click signatures without obsolete ignores by @jxxghp (0538faf)
  • chore(types): read FastAPI and Click contracts in strict checks by @jxxghp (5ae5262)
  • style(api): order typed FastAPI imports by @jxxghp (e8975ad)
  • fix(rtorrent): keep incomplete client configuration disabled by @jxxghp (25143cf)
  • refactor(types): correlate authentication success with user snapshots by @jxxghp (90fd410)
  • refactor(types): narrow login results before issuing credentials by @jxxghp (405aafa)
  • refactor(types): specify Anthropic streaming response contracts by @jxxghp (904b871)
  • refactor(types): specialize response models through runtime factory by @jxxghp (33a14f8)
  • fix(mcp): reject non-object requests with protocol errors by @jxxghp (ac64d4b)
  • chore(types): gate four verified API files and ratchet 44 errors by @jxxghp (79a6bcc)
  • fix(cli): validate state records and type managed process status by @jxxghp (6c51e35)
  • fix(runtime): validate process identity and preserve detached launch flags by @jxxghp (16bec4c)
  • refactor(types): declare authentication ticket store initialization by @jxxghp (c84ae5c)
  • fix(auth): reject missing subjects before user lookup by @jxxghp (5191938)
  • refactor(types): specify LLM management endpoint results by @jxxghp (40177e9)
  • refactor(types): specify notification management endpoint results by @jxxghp (1db9619)
  • refactor(types): declare webhook task completion contract by @jxxghp (bd29f94)
  • chore(types): gate seven files and ratchet 32 type errors by @jxxghp (9bb18f0)
  • fix(anilist): validate GraphQL fallback and type cached request contracts by @jxxghp (a8ccc3b)
  • fix(log): support exception logging in database backup failures by @jxxghp (2757ac3)
  • refactor(types): preserve image and wallpaper cache contracts by @jxxghp (3ca5fba)
  • refactor(types): preserve recommendation cache and paging contracts by @jxxghp (143ad8f)
  • chore(types): gate three modules and ratchet 148 type errors by @jxxghp (2487d8c)
  • style(anilist): normalize type declaration spacing by @jxxghp (9440081)
  • style(recommend): normalize type declarations and source metric by @jxxghp (2c0d549)
  • refactor(types): describe system actions and snapshot callbacks by @jxxghp (c9719ff)
  • refactor(types): import subscription view from its owner by @jxxghp (a2f8e22)
  • refactor(types): use canonical file schema in transfer planning by @jxxghp (4558473)
  • refactor(types): use canonical filter group schema by @jxxghp (73aed26)
  • refactor(types): describe agent endpoint response payloads by @jxxghp (9b615a6)
  • refactor(types): align agent chat messages with repository contracts by @jxxghp (2b4602e)
  • chore(types): gate six files and ratchet 36 type errors by @jxxghp (3318da7)
  • refactor(types): describe sync and async debounce contracts by @jxxghp (5fc2c96)
  • refactor(types): preserve VoceChat optional titles and raw responses by @jxxghp (e61bff1)
  • chore(types): gate debounce and VoceChat with 46 fewer errors by @jxxghp (5782eb9)
  • refactor(types): preserve optional module reload labels by @jxxghp (0404779)
  • fix(modules): type service configurations and handle uninitialized defaults by @jxxghp (405f829)
  • refactor(types): preserve nullable media server identities by @jxxghp (47aa83c)
  • refactor(types): describe Navidrome server selections by @jxxghp (59e5e26)
  • refactor(types): preserve optional ZSpace instance labels by @jxxghp (bb17296)
  • refactor(types): preserve optional Ugreen instance labels by @jxxghp (be577c7)
  • refactor(types): preserve optional Plex instance labels by @jxxghp (a648714)
  • refactor(types): preserve optional TrimeMedia instance labels by @jxxghp (0ec525e)
  • refactor(types): preserve optional Vyo instance labels by @jxxghp (a9e42fc)
  • chore(types): gate service base and ratchet 64 type errors by @jxxghp (f2d30e4)
  • fix(types): complete DingTalk notification arguments by @jxxghp (72a526e)
  • fix(synologychat): keep incomplete clients safely disabled by @jxxghp (65698fd)
  • fix(types): complete SynologyChat message contracts by @jxxghp (bce6d45)
  • chore(quality): protect three notification files with strict typing by @jxxghp (829a501)
  • docs(architecture): sync canonical notification dependency count by @jxxghp (be87eb4)
  • fix(qbittorrent): preserve safe disconnected client state by @jxxghp (d187149)
  • fix(types): complete PostgreSQL module lifecycle by @jxxghp (0677b04)
  • fix(types): complete Redis module lifecycle by @jxxghp (cac380d)
  • fix(types): declare TheAudioDB related artist results by @jxxghp (9e83700)
  • fix(types): retain typed monitor warning list by @jxxghp (576848b)
  • fix(types): separate workflow search input and parsed parameters by @jxxghp (5b0db85)
  • chore(quality): protect downloader and module type contracts by @jxxghp (eb19897)
  • fix(types): define workflow action metadata and state contracts by @jxxghp (c6175bc)
  • fix(types): complete workflow note input contract by @jxxghp (7474f96)
  • fix(types): separate workflow notification parameters by @jxxghp (a9972f2)
  • fix(workflow): handle absent media and unknown ratings by @jxxghp (3ec901c)
  • fix(workflow): keep unknown downloads incomplete and normalize paths by @jxxghp (58a4904)
  • chore(quality): protect workflow action contracts and nullable inputs by @jxxghp (bf5c196)
  • fix(workflow): handle empty subscription input across loop iterations by @jxxghp (dbae6bb)
  • fix(workflow): distinguish directory read failure from empty scan by @jxxghp (912264f)
  • fix(workflow): reject missing download paths before transfer by @jxxghp (82bc1c8)
  • fix(workflow): validate incomplete download resources and outputs by @jxxghp (9094257)
  • refactor(workflow): isolate resource recognition before download by @jxxghp (969c16b)
  • refactor(workflow): isolate transfer result settlement by @jxxghp (cea9201)
  • style(workflow): order download schema imports by @jxxghp (71b9404)
  • chore(quality): protect workflow collection boundaries by @jxxghp (21178d4)
  • fix(types): complete monitor dispatcher state and path contracts by @jxxghp (c2e5db3)
  • fix(types): define skill interaction button payloads by @jxxghp (27ca7b3)
  • chore(quality): protect monitor and skill interaction contracts by @jxxghp (d5d7822)
  • fix(types): define downloader client and torrent content contracts by @jxxghp (6e84d4d)
  • fix(types): preserve nullable qBittorrent deletion flag by @jxxghp (a89b999)
  • fix(types): govern qBittorrent module contracts by @jxxghp (f517824)
  • fix(transmission): initialize disconnected client state and type SDK contracts by @jxxghp (d11bf31)
  • chore(quality): protect downloader contracts and SDK type imports by @jxxghp (8a59b51)
  • fix(plugin): recover invalid historical instance rows (#7039) by @jxxghp (6810174)
  • fix(types): govern Transmission module SDK projections by @jxxghp (79d5e5a)
  • chore(quality): protect the complete Transmission module by @jxxghp (4c5d36a)
  • docs(quality): synchronize metrics after latest v3 integration by @jxxghp (76e9bfb)
  • fix(formatting): preserve numeric episode range filtering and type contracts by @jxxghp (2cf927d)
  • fix(transfer): guard missing episode sample paths and type recommendations by @jxxghp (99e1eaf)
  • chore(quality): protect episode formatting and sample resolution by @jxxghp (cc72a0e)
  • ci: expand app coverage and async blocking gates by @jxxghp (a92c4b5)
  • fix(types): govern Zhixing user data contract by @jxxghp (031d5de)
  • docs(quality): synchronize Zhixing mypy metrics by @jxxghp (2aece8a)
  • ci: ratchet canonical app coverage baseline by @jxxghp (457160a)
  • fix(types): govern Bitpt user data contract by @jxxghp (8767476)
  • fix(types): narrow CookieCloud request URL by @jxxghp (f7ce5c0)
  • docs(quality): synchronize Bitpt and CookieCloud metrics by @jxxghp (7523463)
  • fix(types): preserve optional workflow plugin filters by @jxxghp (f58ae3b)
  • fix(types): type plugin route metadata boundary by @jxxghp (7ecf9a8)
  • fix(types): expose stdio stream encoding by @jxxghp (f26aca3)
  • docs(quality): synchronize workflow route and stdio metrics by @jxxghp (9e8bd47)
  • test: stabilize coverage ratchet paths by @jxxghp (4e270bf)
  • test: restore coverage ratchet floor by @jxxghp (792812c)
  • test: preserve ruff ratchet baseline by @jxxghp (c7d58aa)
  • fix(types): narrow messaging repository boundary by @jxxghp (4bc71e4)
  • fix(types): align WebAgent task contract by @jxxghp (4d32996)
  • fix(types): require coroutine web agent tasks by @jxxghp (991b039)
  • fix(types): narrow doctor check runner protocol by @jxxghp (bc391d6)
  • fix(types): type database backup backend selection by @jxxghp (5e18f70)
  • fix(types): type Ugreen decrypted text by @jxxghp (0f4ca3f)
  • fix(types): allow optional subscription metadata by @jxxghp (9588144)
  • fix(types): narrow site repository boundaries by @jxxghp (55404be)
  • fix(types): narrow fpcalc executable boundary by @jxxghp (2a81b3d)
  • fix(types): type user config responses by @jxxghp (294d8a0)
  • fix(types): annotate async torrent cache cleanup by @jxxghp (0a79e8b)
  • fix(types): annotate torrent cache endpoints by @jxxghp (baf4eb8)
  • fix(types): annotate command lifecycle contracts by @jxxghp (6f3dc2e)
  • fix(types): annotate command initializer lifecycle by @jxxghp (f259f9d)
  • fix(types): type TMDB collection methods by @jxxghp (17bc522)
  • fix(types): type TMDB discover methods by @jxxghp (b2971d8)
  • fix(types): type transfer history projection by @jxxghp (acbec8f)
  • fix(types): type dashboard module projections by @jxxghp (0bd763f)
  • fix(types): type MusicBrainz cache payloads by @jxxghp (c82327e)
  • revert(types): avoid command annotation fanout by @jxxghp (49bdfd0)
  • fix(types): export TMDB v3 API surface by @jxxghp (4027c9c)
  • fix(types): type TMDB collection parts by @jxxghp (b8f1d65)
  • fix(compat): preserve avatar payload format by @jxxghp (383af82)
  • docs(quality): synchronize batch 55 metrics by @jxxghp (dbaa32f)
  • style(types): order site dependency imports by @jxxghp (3fd6d8d)
  • style(types): remove unused user import by @jxxghp (1b5bd8c)
  • docs(quality): synchronize Ruff baseline metrics by @jxxghp (f70578f)
  • fix(agent): clean removed bundled subagents by @jxxghp (0658c7f)
  • fix(types): disambiguate Servarr list annotations by @jxxghp (8417893)
  • fix(types): validate auth exchange annotations by @jxxghp (154b925)
  • fix(types): type storage file listing endpoint by @jxxghp (1756415)
  • fix(types): guard optional subscribe candidate metadata by @jxxghp (c53662f)
  • fix(types): preserve notification schema checks by @jxxghp (bcb149d)
  • fix(types): preserve rule schema checks by @jxxghp (bc13154)
  • fix(types): preserve search schema checks by @jxxghp (6a4f426)
  • fix(runtime): use valid Python exception syntax by @jxxghp (9858744)
  • fix(api): validate Servarr movie fields before subscribe by @jxxghp (79e4088)
  • style(types): order storage schema imports by @jxxghp (d5608b9)
  • docs(quality): ratchet batch 56 mypy baseline by @jxxghp (c3176d6)
  • docs(quality): refresh batch 56 dependency baseline by @jxxghp (7d76157)
  • docs(quality): record batch 56 type cleanup by @jxxghp (bfe461f)
  • fix(types): keep agent dependency cast coverage neutral by @jxxghp (ea12cd3)
  • test(acoustid): cover missing fpcalc guards by @jxxghp (2bed5c2)
  • test(tmdb): cover discover request contracts by @jxxghp (8894ab0)
  • test(servarr): cover movie validation contract by @jxxghp (b26772b)
  • fix(emby): include image tags in primary image URLs by @jxxghp (35199db)
  • fix(telegram): honor rate limits during agent streaming by @jxxghp (f2c986c)
  • refactor(telegram): keep streaming send within complexity budget by @jxxghp (5344191)
  • mypy: fix subscription metadata contracts by @jxxghp (58967c6)
  • mypy: narrow subscription write inputs by @jxxghp (47ef181)
  • mypy: declare subscribe owner interaction ports by @jxxghp (7d9f05e)
  • mypy: guard transfer source paths by @jxxghp (2edc9f0)
  • mypy: adapt deletion report callbacks by @jxxghp (dd9ccce)
  • mypy: type plugin workflow action parameters by @jxxghp (a00aaf7)
  • mypy: type workflow event action parameters by @jxxghp (c6527e2)
  • mypy: ratchet subscription and workflow baseline by @jxxghp (ccd6f8d)
  • docs: update mypy debt metrics by @jxxghp (ad1a849)
  • architecture: ratchet dependency baseline by @jxxghp (3aa77c4)
  • docs: update architecture edge count by @jxxghp (e96bae4)
  • docs: update dependency edge metric by @jxxghp (0fb1d50)
  • style: order transfer filter imports by @jxxghp (4af9229)
  • fix(telegram): satisfy type debt ratchet by @jxxghp (346a8b8)
  • docs: update Telegram mypy metric by @jxxghp (0eae576)
  • test(architecture): cover concurrent ratchet updates by @jxxghp (b427a0f)
  • test(transfer): use concrete chain import by @jxxghp (425a048)
  • test: cover subscription metadata contracts by @jxxghp (886f2b6)
  • test: cover missing transfer source paths by @jxxghp (aa93565)
  • test: cover subscription report adapters by @jxxghp (e9a7411)
  • feat(douban): 新增豆瓣短评与影评接口 by @LLL001a (e368847)
  • fix: type OCR user agent fallback by @jxxghp (c94abab)
  • fix: narrow tool schema model type by @jxxghp (14680dd)
  • fix: type host module configuration capture by @jxxghp (dc2f041)
  • chore: lower mypy baseline for typed boundaries by @jxxghp (8594a07)
  • docs: update mypy debt metric by @jxxghp (db87ec7)
  • style: order module adapter imports by @jxxghp (3075efb)
  • fix: use normal rules for new episodes in best-version subscriptions by @jxxghp (391a6db)
  • test: cover invalid host module selector by @jxxghp (cf275b1)
  • fix: satisfy subscription search type checks by @jxxghp (9eef6e9)
  • test: cover dynamic subscription rule selection by @jxxghp (1b52da5)
  • fix: isolate durable notification recovery by @jxxghp (0064593)
  • test: cover incomplete subscription search identity by @jxxghp (d781d86)
  • style: order subscription search test imports by @jxxghp (6277c45)
  • chore: add typed boundary files to mypy gate by @jxxghp (b0738ad)
  • fix: type Rousi unread message parser by @jxxghp (13ab2f5)
  • chore: lower Rousi parser mypy baseline by @jxxghp (ef6d79c)
  • chore: add Rousi parser to mypy gate by @jxxghp (aa4b960)
  • docs: update Rousi mypy metric by @jxxghp (1e910a6)
  • test: cover Rousi message payload fallback by @jxxghp (40e06cb)
  • fix(types): annotate module restoration predicate by @jxxghp (74df423)
  • fix(types): annotate TMDB movie object API by @jxxghp (3ebab04)
  • fix(types): annotate TMDB TV object API by @jxxghp (2689967)
  • chore(types): enforce TMDB movie and TV objects by @jxxghp (e972169)
  • fix(types): preserve TMDB movie API compatibility by @jxxghp (cdbc806)
  • fix(types): preserve TMDB TV API compatibility by @jxxghp (1a1f86c)
  • chore(types): ratchet TMDB object checks by @jxxghp (1b14e73)
  • docs: record TMDB mypy debt reduction by @jxxghp (ae9770c)
  • fix(types): annotate TMDB episode object API by @jxxghp (36ed972)
  • fix(types): annotate TMDB person object API by @jxxghp (e0ab2ea)
  • fix(types): annotate TMDB search object API by @jxxghp (f43bc3d)
  • fix(types): annotate TMDB season object API by @jxxghp (a519104)
  • fix(types): annotate TMDB trending object API by @jxxghp (9eac0af)
  • chore(types): enforce remaining TMDB object APIs by @jxxghp (e8e191c)
  • fix(types): preserve TMDB search call compatibility by @jxxghp (fb41f47)
  • fix(types): preserve TMDB trending call compatibility by @jxxghp (a1a2efd)
  • chore(types): ratchet TMDB supporting objects by @jxxghp (c6e8961)
  • docs: record remaining TMDB object typing by @jxxghp (43ee2ba)
  • style: normalize TMDB search imports by @jxxghp (79665fb)
  • fix(types): type Ugreen API response boundaries by @jxxghp (4e8ac06)
  • chore(types): enforce Ugreen API typing by @jxxghp (897e883)
  • chore(types): ratchet Ugreen API debt by @jxxghp (d0a263d)
  • docs: record Ugreen API typing debt reduction by @jxxghp (aa2fe68)
  • fix(types): annotate runtime rate limiters by @jxxghp (f59a1e8)
  • chore(types): enforce runtime rate limiter typing by @jxxghp (99ff866)
  • chore(types): ratchet runtime rate debt by @jxxghp (b791688)
  • docs: record runtime rate typing debt reduction by @jxxghp (85adc76)
  • fix(types): type QQ bot API response boundaries by @jxxghp (0f02f29)
  • chore(types): gate QQ bot API with mypy by @jxxghp (938e337)
  • chore(types): ratchet QQ bot API baseline by @jxxghp (3406340)
  • docs(types): record QQ bot API cleanup by @jxxghp (5d20502)
  • test(qqbot): cover API response boundaries by @jxxghp (30e33d2)
  • docs: standardize Chinese comment contracts by @DDSRem (7e1c71a)
  • fix(types): validate rTorrent XML-RPC response shapes by @jxxghp (4593fae)
  • fix(types): preserve rTorrent module consumer contracts by @jxxghp (727305e)
  • test: stabilize logging coverage and isolate QQ token cache by @jxxghp (9b8f1c4)
  • chore(types): gate rTorrent client and ratchet 190 errors by @jxxghp (7b6441b)
  • docs: align touched contracts with Chinese comment rules by @jxxghp (136a094)
  • fix(types): type Douban API response boundaries by @jxxghp (3f8a956)
  • fix(types): type MoviePilot server adapter responses by @jxxghp (76d9ead)
  • fix(types): narrow subscription share response fields by @jxxghp (2ee564d)
  • fix(types): preserve Douban module response fallbacks by @jxxghp (cefb0b5)
  • fix(types): annotate media context methods safely by @jxxghp (3e675bd)
  • fix(types): annotate cache proxy contracts by @jxxghp (8a59bab)
  • fix(types): align chain server response contracts by @jxxghp (8cd98de)
  • fix(types): preserve optional rTorrent content paths by @jxxghp (5a79600)
  • chore(types): gate parallel mypy cleanup batch by @jxxghp (3366713)
  • fix(types): preserve server compatibility contracts by @jxxghp (ae4534e)
  • chore(architecture): record typed response imports by @jxxghp (d41e95a)
  • style(types): format server imports by @jxxghp (643f660)
  • style(types): format cache imports by @jxxghp (7adcec5)
  • test(subscribe): cover typed popular records by @jxxghp (dba25cc)
  • fix(types): type shared HTTP clients by @jxxghp (82639da)
  • fix(types): narrow U115 storage responses by @jxxghp (c4b7b37)
  • fix(types): guard nullable storage streams by @jxxghp (d8d73e2)
  • fix(types): guard nullable AliPan streams by @jxxghp (b1b6d82)
  • chore(types): gate HTTP client cleanup by @jxxghp (b33060f)
  • chore(architecture): refresh storage import graph by @jxxghp (99820d0)
  • docs(architecture): refresh dependency edge count by @jxxghp (e2df9c3)
  • Revert "fix(types): narrow U115 storage responses" by @jxxghp (a36c3d7)
  • fix(types): guard nullable U115 download stream by @jxxghp (7ea9bea)
  • docs(types): align mypy debt metric by @jxxghp (d85e9d2)
  • chore(architecture): restore U115 import edge by @jxxghp (49f7d58)
  • fix(types): type TMDB API response boundaries by @jxxghp (653180c)
  • fix(types): type indexer spider response boundaries by @jxxghp (967780d)
  • chore(types): gate TMDB and indexer cleanup by @jxxghp (999906e)
  • fix(types): type messaging template and queue boundaries by @jxxghp (c1d7dea)
  • fix(types): type TMDB module boundaries by @jxxghp (7733dd7)
  • fix(types): type TrimeMedia client boundaries by @jxxghp (5180708)
  • fix(types): preserve TMDB client patch seam by @jxxghp (2faafe8)
  • fix(types): keep TrimeMedia complexity within gate by @jxxghp (3c7431b)
  • fix(scraper): align built-in NFO results with text contract (#7049) by Qinghe Li (85b3675)
  • ci: gate v3 release on version value changes (#7052) by @DDSRem-Bot (e33ae01)
  • fix(types): clarify Ugreen session and media response boundaries by @jxxghp (bb7f7f7)
  • fix(types): make Jellyfin response contracts explicit by @jxxghp (0bde181)
  • fix(types): make ZSpace response contracts explicit by @jxxghp (74489ca)
  • fix(types): make Discord callbacks and receipts explicit by @jxxghp (acfe477)
  • fix(types): make Emby response contracts explicit by @jxxghp (a03e620)
  • fix(types): preserve Feishu notification identity boundaries by @jxxghp (16723f0)
  • fix(types): preserve Plex SDK return contracts by @jxxghp (f1e09b4)
  • chore(architecture): sync reviewed Discord and Plex SDK fingerprints by @jxxghp (457ef25)
  • test(runtime): cover setting defaults with and without configured ports by @jxxghp (c1e738f)
  • fix(plex): avoid detail reloads for continue watching by @InfinityPacer (8c52755)
  • fix(wechat): refresh stale or rejected access_token (#7053) by @FlameSky-S (dd371ec)
  • fix(network): recover shared pools after repeated pool timeouts by @jxxghp (30378f2)
  • chore(types): reduce v3 host mypy debt (#7057) by @DDSRem (e0642ea)
  • fix(search): bound long site cooldowns during paged searches (#7056) by @q10710 (8b3eb22)
  • fix(community): prewarm and refresh medal snapshots in background by @jxxghp (9bcebc2)
  • test(community): cover invalidation and background failure recovery by @jxxghp (0b3c3fa)
  • chore(types): gate mypy debt as exceptions and require zero new files by @jxxghp (b12c112)
  • docs(mcp): rewrite external Agent integration guide by @jxxghp (9edb926)
  • docs: drop process records and internal implementation docs by @jxxghp (2d73cbc)
  • docs: streamline agent instructions in English by @jxxghp (6ec5240)
  • docs: refresh backend architecture overview by @jxxghp (f2b0064)
  • chore(release): publish v3.1.7 by @jxxghp (9e82e47)
  • fix(douban): preserve recommendation lists and page model contracts by @jxxghp (60d2fe4)
  • refactor(plugin): share dependency recovery decisions (#7060) by @DDSRem (54ba4f4)

版本对比

完整 Compare

Don't miss a new MoviePilot release

NewReleases is sending notifications on new releases.