feat(adapters): TMDB 列表与筛选、豆瓣榜单 / 标签 / 筛选 / 搜索、bgm 浏览与趋势,豆瓣 / bgm 请求缓存端口

- TMDB:流行趋势(日 / 周)、电影 / 剧集榜单、discover 参数映射、分页搜索;列表类请求 TTL 6 小时
- 豆瓣 / bgm:列表与搜索请求经 MetaRequestCache 与限流,失败(403 / 风控页)不缓存
- contracts:发现页条目、分页、查询校验与筛选字典;storage.cacheTtl 追加 meta* 字段
- testkit:mock TMDB 加列表接口

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-10-06 18:04:43 +08:00
1 parent 27514f4985
commit e46eb0e3c3
13 files changed
+1344 -91

No files matched your search

+28 -10
View File
@@ -1,6 +1,7 @@
import { z } from "zod";
import { MetadataEnrichOutput } from "../capabilities-io.ts";
import { cursorPage, IdParam } from "../common.ts";
import * as discover from "../discover.ts";
import * as execution from "../execution.ts";
import * as identity from "../identity.ts";
import * as libraryVersions from "../library-versions.ts";
@@ -211,24 +212,41 @@ export const libraryApi = {
method: "get",
path: "/discover/bangumi-calendar",
scope: "read",
summary: "bgm.tv 每日放送(周一到周日;缓存 1 小时)",
response: search.DiscoverCalendar,
summary: "bgm.tv 每日放送(周一到周日;请求缓存 6 小时;带本地状态)",
response: discover.DiscoverCalendar,
}),
discoverHot: ep({
discoverTmdb: ep({
method: "get",
path: "/discover/douban-hot",
path: "/discover/tmdb",
scope: "read",
summary: "豆瓣实时热门电影 / 剧集(缓存 1 小时)",
query: search.DiscoverHotQuery,
response: search.DiscoverList,
summary:
"TMDB 发现:流行趋势、热门、正在上映 / 播出、即将上映、高分、按条件筛选、搜索(走 TMDB 请求缓存;带本地状态)",
query: discover.DiscoverTmdbQuery,
response: discover.DiscoverPage,
}),
discoverDouban: ep({
method: "get",
path: "/discover/douban",
scope: "read",
summary: "豆瓣发现:榜单、标签、筛选、搜索(走豆瓣请求缓存,失败不缓存)",
query: discover.DiscoverDoubanQuery,
response: discover.DiscoverPage,
}),
discoverBangumi: ep({
method: "get",
path: "/discover/bangumi",
scope: "read",
summary: "Bangumi 发现:热门趋势、排行、最新、搜索(走 bgm 请求缓存,失败不缓存)",
query: discover.DiscoverBangumiQuery,
response: discover.DiscoverPage,
}),
discoverMatch: ep({
method: "post",
path: "/discover/tmdb-match",
scope: "read",
summary: "豆瓣 / bgm 条目 → TMDB 作品(名称 + 年份匹配,对照 MP 投影);确定的给 match,否则给候选",
body: search.DiscoverMatchRequest,
response: search.DiscoverMatchResult,
summary: "豆瓣 / bgm 条目 → TMDB 作品(名称 + 年份匹配,对照 MP 投影);确定的给 match 并记住,否则给候选",
body: discover.DiscoverMatchRequest,
response: discover.DiscoverMatchResult,
}),
tmdbSeason: ep({
method: "get",