Commit Graph
467 Commits
Author SHA1 Message Date
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude Fable 5.1 d403514adc Merge branch 'hc1'
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-30 20:39:03 +08:00
rootandClaude 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
rootandClaude Fable 5.1 3bf3e6074c Merge branch 'cf1'
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-30 20:22:08 +08:00
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude Fable 5.1 fd9df0a68d Merge branch 'fix9'
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-30 19:44:35 +08:00
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude Fable 5.1 afe30a2255 Merge branch 'md2'
Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-30 18:04:39 +08:00
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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
rootandClaude 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