jxxghp
d9afaba8dd
feat(plugin): expose documentation before installation ( #7222 )
2026-10-27 21:37:00 +08:00
Aqr-K
71c2e9e3df
fix(storage): retain history until target cleanup is confirmed ( #7202 )
2026-10-27 05:42:07 +08:00
jxxghp
3ac7526930
feat(notification): relay AppPush through private MoviePilot Server
2026-10-24 07:32:00 +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
jxxghp
fa67be8e4a
fix(scraping): normalize artwork and reuse downloads for aliases
...
Add independent alias and Fanart 4K switches, identify exact artwork names, preserve episode and season conventions, and detect missing images across case and format variants. Normalize downloaded bytes to JPEG or PNG and reuse one request with storage hard links or local upload copies.
Refs #7128
2026-10-22 09:25:42 +08:00
jxxghp
6d4ce83837
fix(types): clear host mypy debt and prevent typing regressions
...
严格检查全部宿主源码,清零类型错误预算并移除按模块类型豁免。
按原因、所属方法、错误码及语法指纹锁定必要兼容例外和站点类型桩,
CI 阻断新增忽略、检查范围退化、本地桩替代真实接口及新的类型错误。
修复空值、异步和供应方类型边界,保持插件与 API 兼容合同,
并补充存储、订阅、通知、Agent 和工作流边界的回归覆盖。
2026-10-21 22:03:18 +08:00
Aqr-K
bf4ef4214e
perf(mediaserver): add caller-controlled query projections ( #7068 )
...
* perf(mediaserver): add caller-controlled query projections
* test(mediaserver): cover query projection option contracts
---------
Co-authored-by: jxxghp <jxxghp@gmail.com >
2026-10-19 08:33:45 +08:00
jxxghp
60d2fe418a
fix(douban): preserve recommendation lists and page model contracts
2026-10-18 15:08:37 +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
3075efba1c
style: order module adapter imports
2026-10-17 12:36:48 +08:00
jxxghp
dc2f04189f
fix: type host module configuration capture
2026-10-17 12:36:48 +08:00
cosini
e36884766c
feat(douban): 新增豆瓣短评与影评接口
...
* feat(douban): 新增豆瓣短评与影评接口
* fix(douban): satisfy comment endpoint CI gates
---------
Co-authored-by: jxxghp <jxxghp@gmail.com >
2026-10-17 12:31:41 +08:00
jxxghp
68101746ae
fix(plugin): recover invalid historical instance rows ( #7039 )
...
* fix(plugin): recover invalid historical instance rows
* fix(plugin): keep maintenance on existing startup path
* style(plugin): order maintenance test imports
* chore(architecture): record plugin instance validator edges
2026-10-17 06:34:25 +08:00
jxxghp
22283b19ee
refactor(types): govern plugin monitor candidate contracts
2026-10-16 23:21:33 +08:00
jxxghp
2b5eb02701
refactor(types): govern plugin path candidate contracts
2026-10-16 23:20:47 +08:00
jxxghp
6f7731545f
refactor(types): govern plugin sync candidate payloads
2026-10-16 23:19:31 +08:00
jxxghp
38dd03b9f7
refactor(types): declare plugin system market port
2026-10-16 23:18:09 +08:00
jxxghp
2b5e0ce473
refactor(types): declare plugin catalog facade projections
2026-10-16 18:55:41 +08:00
jxxghp
661e9d95ae
refactor(types): declare plugin access comparison result
2026-10-16 18:49:36 +08:00
jxxghp
5e14615dce
refactor(types): govern raw plugin metadata mappings
2026-10-16 15:49:36 +08:00
jxxghp
3ee36342bd
refactor(types): prove acquired plugin mutation context
2026-10-16 15:15:17 +08:00
jxxghp
ca15f05038
refactor(types): govern plugin lifecycle configuration
2026-10-16 15:15:17 +08:00
jxxghp
2d7af4b0a7
refactor(types): govern stored plugin configuration values
2026-10-16 15:15:17 +08:00
jxxghp
967860e830
refactor(types): specify plugin clone configuration values
2026-10-16 13:25:40 +08:00
jxxghp
ece46052aa
refactor(types): preserve configured service schema types
2026-10-16 13:25:40 +08:00
jxxghp
4955b7b9ea
fix: harden backend isolation and execution safety
2026-10-16 09:11:28 +08:00
InfinityPacer
d9ac4cc429
feat(plugin): expose remote entry and version on agent pets
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-11 04:08:15 +08:00
InfinityPacer
40e80f43f5
fix(plugin): advance runtime generation when a plugin is enabled or disabled
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-11 04:08:15 +08:00
InfinityPacer
e97f64e777
feat(plugin): add avatar to agent pet declarations
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-11 04:08:15 +08:00
InfinityPacer
25aaf3a32b
feat(plugin): add agent pet extension contract
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-11 04:08:15 +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
freeman
f3ad81b39e
style: apply safe ruff auto-fixes and exempt startup late imports
...
Run `ruff check app tests scripts --fix` with the configured rule set
(E4/E7/E9/F/I): import sorting (I001), f-strings without placeholders
(F541), lambda/variable/unused-import cleanups that ruff marks safe.
Nine files whose only ruff debt sits next to pre-existing pylint
import-resolution errors (lazy exports, sys.path script imports) or
whose "unused" imports are reached through attribute access by tests are
left untouched so the changed-file pylint gate and the benchmark tests
stay green; their diagnostics remain in the baseline.
app/startup/lifecycle/__init__.py and app/main.py import business
modules after cache composition, import-path and stdio setup on purpose
(the source comments document the contract), so declare E402
per-file-ignores for them instead of adding per-line noqa.
Ruff ratchet watermark drops from 498 to 100; sync the baseline fixture
and the optimization checklist figure.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-10-09 13:29:09 +08:00
ChantXu64
e5e2558585
feat(search): 订阅补全逐页搜索、断点续搜与资源页手动分页 ( #6907 )
2026-10-07 14:40:55 +08:00
thsrite
4395ddecf2
feat(mediaserver): 内置媒体服务 MediaVault 更名为 Vyo
...
主项目更名为 Muvyo,内置媒体服务更名为 Vyo。模块目录、文件、类名、模块 ID、枚举、
名称描述、日志与文档统一改为 Vyo;配置类型值 mediavault 保持不变,
已保存的媒体服务器配置无需迁移。
2026-09-30 19:46:09 +08:00
InfinityPacer
2a68dd6fea
fix(plugin): release reloaded plugin code held by framework caches ( #6807 )
2026-09-28 13:32:19 +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
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]
63c07c43ad
fix(plugin): snapshot registry classes during reload ( #6750 )
2026-09-21 17:25:06 +08:00
moviepilot-codex[bot]
c0f7141e26
fix(plugin): invalidate federation static resource cache ( #6748 )
2026-09-21 16:24:38 +08:00
jxxghp
f08be04f97
fix(architecture): remove unused notification import
2026-09-20 11:47:07 +08:00
jxxghp
2e578a69ee
fix(notification): prevent untyped message broadcasts
2026-09-20 11:32:40 +08:00
Aqr-K
dc7e06ce38
fix(plugin): 落库失败的清理留在占位锁内,不再误删他人的实例 ( #6695 )
2026-09-14 17:41:08 +08:00
Aqr-K
c5d2fd2ef4
fix(plugin): 修分身恢复的占用判定、空模板配置重建、自动分配探测上限与预留落库回滚 ( #6692 )
2026-09-14 16:06:02 +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
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
57fb96fc3c
feat(plugin): 分身后缀可留空自动分配,并支持按后缀恢复已停用的分身 ( #6673 )
2026-09-14 07:00:31 +08:00