jxxghp
|
d5e469a4e4
|
fix(update): preserve host plugin entrypoint during Docker upgrades
|
2026-09-16 12:24:19 +08:00 |
|
jxxghp
|
11eea66d27
|
fix(architecture): 移除整理任务兼容时钟门面
|
2026-09-16 07:27:20 +08:00 |
|
jxxghp
|
9f75f54b74
|
fix(architecture): 清理重构门禁诊断
|
2026-09-16 07:17:07 +08:00 |
|
jxxghp
|
0afc5e2349
|
fix(architecture): 同步模块迁移门禁引用
|
2026-09-16 07:01:10 +08:00 |
|
jxxghp
|
edeb85cb00
|
fix(test): 修正 Agent 异常导入路径
|
2026-09-16 06:49:28 +08:00 |
|
jxxghp
|
b99b4fe2c3
|
chore(architecture): 同步模块路径与质量门禁
|
2026-09-16 00:12:16 +08:00 |
|
jxxghp
|
4e9a64c0f0
|
refactor(application): 按模块子目录统一文件命名
|
2026-09-15 23:57:06 +08:00 |
|
jxxghp
|
61b0ae951f
|
refactor(application): 拆分消息渠道权限
|
2026-09-15 23:57:06 +08:00 |
|
jxxghp
|
0fa5224e66
|
refactor(application): 拆分 Agent 选择交互
|
2026-09-15 23:57:06 +08:00 |
|
jxxghp
|
4b0b09022f
|
refactor(application): 拆分整理历史契约
|
2026-09-15 23:57:06 +08:00 |
|
jxxghp
|
6622f79ef1
|
refactor(application): 拆分整理规划契约
|
2026-09-15 23:57:06 +08:00 |
|
jxxghp
|
073a7acf26
|
refactor(application): 拆分整理作业状态管理
|
2026-09-15 23:57:06 +08:00 |
|
jxxghp
|
9523fad04d
|
refactor(application): 拆分整理历史重试策略
|
2026-09-15 23:57:06 +08:00 |
|
jxxghp
|
30857d391d
|
refactor(application): 收敛共享重复逻辑
|
2026-09-15 23:57:06 +08:00 |
|
llzg
|
4ca96a9dab
|
fix(download): 下载历史回读下载器实际保存目录 (#6708)
|
2026-09-15 23:25:47 +08:00 |
|
jxxghp
|
4ec8d4c961
|
chore(architecture): refresh dependency baseline
|
2026-09-15 18:26:49 +08:00 |
|
jxxghp
|
d665426157
|
fix(agent): constrain API body input to JSON values
|
2026-09-15 18:15:31 +08:00 |
|
sylas
|
9aa06edcc4
|
fix(music): 修复音乐资源命名变体导致的漏搜 (#6706)
|
2026-09-15 17:14:33 +08:00 |
|
jxxghp
|
598cbf5dae
|
test(agent): 修正运行时配置注入路径
|
2026-09-15 13:26:45 +08:00 |
|
jxxghp
|
71fffde878
|
feat(agent): 完善系统设置机器可读合同
|
2026-09-15 13:11:29 +08:00 |
|
jxxghp
|
880cef2c88
|
fix(config): 使用公共日志模块记录配置恢复
|
2026-09-15 11:43:12 +08:00 |
|
jxxghp
|
37ea8ba14d
|
fix(subscribe): support cross-source video status lookup
|
2026-09-15 11:31:04 +08:00 |
|
jxxghp
|
99831650bb
|
test(update): satisfy ruff import ordering
|
2026-09-15 11:23:49 +08:00 |
|
jxxghp
|
f483e5fe14
|
fix(config): 修复非法系统配置阻断启动 (#6702)
|
2026-09-15 11:16:29 +08:00 |
|
jxxghp
|
989a4b0dce
|
fix(update): preserve new Docker modules during upgrades
|
2026-09-15 11:01:13 +08:00 |
|
jxxghp
|
4a777f1410
|
fix: 补齐 Bangumi 客户端类型标注
|
2026-09-15 07:53:44 +08:00 |
|
jxxghp
|
ee6393974a
|
feat: 内置 Bangumi 数据与图片代理
|
2026-09-15 07:42:18 +08:00 |
|
Aqr-K
|
61aa3cd649
|
refactor(sdk): 插件契约基类迁入 SDK 并由 Compat 承接旧包根符号 (#6701)
|
2026-09-15 07:01:00 +08:00 |
|
jxxghp
|
1030028dfe
|
test(mediaserver): cover season title normalization
|
2026-09-15 00:32:31 +08:00 |
|
jxxghp
|
c587ff07f7
|
fix(mediaserver): support cross-source library status
|
2026-09-15 00:17:20 +08:00 |
|
jxxghp
|
53e0c6c5c0
|
fix(transmission): normalize parsed torrent year type
|
2026-09-14 21:11:05 +08:00 |
|
jxxghp
|
ebbc0d4520
|
chore(architecture): refresh dependency baseline
|
2026-09-14 19:47:03 +08:00 |
|
jxxghp
|
ebddeee23b
|
feat(subscribe): accumulate music album track progress
|
2026-09-14 19:35:04 +08:00 |
|
Aqr-K
|
dc7e06ce38
|
fix(plugin): 落库失败的清理留在占位锁内,不再误删他人的实例 (#6695)
|
2026-09-14 17:41:08 +08:00 |
|
jxxghp
|
2dedd00db4
|
test: follow declared application version in backup names
|
2026-09-14 16:57:35 +08:00 |
|
Aqr-K
|
c5d2fd2ef4
|
fix(plugin): 修分身恢复的占用判定、空模板配置重建、自动分配探测上限与预留落库回滚 (#6692)
|
2026-09-14 16:06:02 +08:00 |
|
Aqr-K
|
bc99355b2a
|
fix(plugin): 补上换入删除旧目录中途失败时的回滚 (#6691)
|
2026-09-14 15:12:51 +08:00 |
|
jxxghp
|
4df910990f
|
test(architecture): refresh startup module baseline
|
2026-09-14 13:55:45 +08:00 |
|
jxxghp
|
4af54fcf5f
|
test(architecture): refresh dependency baseline
|
2026-09-14 13:35:07 +08:00 |
|
jxxghp
|
1cb1f02f19
|
fix(auth): normalize site authentication parameters
|
2026-09-14 13:24:14 +08:00 |
|
jxxghp
|
6d82f44fc8
|
fix(music): split core recognition and organization optimizations (#6686)
|
2026-09-14 13:04:58 +08:00 |
|
jxxghp
|
9724305a03
|
fix(imdb): handle null episode fields
|
2026-09-14 12:42:54 +08:00 |
|
jxxghp
|
6f9ad991d5
|
chore(architecture): sync host baseline metrics
|
2026-09-14 08:20:11 +08:00 |
|
jxxghp
|
1e416882c0
|
fix(auth): lock configured superuser during initialization
|
2026-09-14 07:58:36 +08:00 |
|
Aqr-K
|
dd4ae3e8d5
|
refactor(plugin): 移除已无调用者的物理分身源码改写器 (#6683)
物理分身是早期实现:复制整个插件目录,再用字符串替换改写副本源码里的类名、
plugin_config_prefix 和联邦构建产物。虚拟实例接管后,分身不再复制目录,
由装载器改写类身份、按实例 ID 隔离配置与数据,这套改写器随之失去调用者。
求证依据(全仓 git grep,覆盖 app/、tests/、scripts/、docs/、skills/):
- PluginPackageManager.clone() 无任何生产调用者。分身的唯一生产路径是
POST /api/v1/plugin/clone/{plugin_id} -> PluginManager.clone_plugin()
-> PluginCloneService.clone(),后者只写 PluginInstance 记录与隔离配置,
不碰包适配器。clone() 也没有经 PluginSystemServices 暴露出去。
- clone() 的四个私有实现 _modify_plugin_files / _modify_python_file /
_modify_federation_files / _rename_federation_assets,消费者只有 clone()
自身与 PluginSystemServices 的同名透传。
- PluginSystemServices 的四个透传,消费者只有 PluginManager 的 _modify_* shim。
- PluginManager 的四个 shim 无任何调用者。动态可达性已单独排查:
全仓没有 getattr/字符串反射指向这些名字;app/runtime/compat/manifest.py
不登记它们的别名(只有 app.core.plugin -> 本模块的模块级映射);
app/sdk/ 不再导出;PluginManager 与 PluginPackageManager 都没有
__getattr__ 兜底,属性不存在即 AttributeError;官方插件基线
official-plugin-baseline.json 零命中。
- @observe_compat_facade("PluginManager") 只包装类上已存在的方法,
不会凭空合成属性,因此 shim 删除后 enforce_facade 再也匹配不到
notices.py 里那四条 key,登记随之成为不可达数据,一并删除。
替代路径:这四条弃用声明当初承诺的替代目标是
get_plugin_system().package._modify_*(),那是一次「门面搬到适配器」的
重定位登记,本次连同能力一起下线;分身能力本身的替代路径是虚拟实例
PluginCloneService.clone(),它已在生产链路上,见
docs/v2-to-v3-overview.md §3.6「不复制插件源码,也能保持各实例配置隔离」。
既有磁盘上的旧物理分身不受影响:卸载路径读取 is_clone 属性并调用
remove_plugin_package() 的逻辑原样保留,只是不再产生新的物理分身。
这是对已公告弃用 API(DeprecationStage.SILENT,since v3.0.0)的正式移除。
连带改动:
- package.py 的 import re 仅服务于 _modify_python_file,同步移除;模块
docstring 去掉「分身处理」。
- system.py 的 typing.cast 仅服务于被删透传,同步移除。
- tests/test_plugin_package_manager.py::test_clone_rewrites_python_and_federation_assets
是这套改写器的唯一测试,且只覆盖已无调用者的路径,随实现一并删除。
(删的是测试函数不是测试文件,tests/run.py 的分片装箱不变。)
- mypy 低水位随实现下降:app/runtime/extensions/plugin/manager.py 的
assignment 8->4(四个 shim 的 version/icon 参数 str = None)、
no-untyped-def 12->11(_rename_federation_assets 缺返回标注),
fixture 与 docs/refactor/optimization-checklist.md 的全量 mypy 计数
9,371 -> 9,366 同步更新。依赖、复杂度、ruff、并发等其余基线无变化。
Co-authored-by: jxxghp <jxxghp@gmail.com>
|
2026-09-14 07:19:46 +08:00 |
|
Aqr-K
|
5e232ca14d
|
fix(plugin): 安装记录大小写不敏感查询、游标物化,site 端点改从 Application 取 (#6682)
* fix(plugin): 安装 journal 按大小写不敏感列出事务记录
create 用 func.lower 判定同一物理插件并据此拒绝重复占位,list 却还是等值过滤。
判据分叉后,恢复流程查不到那条被 create 认定为未收尾的 journal,会认为没有待恢复
事务,而新事务又永远被同一行挡住。list 改用与 create 相同的 func.lower 判据。
* fix(plugin): 批量读插件身份时在事务内物化游标
list_by_plugin_ids 无会话调用时由组合根另开短事务,会话在 lambda 返回后立即关闭,
外层再 list() 消费惰性游标会撞上 "identity map is no longer valid",一行都读不到。
补上 .all(),让行在事务内取完。
* refactor(api): site 端点从 Application 取插件路由刷新
register_plugin_api 的唯一拥有者是 app.application.plugin.routes,
dependencies/plugin.py、scheduler/reconcile.py 与 initializers/plugins.py 都已从那里
取用,只剩 site 端点还在向 plugin 端点横向借。改为同一来源,并加门禁锁住这条判据。
依赖基线相应下降一条边(8650 -> 8649:site 不再到达 app.api.endpoints 与
app.api.endpoints.plugin,改为到达 app.application.plugin.routes),mypy 低水位同步
下降一条 attr-defined,两处文档数字随之更新。
---------
Co-authored-by: jxxghp <jxxghp@gmail.com>
|
2026-09-14 07:18:50 +08:00 |
|
Aqr-K
|
6ea1cc9433
|
fix(plugin): 插件降级重装时拒绝迁移树不认识的库 revision (#6681)
|
2026-09-14 07:01:32 +08:00 |
|
Aqr-K
|
2789440796
|
fix(plugin): 分身 ID 对外查询统一归一到源插件,并补齐认证远程入口的源插件字段 (#6680)
|
2026-09-14 07:01:18 +08:00 |
|
Aqr-K
|
9955698b1a
|
fix(plugin): 加载入口补生命周期锁,手工重载带上分身 (#6679)
|
2026-09-14 07:01:04 +08:00 |
|
Aqr-K
|
5c01cdddb3
|
fix(plugin): 插件安装改为暂存后原子换入,避免下载失败删掉已装插件 (#6678)
|
2026-09-14 07:00:50 +08:00 |
|