Cat
87561a90d1
fix(agent): route agent command receipts to the signed channel user ( #7228 )
...
- Agent 代渠道用户调用内部 API 时,把会话渠道与渠道用户写入宿主签发令牌的签名
声明(agent_channel、agent_channel_user),不再新增可伪造的请求头。
- /commands/run 对 Telegram 等通知渠道只使用与请求渠道一致的签名渠道用户执行命令
和投递回执;缺少该声明时明确拒绝,不再把 MoviePilot 用户表主键当作渠道 chat id。
Web、WebAgent 与无渠道调用仍按 MoviePilot 用户 ID 处理。
- 只读公共资料借用宿主身份,不携带渠道发起人声明。
- 同步依赖基线与架构总览中的内部导入边数量。
Refs #7225
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com >
Co-authored-by: jxxghp <jxxghp@gmail.com >
2026-10-28 19:05:52 +08:00
jxxghp
e9563b0346
perf(api): 合并卡片状态查询并减轻推荐轮询 ( #7207 )
2026-10-27 06:05:49 +08:00
jxxghp
42edfd1da8
fix(api): bound collection views and query calendar dates ( #7200 )
2026-10-27 00:40:09 +08:00
jxxghp
1bf496d0f3
fix(api): enforce token authentication for subscription list
...
Refs #7198
2026-10-26 23:19:31 +08:00
JontyLee
0ba73f5b87
fix(database-operation): 拦截未显式授权的凭据配置表读取
...
systemconfig 按 SystemConfigKey 聚合实例级 API Key、Cookie 与口令,托管
config.system.get 默认脱敏,但数据库技能脚本与 MCP database_operation 接受
任意 SQL,一条 SELECT 就能整包取回明文。
现在由脚本本身按表拦截:引用 systemconfig 的语句(含引号标识符、模式限定名、
CTE 与子查询)在读写两种模式下都默认拒绝,只有显式 --show-secrets /
show_secrets=true 才放行,失败信息直接给出可执行的下一步,因此 MCP 工具、
技能调用与命令行入口共享同一道边界。宿主策略把开启该开关的查询判定为
SENSITIVE_READ:要求系统管理员确认,结果标记为 SECRET,回执摘要不再保留内容。
门禁范围收敛为单表:userconfig 只承载界面偏好,plugindata 是文档化的诊断路径,
其余表的凭据残留风险改由 SKILL.md 的窄投影要求约束,避免以不可绕过的方式破坏
既有可运维性。MCP 文档、技能说明与相关契约测试同步更新。
2026-10-26 20:20:16 +08:00
jxxghp
86ededa739
feat(widget): 增加当前主登录的只读账号上下文 ( #7176 )
2026-10-25 06:28:57 +08:00
jxxghp
721c03734a
feat(widget): 提供受限凭据和只读快照接口 ( #7175 )
...
* feat(widget): add restricted read-only snapshot foundation
* test(widget): 补齐运行时与文档迁移契约
2026-10-25 06:02:47 +08:00
Aqr-K
7584d4b9fc
fix: isolate agent sessions and retain runtime resource ownership ( #7149 )
...
* fix: arbitrate subscription identity and restore workflow state
* fix: isolate agent sessions and retain runtime resource ownership
* test: preserve legacy empty-owner subscription transactions
* test: handle reaped terminal descendants during shutdown polling
* fix: align shared atomic configuration method with lifecycle prerequisite
* test: cover subagent cancellation and completion lifecycle boundaries
---------
Co-authored-by: jxxghp <jxxghp@gmail.com >
2026-10-23 08:20:59 +08:00
Aqr-K
951cdc5b27
fix: arbitrate subscription identity and restore workflow state ( #7147 )
...
* fix: arbitrate subscription identity and restore workflow state
* test: preserve legacy empty-owner subscription transactions
* fix: align shared atomic configuration method with lifecycle prerequisite
---------
Co-authored-by: jxxghp <jxxghp@gmail.com >
2026-10-23 08:14:15 +08:00
jxxghp
ec5ff575f0
fix(agent): restore API bodies before direct request dispatch
2026-10-23 07:55:16 +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
Aqr-K
bcbf79f030
fix(media): preserve recognition and rule mutation identities ( #7144 )
...
* fix(media): preserve recognition and rule mutation identities
* test: cover typed classification facts with alias policies
---------
Co-authored-by: jxxghp <jxxghp@gmail.com >
2026-10-23 07:33:27 +08:00
Aqr-K
d51320103c
fix: make local setup and bundled skill operations recoverable ( #7150 )
...
* fix: make local setup and bundled skill operations recoverable
* test: verify user updates with real transaction runners
2026-10-23 06:49:13 +08:00
jxxghp
17a866f47b
fix(transfer): restore AI takeover for failed transfers
2026-10-22 09:43:03 +08:00
jxxghp
379c26a300
feat(subscribe): record initial and upgrade download provenance ( #7061 )
2026-10-19 16:03:21 +08:00
DDSRem
2de976f6b3
Merge pull request #7050 from DDSRem-Dev/codex-comment-migration
...
docs: 统一全项目中文注释和结构化契约说明
2026-10-17 19:26:29 +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
2149eb2a60
fix(download): provide fallback category for music torrents
...
Use the music media type as the downloader category only when music has no library classification. Preserve configured categories and qBittorrent automatic-management settings, with SDK-boundary regression coverage.
Refs #7028
2026-10-16 15:13:03 +08:00
jxxghp
7e24ce62c3
fix(plugin): restrict update badges to bound repositories
2026-10-16 12:29:20 +08:00
jxxghp
613eb5313b
feat(media): return parsed meta info when recognition fails
...
The recognize endpoint returned an empty context when no media matched,
so the recognition shortcut could not show the applied custom words or
the processed title, which made failures hard to diagnose. Always
return the parsed meta_info (including apply_words) and leave media_info
empty when the lookup fails.
Update the REST API docs and the generated agent skill note accordingly.
Refs #6997
2026-10-15 09:07:00 +08:00
pyss56
b18833f912
fix(agent): preserve generated skill contracts and API guidance ( #6991 )
...
* feat(agent): scripted generation of agent skill docs with operation/field notes
Generate skills/moviepilot-api API docs from scripts/generate_agent_skill_docs.py
instead of hand-editing:
- surface canonical MediaType agent keys in the API contract
- add subscribeactivity table note and global operation notes
- preserve upstream search.torrents execution semantics via field notes
Co-Authored-By: pavel2 <pavelyuan468@gmail.com >
* fix(agent): preserve generated skill contracts and English guidance
---------
Co-authored-by: jxxghp <jxxghp@gmail.com >
2026-10-14 11:39:24 +08:00
jxxghp
edc719596d
feat(update): prepare latest updates for a single restart
2026-10-13 12:50:01 +08:00
jxxghp
bd1e6eb899
fix(agent): separate public API queries from bound user operations
2026-10-12 07:30:35 +08:00
ChantXu64
e5e2558585
feat(search): 订阅补全逐页搜索、断点续搜与资源页手动分页 ( #6907 )
2026-10-07 14:40:55 +08:00
jxxghp
5d620b0cbe
feat(media): support episode groups in manual scraping
2026-09-24 08:23:35 +08:00
jxxghp
71fffde878
feat(agent): 完善系统设置机器可读合同
2026-09-15 13:11:29 +08:00
Aqr-K
d6509f092c
chore(plugin): 技能表目录登记补进生成脚本并补迁移往返验证
...
技能文档 skills/database-operation/SKILL.md 的核心表清单是
scripts/generate_agent_skill_docs.py 里 DATABASE_TABLE_GUIDES 的生成物,
前面两笔改动却是手改产物登记 plugininstance,任何人重跑生成器都会把它弄丢。
把条目补进字典,再用生成器重出该文档。
同时补上 agentinvocation:官方 v3 已有该表但字典里没有,生成器因此直接抛
ValueError,不补就根本跑不起来。它的说明照抄文档里现有的那份手写文案,
避免登记动作反而把已有描述改瘦。
迁移测试原本只按单个 revision 直接调 upgrade(),绕过了 Alembic 自己的版本
解析与记账,链接错的 down_revision、少写的 downgrade、重复升级时的重复建表
都测不出来。新增用例改走 alembic.command,在落盘的临时库上从官方 head
b2d4f6a8c1e3 升到链尾 487f7e681955 再降回去,验证配置与描述符确实落到
plugininstance、旧 plugin.* 键就地移除而 PluginInstances 键按回滚依据保留。
2026-09-12 19:48:57 -04:00
jxxghp
f5bc72ff44
fix(agent): load split skill docs through read_skill
2026-09-11 07:50:18 +08:00
jxxghp
d096a1380d
docs(agent): split moviepilot api skill contracts
2026-09-10 23:00:16 +08:00
jxxghp
f383a8a5a3
feat(agent): 接入媒体自动分类策略 API
2026-09-10 22:36:50 +08:00
InfinityPacer
68880dbbf1
优化订阅执行治理与规模性能 ( #6557 )
...
* feat(subscription): govern concurrent search and match execution
* refactor(subscription): consume complete candidate snapshots
* refactor(subscription): remove download submission ledger
* feat(subscription): stagger fallback searches without site gaps
* refactor(subscription): remove unused retry capability
* test(subscription): verify complete scale execution
* fix(subscription): surface site search failures
* test(subscription): verify site pressure through search
* test(subscription): use static facade imports
* fix(subscription): preserve completed downloads on shutdown
* fix(subscription): classify execution expiry as failure
* fix(subscription): preserve fallback search staggering
* test(subscription): stabilize unfinished wrapper gate
* fix(subscription): settle expired search returns
* style(subscription): normalize governance imports
* fix(subscription): align governance type contracts
* docs(architecture): sync mypy debt metric
* docs(architecture): sync startup module counts
2026-09-03 11:26:24 +08:00
jxxghp
e57288b5ea
refactor(subscribe): satisfy global governance gates
2026-09-01 17:09:55 +08:00
jxxghp
41c54d138d
refactor(agent): relocate static resources
2026-09-01 11:55:21 +08:00
jxxghp
2f7f2da300
fix(agent): preserve collection totals in truncated results
2026-09-01 10:49:22 +08:00
jxxghp
a73714e5e7
feat(agent): add compatible collection pagination
2026-09-01 07:43:55 +08:00
jxxghp
6d4d7331d1
refactor: complete agent skill API contracts
2026-09-01 01:19:45 +08:00