Commit Graph

814 Commits

Author SHA1 Message Date
jxxghp
44f4656fc6 chore(architecture): sync network probe startup counts 2026-09-24 13:35:30 +08:00
jxxghp
d76bceee32 docs(architecture): sync network probe graph metrics 2026-09-24 13:02:50 +08:00
jxxghp
5d620b0cbe feat(media): support episode groups in manual scraping 2026-09-24 08:23:35 +08:00
jxxghp
bae7445011 Update subtitle transfer dependency baseline 2026-09-24 07:54:19 +08:00
jxxghp
bbaec9d6b3 fix: preserve v3 architecture complexity budget 2026-09-23 18:49:00 +08:00
jxxghp
58bb4961af fix: bound downloader connection retries for v3.0.8 2026-09-23 18:13:39 +08:00
jxxghp
4f72b77ef0 fix(agent): constrain API request body shapes 2026-09-23 14:24:06 +08:00
InfinityPacer
19e062c178 feat(plugin): attribute free-threaded GIL fallback to plugins (#6767)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 13:12:02 +08:00
InfinityPacer
0bb033afe7 feat(plugin): preflight plugin dependencies on free-threaded runtime (#6766)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 12:53:46 +08:00
jxxghp
967431091e feat: share GitHub token with Agent skills 2026-09-23 12:41:18 +08:00
InfinityPacer
3cef2149d0 fix(plugin): read the runtime compatibility gate from the declared snapshot (#6761)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 01:44:45 +08:00
InfinityPacer
0238351071 fix(plugin): v3t 下不再隐藏不兼容插件,改为提示不支持 (#6760)
* feat(plugin): surface v3t incompatibility instead of hiding plugins

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* chore(architecture): refresh dependency baseline after plugin gate split

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(plugin): keep runtime-incompatible plugins out of startup sync

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(plugin): annotate runtime compatibility ports without bare dict

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 00:35:20 +08:00
moviepilot-codex[bot]
3c516ddbe1 chore: refresh architecture dependency baseline 2026-09-21 18:45:08 +08:00
moviepilot-codex[bot]
d96f00113c feat: add GitHub Token device authorization 2026-09-21 18:30:15 +08:00
moviepilot-codex[bot]
240f43b327 fix(update): converge stale state and Docker transaction 2026-09-21 15:49:21 +08:00
moviepilot-codex[bot]
fe7c183d06 feat(agent): add GitHub pull request workflow 2026-09-21 12:53:07 +08:00
moviepilot-codex[bot]
16fce94575 docs(architecture): refresh dependency edge count 2026-09-21 09:19:58 +08:00
moviepilot-codex[bot]
1d043bb64e fix(agent): isolate memory by user 2026-09-21 08:59:33 +08:00
cyt-666
6e92a02255 fix: extend search.torrents timeout (#6734) 2026-09-20 15:23:47 +08:00
jxxghp
29ddf01eb3 docs(architecture): sync mypy debt metric 2026-09-19 18:45:22 +08:00
jxxghp
c2a232dec7 fix(docker): avoid starting update worker on regular restart 2026-09-17 17:37:38 +08:00
freeman
542f893123 fix(plugins): 启动时自愈被旧版本实现遮蔽的插件安装包根 (#6718) 2026-09-17 15:57:48 +08:00
jxxghp
70862ff45a docs: sync mypy debt metric 2026-09-17 12:55:42 +08:00
jxxghp
4f716c442c chore(architecture): record ruff cleanup 2026-09-16 18:51:54 +08:00
jxxghp
67cd412d82 chore(architecture): refresh host dependency baseline 2026-09-16 18:42:58 +08:00
jxxghp
3eb339b8e0 feat(agent): unify memory retrieval and activity history 2026-09-16 18:24:30 +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
b99b4fe2c3 chore(architecture): 同步模块路径与质量门禁 2026-09-16 00:12:16 +08:00
jxxghp
4ec8d4c961 chore(architecture): refresh dependency baseline 2026-09-15 18:26:49 +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
998a4082c9 docs: 同步 mypy 债务基线指标 2026-09-15 07:59:53 +08:00
Aqr-K
61aa3cd649 refactor(sdk): 插件契约基类迁入 SDK 并由 Compat 承接旧包根符号 (#6701) 2026-09-15 07:01:00 +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
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
6d82f44fc8 fix(music): split core recognition and organization optimizations (#6686) 2026-09-14 13:04:58 +08:00
jxxghp
6f9ad991d5 chore(architecture): sync host baseline metrics 2026-09-14 08:20:11 +08:00
Aqr-K
6ea1cc9433 fix(plugin): 插件降级重装时拒绝迁移树不认识的库 revision (#6681) 2026-09-14 07:01:32 +08:00
Aqr-K
57fb96fc3c feat(plugin): 分身后缀可留空自动分配,并支持按后缀恢复已停用的分身 (#6673) 2026-09-14 07:00:31 +08:00
Aqr-K
5fd04505c1 feat(plugin): 分身彻底清理,并按包含性校验收口插件数据目录解析 (#6671) 2026-09-13 21:05:04 +08:00
Aqr-K
af3c78c7dc chore(architecture): 固化 Ruff 低水位至 519 (#6669) 2026-09-13 19:42:45 +08:00
Aqr-K
d44480d739 Merge pull request #6666 from Aqr-K/feat/plugin-instance-target-enablement
feat(plugin): 插件实例默认调用目标与启停,未指定实例时不再兜底取第一个
2026-09-13 16:37:27 +08:00
jxxghp
c1a2e11941 chore(architecture): sync mypy diagnostic count 2026-09-13 14:41:40 +08:00
jxxghp
c60949ffff Merge branch 'v3' into feat/plugin-instance-config-logging 2026-09-13 14:30:42 +08:00
jxxghp
0ae26e3a4d docs: synchronize Ruff diagnostic count 2026-09-13 14:26:31 +08:00
Aqr-K
3d594ecee3 refactor(plugin): 插件配置改走独立通道,SystemConfig 不再按键值分支
插件配置此前借用 systemconfig 的 plugin.<实例ID> 单键,为了换表又在
SystemConfigOper 的 set/delete/load_snapshot 里按该前缀开分支。这是反向依赖:
一个对所有键一视同仁的通用键值存储被迫知道「插件」这个概念,读写路径依键值而
异,「这个键落在哪张表」只有读代码才说得清;规范方法按值加特例,也让此后任何新
键都要先确认自己会不会被拦截。

本次把插件配置整条链拆出,形状与本分支日志等级那条链一致:

- SystemConfigOper 整体回退到官方实现,与 f70d7c141 逐字节相同,对所有键一视同仁。
- 配置端口改按实例 ID 寻址:PluginStorage 新增 read_config / write_config /
  async_write_config / delete_config,PluginConfigStore 去掉 key_prefix 与 _key,
  不再有任何字符串键经过;plugin_exists 存在性规则、空键过滤与 force 语义不变。
- PluginInstanceOper 补齐读取与异步写入原语 get_config_data /
  async_save_config_data,同步与异步共用同一份落库决策,避免两条路径对「值未变化
  不写」和「建行用哪个源插件」各自分叉。
- _PluginBase 的 get_config / update_config 直连 PluginInstanceOper,方法名、签名、
  返回与 docstring 不变;self.systemconfig 保留,插件读 SystemConfigKey 枚举值仍
  然合法,插件公开面没有扩大。

插件直接用 SystemConfig 存取自身配置不予支持。它本就不是封装过的插件配置通道,
为它设计兼容或加守卫拦截,等于再把「插件」塞回通用存储里——那正是本次要拆掉的东
西。拆开后 plugin.<ID> 只是一个与插件无关的普通 systemconfig 键:迁移已经把旧的
plugin.* 行搬进插件实例表,读它拿到 None,写它会新增一条谁也不读的 systemconfig
记录,插件配置通道既不读也不写它,两边不会再有任何交叉。

代价是读取从内存快照变成一次按实例 ID 的主键查询。调用点都不在热路径上:宿主侧
只有插件启动/重载、配置表单接口与分身创建三处,插件侧 get_config() 惯例在
init_plugin 里取一次。写入侧没有变化,本来就是一次事务。

回归防线:新增用例断言 SystemConfigOper 对 plugin. 前缀没有任何特殊行为——写进去
就是一行普通 systemconfig 记录,读出来就是刚写的值,不会被路由到插件实例表。

兼容层零改动,三个 alembic 迁移一行未改。
2026-09-13 01:41:57 -04:00
jxxghp
9ba513debc fix(classification): initialize defaults in fresh v3 environments 2026-09-13 11:31:54 +08:00