ranzhigg
383fb82b89
fix(transmission): normalize raw fallback progress ( #7017 )
...
* fix(transmission): normalize raw fallback progress
* fix(transmission): satisfy type ratchet for progress helper
Annotate and normalize the fallback progress helper so the stricter V3 typing gate does not regress.
Co-authored-by: Codex <codex@openai.com >
* docs: sync mypy metric after progress fix
---------
Co-authored-by: ranzhigg <ranzhigg@users.noreply.github.com >
Co-authored-by: Codex <codex@openai.com >
Co-authored-by: jxxghp <jxxghp@gmail.com >
2026-10-16 12:27:33 +08:00
ranzhigg
ea251b193e
fix(telegram): rebuild polling session after network errors ( #7016 )
2026-10-16 12:17:35 +08:00
jxxghp
4955b7b9ea
fix: harden backend isolation and execution safety
2026-10-16 09:11:28 +08:00
jxxghp
90754e06ba
fix(telegram): preserve notification hierarchy and render detail links
2026-10-16 07:06:17 +08:00
Opportunity
b8eb66521b
fix(indexer): 修复 NexusPHP 用户流量详情表格兜底解析 ( #7008 )
2026-10-15 20:30:23 +08:00
Opportunity
5e476e2419
fix(indexer): 修复 Discuz 用户分享率解析 ( #7006 )
2026-10-15 13:01:57 +08:00
jxxghp
5fe8ad98b2
fix(music): make album years optional matching evidence ( #7004 )
2026-10-15 12:16:24 +08:00
jxxghp
91b70ee2ce
fix(wechatclawbot): 识别 item_list 媒体入站消息并修正 CDN 探测判定 ( #7000 )
...
* fix(wechatclawbot): 识别 item_list 媒体入站消息并修正 CDN 探测判定 (#6992 )
iLink 下行媒体报文把附件放在 item_list 子项中,原解析存在三处缺口,
图片/语音/文件入站消息会被判为空消息丢弃:
- item_list 仅按数字 type 处理 1 文本/2 图片/5、6 文件,缺少 3 语音/
4 文件/5 视频分派;改为按实际出现的子项键名分派,同时兼容历史
type=5/6 文件报文。
- 附件引用只读取顶层 url/aeskey,识别不了 image_item.media.full_url /
media.aes_key 等嵌套字段;统一按“顶层优先、media 子对象兜底”提取。
- 消息被解析为空时直接返回 None,日志只剩“未识别到有效消息”;补充
渠道级诊断日志,输出 message_id 与截断后的原始报文。
另外把“微信 ClawBot 媒体 CDN”网络探测的 400 纳入成功状态码:该 CDN
对无参数裸请求固定返回 400,此前探测项恒定误报失败。
tests/test_wechatclawbot.py 整文件迁移为 pytest 原生,并新增 item_list
媒体解析、仅图片消息可入链、空消息诊断日志回归;nettest 契约测试补充
CDN 400 探测用例。复杂度与 mypy 低水位随债务下降同步固化。
* fix(wechatclawbot): 同步架构清单中的 mypy 债务数字 (#6992 )
2026-10-15 09:02:59 +08:00
@huluohu
76a4e33e44
fix(telegram): Rich Message 失败时保留原始错误并降级纯文本 ( #6993 )
...
* fix(telegram): Rich Message 失败时保留原始错误并降级纯文本
Telegram Rich Message 发送失败时存在三个叠加问题:
1. `__send_rich_message` 用固定文本 `RetryException("发送 Telegram Rich
Message 失败")` 包装异常,`str(e)` 里没有 Telegram 返回的 description,
日志只剩“发送失败”四个字,无法判断是内容非法、方法不存在还是格式问题。
2. 内容非法这类确定性失败(400)同样走满3 次退避重试(3s、6s),
期间同一条坏消息反复阻塞,且最终报错仍无有效信息。
3. 失败即丢失通知:Rich Message 发不出去时没有任何降级路径,
整条通知直接消失。
改动:
- 异常文本改为 f"...失败:{err}",保留 Telegram 原始 description 与错误码。
- 新增 `NonRetryableTelegramError`(继承 `ImmediateException`)与
`_is_non_retryable_api_error`,400 立即抛出以跳过 retry 退避;
5xx 与网络异常保持原有重试策略。
- `send_msg` / `edit_msg` 增加纯文本降级出口,Rich Message 失败时
用不带格式解析的纯文本重发,保证通知内容不丢失。
- 降级路径显式传 `parse_mode=""`:`TelegramBotApi._parse_mode` 在参数为
`None` 时会回落到客户端默认的 MarkdownV2,那正是 Rich Message 已经
失败过的解析路径,漏传会让降级重演同一个错误。
新增 tests/test_telegram_rich_message_fallback.py(14 项)覆盖错误信息保留、
400 免重试、5xx 仍重试、发送与编辑两条降级路径,以及 parse_mode 回落陷阱的
回归防护。
* fix(telegram): 修正 Rich Message 降级路径的 mypy 与架构基线
上一提交引入的两处门禁失败:
1. `__send_plain_fallback` 用 `**self._topic_kwargs(chat_id)` 展开参数,mypy
把 `**` 匹配到 `send_message` 第 5 个形参 `disable_web_page_preview`
(Optional[bool]),判定 `dict[str, int]` 不兼容,arg-type 由 1 增至 2。
改为显式传 `message_thread_id`,`_topic_kwargs` 只可能产出该键。
2. 新增 `app.schemas.exception` 导入带来 2 条依赖边,宿主基线由 9542 变为
9544。已用 `baseline.py --write-host` 固化,其余 3 个基线文件字节不变。
连带影响:docs/architecture-overview.md 与 docs/refactor/
optimization-checklist.md 硬编码了边数,`test_architecture_documents_
match_generated_quality_metrics` 断言两处必须与基线一致,同步为 9,544。
门禁与测试验证:
- scripts/architecture/mypy_ratchet.py exit 0(9163 个类型错误)
- scripts/architecture/baseline.py --check-host exit 0
- pytest(fallback + contract + telegram) 75 passed
---------
Co-authored-by: jxxghp <jxxghp@gmail.com >
2026-10-15 07:32:16 +08:00
jxxghp
72c8bff312
feat(music): preserve local covers and fall back after online scraping fails
2026-10-14 23:15:41 +08:00
jxxghp
43d50c387f
fix(feishu): recover expired streaming cards with bounded retries
...
Reopen closed CardKit streams once and preserve monotonic sequences across recovery and finalization. Back off failed updates per card while retaining unsent Agent text.
Refs #6984
2026-10-14 12:54:29 +08:00
jxxghp
13a58be2a6
feat(notifications): render structured results by channel capabilities
2026-10-14 08:05:41 +08:00
jxxghp
b82bbcb420
fix(webhook)!: guard unknown movie paths in transfer history
...
Recover Jellyfin deletion paths from webhook payloads or bounded server-scoped caches. Avoid querying deleted items and preserve TV season/series lookup behavior.
BREAKING CHANGE: Movie and unspecified-type history queries without a destination now return no records unless match_all_versions=True is explicitly requested.
Refs #6988
2026-10-13 23:48:10 +08:00
jxxghp
0c640be189
fix(qqbot): reconnect when the gateway requests a new connection
2026-10-13 07:13:01 +08:00
jxxghp
04126ce63e
fix(tmdb): skip image queries for unsupported recognition sources
2026-10-13 07:00:05 +08:00
jxxghp
99ef7e508b
fix(indexer): support custom seeding and Unit3D bonus pages
2026-10-12 08:36:19 +08:00
jxxghp
c670432882
fix(transfer): preserve success on size overwrite decline ( #6960 )
2026-10-11 12:22:10 +08:00
jxxghp
b2dfde5999
fix(bangumi): use HTTPS for calendar covers
2026-10-09 23:54:47 +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
freeman
55d3081497
chore(douban): drop duplicated apikey literal from __post docstring
...
The POST helper docstring embedded a sample request that repeated the
_api_key2 constant as a hard-coded literal. Keep the key in one place
and describe the request shape instead.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
2026-10-09 11:34:32 +08:00
WenGuoyin
e19076f482
feat(indexer): 适配 Milkie 站点搜索与连通测试
...
- 新增 MilkieSpider:基于 milkie.cc JSON API(x-milkie-auth 认证)的
种子搜索与浏览,支持关键字分类收敛、服务端翻页、免费因子与
媒体类型映射,下载链接按 API Key URL 编码拼接
- 注册 SPIDER_PARSER_CLASSES 与专用搜索参数投影
- SiteChain 新增 milkie.cc 连通性测试,401/403 判定 API Key 失效
- 补充 MilkieSpider 单元测试与同步异步参数一致性用例,同步依赖基线
2026-10-08 17:18:10 +08:00
jxxghp
656e2852f7
fix(indexer): paginate keyword results without server page support
...
Refs #6911
2026-10-08 13:46:57 +08:00
jxxghp
cf889ba7a0
fix(telegram): report persistent polling failures
2026-10-08 13:23:58 +08:00
ChantXu64
e5e2558585
feat(search): 订阅补全逐页搜索、断点续搜与资源页手动分页 ( #6907 )
2026-10-07 14:40:55 +08:00
jxxghp
43edef140f
fix(indexer): fetch TNode current user before requiring an id ( #6895 )
2026-10-06 07:40:06 +08:00
jxxghp
a8f71f32a8
fix(jellyfin): include collection members in library queries
2026-10-06 07:32:06 +08:00
jxxghp
fa5fa33db1
fix(lyrics): normalize LRCLIB music metadata
2026-10-05 13:10:10 +08:00
LIN student
bdef005588
fix(downloader): 添加种子失败提示改用种子名称
...
qBittorrent、Transmission、rTorrent 添加任务失败,或添加后查不到任务时,
提示文本直接拼接 content。经过 _get_torrent_info 之后,种子文件的 content
已经是 bytes,于是日志、消息通知和下载失败记录里都会出现整段二进制 repr
(种子较大时有数万字符),失败原因无法阅读。
改为种子文件使用种子名称,磁力链接保留原文。提示前缀不变,现有多语言模板
仍能匹配。
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
3f206171e7
fix(feishu): apply image referer and proxy policy
...
Refs #6879
2026-10-04 12:23:08 +08:00
jxxghp
378944aeba
fix(indexer): support XML feeds in site search
2026-10-03 23:47:04 +08:00
jxxghp
610ef82270
Merge origin/v3 into PR branch
2026-10-03 09:00:49 +08:00
jxxghp
db4e898005
style(monitor): normalize snapshot imports
2026-10-03 08:47:31 +08:00
jxxghp
66e791603c
fix(monitor): type snapshot reconciliation state
2026-10-03 08:43:31 +08:00
jxxghp
cac298fd02
fix(monitor): keep snapshot reconciliation within complexity budget
2026-10-03 08:33:15 +08:00
jxxghp
118e2ef933
fix(notification): align scoped recipient routing
2026-10-03 01:00:21 +08:00
thsrite
33f17fad2e
fix(vyo): load servers using the persisted configuration type
2026-10-02 19:33:23 +08:00
jxxghp
97b251ed72
chore(parser): preserve existing ruff baseline
2026-10-02 17:04:41 +08:00
jxxghp
e1d1de1ee7
fix(parser): keep Unit3D username as user id
2026-10-02 17:00:41 +08:00
jxxghp
3726ca078a
fix(mediaserver): isolate cached item ids by server ( #6850 )
2026-10-01 17:07:23 +08:00
ranzhigg
1965cc4de7
perf(monitor): index incremental snapshot reconciliation
2026-10-01 15:49:12 +08:00
jxxghp
ef967e68e7
fix(indexer): satisfy subtitle API type gates
2026-10-01 12:44:03 +08:00
jxxghp
58ec86b586
fix(indexer): use M-Team subtitle search API
2026-10-01 12:29:28 +08:00
jxxghp
e35bedc184
Merge pull request #6843 from cwd0204/fix/smb-snapshot-recovery
2026-09-30 22:23:18 +08:00
freeman
ed0460fc8b
fix(smb): keep remote snapshots complete and recoverable
2026-09-30 21:19:41 +08:00
thsrite
4395ddecf2
feat(mediaserver): 内置媒体服务 MediaVault 更名为 Vyo
...
主项目更名为 Muvyo,内置媒体服务更名为 Vyo。模块目录、文件、类名、模块 ID、枚举、
名称描述、日志与文档统一改为 Vyo;配置类型值 mediavault 保持不变,
已保存的媒体服务器配置无需迁移。
2026-09-30 19:46:09 +08:00
jxxghp
0678a17364
fix(music): reject conflicting recording and album identities
2026-09-30 16:18:09 +08:00
InfinityPacer
4847813ca7
feat(sdk): expose Feishu event long connection to plugins
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 15:39:30 +08:00
InfinityPacer
437b232773
perf(feishu): replace lark-oapi with lightweight OpenAPI and long-connection clients
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 14:59:42 +08:00
jxxghp
8fbf1cbe54
feat(music): honor explicitly selected release editions
2026-09-30 14:46:48 +08:00