jxxghp
be65e047b0
fix(plugin): support mirrors for Release asset downloads ( #7224 )
2026-10-27 22:21:48 +08:00
Aqr-K
6610a8c008
fix: retain plugin lifecycle ownership and recover installation state ( #7146 )
...
* fix: retain plugin lifecycle ownership and recover installation state
* test: cover plugin rollback and uninstall lifecycle boundaries
---------
Co-authored-by: jxxghp <jxxghp@gmail.com >
2026-10-23 07:44:07 +08:00
DDSRem
54ba4f435b
refactor(plugin): share dependency recovery decisions ( #7060 )
2026-10-18 15:29:31 +08:00
DDSRem
e0642eafa7
chore(types): reduce v3 host mypy debt ( #7057 )
...
* chore(types): clear AniList endpoint mypy debt
* chore(types): clear Douban endpoint mypy debt
* chore(types): clear recommendation endpoint mypy debt
* chore(types): clear subscription notification mypy debt
* chore(types): clear SDK string compatibility mypy debt
* chore(types): ratchet v3 host mypy across remaining files
* chore(types): reduce v3 host mypy debt and retire ledger
* chore(types): reconcile host snapshot with upstream HTTP pool
* test(types): cover host paths exposed by mypy cleanup
2026-10-18 09:37:49 +08:00
DDSRem
2de976f6b3
Merge pull request #7050 from DDSRem-Dev/codex-comment-migration
...
docs: 统一全项目中文注释和结构化契约说明
2026-10-17 19:26:29 +08:00
jxxghp
b663825fe7
fix(plugin): recover dependencies without disabled constraints
...
Keep enabled host and clone sources in dependency recovery. Fall back to per-plugin requests while retaining ready and recovered manifest constraints, preserving original sources and cancellation ownership.
Refs #6943
2026-10-10 12:20:13 +08:00
jxxghp
d7db4cfc0b
fix(plugin): serialize package swaps with imports ( #6939 )
2026-10-10 07:42:37 +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
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
Aqr-K
bc99355b2a
fix(plugin): 补上换入删除旧目录中途失败时的回滚 ( #6691 )
2026-09-14 15:12:51 +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
5c01cdddb3
fix(plugin): 插件安装改为暂存后原子换入,避免下载失败删掉已装插件 ( #6678 )
2026-09-14 07:00:50 +08:00
jxxghp
8072b7d78f
Refactor application architecture and compatibility boundaries
2026-09-13 12:53:00 +08:00
jxxghp
c0158b1f63
fix(plugin): isolate startup recovery failures
2026-09-12 20:39:19 +08:00
ranzhigg
69d4a15571
fix(plugin): preserve binary files in fallback downloads
...
Write file-list plugin payloads as raw bytes in both sync and async paths so wheel archives remain valid after Release fallback. Add a regression test covering binary payload preservation.
Co-authored-by: Codex <codex@openai.com >
2026-09-09 21:17:06 +08:00
jxxghp
93a8dca5e9
refactor(plugin): unify adapter decisions
2026-08-29 21:32:37 +08:00
jxxghp
fa40f29dfd
refactor(plugin): converge runtime ownership and compatibility
2026-08-29 12:55:52 +08:00
jxxghp
13fba96fd8
refactor(runtime): govern dependency module naming
2026-08-29 08:14:21 +08:00
InfinityPacer
92066dfad4
feat: 完成插件原生依赖重启激活闭环 ( #6491 )
...
* feat(plugins): track native dependency activation
* fix(plugins): finalize native restart state lifecycle
2026-08-29 02:10:50 +08:00
jxxghp
9dbe424c3d
refactor(config): retire RuntimeSettingsCompat host usage
2026-08-26 15:55:21 +08:00
InfinityPacer
71db425c07
feat(plugin): 建立可信来源准入与安装恢复 ( #6462 )
2026-08-26 07:52:00 +08:00
jxxghp
10582277e2
refactor: unify plugin file operation cancellation
2026-08-24 03:17:07 +08:00
InfinityPacer
6c2817e383
fix(plugin): close cancellable install lifecycle gaps
2026-08-23 14:26:42 +08:00
InfinityPacer
0378eabb8f
fix(plugin): make installation lifecycle cancellable
2026-08-23 14:26:42 +08:00
jxxghp
ef6a613eb3
refactor: add dynamic runtime settings compatibility proxy
2026-08-23 02:16:03 +08:00
jxxghp
b4e003f098
refactor: route monitor and resource settings through runtime
2026-08-23 01:59:37 +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
23f5d59c74
feat: 使用 uv 锁定主程序依赖并强化插件恢复边界 ( #6364 )
2026-08-20 12:17:19 +08:00
jxxghp
5128ae9e1e
refactor: 推进后端分层架构治理
2026-08-18 00:29:14 +08:00