jxxghp
4955b7b9ea
fix: harden backend isolation and execution safety
2026-10-16 09:11:28 +08:00
InfinityPacer
9181ad2b65
feat(community): serve community medals from the Wiki registry behind remote switches
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-15 22:28:58 +08:00
jxxghp
ea60ed0fd6
feat(community): recognize GitHub contributions and honor levels
2026-10-15 12:11:36 +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
jxxghp
edc719596d
feat(update): prepare latest updates for a single restart
2026-10-13 12:50:01 +08:00
jxxghp
86c7fccfd5
feat(subscribe): persist business activity with scoped details
2026-10-12 23:43:01 +08:00
jxxghp
7a853577d8
fix(subscribe): preserve original execution log content
2026-10-12 06:58:01 +08:00
jxxghp
391f55df40
feat(subscribe): add isolated execution logs with authorized streaming ( #6963 )
2026-10-11 22:18:37 +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
cdb8d9df71
fix(api): sync v3 and complete agent media type compatibility
2026-10-10 12:22:57 +08:00
pavel2
0d62815a0f
fix(api): accept agent media type values
...
9 处裸构造 MediaType(x) 改为 MediaType.from_agent(x) or MediaType(x),与 search.py/site.py 既有写法一致。智能体按 API 入参规约传入 movie/tv/music 时不再抛 ValueError 返回 500,中文原生枚举值仍走原分支,无行为变化。
涉及:media.py detail、tmdb.py(3)、douban.py(2)、mediaserver.py not_exists、subscribe.py create_subscribe、transfer.py _execute_manual_transfer。
2026-10-10 09:56:47 +08:00
freeman
2165475dd0
fix(security): throttle password login after repeated failures
...
The access-token endpoint accepted unlimited password attempts; the
only existing rate limiters are single-instance helpers for outbound
site requests. Add app/application/security/throttle.py, an in-memory
LoginThrottle keyed by (client address, normalized username) that locks
for 30s after five consecutive failures and doubles the lockout up to
15 minutes. The endpoint answers 429 with Retry-After while locked,
counts only real credential failures (an MFA challenge after a correct
password does not count), and clears the record on success.
X-Forwarded-For is deliberately not trusted because there is no
trusted-proxy setting; behind the bundled nginx all requests share one
address, so the key degrades to per-username throttling, which is the
dimension brute-force protection needs. Sync the dependency snapshot
and architecture metrics for the new module.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-10-09 12:01:04 +08:00
jxxghp
32d37fa8b4
feat(music): preserve per-task CUE recognition policy
2026-10-08 08:51:01 +08:00
ChantXu64
e5e2558585
feat(search): 订阅补全逐页搜索、断点续搜与资源页手动分页 ( #6907 )
2026-10-07 14:40:55 +08:00
Freeman
4c994c993f
docs(download): document directory aliases for save_path
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-10-06 15:30:29 +08:00
jxxghp
ad4c92da9e
Merge branch 'v3' into fix/media-scrape-manage-permission
2026-10-05 16:38:08 +08:00
jxxghp
49235b7dd6
Merge pull request #6891 from MiCat-S/fix/webpush-send-superuser
2026-10-05 16:33:21 +08:00
LIN student
873c4c7087
fix(media): 刮削接口要求管理权限,与手动整理和文件管理保持一致
...
POST /api/v1/media/scrape/{storage} 只依赖 verify_token,任何登录用户都可
调用。该接口以 overwrite=True 调用刮削链,会覆盖目标目录已有的海报、背景图
和 NFO,音频文件还会改写标签;存储与路径完全由请求提供。
同类写操作 /transfer/manual、/transfer/manual/target-path、/storage/* 以及
整理记录的写操作都要求 manage 权限;前端只在文件管理页(需 manage 权限)
调用该接口,Agent 策略也已把 media.scrape 定为管理员操作。
现改为依赖 get_current_active_manage_user。_scrape_impl 内部没有使用令牌
载荷,去掉其中未使用的 Depends 参数。API_TOKEN/apikey 调用解析为 SUPERUSER
对应的超级管理员,行为不变。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-05 15:42:29 +08:00
LIN student
dc974b6699
fix(message): WebPush 主动推送接口仅限超级管理员
...
POST /message/webpush/send 只依赖 verify_token,会把调用方提供的
title、body、url 推送给 webpush_registry 中的全部浏览器订阅,包括其他
用户和管理员的浏览器。前端只调用 /message/webpush/subscribe,不调用该
接口。
改为与同模块 /message/web 一致的 get_current_active_superuser。
API_TOKEN / apikey 由 verify_token 映射为 SUPERUSER 对应的超级管理员
账号,经过该依赖后仍可调用,已有外部集成不受影响。
/message/webpush/subscribe 保持登录用户可用,每个用户的前端都会调用它
登记自己的浏览器。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-05 15:42:29 +08:00
LIN student
75d8b2e441
fix(system): 公开设置不再返回存储的连接配置
...
/system/setting/public/{key} 只要求登录用户,白名单中的 Storages 原样返回
整个存储列表,每项的 config 保存着各存储的连接配置和凭据(SMB 用户名密码、
alist 账号、115 token 等)。设置合同已将 Storages 标记为 sensitive,
/system/settings 默认会脱敏,只有这个公开接口直接返回原值。
前端 v3 已改用 /storage/options 读取存储名称和类型,公开接口的 Storages
目前只剩 Agent 的 config.public.get 和旧版前端页面会用到,它们只需要
name、type。因此保留该 key,改为与 /storage/options 相同的投影:只返回
name(缺省时取 type)和 type,跳过没有 type 的项。所有调用者返回相同
结果,超级管理员仍可通过 /system/setting/Storages 读取完整配置。
白名单内其他配置(目录、站点范围、集数定位规则、默认订阅规则、Follow
订阅者)不含连接凭据,保持原值返回。同步更新 docs/mcp-api.md 的接口说明。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-05 15:42:28 +08:00
jxxghp
22704e9224
fix(api): allow dedicated identifier writes
2026-10-05 13:01:42 +08:00
jxxghp
8c101b0096
Merge pull request #6883 from MiCat-S/fix/message-verify-log-token
2026-10-04 19:22:09 +08:00
LIN student
4416e278aa
fix(message): 回调验证日志不再输出 token
...
消息回调验证入口 GET /api/v1/message/ 以 INFO 级别记录请求参数,其中的
token 就是 verify_apitoken 校验用的 API_TOKEN。日志经常被直接贴出来排查
问题,因此去掉这个字段,其余排查用参数保持不变。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-04 19:01:22 +08:00
LIN student
3bdf09dc6f
fix(site): 非超级管理员读取订阅站点和域名详情时不返回认证字段
...
/site/rss 与 /site/domain/{site_url} 只依赖 verify_token,直接返回完整的
Site 模型,其中包含 cookie、apikey、token、rss。同模块的 /site/agent 已经
对非超级管理员剔除这些字段,/site/ 列表也要求 manage 权限,两个接口与之
不一致。
前端订阅编辑和工作流「获取种子」动作只用到站点的 id、name、is_active,
因此非超级管理员改为复用 _project_agent_site(include_secrets=False) 投影,
超级管理员保持原有完整字段。
read_rss_sites 的返回标注由 List[dict] 改为实际的 Site 或投影字典,site.py
的 mypy 债务减少 2(return-value、type-arg 各 1),已固化低水位并同步文档
指标。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-04 19:01:22 +08:00
jxxghp
03a285a2a6
fix(wechat): proxy douban notification images
2026-10-04 16:19:58 +08:00
jxxghp
1eacd10cd6
refactor(transfer): keep queue projections in transfer endpoint module
2026-10-02 22:10:16 +08:00
jxxghp
1ba2f28c94
chore(transfer): remove unrelated fork sync changes
2026-10-02 22:08:10 +08:00
jxxghp
b33053e10f
Merge remote-tracking branch 'origin/v3' into codex/optimize-pr-6849
...
# Conflicts:
# docs/architecture-overview.md
# docs/refactor/optimization-checklist.md
# tests/fixtures/architecture/dependency-baseline.json
2026-10-02 22:06:27 +08:00
Cat
eb76fcafd6
fix(notification): 限制实时消息队列积压并在 SSE 重连后一次推送 ( #6862 )
2026-10-02 21:32:18 +08:00
jxxghp
5f596484b4
fix(classification): prepare policy-specific facts and refine defaults
2026-10-02 14:14:09 +08:00
jxxghp
cc114337de
fix(agent): forward tool messages to OpenAI stream
2026-10-01 14:52:26 +08:00
ranzhigg
0c9d8c9208
Merge upstream v3 into transfer queue PR
2026-10-01 12:51:06 +08:00
ranzhigg
56cf6fefe0
perf(transfer): bound queue snapshots for batch imports
2026-10-01 12:45:31 +08:00
jxxghp
8e9c9b41e1
fix(api): allow slashes in rule group names
2026-09-30 23:31:55 +08:00
jxxghp
8fbf1cbe54
feat(music): honor explicitly selected release editions
2026-09-30 14:46:48 +08:00
jxxghp
104d8028e8
feat(music): expose recognition evidence and release groups in transfer previews
2026-09-30 14:11:07 +08:00
InfinityPacer
4bd7e3dc04
perf(webpush): send Web Push with http-ece and py-vapid instead of pywebpush
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 13:20:00 +08:00
jxxghp
54591ac50e
feat(music): bound recognition requests and make lookup caches recoverable
2026-09-30 05:15:14 +08:00
jxxghp
b4175a4f88
fix(image): cache site allowlist and include custom image hosts
2026-09-30 01:09:32 +08:00
jxxghp
8c46c9bee8
fix(image): allow configured site domains in image proxy
2026-09-30 00:53:37 +08:00
jxxghp
6cdd4dbc66
fix(subscribe): resolve cross-source video status without premiere year
2026-09-28 16:59:30 +08:00
jxxghp
3428aed490
fix(transfer): keep automatic music selection per file
2026-09-24 14:48:41 +08:00
jxxghp
1d84d17dc4
feat(system): add protocol-aware network checks
2026-09-24 12:25:45 +08:00
jxxghp
5d620b0cbe
feat(media): support episode groups in manual scraping
2026-09-24 08:23:35 +08:00
LS
c68288e897
feat(security): 图片代理自动信任已启用的媒体服务器主机 ( #6769 )
...
在局域网部署 Emby/Jellyfin/Plex 的用户,此前需要手动维护
SECURITY_IMAGE_DOMAINS(整表覆盖,会随版本默认值漂移)和
IMAGE_PROXY_ALLOWED_PRIVATE_RANGES,未签名的媒体服务器图片 URL
才能通过图片代理。
- is_safe_image_url_async 新增可选参数 trusted_hosts:URL 的 netloc
(含端口)或 hostname 精确命中时直接放行,不受私网拦截限制;
默认 None,现有调用方行为不变。
- fetch_image(覆盖 /img 与 /cache/image)从已启用媒体服务器的
host / play_host 计算受信主机;读取配置失败时返回空集合,不影响代理。
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com >
2026-09-23 16:34:25 +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
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]
d96f00113c
feat: add GitHub Token device authorization
2026-09-21 18:30:15 +08:00
moviepilot-codex[bot]
c0f7141e26
fix(plugin): invalidate federation static resource cache ( #6748 )
2026-09-21 16:24:38 +08:00
jxxghp
2e2a037eb8
fix(subscribe): align fork response model with returned id
2026-09-18 12:24:58 +08:00