Commit Graph

10811 Commits

Author SHA1 Message Date
jxxghp
da327ae968 chore(release): publish v3.2.6 with frontend v3.2.6 2026-11-12 13:43:57 +08:00
jxxghp
cbed026844 Merge pull request #7386 from jxxghp/fix/legacy-rule-ids-7383
fix(filter): migrate legacy rule IDs and diagnose invalid groups
2026-11-12 13:32:29 +08:00
jxxghp
bbc7795230 fix(filter): migrate legacy rule IDs and diagnose invalid groups
Refs #7383
2026-11-12 13:04:36 +08:00
jxxghp
e72830204c fix(download): report indirect ticket failures without blacklisting
换票无响应、HTTP 错误、配方解析失败或无有效地址时,携带脱敏诊断返回“换票失败”并交给 on_failure 上报,不再静默失败或调用 add_invalid。换票所得临时地址返回错误页或非种子内容时标记为“临时下载地址失效”,下一次重新换票;两类失败均使用 1 小时瞬时冷却。直接链接的真实损坏种子仍保留“种子数据有误”和 24 小时黑名单。诊断包含 HTTP 状态、有限错误字段摘要与是否携带 Cookie,并移除凭据和完整签名 URL。

Fixes #7372
2026-11-12 12:50:03 +08:00
jxxghp
6a9cd52ba2 Merge pull request #7385 from jxxghp/fix/issue-7369
fix(transfer): honor scrape defaults and music track overwrite
2026-11-12 11:58:30 +08:00
jxxghp
c488952b23 fix(transfer): honor scrape defaults and music track overwrite
手动整理未显式选择刮削时跟随目标目录设置;音乐自动整理锁定具体发行版本时按唯一曲序写入线上曲名和艺人。

Fixes #7369
Fixes #7379
2026-11-12 11:51:54 +08:00
jxxghp
a3171977d1 Merge pull request #7384 from jxxghp/refactor/site-module-dispatch
refactor(indexer): move site-specific protocols into modules
2026-11-12 11:17:03 +08:00
jxxghp
794856747a test(indexer): cover site connection failure responses 2026-11-12 11:02:03 +08:00
jxxghp
8b152b9fb0 chore: merge latest v3 into site protocol refactor 2026-11-12 10:37:22 +08:00
jxxghp
31acf2b923 Merge pull request #7381 from jxxghp/fix/issue-7368
fix(scraping): honor music album track overwrite policy
2026-11-12 10:14:22 +08:00
jxxghp
2e495e8129 fix(scraping): honor music album track overwrite policy
按音乐标签覆盖策略对专辑曲目做批次唯一匹配,保留有歧义或身份冲突的标签,并在响应和日志中说明处理结果。

Refs #7368
2026-11-12 09:57:48 +08:00
jxxghp
ad7f4a37ba refactor(indexer): move site-specific protocols into modules 2026-11-12 09:57:27 +08:00
jxxghp
8a8fa9d8fb Merge pull request #7376 from jxxghp/fix/piggo-resource-labels
feat(indexer): 支持猪猪资源标签与站点能力分发
2026-11-12 06:52:15 +08:00
jxxghp
a0e27c4424 feat(indexer): map Piggo resource labels
Resolve site labels from the Piggo catalog and dispatch connectivity, ticket parsing, and throttling through indexer capabilities.
2026-11-12 06:45:16 +08:00
jxxghp
2651d797d7 Merge pull request #7375 from Huyvux12/fix/issue-7367-caa-front500-fallback 2026-11-12 06:21:59 +08:00
Huyvux12
1fd1743667 fix(scraping): CAA front-500 404 时回退请求 /front 原图
front-500 缩略图派生文件缺失时 Cover Art Archive 返回 404,
旧逻辑直接把 (None, "image/jpeg") 写入缓存且无日志,重刮无法恢复。
改为 404 时回退请求 /front 原图并记录 info 日志;缓存 TTL 与
下载链路均不改动。

Fixes #7367
2026-11-11 15:43:48 +00:00
jxxghp
2830aff0e4 Merge pull request #7374 from jxxghp/docs/issue-7370-resource-version 2026-11-11 22:22:26 +08:00
jxxghp
f488023b63 Merge pull request #7366 from Huyvux12/fix/issue-7363-music-online-tags-overwrite 2026-11-11 22:20:24 +08:00
jxxghp
b5384dc7ab docs(site): align HDArea resources with version 3.0.32
Refs #7370
2026-11-11 22:14:19 +08:00
jxxghp
7af97c4429 Merge pull request #7373 from jxxghp/fix/issue-7370
feat(indexer): 高清视界切换 API Key 访问
2026-11-11 22:02:50 +08:00
jxxghp
18fe2ea387 feat(indexer): support HDArea REST API
Refs #7370
2026-11-11 21:53:16 +08:00
jxxghp
eaf833445f Merge pull request #7371 from jxxghp/fix/issue-7274
fix(indexer): support Piggo laboratory API (#7274)
2026-11-11 19:02:55 +08:00
jxxghp
123b201ba9 test(architecture): record Piggo dependency graph 2026-11-11 18:54:37 +08:00
jxxghp
8dc4b08114 fix(indexer): support Piggo laboratory API (#7274) 2026-11-11 18:32:59 +08:00
Huyvux12
2e0fc48646 fix(music): prefer online disc/track structure for manually selected release
When a MusicBrainz release is explicitly selected, the aligned track
already carries the release structure, but _merge_music_track_context
only filled missing local fields, so dirty local total_discs/disc_number
kept producing a spurious Disc layer (e.g. total_discs=2 on a 1-disc
release) and wrong track positions. Let online values win for
disc_number/track_number/total_tracks/total_discs on the selected-release
path only; auto-match keeps the fill-only behaviour.

Album scrape merge now prefers online total_discs as well, and forces
disc_number=1 for confirmed single-disc albums so a dirty local disc
number cannot pair with total_discs=1 as "2/1" in tags.

Fixes #7363
2026-11-11 07:15:29 +00:00
jxxghp
33cc86e225 Merge pull request #7364 from jxxghp/fix/issue-7360
fix(agent): 防止插件配置误覆盖与回执误判
2026-11-11 14:01:46 +08:00
jxxghp
ba034b20f0 test(agent): document regression test contracts 2026-11-11 13:55:27 +08:00
jxxghp
9323f00510 docs(agent): clarify config safeguards 2026-11-11 13:51:21 +08:00
jxxghp
6bc19a59cc fix(agent): protect plugin config and replay receipts (#7360) 2026-11-11 13:39:35 +08:00
ChantXu64
0200642746 fix(download): 完整覆盖整包只下载订阅范围内的剧集 (#7361) 2026-11-11 13:36:17 +08:00
jxxghp
1ec2bff817 Trae/agent s2h0 df (#7359) 2026-11-11 13:15:46 +08:00
Penguin Secret Agency
8be08ee773 feat(llm): 新增 UberLLM provider (#7302)
* feat(llm): 新增 UberLLM provider

* fix(llm): 调整 UberLLM 排序值

与 cheapaimodel 的排序修复协同:cheapaimodel 使用 60、GitHub Copilot 顺延为 61 后,UberLLM 顺延为 62,保持目录排序值唯一。

---------

Co-authored-by: sang nguyen <sangnguyen@sangs-MacBook-Pro-5.local>
Co-authored-by: jxxghp <jxxghp@gmail.com>
2026-11-11 10:45:46 +08:00
Nicho Deng
192bd7d5b8 feat(llm): 新增 cheapaimodel provider (#7303)
* feat(llm): 新增 cheapaimodel provider

* fix(llm): 修正 cheapaimodel 排序冲突

cheapaimodel 与 Obscurify.ai 同为 59,合并后会留下重复排序值。将 cheapaimodel 调整为 60,GitHub Copilot 顺延为 61,保持新预设位于 Obscurify.ai 之后。

---------

Co-authored-by: jxxghp <jxxghp@gmail.com>
2026-11-11 10:44:50 +08:00
gntv456
6166968f4c feat(indexer): 支持 FluxTorrent 兼容层站点搜索与用户数据 (#7355)
* feat(indexer): 支持 FluxTorrent 兼容层站点搜索与用户数据

好学(hxpt.org)已由 NexusPHP 迁移到 FluxTorrent,原有页面刮削全部失效。
FluxTorrent 提供 /api/v1/compat/nexusphp/* 只读 JSON 兼容层,本提交按该契约
新增索引器与用户数据解析器,并在分发层加入能力探测,使未在站点资源中登记
专站协议的站点也能被自动识别(站点清单是闭源发布资源,主仓无法新增条目)。

- 新增 FluxTorrentSpider:调用兼容层 torrents.json 搜索,按 category_newznab
  映射媒体类型,按 promotion 换算下载与上传量系数,下载地址携带开放 API 令牌
- 新增 FluxTorrentSiteUserInfo:解析兼容层 user.json 的用户资料与流量
- 新增同步与异步能力探测:站点未登记专站协议时,用站点令牌请求一次
  user.json,响应符合 {code, message, data, request_id} 信封即判定为 FluxTorrent
- 探测要求站点已配置令牌,并用命中 24 小时、未命中 30 分钟的双层 TTL 缓存
- 不下发分类与媒体类型筛选:兼容层的 category 只接受站内分类 ID,且客户端
  过滤会破坏分页续拉契约,分类筛选待站点资源发布链路补齐后再放开

* fix(indexer): 抽出用户数据模型解析,消除复杂度增长

CI 复杂度门禁报 IndexerModule.refresh_userdata 圈复杂度 15->16(上限 15)。
把 FluxTorrent 能力探测与模型选择抽成模块级函数 _resolve_userdata_schema,
refresh_userdata 的方法体不再因新增分支而增长。

* refactor(indexer): FluxTorrent 模块文件改为单词命名

命名门禁 test_new_host_production_modules_use_single_word_filenames 要求
app 下的模块文件名满足 [a-z][a-z0-9]*,flux_torrent.py 不合规 ⇒ 两个模块
改名为 fluxtorrent.py,同步更新导入与测试打桩路径。

* test(indexer): 修正发布时间断言并同步架构依赖基线

- 发布时间断言原先写死本机时区渲染结果,在 UTC 的 CI 上必然失败 ⇒ 改为对同一
  转换函数取期望值,只验证 Unix 时间戳经由 format_timestamp 输出
- dependency-baseline.json 新增 app.modules.indexer.spider.fluxtorrent 与
  app.modules.indexer.parser.fluxtorrent 的模块与导入边(edge_count 9973→9990、
  module_count 1151→1153),结构与既有 haidan 等专站模块一致,边界未越权

* docs(architecture): 同步架构快照的模块与导入边数量

架构依赖基线新增两个索引器模块后,docs/architecture-overview.md 的
快照表需同步:Python 模块 1151→1153、内部导入边 9,973→9,990。

* test(indexer): 补齐异步探测与失败路径用例,满足新文件覆盖率门槛

新增文件的覆盖率低水位要求 80%,补齐后 spider 90.81%、parser 92.21%:
- 异步能力探测命中与请求异常两条路径
- 站点无响应、响应不是 JSON 时的降级判定
- 异步搜索缺少令牌时的直接失败
- 用户接口空响应 / 非 JSON / 结构异常 / 业务错误码的错误信息
- 站点地址缺协议与空白地址的归一

* test(indexer): 覆盖协议解析的三条分支

存量文件覆盖率低水位要求未覆盖语句数不增长,补齐协议解析的已登记协议、
探测命中、未识别三种情况(同步与异步),以及用户数据模型名的两条分支。

* refactor(indexer): 按站点资源路由 FluxTorrent 协议

删除运行时能力探测与 TTL 缓存,搜索和用户数据直接使用站点资源声明的 parser/schema;保留 FluxTorrent spider 与用户数据解析器的注册,由站点构建配置决定路由。

---------

Co-authored-by: gntv456 <gntv456@users.noreply.github.com>
Co-authored-by: jxxghp <jxxghp@gmail.com>
2026-11-11 10:27:52 +08:00
Huyvux12
dcdebe366a fix(module): report filter and subtitle modules as available without probing (#7357) 2026-11-11 07:00:01 +08:00
flippedyizheng
e930296935 fix(u115): avoid blocking worker threads for 3600s during rate-limit cooldown (#7356) 2026-11-11 06:58:26 +08:00
jxxghp
c1c505358d chore(test): preserve ruff debt baseline 2026-11-10 19:51:38 +08:00
jxxghp
d5f1745d8e test(formatting): cover configured lyric extensions 2026-11-10 19:47:51 +08:00
jxxghp
7e1ac758d7 fix(transfer): make lyric suffixes configurable 2026-11-10 19:38:27 +08:00
jxxghp
8d4c6eb7c1 fix(transfer): unify media sidecar handling 2026-11-10 18:43:31 +08:00
jxxghp
ab608d45b9 fix(browser): use pre-license CloakBrowser release 2026-11-10 18:26:57 +08:00
jxxghp
48b20d3dfb fix(transfer): keep music companions in manual batches (#7350) 2026-11-10 17:43:35 +08:00
jxxghp
d0fb0a21a8 fix(agent): make session_search sort Gemini compatible 2026-11-10 17:24:53 +08:00
jxxghp
af963b47b3 test(music): cover strm track parsing branches 2026-11-10 07:22:35 +08:00
jxxghp
a4ccd86d85 fix(torrent): support traditional first-download prompts 2026-11-10 07:05:07 +08:00
Jaylen.Mar
2ecedc25ce fix: 修复音乐 STRM 整理的曲序丢失与目标文件名重复扩展名 (#7316)
strm 未列入音频扩展名,音乐解析走不到文件分支,曲序与曲名均无法识别,
导致整理时大量失败并可能写出 xxx.strm.strm。本次补充 strm 后缀,并补齐
两种常见命名形态的曲序提取。

- 扩展名列表补 strm,使 STRM 曲库走与普通音轨一致的解析路径
- 新增四段式「艺人 - 专辑 - 序号 - 曲名」处理:从右切出曲名与序号,
  专辑名含分隔符时也能正确切分;前缀单独解析回填艺人与专辑
- 新增四位补零「0101 - 曲名」处理,按碟号曲号拆分;仅接受 0 开头,
  避免 1812、1999、2023 等作品名与年份被误判
- 真实文件名的扩展名不再带进曲名,消除 xxx.strm.strm;点分种子标题
  仍保留扩展名参与格式识别
2026-11-10 06:58:48 +08:00
Huyvux12
02856727dd fix(download): resume paused magnet to fetch metadata before episode selection (#7348) 2026-11-10 06:56:10 +08:00
jxxghp
6d9cf06085 fix(download): accept unique video for mapped single episode
## 问题
识别阶段把累计集号换算为季集后,单集种子的物理文件仍可能保留原始集号。qBittorrent 和 Transmission 只按文件名解析集号,导致唯一视频文件被判定为未找到目标集数,任务停留在暂停状态。

## 修复
- 当本次只请求一集且种子只有一个视频文件时,按唯一视频文件兜底选集;多视频文件和多集视频继续严格按解析集号匹配。
- 下载历史结算沿用相同边界,避免任务启动后原始累计集号再次被过滤为空明细。
- 覆盖 qBittorrent、Transmission,以及 durable/普通下载历史写入路径。

## 验证
- 相关下载与历史回归:244 passed, 12 skipped
- 完整测试:19427 passed, 21 skipped;22 个既有基线失败与本次改动无关,已在干净 v3 checkout 复跑确认
- Pylint(3 个生产文件):10.00/10
2026-11-09 22:52:37 +08:00
Huyvux12
55da2238df fix(jellyfin): 混合内容库使用 mixed 路由而非不存在的 library 路由 (#7344) 2026-11-09 22:12:20 +08:00
jxxghp
549f3f32d1 fix(subscribe): retry identity conversion during metadata checks 2026-11-09 19:56:13 +08:00