root and Claude Opus 5.5
5ff24110f8
feat(adapters): Alist / OpenList 客户端与测试用模拟服务
...
登录(永久令牌优先、账号密码换令牌缓存、401 自动重登)、list 分页、get/raw_url、mkdir/rename/remove、
copy/move 轮询异步任务与暂存目录改名、上传(三种哈希一遍读出、临时名、空闲超时、退避重试、As-Task)、
下载(Range 续传、直链过期重取、临时文件改名)、容量、每实例限速与脱敏。
Co-Authored-By: Claude Opus 5.5 <[email protected] >
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
2026-10-06 23:20:09 +08:00
root and Claude Opus 5.5
eeec91e892
feat(sandbox): 不可信字节在沙箱子进程里解析(撤销权限、超时与内存强杀);种子、文件预览、字幕解析迁入
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-03 01:44:31 +08:00
root and Claude Opus 5.5
709414778e
feat(identity): 豆瓣 / bgm.tv 辅助信息源与发现页
...
- adapters/meta:bgm.tv 官方 API(条目 / 搜索 / 每日放送)与豆瓣移动版接口(条目 / 实时热门)
- 识别升级链:豆瓣条目缓存没有时在线查;AniBT 的 bgm ID、公开 BT 站标题搜 bgm → 名称 + 年份匹配 TMDB(季条目去季名与年份)
- 条目缓存 30 天,查不到 6 小时负缓存;测试进程缺省不出外网
- 发现页:bgm 每日放送、豆瓣热门电影 / 剧集,点条目匹配 TMDB 作品
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 21:30:16 +08:00
root and Claude Opus 5.5
d53df25fc8
feat(agent): web.search / web.fetch via Brave Search (WEB-1)
...
- adapters/websearch: Brave client (X-Subscription-Token, error classes),
result normalization with redaction/truncation, SSRF guard, HTML→text fetch
(10s, 512KB, text/html|text/plain only)
- modules/websearch: 10-min PG cache (region websearch), cross-process
per-minute limit, web.fetch allowlist = URLs from the caller's latest
web.search; POST /websearch/test
- settings.agent.webSearch (key write-only → secret_ref); settings card
under Agent; web.* offered to the model only when enabled, plus a system
prompt rule; outputs marked untrusted
- capability count 27 → 29; e2e E13; runbook docs/runbook/websearch.md
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-29 00:14:08 +08:00
root and Claude Opus 5.5
effaa32b70
feat(browser): W4-C BrowserProvider contract and camofox-browser adapter skeleton
...
- contracts/browser.ts: provider kind, per-capability {supported, verified} flags,
session/tab/control-lease rows, NavigationBudget, redacted BrowserSnapshot,
DownloadArtifact with blob/secret refs, BrowserErrorKind
- adapters/browser: BrowserProvider interface, camofox client (health, capabilities
static + /openapi.json probe, openSession/navigate/snapshot/screenshot; rest
not_implemented for M2), none provider, redactSnapshot, profile serial lock,
domain allowlist budget; Bearer access key via BrowserSecretResolver
- testkit/browser: mock camofox server (auth, fixtures with secrets, faults)
- db 0023: browser_provider/session/tab/control_lease with one-active-lease and
one-live-session-per-profile partial unique indexes; types regenerated
- docs/design/browser-provider.md: contract, camofox OpenAPI 1.17.0 mapping,
unverified items and M2 prototype checklist; Playwright is not a product browser
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-27 21:39:29 +08:00
root and Claude Fable 5.1
304feea141
chore(deno): migrate toolchain from Node 24 + pnpm to Deno 2.9.7 + TypeScript 7.0.2 (W1.5)
...
- root deno.json workspace (nodeModulesDir auto), npm versions registered once in imports, deno.lock;
remove pnpm-lock/pnpm-workspace/root package.json; members keep minimal package.json (name/type/exports)
- tasks: dev, typecheck (tsc 7.0.2 per member + deno check), lint/fmt (biome, useImportExtensions),
test (vitest via deno), check:tokens, build (web + deno compile), ci, db:migrate/reset, gen:types
- tsconfig base moved to config/ (no root tsconfig.json); deno types -> types/deno.d.ts; web drops baseUrl
- server: Deno.serve entry with graceful shutdown, --role migrate|preflight|probe, WEB_ROOT static SPA hosting;
drop @hono/node-server, tsx, esbuild build.mjs
- logger: redact child() bindings and serialize err by message/stack; sync stdout destination; tests
- relative imports get explicit extensions (sites/mp-sync paths left for follow-up)
- crash-recovery tests spawn `deno run -A`; tasks tests use unique per-file schemas
- single-container Dockerfile + entrypoint (migrate -> preflight -> api+worker watchdog), docker-compose.yml
- docs: README, runbook, ADR-001 superseded, plan §1 validation row
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-27 18:53:06 +08:00
root and Claude Fable 5.1
a6d049db81
feat(adapters): RSS and PT site adapters ported from MoviePilot v3 + mocks (W1-3b)
...
- rss: port of MP RssHelper._parse_impl/get_rss_link semantics with safe
XML (entities off, DTD/ENTITY rejected, size/item caps), ETag/Last-Modified,
backoff + Retry-After, circuit breaker with manual reset, passkey redaction,
overlap-window GUID+digest dedupe
- sites/spider: TS port of MP SiteSpider (indexer schema, search URL builder,
field DSL, filters, Jinja templates via nunjucks, login-page detection);
audiences definition hand-written as JSON; raw category id preserved;
shared per-site token bucket
- sites/mteam: port of MP MTorrentSpider (params, result mapping, promo
factors, genDlToken flow) without embedding the API key in enclosures;
business code/message checks
- testkit: mock RSS server, mock NexusPHP site, mock M-Team API
- docs: W1-3b migration mapping appended to porting ledger
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-27 18:10:34 +08:00
root and Claude Fable 5.1
ef2e504a94
feat(adapters): qBittorrent, filesystem, TMDB and Emby adapters with testkit mocks (W1-3a)
...
- qbittorrent: WebUI API v2 client (cookie/API-key auth, add/info/files/filePrio,
pause/resume with 5.x stop/start fallback, tags, delete with explicit deleteFiles,
maindata), error classes, idempotent submit with local infohash (own bencode)
and post-timeout hash/probe-tag lookup; state mapping per MoviePilot
- fs: copyWithVerify (tmp + fsync + size/sha256/sample + no-clobber commit),
moveSafe (EXDEV surfaced), resumable crossDeviceMove, statSafe/checkRoot with
root sentinel, budgeted incremental scan with cursor, ffprobe, statfs usage
- tmdb: multi-language search/details/seasons, LRU+TTL cache with coalescing,
rate-limit backoff, MoviePilot match chain (name normalization, year +-1)
- emby: Emby/Jellyfin items/seasons/episodes/MediaSources, failures -> unknown
- testkit: mock qB / TMDB / Emby servers, torrent builder, temp-tree fixtures
- docs: W1-3a porting table appended to downloader-and-sites ledger
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-27 18:07:48 +08:00
umt and Claude Fable 5.1
b22c440139
chore: scaffold monorepo and migrate uhd_web design system (W0-A)
...
- pnpm workspace: apps/{web,server}, packages/{contracts,db,domain,adapters,tasks,agent,testkit}
- server: Hono + zod-openapi, API Key auth with scopes, redacting pino logger, SSE event bus with replay, worker heartbeat
- db: Kysely + pg, file migrator, 0001_init (settings/api_key/audit_event/outbox_event)
- web: React Router 7 SPA console shell with 12 workspace placeholders, uhd_web tokens/ui/guard scripts
- docs: ADR-001 (Node over Deno), dev runbook, design system rules
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-27 17:36:26 +08:00