Commit Graph
8175 Commits
Author SHA1 Message Date
jxxghp dce7372b81 feat: persist subscription side-effect outbox 2026-08-21 21:50:18 +08:00
jxxghp 336da307a7 docs: classify background action reliability 2026-08-21 21:33:34 +08:00
jxxghp 1f656830db docs: add module quality scale 2026-08-21 21:31:42 +08:00
jxxghp c0b31bddb6 refactor: register event delivery contracts 2026-08-21 21:29:52 +08:00
jxxghp b9ad5220ae refactor: define module contract v2 2026-08-21 21:25:35 +08:00
jxxghp ff0ce8d1c1 refactor: add configuration dependency ratchet 2026-08-21 21:20:56 +08:00
jxxghp 9df599f502 refactor: split api dependencies by domain 2026-08-21 21:09:57 +08:00
jxxghp 773ea8cb9b refactor: introduce typed host runtime 2026-08-21 20:56:25 +08:00
jxxghp b598b516d5 refactor: migrate high-risk write transactions 2026-08-21 20:46:57 +08:00
jxxghp 7de72e0e83 refactor: own subscription create transactions 2026-08-21 20:37:31 +08:00
jxxghp de2957b9de refactor: add transaction ownership ratchet 2026-08-21 20:16:30 +08:00
jxxghp bce440e97c Merge remote-tracking branch 'origin/v3' into v3 2026-08-21 20:14:19 +08:00
jxxghp dd1c4c3279 refactor: unify database readiness lifecycle 2026-08-21 20:07:07 +08:00
jxxghp bb57b22975 refactor: use factory for supervised uvicorn modes 2026-08-21 19:51:33 +08:00
jxxghp 0959831bae fix(ci): gate pylint on changed files 2026-08-21 19:50:06 +08:00
InfinityPacer 3b1c0bb93d fix(docker): retain update marker when cleanup fails (#6380) 2026-08-21 19:46:56 +08:00
jxxghp 76c32fa35c Merge branch 'v3' of https://github.com/jxxghp/MoviePilot into v3 2026-08-21 19:40:24 +08:00
jxxghp d89d29612c refactor: enforce single-worker control plane 2026-08-21 19:40:20 +08:00
InfinityPacer 7f2de37764 fix(docker): make source updates recoverable (#6379) 2026-08-21 19:37:54 +08:00
jxxghp 6c7c54d2c1 ci: enforce backend architecture contracts 2026-08-21 19:33:11 +08:00
jxxghp 37c442b042 refactor: separate semantic architecture baselines 2026-08-21 19:28:31 +08:00
jxxghp 7bc3ea831f refactor: scope architecture baseline operations 2026-08-21 19:21:27 +08:00
jxxghp 300ae75bcf docs: add backend architecture next-stage plan 2026-08-21 19:21:20 +08:00
InfinityPacer c59a852b8d fix(plugins): preserve top-level hidden restore entries (#6378) 2026-08-21 19:09:33 +08:00
InfinityPacer 6404a3aa58 fix(plugins): reload instances after dependency recovery (#6377) 2026-08-21 18:29:45 +08:00
InfinityPacer b9bbc8913c fix: 完善插件恢复与运行态收敛 (#6376) 2026-08-21 18:09:29 +08:00
InfinityPacer 2d80f9f04f fix(plugins): preserve dependency manifest sources (#6370) 2026-08-20 20:51:35 +08:00
InfinityPacer 638ea6f01e perf: 并行化后端单测并拆分覆盖率任务 (#6369) 2026-08-20 20:01:36 +08:00
InfinityPacer cbdde6443d test(plugins): align repository imports with runtime namespace (#6368) 2026-08-20 19:01:02 +08:00
InfinityPacer 2e5cc6c669 fix(plugins): align watcher lifecycle with startup (#6366) 2026-08-20 15:24:15 +08:00
InfinityPacer 4e3a6c8032 perf(docker): isolate high-frequency image payloads (#6365) 2026-08-20 14:47:06 +08:00
InfinityPacer 23f5d59c74 feat: 使用 uv 锁定主程序依赖并强化插件恢复边界 (#6364) 2026-08-20 12:17:19 +08:00
jxxghp 27ae1b5290 fix: 插件重载窗口期装饰器包装类方法误判直调导致 missing event TypeError
事件绑定解析在 owner_class 为 None 时仅靠限定名区分自由函数与类方法声明,
装饰器包装的方法限定名含 <locals> 被误判为自由函数 unbound 直调,把 event
吞进 self 触发 TypeError。局部作用域限定名无法区分包装方法与局部自由函数,
按调用约定兜底:签名首参为 self/cls 才视为类方法声明跳过执行。
2026-08-20 08:51:37 +08:00
InfinityPacer 307d54bf68 fix(acoustid): accept non-fatal fpcalc output (#6362) 2026-08-19 22:44:35 +08:00
InfinityPacer 2b3766e86e feat: 数据库迁移前自动备份 (#6360) 2026-08-19 18:35:56 +08:00
InfinityPacer f700db5ac8 feat(database): add managed backup and offline restore (#6359) 2026-08-19 17:34:32 +08:00
jxxghp f4a879b3de fix(rename): 剥离专辑名尾部年份,避免重命名目录重复年份 (#6355)
音频标签或下载目录常把发行年份写进专辑名(如 "欲望反光 (2018)"),
而音乐重命名模板会独立追加 ({{year}}),两者叠加生成 "欲望反光 (2018) (2018)"
这类重复年份目录,并把同一专辑拆到多个目录。

在模板上下文中统一剥离专辑名尾部的括号年份;仅当存在可独立渲染的
年份时才剥离,避免丢失只存在于专辑名中的年份信息。
2026-08-19 17:26:35 +08:00
jxxghp 87fe986286 fix(test): 刷新架构基线,修复未识别下载功能引入依赖导致的 CI 失败 2026-08-19 14:05:24 +08:00
jxxghp f069bf05c7 fix(agent): 调大摘要输入裁剪上限,减少无法压缩报错
LangChain 默认按 4000 token 裁剪待摘要消息,单条超长工具结果或
用户输入会被整体丢弃,直接触发'无法压缩'报错;在 MoviePilot 子类
中覆盖默认上限为 16000,并保持显式传参的兼容性。
2026-08-19 14:02:19 +08:00
0069d04b18 feat(download): 支持未识别资源确认下载 (#6356)
* feat(download): 支持未识别资源确认下载

* feat(download): 音乐与影视统一未识别确认下载逻辑

* fix(download): 修正未识别媒体信息构造的类型标注与合集归一

---------

Co-authored-by: liulang <liulang@25qp.cn>
Co-authored-by: jxxghp <jxxghp@gmail.com>
2026-08-19 13:40:47 +08:00
InfinityPacer bbd5c12dbc perf(docker): bound automatic update probes (#6357) 2026-08-19 12:28:22 +08:00
jxxghp 03ada7eb01 refactor: 收敛 factory 模块级副作用并统一 async 路径进度为异步后端
- 将 configure_token_codec/configure_plugin_routes 移入 create_app(),消除 import 期副作用
- runtime 层新增 AsyncCacheProxy/AsyncTTLCache/AsyncProgressHelper,共享 progress region
- search/system/history/scheduler/dashboard 的事件循环路径切换异步进度后端
- 同步进度回调经事件循环提交或线程池执行,避免阻塞事件循环
2026-08-19 09:11:42 +08:00
jxxghp 91d339a8dd fix(test): 刷新架构基线,修复 app/chain/site.py 行号漂移导致的 CI 失败 2026-08-19 06:38:13 +08:00
InfinityPacer fc69039d00 fix(docker): stabilize bootstrap self-updates (#6354) 2026-08-19 05:54:41 +08:00
jxxghp da51ff1a5f fix: 修复 SiteUpdated 事件清理站点数据时 SystemConfigService 无 all() 方法报错 2026-08-18 22:40:46 +08:00
jxxghp 282b922f1b fix: 修复批量插件重载窗口期残留 handler 直调导致 missing event TypeError
插件重载 stop 阶段清除 sys.modules 缓存后,若广播事件命中注册表中残留的旧类方法声明,
EventBindingResolver.owner_class 因 inspect.getmodule 返回 None 而解析失败,原实现会
直接返回原始函数并绕过实例绑定,旧签名无 event 参数时抛出 TypeError 并刷屏通知。

- binding.py:owner_class 解析失败时区分类方法声明与自由函数;类方法声明记入
  unresolved 诊断并跳过执行,等待重载完成后新 handler 按标识覆盖自愈;
  自由函数保持直调路径不变。
- 收敛 binding-miss 与新路径的未命中记账逻辑到 _record_unresolved,首次未命中才告警。
- 新增回归测试:模块卸载后残留类方法被跳过、自由函数直调不受影响。

Closes #6351
2026-08-18 21:40:13 +08:00
jxxghp 4cc06ce7ad fix(test): 修复 doctor/monitor 惰性门面用例在无站点资源的 CI 子进程中失败
该用例以独立子进程加载 app.monitor 实现,链路最终 import
app.application.site.sites;CI 无该动态资源模块且子进程不经过
conftest 引导,导致 ModuleNotFoundError。改为触发实现加载前显式
安装与 conftest 同源的 sites 垫片,并通过 CONFIG_DIR 指向临时
目录隔离子进程配置。
2026-08-18 17:28:21 +08:00
jxxghp 8f81492e99 fix: 修复站点批量导入报错(重复方法覆盖导致异步调用失效) 2026-08-18 17:10:14 +08:00
jxxghp a6997d0dac fix: 修复站点用户数据DTO缺少name字段导致种子排序报错 2026-08-18 15:56:40 +08:00
jxxghp 8d62f33155 fix(plugin): 修复坏插件模块声明击穿模块调度导致接口大面积报错
- projection 只接受映射类型的 get_module 声明,非法值跳过并记日志
- dispatcher 同步/异步路径防御非映射方法表,单个坏插件被隔离
- media 端点改用 application 层插件运行时门面,消除分层违规依赖
- 图片能力测试打桩 models.dev 目录边界,适配仓库内离线目录留空

Closes #6346
2026-08-18 15:53:28 +08:00