root and Claude Opus 5.5
b8876542b8
feat(sites): 内置公开 BT 站 Nyaa / 蜜柑 / AniBT / AnimeGarden / 萌番组
...
- 新专用解析器(spiders/public.ts):RSS / Torznab / JSON API,搜索 + 最新列表 + 按资源 ID 取种子或磁力
- 手写定义(definitions/public.ts,public: true),并入内置定义表;定义视图按 public 标为 public_bt
- 添加站点:公开 BT 站可从内置站一键添加(专用适配器、默认定时抓取、默认不进搜索集合),手填 RSS 保留
- 样例取自 2026-10-02 公开接口,截前两条
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 21:19:19 +08:00
root and Claude Opus 5.5
9cdf492291
fix(sites): OurBits 详情页按 BBCode 解析简介
...
OurBits 的简介在 div.ubbcode 里是未渲染的 BBCode(站点前端脚本渲染),按 HTML 取文本后
[quote] / [img] / [url] 原样留下、换行全被合并。extractDetailPage 遇到 ubbcode 容器且内容带 BBCode 标记时,
改用 pageFromBbcode 取简介 / 截图 / MediaInfo(换行保留),发布者、文件、标签与页面上的外部 ID 照旧。
覆盖层补 fileListPath(viewfilelist.php),与憨憨一样按需取文件列表。脱敏样例 OURBITS_DETAIL_PAGE + 测试。
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 20:59:41 +08:00
root and Claude Opus 5.5
ee128e0b3f
feat(downloads): 下载器单独的水位与保种天数
...
- contracts DownloaderPolicy(存 downloader_instance.settings.policy):硬阈值 / 恢复水位 / 清理目标 / 保种天数,
不填用全局 cache / retention
- volumeThresholds:卷的生效水位 = 各实例「自己的值 ?? 全局」取最小;decideVolume、阈值清理、手动恢复、
首页卷信息、定时清理检查都改用它;cleanupCandidates 保种天数按实例
- 保存时校验合并全局后 恢复 < 硬阈值、清理目标 ≤ 恢复
- 下载器设置表单新增四项(留空用全局)
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 20:51:04 +08:00
root and Claude Opus 5.5
ff79554a09
chore(release): v0.3.16
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 20:43:06 +08:00
root and Claude Opus 5.5
135c50048f
feat(downloads): 多下载器路由:默认下载器、站点指定下载器、别名
...
照 MP(chain/download/submission.py:明确指定 or 站点下载器 or 默认):
- 迁移 0063:downloader_instance.is_default(至多一个,唯一索引)、site.downloader_instance_id
- pickInstance:明确指定 > 站点指定 > 默认 > 第一个可用;自动下载(gates)与手动下载共用
- 设置:下载器名称改称别名,新增「设为默认下载器」;站点编辑新增「下载器」选择
- 测试 downloader-routing.test.ts
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 20:32:29 +08:00
root and Claude Opus 5.5
64e1dfb1d2
fix(sites): 按真实列表页修正 OurBits / 彩虹岛 / 憨憨 解析
...
2026-10-02 用真实账号各抓一次列表页与用户页(只读)核对:
- OurBits:标题列嵌套 table.torrentname 有 5 个 td,td:nth-child(n) 先命中嵌套格子,
大小全为 0、发布时间 N/A;改为只匹配行的直接子单元格。副标题原取成标签块,改为标签之后的正文;
新增标签与列表页 IMDb / 豆瓣 ID(label.imdb_rate / douban_rate 的 data 属性)
- 彩虹岛:font.subtitle 去掉前面的 div.tag 与末尾徽标,标签单独取
- 憨憨:新增列表标签(span.tag,不含促销)
- 纯数字 IMDb ID 补成 tt + 7 位(imdbIdOf)
- 用户页核对:下载量为 0 是站点实际显示(VIP),解析正确;上传量四站与页面一致
- 脱敏样例 sites-2026.ts + 定义测试;差分登记 23 条有意偏离(新增 labels、OurBits 副标题)
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 20:16:27 +08:00
root and Claude Opus 5.5
cac1833f53
chore(release): v0.3.15
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 18:35:41 +08:00
root and Claude Opus 5.5
9856ed8d5e
docs(porting): 订阅 MP 场景对照(第 7 节,待讨论)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 18:22:37 +08:00
root and Claude Opus 5.5
147c6b1947
fix(sites): 不再单独显示 VIP 标签
...
等级里已经体现 VIP,各站 vip 判定也不一致(同为 VIP 等级,有的站是 true、有的是 null)。
卡片、列表、登录结果、站点概况去掉 VIP 显示,数据字段保留。
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 18:20:52 +08:00
root and Claude Opus 5.5
f5bc6e9c40
fix(scrape): 整理后刮削照 MP 对作品目录刮,集只刮本次整理的文件
...
原地入库逐个文件排刮削,单文件刮削只写该集,剧集根目录(tvshow.nfo、海报、季海报)与季目录
(season.nfo)没有元数据。照 MP ScrapingChain.scrape_metadata_event:按作品目录分组,目录元数据照常
初始化,集只刮本次文件;复制 / 移动同样改为只刮本次文件(此前刮整个作品目录)。
- 迁移 0062:scrape_record.videos(null = 目录下全部)
- queueScrape 支持 videos;同目录排队中还没开始的刮削合成一批(有一方刮全部则刮全部)
- 作品详情「重新刮削」与文件管理刮削不变(目录下全部)
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 18:20:52 +08:00
root and Claude Opus 5.5
501b4eb403
docs: 待办收尾,补测试与代码布局约定
...
- 待办:任务恢复边界、注册断言、测试装配去重、大文件拆分、MP 对照 6.4 已完成并移除;
BrowserService 类拆分与超长函数写明暂缓原因;真实环境验收列出所需条件;
continuous-series 偶发超时改为观察项(已核实不是业务竞争)
- CLAUDE.md:test/support、contracts api/ 与整理服务的文件布局、起子进程的测试进串行组
- lessons 第 26 条:检查命令不接管道
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 17:40:43 +08:00
root and Claude Opus 5.5
8bec4bad5d
refactor: 拆分大文件(contracts 端点、整理服务、浏览器纯函数、整理弹窗来源)
...
- contracts/src/api.ts 2733 行 → api/*.ts 13 个领域文件 + shared.ts;api.ts 按原顺序合并 Api。
新旧对比:354 个端点内容与顺序一致,分组键与对外导出一致
- acquisition-organize/services/organize.ts 2645 行 → organize-types / -plan / -exec / -finalize / -records,
organize.ts 保留为汇总入口,外部引用不变
- browser/service.ts 类外的纯函数(视图映射、原因文案、坐标换算、图片尺寸、出口代理)移到 session-view.ts,
service.ts 照旧转出
- organize-wizard:来源解析 useResolvedSource 移到 source.ts,FormSelect 移到 form-select.tsx
只挪位置不改逻辑;typecheck、lint、test:all、web build、server 编译与编译产物自检通过。
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 17:40:43 +08:00
root and Claude Opus 5.5
c9e8120fc6
test: server 测试共用建库与假引擎,sse-pg 归入串行组
...
- 新增 apps/server/test/support/{pg,engine}.ts:测试库地址、可用性探测、schema 咨询锁、
建 schema + 加锁迁移 + 删除、可选去重的假引擎;6 份 harness 改用它(acquisition-organize 与
file-manager 原先迁移不加锁,并行下有冲突隐患,一并修正)
- sse-pg 起子进程,并行下子进程启动超时,归入 serial
- 修正 b61335e 挪动 / 改名测试后遗留的 import 排序与格式(当时 lint 检查经管道被吞掉退出码)
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 17:40:43 +08:00
root and Claude Opus 5.5
7cc3742d31
chore: 发布前检查在途任务;断言核心任务都由业务模块注册
...
- release.sh 替换容器前列出引擎里未结束的任务(任务名@版本、状态),有则停下,
--allow-inflight 放行(新版本只认领自己注册的任务版本)
- modules.test:生产模块装配下每个核心任务都由业务模块正式注册,不落到空壳兜底
- 刮削 / 任务入队的关联写回与引擎查询异常两处边界已在 v0.3.14 修复并有故障注入测试
(test/acquisition-organize/enqueue-recovery.test.ts)
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 17:18:07 +08:00
root and Claude Opus 5.5
b61335eaf6
test: 测试按行为命名、server 测试统一到 test/、PG 测试分组并行
...
- server 的 src/modules/*/__tests__ 挪到 test/<模块>/;e2e 去掉 eN- 前缀,
w5a2 / v2 / search2 / *-dh1 / *-md1 / *-md2、web 的 agui3 / search2、domain 的 id2 / id3 改为按行为命名
- vitest 分三组:unit、pg(真实 PG + 假引擎,文件并行,最多 6 个)、serial(真实引擎 / worker / e2e,串行);
pg 组用例超时放宽到 60s(迁移类用例并行时排队等 schema 锁)。server 测试 615s → 约 350s
- CLAUDE.md 补测试约定;待办补 harness 去重与 continuous-series 偶发超时(疑似 Slot 评估竞争)
- ADR-004 补充:维持 Deno,记录实际只用到 --allow-run 白名单
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 16:54:04 +08:00
root and Claude Opus 5.5
b343dddbf6
docs: 清理过程文档,CHANGELOG 补齐 0.3.8–0.3.14
...
- 删除 docs/plan 下 00–18 的计划、评审、验收、发布记录与升级证据,docs/spikes 与 spikes 验证代码
(保留 spikes/movieclaw-src 本地克隆),以及 4 份一次性审查 / 调研;全部可在 ceb66f8 查到
- MP 对照移到 docs/porting/moviepilot-v3-comparison.md;经验教训改为 docs/plan/lessons.md(补第 25 条)
- docs/plan/README.md:文档放哪、当前状态、待办
- 引用改写:代码注释指向在维护的文档,其余注明已删除与 git 位置;清掉原有 6 个失效链接
- README 开头改为当前状态与入口;CHANGELOG 补齐 0.3.8–0.3.14 与工程变更
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 16:08:09 +08:00
root and Claude Opus 5.5
11ca2f01ff
chore: 一键检查、发布脚本与开发环境约定
...
- deno task test:all(scripts/test-all.sh):逐包跑完再汇总,连不上测试库直接失败,
web 用 Node 跑 vitest;deno task ci 改用它
- deno task release(scripts/release.sh):工作区不干净、CHANGELOG 无本版条目即拒绝;
打 tag、构建、只替换 app、核对健康接口版本
- deno task dev:up:起开发库并迁移到最新;开发 API 端口改 4390(4380 留给本机部署版)
- CLAUDE.md:命令、提交与发布约定、文档放哪
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 16:08:09 +08:00
root and Claude Opus 5.5
ceb66f8c77
feat: v0.3.8–v0.3.14 工作区汇总(依赖升级、整理来源、手动入库、原地入库等)
...
生产 v0.3.8~v0.3.13 均由 8013196 加工作区修改构建部署,此前未提交;本提交补齐源码,
并含未部署的 v0.3.14 原地入库。中间各版本源码状态未保存,无法逐版拆分,详见
docs/plan/17-full-upgrade.md 与 docs/plan/18-organize-release.md。
- v0.3.8 全面升级:Deno workspace 依赖、Router 8 / Vite 8、camofox 1.18.0 / Node 24、
PostgreSQL 18.6、备份客户端 18.6、演示 qB 5.2.4
- v0.3.9 媒体整理:分类规则、整理来源与目录快照(0059)、文件管理整理入口
- v0.3.10 手动下载与入库:独立手动下载、详情页资源下载、TMDB / Local 元数据兜底
(metadata.resolve_organize)、正常多版本 / 一次性洗版(0060)
- v0.3.11 搜索详情与桌面黑边修复
- v0.3.12 列表分页、搜索历史、首页概况
- v0.3.13 统一整理弹窗与队列
- v0.3.14 原地入库(0061,未部署)
同批审计修复:
- 刮削入队:确认原记录存在后才删重放产生的新记录;写回 run 关联失败时保持 queued,
由处理器补关联(对齐 MP 先登记、只在入队失败时记失败)
- 识别升级链只在结果更确定时采用,不再用 no_match 顶替原有歧义候选
- bluray_dir 资产以原盘目录本身为刮削根(MP 同做法)
- metadata.resolve_organize 登记到入库排障 Skill 与能力地图
- db/src/types.ts 按迁移重新生成;contracts 整理动作枚举顺序与数据库对齐
- 测试:原地入库用例改为直接查记录表;domain 测试模板补 version
- 前端:通知铃铛弹层与用户菜单统一样式;站点卡片共用卡头、底栏贴底、分页间距
依赖升级证据只提交摘要文件,registry-snapshot.json 移至 .local/(SHA-256 记于文档)。
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 15:47:17 +08:00
root and Claude Fable 5.1
8013196e3f
chore(release): v0.3.7
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-10-01 00:28:04 +08:00
root
a9511a75f6
Merge branch 'id3'
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
# Conflicts:
# CHANGELOG.md
2026-10-01 00:15:49 +08:00
root and Claude Opus 5.5
bca9ecb6cf
docs(identity): ID-3 escalation chain, triggers and list IDs
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-01 00:15:20 +08:00
root and Claude Opus 5.5
3d5a50b30a
feat(identity): escalate ambiguous/no_match via site detail-page IDs (ID-3)
...
Fetch the detail page (cached, rate-limited, per-site hourly cap
identity.detailIdsPerSiteHour) for search results, subscription-related
candidates, pool enrich and manual re-identify; resolve IMDb/TMDB via TMDB,
douban via cached douban subjects (site detail info block / META-2 snippets).
No identity_unresolved decisions for releases with site IDs.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-01 00:15:20 +08:00
root and Claude Opus 5.5
cba214e93e
feat(sites): extract douban IDs from list rows (audiences) (ID-3)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-01 00:15:20 +08:00
root and Claude Opus 5.5
a6d655d2ce
feat(identity): trust site-provided IMDb/TMDB IDs in scoring (ID-3)
...
MatchOptions.trustedIds: a candidate fetched by a site-given ID is at least
multi_evidence even when titles differ; year/type conflicts stay candidates.
Differential group site-ids-* against MP search/result.py _match_source.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-01 00:15:20 +08:00
root
44f7c88be6
Merge branch 'scr2'
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
# Conflicts:
# CHANGELOG.md
# apps/server/src/modules/file-manager/routes.ts
2026-10-01 00:09:01 +08:00
root and Claude Opus 5.5
c29e6a12d3
docs(scrape): SCR-2 就地刮削运行手册与 MP 差分表
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-01 00:08:17 +08:00
root and Claude Opus 5.5
d8ae5e179c
feat(web): 文件管理「刮削…」对任意目录可用,候选选择与刮削结果(SCR-2)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-01 00:08:17 +08:00
root and Claude Opus 5.5
87bf33b42b
feat(scrape): 任意目录就地刮削,按路径识别作品,每次刮削一条记录(SCR-2)
...
- POST /files/scrape 改为对目录 / 视频文件刮削:已登记用作品,否则按路径识别(本地 + TMDB),
认不准返回候选,选定后再提交;未登记直接用 TMDB 字段,addToLibrary 顺手建作品
- 作品详情重新刮削、入库后自动刮削改为对作品目录刮削,同一实现
- 迁移 0058_scrape_record 替代 media_scrape;GET /files/scrape-records
- 与 MP ScrapingChain 的文件布局差分(7 个场景,3 处登记偏离)
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-01 00:08:17 +08:00
root and Claude Fable 5.1
e7e202fdc2
Merge branch 'his1'
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 23:57:39 +08:00
root and Claude Opus 5.5
76433dd43f
docs(organize): MP history comparison and changelog (HIS-1)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 23:57:19 +08:00
root and Claude Opus 5.5
03c651085f
feat(web): organize records page parity with MP history (HIS-1)
...
Poster, source -> target, size, downloader; type/time filters; status
counts; group by work; row menu; batch select, delete and reorganize;
delete confirm dialog with dry-run summary; detail delete and download info.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 23:57:19 +08:00
root and Claude Opus 5.5
51e82f1cd9
feat(organize): record filters, stats and delete with files (HIS-1)
...
List query gains kind/since/organizeOnly and wildcard/hash search; new
GET /organization-records/stats and POST /organization-records/delete
(optional source/library files to trash via files delete). Public record
adds posterPath, sizeBytes and download summary.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 23:57:19 +08:00
root and Claude Fable 5.1
a9e6e6c36a
docs(plan): identification escalation via detail-page IDs (ID-3)
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 23:28:39 +08:00
root and Claude Fable 5.1
f60254e265
docs(plan): SCR-2 scrape in place like MP; HIS-1 organize history parity
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 23:21:35 +08:00
root and Claude Fable 5.1
006549a49f
chore(release): v0.3.6
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 22:53:47 +08:00
root
511ad93077
Merge branch 'search4'
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
# Conflicts:
# docs/plan/00-first-version-plan.md
2026-09-30 22:41:26 +08:00
root and Claude Opus 5.5
acab4cc6bb
docs(search): MP facet comparison table and changelog (SEARCH-4)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 22:40:55 +08:00
root and Claude Opus 5.5
ca17b2329b
fix(web): opaque solid background for floating layers (SEARCH-4)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 22:40:55 +08:00
root and Claude Opus 5.5
b15c06ad20
feat(web): more-filters panel and MP ordering for quick filters (SEARCH-4)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 22:40:55 +08:00
root and Claude Opus 5.5
d9cf8f1c3a
feat(search): align quick-filter facets with MP (SEARCH-4)
...
Add audioCodec, subtitle, dub, feature, year, category, size and seeders
facets with disjunctive counts; parser records dub languages (audioLangs).
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 22:40:55 +08:00
root
2e83107f68
Merge branch 'scr1'
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
# Conflicts:
# CHANGELOG.md
# docs/plan/00-first-version-plan.md
2026-09-30 22:36:46 +08:00
root and Claude Opus 5.5
0e8bb6967d
docs: 刮削运行手册与 CHANGELOG(SCR-1)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 22:36:14 +08:00
root and Claude Opus 5.5
df033130f5
feat(web): 刮削设置分区、作品详情刮削状态与文件管理「刮削」(SCR-1)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 22:36:14 +08:00
root and Claude Opus 5.5
f38eca419e
feat(server): scrapeMedia 刮削任务,入库后自动刮削(SCR-1)
...
- 文件道任务 scrapeMedia:NFO 原子写入、图片经图片缓存下载(并发 4,失败不阻塞 NFO)、只补缺失 / 全部覆盖
- 设置 organize.scrapeAfterImport / scrapeMode / scrapeImages / scrapeEpisodeThumbs
- POST /library/{id}/scrape、详情 scrape 状态;files/scrape writeNfo 与 scrape-batch write 走同一任务
- 迁移 0057_media_scrape、原因码、审计 organize.scrape
- 与 MP 输出的 NFO 差分测试(apps/server/test/scrape)
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 22:36:14 +08:00
root and Claude Opus 5.5
861f799615
feat(domain): 刮削 NFO 生成与目标文件布局(SCR-1)
...
电影 / 剧集 / 季 / 集 NFO(元素与顺序对照 MP TmdbScraper,缺值不写),
poster / fanart / 季海报 / 剧照命名(Emby / Jellyfin / Kodi 兼容)。
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 22:36:14 +08:00
root and Claude Fable 5.1
c3b25be676
docs(plan): align search filters with MP (SEARCH-4)
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 22:12:38 +08:00
root and Claude Fable 5.1
b137f365c5
chore(release): v0.3.5
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 21:39:55 +08:00
root and Claude Fable 5.1
b3775dff1b
docs(plan): scraping not implemented yet (SCR-1)
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 21:28:04 +08:00
root
1ce937345e
Merge branch 'cf2'
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
# Conflicts:
# docs/plan/00-first-version-plan.md
2026-09-30 21:27:34 +08:00
root and Claude Opus 5.5
c38ac2a85c
docs: CF-2 出口表、Cloudflare 级联运维与插件点击核验
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 21:26:54 +08:00
root and Claude Opus 5.5
f16b97151b
feat(web): 站点显示 Cloudflare 状态(CF-2)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 21:26:54 +08:00
root and Claude Opus 5.5
16083942c0
feat(sites): 出口统一与 Cloudflare 过挑战级联(CF-2)
...
- 出口:站点请求不再隐式继承 HTTP(S)_PROXY,没开代理明确直连(创建客户端时临时拿掉代理环境变量,Deno 2.9 语义见 egress.ts),
开了走站点代理;TMDB / Brave / 图片改为显式按环境变量(行为不变)
- CloudflareGate:浏览器代理期直接代抓 → HTTP(可复用时带 cf_clearance)→ 挑战 → 浏览器过挑战(同站 30 分钟一次、单飞)
→ cf_clearance 仅在 UA 跟随浏览器且两端同出口时给 HTTP,重试 1 次记 cfReuse → 仍被挑战则浏览器代抓并进入 6 小时代理期
- 浏览器:solveSiteChallenge(自动放行 ≤15s / 系统发起视觉子流程最多 2 次 / 真验证码转人工待处理)、fetchSiteHtml(profile 锁 + 站点令牌)、
交还后读回 cf_clearance 继续;site.config.cloudflare 状态契约
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 21:26:54 +08:00
root and Claude Opus 5.5
6b14b0da45
feat(browser): 插件真实坐标点击与页面内容读取(CF-2)
...
- umt 插件 POST /umt/tabs/{id}/mouse-click:page.mouse.click,跨域 iframe 的 Turnstile 也点得到;click 坐标优先走它,旧镜像退回 elementFromPoint
- 适配器 pageContent(地址 / 标题 / outerHTML / 正文 / navigator.userAgent);setEgress 返回插件出口模式
- mock camofox 增加 Cloudflare 模式(auto / interactive / captcha)与插件鼠标点击
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 21:26:53 +08:00
root and Claude Opus 5.5
a11ef16e40
fix(sites): Cloudflare 挑战不算凭据错误(CF-2)
...
- http.ts:cf-mitigated: challenge 或 403/503/429 挑战页 → SiteError(challenge),503 不再算维护、403 不再落到 auth_invalid
- 挑战页分类 classifyChallengePage:自动 / 可点(Turnstile)/ 真验证码
- 刷新登录 / 用户数据遇 Cloudflare 挑战只记 last_error,账号状态不变、不开登录失效事项
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 21:26:53 +08:00
root and Claude Fable 5.1
c9f559e702
docs(plan): DET-2 results and follow-ups
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 20:50:19 +08:00
root
389c49dd12
Merge branch 'det2'
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
# Conflicts:
# packages/adapters/src/sites/definitions/audiences.json
# scripts/mp-sync/movieclaw-overrides/audiences.json
2026-09-30 20:50:04 +08:00
root and Claude Opus 5.5
92830c3ef3
fix(adapters): 观众详情页按真实页面适配(DET-2)
...
- 促销:详情 h1 是 font.free / font.halfdown 等 + 剩余时间 span[title],新增 umt.detail.promo 覆盖列表促销字段(以前一律判成无促销并覆盖列表的免费)
- 标题去掉 h1 里的「剩余时间:」;发布时间不再取标题区的促销到期时间
- 做种 / 下载 / 完成数、种子 Hash:umt.detail.fields.seeders / leechers / snatched / infoHash
- 副标题去掉评分徽标;标签只取最内层;上传者取 span.torrent-uploader-wrap,标签精确匹配(避开「发布者带宽」)
- 简介:去掉站点声明(page.descriptionStrip)与 MediaInfo 控件(codetop / show / hide),源码换行不再算一行
- 截图排除豆瓣海报与站点横幅
- 列表副标题改取 span.torrent-subtitle-text(以前前面粘着标签文字)
- 脱敏真实样本:详情 2 页进 differential/detail.test.ts,列表 1 页进 MP 差分
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 20:49:29 +08:00
root and Claude Fable 5.1
d403514adc
Merge branch 'hc1'
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 20:39:03 +08:00
root and Claude Opus 5.5
b1d30bd6ee
fix(sites): 观众健康检查误报未登录,健康失败原因细分(HC-1)
...
观众 2026 版首页没有 <a href=logout>:退出按钮在 userbar 的 data-uploader-actions JSON
里由脚本渲染,旧登录标志 a[href*="logout"] 永远不命中,健康检查报"未登录"而用户数据正常。
- audiences 定义 loginSuccess 改为 #info_block / usercp.php / logout 任一(0.2.1)
- 健康检查判定细分:登录页 / 权限页 / 疑似人机验证 / 找不到登录标志(带选择器),
原始判定写入 last_health.detail,站点概览技术信息展示
- 首页只是找不到登录标志时,以 24 小时内用户数据解析成功为已登录证据(同 MP)
- 新 SiteError 类 challenge(cf-mitigated: challenge),不算凭据错误;健康状态 challenge
- testkit mock 增加 setHeaderLayout;加观众首页脱敏结构样本的差分测试
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 20:38:48 +08:00
root and Claude Fable 5.1
3bf3e6074c
Merge branch 'cf1'
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 20:22:08 +08:00
root and Claude Opus 5.5
2bd5b77b98
docs(design): CF-1 Cloudflare challenge handling research
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 20:21:28 +08:00
root and Claude Fable 5.1
93475f80e6
docs(plan): HC-1, DET-2, CF-1 items
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 20:09:53 +08:00
root and Claude Fable 5.1
322ecb2f8c
docs(lessons): stray dev servers rewrite deno.lock
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 20:00:05 +08:00
root and Claude Fable 5.1
5ddc88d928
chore(release): v0.3.4
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 19:56:29 +08:00
root and Claude Fable 5.1
fd9df0a68d
Merge branch 'fix9'
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 19:44:35 +08:00
root and Claude Opus 5.5
fe6649f17d
fix(web): 文件管理目录树与主面板共用实底 slab 与表头 token(FIX-9)
...
两块面板垫同一层底色(pg-slab-solid),背后光斑不再让目录树更亮更透;
列表粘性表头改用与卡片同色系的 pg-slab-head,不再是一条纯黑。
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 19:32:32 +08:00
root and Claude Opus 5.5
6f450ed329
fix(web): 运行状态页进程名统一全角括号,io 改称后台任务(FIX-9)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 19:30:12 +08:00
root and Claude Opus 5.5
3ec2a10993
docs(agent): 巡检 Skill 要求需要批准的检查实际调用一次,补 e16 断言(FIX-9)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 19:29:54 +08:00
root and Claude Opus 5.5
65a2ed7d49
fix(web): 会话步骤明细里的能力 ID 换成能力标题,与最终汇报一致(FIX-9)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 19:28:51 +08:00
root and Claude Opus 5.5
c5987a9db3
fix(web): 会话进度行时长从本轮开始算到结论正文,不再显示 0 秒(FIX-9)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 19:27:43 +08:00
root and Claude Opus 5.5
41a39f3cc8
feat(web): 会话实际结果行只列系统核实的事实,不一致时标记(FIX-9)
...
去掉「说明」「汇总」与「未经核查」;没有动作时一行小字,有动作时列提交的下载与完成的整理并可点到记录,
汇报里的数字与系统记录不一致时行尾加「与汇报不一致」。统计行已有费用时不重复。
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 19:26:28 +08:00
root and Claude Opus 5.5
c67fd96639
feat(web): 计划页智能体巡检卡片统一尺寸,多出内容省略、详情抽屉看全文(FIX-9)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 19:23:30 +08:00
root and Claude Fable 5.1
cdff88dcc9
docs(plan): uniform inspection cards (FIX-9)
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 19:18:04 +08:00
root and Claude Fable 5.1
395417f298
chore(release): v0.3.3
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 19:10:41 +08:00
root
15cec13f42
Merge branch 'ag5'
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
# Conflicts:
# CHANGELOG.md
# apps/server/src/modules/agent/runner.ts
# packages/agent/src/index.ts
# packages/agent/src/system-prompt.ts
2026-09-30 18:48:24 +08:00
root and Claude Opus 5.5
9962494936
docs(agent): prompt layering, skill authoring and eval runbook
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 18:47:15 +08:00
root and Claude Opus 5.5
425415b3ba
test(agent): prompt eval with fake model and real-model comparison harness
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 18:47:15 +08:00
root and Claude Opus 5.5
21b7e8ff23
feat(agent): layered system prompt, environment facts and intent-routed skills
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 18:47:15 +08:00
root and Claude Opus 5.5
0f20c19b7c
feat(agent): add read-only download.list capability
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 18:47:15 +08:00
root
6f5371be2d
Merge branch 'meta2'
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
# Conflicts:
# CHANGELOG.md
2026-09-30 18:40:42 +08:00
root and Claude Opus 5.5
9489e40e0c
feat(identity): source-aware short-drama enrichment with snippet mode and hit rate (META-2)
...
- classify enrich sources: encyclopedia, platform pages (hongguo, kuaikaw, video
platforms), douban (search snippet only) and other sites' search snippets
(snippet mode, pages never opened); one extractor per source, fields carry
source kind and confidence, merged by noisy-OR across hosts
- new cast field (applied as MediaCredit with placeholder ids)
- robots.txt check (cached per host 1 day) and login-wall/captcha give-up
- per-enrichment source attempts + GET /identity/enrich-stats, 30-day hit-rate
table under settings -> metadata -> identity
- setting identity.enrichSnippetAllSites (default on); default domains add
baike.com and kuaikaw.cn
- replay fixtures from the real run on the 4 user-library short dramas
(sanitized Brave responses, hongguo page, robots.txt)
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 18:40:19 +08:00
root
09bac0ea39
Merge branch 'ag4'
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
# Conflicts:
# CHANGELOG.md
2026-09-30 18:21:57 +08:00
root and Claude Opus 5.5
f4a7fa863e
docs(agent): AG-4 runbook and changelog (spawn dedupe, subagent language, session stats)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 18:05:12 +08:00
root and Claude Opus 5.5
1fcfcac885
feat(browser): keep sessions alive during desktop, takeover and agent use (AG-4)
...
camofox reaps a tab after TAB_INACTIVITY_MS (5 min) without API tool calls;
desktop-mode input goes straight to Selkies and screenshots don't count, so
tabs disappeared under the user during takeover.
- BrowserKeepalive (in-process): sessions held by an open desktop WebSocket
(ref-counted), a human takeover lease, or a running/queued agent run that
used browser.* get a keepalive every BROWSER_KEEPALIVE_MS (default 120s,
0 = off). Holds are re-checked each round; release/lease expiry/agent end/
session close stop it and camofox reaps as usual.
- Keepalive call: camofox 1.17 has no keepalive/touch endpoint and /stats does
not bump toolCalls; use GET /tabs/{id}/downloads without includeData/consume
(read-only metadata). Goes through BrowserService.run so restarts or reaped
tabs self-heal via BR-3 reconnect; no lastAutomationAt, no control needed.
- Runbook browser.md §12, deploy env table, compose env; tests against the
testkit mock camofox.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 18:05:12 +08:00
root and Claude Fable 5.1
afe30a2255
Merge branch 'md2'
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 18:04:39 +08:00
root and Claude Opus 5.5
f9901b514b
feat(metadata): overview falls back to Chinese variants only (MD-2)
...
- adapters: overviewLanguages() limits overview/tagline chain to Chinese
variants (zh-CN→zh-SG→zh-TW→zh-HK); titles keep full chain; season
supplement fetch skips languages useless for overview
- setting metadata.overviewNonChineseFallback (default off) + UI switch
- media detail shows "暂无简介" for empty entity/episode overview
- scripts/overview-recompute.ts: recompute stored non-Chinese overviews
from kv_cache only (no TMDB requests), dry-run by default, --apply
- tests: chain unit tests, Heart Signal (103147) fixture, server
recompute test, MP differential for episode overview
- runbook + CHANGELOG
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 18:04:23 +08:00
root and Claude Opus 5.5
919dc02200
feat(web): session stats line, live turn status, drop replaced-ID list (AG-4)
...
- Remove the "换掉的标识" mapping list under humanized reports; the raw
report text is kept only as "原文" in the result line's 技术信息 (no mapping).
- Session stats line above the overview bar, always shown: tool calls, MCP
calls (only when any), tokens used and left to the budget (K/M + percent),
cost; live while running, fixed after the run ends.
- Live turn status: "思考中 / 调用工具中 / 回答中 · 已调用 N 次工具、M 次 MCP";
after the turn the count merges into each progress line ("调用 N 次工具").
- agent.spawn calls answered with an existing same-goal child (reused=true)
are not counted in "派出了 N 个子会话".
Screenshots (desktop + mobile): apps/web/test/screenshots/ag4/ (gitignored).
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 17:58:15 +08:00
root and Claude Opus 5.5
793b87e3b6
docs(changelog): prune stale known limitations
...
- Drop "site rate limit counted per process; cross-process token bucket in
progress on c2a": migration 0041 shipped the PG token bucket (61f585a ).
- "原站视图是 1.5 秒截图轮询,没有在真实 camofox 上核验": desktop mode (WT-1)
exists and was verified on real camofox (v0.2.4 notes); keep only the
"HTTP failure does not fall back to the browser" part, still true.
- HHClub was checked against the real site in VER-3 / HH-2; keep 观众、馒头、CHD.
- Other entries re-checked against 11-requirements-coverage and code: still hold.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 17:58:08 +08:00
root and Claude Opus 5.5
01653b0427
feat(agent): dedupe agent.spawn by normalized goal within a parent session (AG-4)
...
A spawn whose goal (NFKC, case, whitespace and punctuation folded) matches a
child of the same parent that is still queued/running, or succeeded/waiting
within the last 10 minutes, returns that child instead of creating a new one:
output gets reused=true, a message ("已有同目标子会话…") and the child's
current result summary. Failed/cancelled/over-budget children are not reused.
Spawn decisions are serialized per parent in-process so parallel duplicate
calls in one batch create a single child. Replays keyed by idempotency still
hit the original child as before. The subagent constraint in the system prompt
asks for Chinese sub-goals and no duplicate spawns.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 17:58:08 +08:00
root and Claude Opus 5.5
0508f3418f
feat(agent): require Chinese thinking and reports in subagent prompts (AG-4)
...
Subagent / vision subflow prompts (audience=agent) get a dedicated section:
report goes to the parent session, and thinking, step notes and reports stay
in Chinese even when the goal, tool results or web pages are in English.
Prompt regression test covers both the shared hard rule and the new section.
Child reports reaching the user are already humanized: the child session page
uses the same FIX-7 report-humanize path, and the parent's final report resolves
child run IDs to their goal titles; agent.spawn/await tool rows show no raw summary.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 17:58:08 +08:00
root and Claude Fable 5.1
0023872b9b
docs: agent report anti-sample and AG-5 plan
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 17:45:41 +08:00
root and Claude Fable 5.1
081db4651c
docs(plan): overview language fallback (MD-2) and loose-ends decisions
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 17:41:14 +08:00
root and Claude Fable 5.1
d251098471
docs(lessons): restore deno.lock before image builds
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 03:34:49 +08:00
root and Claude Fable 5.1
04460fa98e
chore(release): v0.3.2
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 03:29:04 +08:00
root and Claude Fable 5.1
66f6798444
Merge branch 'br4'
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 03:17:48 +08:00
root and Claude Opus 5.5
9ea0d6bed1
docs(browser): BR-4 runbook for browser identity, UA priority, migration, CF cookies, egress
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 03:17:13 +08:00
root and Claude Opus 5.5
adc853aa64
feat(sites): site requests follow browser UA, smooth UA switch, CF cookies browser-only (BR-4)
...
- every outbound site request (adapter list/search/detail/download/health,
RSS, login, user data) carries the account UA via SourcesRuntime.siteFetch;
no more Deno default UA
- priority: account manual > pending > global setting > browser identity
(fallback: same-shape Windows Firefox UA); settings UA default is empty
- migration 0056: existing cookie/password accounts keep their old UA as
ua_pending until re-login or browser cookie write-back switches cookie+UA
in one transaction; browser_provider.identity caches the browser identity
- cf_clearance/__cf_bm stripped on browser write-back (names kept only)
- browser sessions get per-site egress (same proxy as HTTP, or direct)
- site account page shows UA source; raw UA in tech info
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 03:17:13 +08:00
root and Claude Opus 5.5
ebd07c9230
feat(browser): fixed Windows identity and per-site egress in umt-cookies plugin (BR-4)
...
- browser:launching hook generates a Windows fingerprint once (camoufox-js,
os=windows), persists it to /root/.camofox/umt-identity.json and reuses it
on every launch; Firefox/Camoufox upgrades only bump UA/version fields
- Windows fontconfig with absolute font dir (upstream path was broken)
- GET /umt/identity (public UA/OS/version) and PUT /umt/sessions/:id/proxy
(per-context proxy; Firefox no longer uses container HTTP_PROXY env)
- adapter identity()/setEgress(), splitBrowserOnlyCookies for cf_clearance/__cf_bm
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-30 03:17:06 +08:00
root and Claude Fable 5.1
6663afce7e
docs(plan): BR-4 go-ahead
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 02:13:22 +08:00
root and Claude Fable 5.1
f3ea127f22
docs(plan): no ffmpeg for file previews (user decision)
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-30 01:54:46 +08:00