jxxghp
|
43cccb8ff8
|
feat: add low-cardinality observation port
|
2026-08-21 22:15:47 +08:00 |
|
jxxghp
|
47f1ff9cb4
|
feat: propagate request correlation context
|
2026-08-21 22:08:33 +08:00 |
|
jxxghp
|
c755c074b9
|
refactor: dataize scheduler job contracts
|
2026-08-21 21:59:11 +08:00 |
|
jxxghp
|
dce7372b81
|
feat: persist subscription side-effect outbox
|
2026-08-21 21:50:18 +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
|
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
|
d89d29612c
|
refactor: enforce single-worker control plane
|
2026-08-21 19:40:20 +08:00 |
|
InfinityPacer
|
c59a852b8d
|
fix(plugins): preserve top-level hidden restore entries (#6378)
|
2026-08-21 19:09:33 +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
|
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
|
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
|
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 |
|
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
|
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
|
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 |
|
jxxghp
|
dc23977b0c
|
fix: 修复站点用户数据转换并完善媒体来源扩展
|
2026-08-18 14:50:09 +08:00 |
|
jxxghp
|
c2a27f7c71
|
refactor: 收口订阅与插件应用边界
|
2026-08-18 13:54:17 +08:00 |
|
jxxghp
|
8472bcff43
|
refactor: 收口 V3 分层架构与插件兼容边界
|
2026-08-18 13:22:02 +08:00 |
|
jxxghp
|
cca99bd421
|
ci: fetch models.dev catalog during packaging
|
2026-08-18 13:18:36 +08:00 |
|
jxxghp
|
17499e5ac9
|
fix 插件恢复前先装配插件市场、包管理、依赖安装等外部服务
|
2026-08-18 09:42:58 +08:00 |
|
jxxghp
|
5128ae9e1e
|
refactor: 推进后端分层架构治理
|
2026-08-18 00:29:14 +08:00 |
|
jxxghp
|
5d0bacabd5
|
fix(dashboard): 修复首页存储空间显示为 0
仪表板 _build_storage 原先仅按 library_storage 选取存储,用户只配置
本地下载目录而未填媒体库存储时存储集合为空,直接返回 0;而设置页经
LocalStorage.usage 同时统计下载目录与媒体库目录,故显示正常。
改为汇总下载目录的 storage 与媒体库目录的 library_storage,与 usage
口径对齐。存储名用 set 去重,同一存储只查询一次;磁盘层面 space_usage
已按 st_dev / Btrfs FSID 去重,相同磁盘的不同目录不会重复累加。
closes #6268
|
2026-08-17 17:34:34 +08:00 |
|
jxxghp
|
2edc7d54f4
|
fix text
|
2026-08-17 13:47:48 +08:00 |
|
jxxghp
|
72f5667927
|
refactor(scheduler): 缓存清理改为仅手动执行
移除 clear_cache 的 add_job 注册,不再自动定时执行。
在 _jobs 中标记 manual=True 并补充 provider_name,
list() 新增手动任务展示段,未调度的手动任务也能在 UI 中显示和手动触发。
|
2026-08-17 13:38:01 +08:00 |
|
jxxghp
|
252f0f986f
|
fix(scheduler): 恢复缓存清理定时任务注册
commit 4b1df72a 移除了 clear_cache 的 add_job 调用但保留了 _jobs 定义,
导致任务在 UI 中不可见、无法手动执行。现以固定 24 小时间隔重新注册,
不再绑定 META_CACHE_EXPIRE。
|
2026-08-17 13:33:32 +08:00 |
|
jxxghp
|
48d85b798b
|
feat(scheduler): 下载失败冷却记录加入定时清理
新增 DATA_CLEANUP_DOWNLOAD_FAILURE_DAYS 配置项(默认 7 天),
在 _build_cleanup_plans 中增加 downloadfailure 清理计划,
调用已有的 DownloadFailure.delete_expired 删除冷却已过期的记录。
|
2026-08-17 13:29:42 +08:00 |
|
jxxghp
|
2bb090d2be
|
fix(download): 下载失败冷却日志补充失败原因和重试时间
将 _active_download_failure_fingerprints 返回类型从 Set[str] 改为 Dict[str, DownloadFailure],
__is_context_in_failure_cooldown 从失败记录中提取 error_message 和 next_retry_at,
日志输出格式改为「近期添加下载失败(失败原因:xxx),暂时跳过该资源,将于 yyyy-MM-dd HH:mm:ss 后重试」。
|
2026-08-17 13:24:22 +08:00 |
|
InfinityPacer
|
3ebbec3317
|
perf(startup): reduce readiness work (#6341)
|
2026-08-17 11:32:04 +08:00 |
|
jxxghp
|
23ca70fa37
|
fix(acoustid): 测试函数独立检测本地 fpcalc 依赖而非仅校验网络
原先 test() 依赖 init_module() 一次性缓存的 self._fpcalc_path,初始化之后再安装或移除 fpcalc 都不会反映在测试结果中,导致 UI 测试可能错误显示为通过。
- 抽出静态方法 _resolve_fpcalc() 基于 shutil.which 定位可执行 fpcalc,init_module() 复用
- test() 每次自行重新定位 fpcalc,缺失则直接失败且不发起网络请求,并写回 self._fpcalc_path
- 新增 3 个回归用例覆盖本地依赖检测与独立于 init 缓存的行为
|
2026-08-17 11:07:13 +08:00 |
|
jxxghp
|
77b7960b7d
|
fix(subscribe): 修复历史 note 双重 JSON 编码导致的订阅列表 500
2.0 时代旧代码对 JSON 列显式 json.dumps,导致 note 字段在库里是
字符串而非数组,响应模型按 List[int] 校验失败返回 500。
- 新增 3.0.7 数据迁移,解析并回写字符串型 note 为真正的 JSON 数组
- Subscribe 响应模型增加 note 字符串兼容解析,脏数据按空值处理
|
2026-08-17 10:56:31 +08:00 |
|
jxxghp
|
eefe1ec931
|
fix(config): 更新配置成功时返回空字符串消息,修复保存设置 500 错误
|
2026-08-17 10:34:45 +08:00 |
|