feat(sources): site kinds and capabilities (IA-2)

site.kind: pt / public_bt / rss_feed / torznab. Each kind declares the
acquisition modes it may support (search, list, rss, detail, login,
userinfo); a site's effective capabilities = kind ∩ site definition.
torznab only defines TorznabSiteConfig and cannot be added yet.

Migration 0055: generic_rss sites become rss_feed, the rest pt; feeds
without a site are grouped by host into new custom RSS source sites
(cursor window and conditional headers cleared so the next fetch writes
releases). User DB read-only dry-run: 0 orphan feeds.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-09-30 00:29:56 +08:00
1 parent f0e1c77e35
commit 89d2c81de6
6 files changed
+317 -12

No files matched your search

@@ -25,8 +25,10 @@ import {
SiteAccountUserData,
SiteAdapter,
SiteAuthKind,
SiteCapability,
SiteHealth,
SiteHealthResult,
SiteKind,
SiteLastHealth,
SiteLoginResult,
SiteUserDataPoint,
@@ -430,6 +432,10 @@ export const SiteBrief = z.object({
id: Id,
key: z.string(),
name: z.string(),
/** 站点类型:pt / public_bt / rss_feed / torznab */
kind: SiteKind,
/** 实际可用的获取方式(search / list / rss / detail / login / userinfo) */
capabilities: z.array(SiteCapability),
adapter: SiteAdapter,
baseUrl: z.string(),
enabled: z.boolean(),