Commit Graph
53 Commits
Author SHA1 Message Date
kairee 0b92e10317 feat(ui): implement dark/light theme switch 2026-11-01 23:29:14 +08:00
kairee 4a9c37f2f3 feat(telegram): candidate list/delete/clear commands
私聊新增 /candidate [页码](待决策列表)、/candi_del(标题按钮逐条删除,删后原地重建键盘、可翻页连续删)、/candi_clear(全部/待决策/取消)。重构 handle_callback 为前缀分派(cdel/cpage/cclr,保留 add/ign/blk/fav);repository 加 list_pending_candidates/delete_all_candidates;LibraryService 加 pending_candidates/delete_candidate/clear_candidates 并刷看板缓存。
2026-11-01 20:45:57 +08:00
kairee c6790f0ba1 feat(classify): zero title-only titles, penalize <10min, add discover.candidate_min_score
标题仅含 require_title 不再计分(必须咻咻满+任一正向词);时长 <10 分钟 -1(时长未知不扣);新增 discover.candidate_min_score(默认=notify.min_score)控制是否进候选池,只过标题关的不再入池。库内 796 条:仅过标题关的 8 条从 1/3 分降为 0/-1,其余不变。
2026-11-01 20:18:43 +08:00
kairee aa9aa7c589 feat(classify): gate loose re token, non-linear negatives, drop 纯享/转场
reaction 词表用 re|reaction|反应 但须与咻咻满或充电同现,兼容 reactio/reation 等拼写又避免通用词加分;负向改为每词 -2 且命中多条额外叠加(k*(k-1)),日期 -4;纯享(误伤纯享受)移出负向,转场移出正向。库内 796 条有效视频复测:线以下由 14 降至 8。
2026-11-01 19:18:20 +08:00
kairee 337e379514 feat(classify): super-linear positive weighting by hit count
正向改为按命中次数 n(require_title + reaction + charge + weak)做平方加权,使多信号同现的真 reaction 不被单个负向词打穿(1+1>2、1+1+1>5);标题不含 require_title 直接 0 分。库内 796 条有效视频复测:线以下误伤由 47 降至 14。
2026-11-01 19:08:59 +08:00
kairee 742c67a1c3 feat(classify): tighten scoring with reaction co-occurrence and date negatives
强正向 reaction 需标题同时含 require_title;移除听/看等宽泛词,新增弱正向组;charge 命中>=2 记+3、==1 记+1;负向补充录播/录像并新增标题带日期强负向;时长仅在已命中 reaction/charge 时加权;discover 关键词改为单个咻咻满、pages=3、window_days=7,notify.min_score=4;同步示例配置、project.md/README 与相关测试。
2026-11-01 19:00:48 +08:00
kairee 003e65086e fix(web): up list search matches up name only, not video titles 2026-11-01 17:57:34 +08:00
kairee 84ce1e41e8 feat(web): visit 204 response, up page header/sort, trim system page 2026-11-01 17:06:26 +08:00
kairee e3bd2e601b fix(web): always drain visit request body to keep keep-alive connections aligned 2026-11-01 15:41:47 +08:00
kairee 3c16caac1a feat(stats): buffer visits in memory and expose POST /api/visit + /api/stats 2026-11-01 15:34:53 +08:00
kairee cdd11823b9 feat(stats): add migration v7 visit table and client-ip helpers 2026-11-01 15:29:43 +08:00
kairee b0c53e8a2f fix(ingest): raise ref cap to 50 and clarify invalid bvid error 2026-11-01 15:05:17 +08:00
kairee 5d7521075a feat(web): show first-RE time on up page, drop decoupled folder badges 2026-11-01 14:41:32 +08:00
kairee 2ff3e7952b feat(web): up avatars, follower count, and dedupe views/avg secondary 2026-11-01 14:34:23 +08:00
kairee 6c4287b43a refactor(sync): drop favorite-folder tracking and deal 2026-11-01 13:59:10 +08:00
kairee 62abbd7ea1 feat(ingest): db-only library ingest and telegram manual ingest 2026-11-01 13:50:03 +08:00
kairee d2adb65e08 feat(ingest): parse video refs and fetch detail by bvid 2026-11-01 13:46:46 +08:00
kairee e903c49921 fix(up): hard timeout and progress for follower capture 2026-11-01 13:24:56 +08:00
kairee 9be7d1cab2 feat(web): dropdown sort and time filters with year support 2026-11-01 12:45:40 +08:00
kairee bc3bef0743 fix(analytics): shrink video efficiency and gate noisy boards by views 2026-11-01 12:25:27 +08:00
kairee e7034cfb84 feat(analytics): lower maturity window to 2 days and reword about page 2026-11-01 12:07:47 +08:00
kairee c0b0286395 feat(web): split video and up rankings and add about page 2026-11-01 11:33:15 +08:00
kairee 5a656d42a8 feat(web): add duration efficiency rankings and about payload 2026-11-01 11:21:42 +08:00
kairee 519fc39fca feat(up): capture follower snapshots at ingest and backfill history 2026-11-01 11:18:06 +08:00
kairee 4942d1d161 feat(db): add video pages and up follower snapshot schema 2026-11-01 11:14:36 +08:00
kairee 9fd277c05f feat(web): cache dashboard aggregations with version invalidation 2026-11-01 03:27:49 +08:00
kairee 6aefe9ce87 feat(web): require login only for candidates and system 2026-11-01 03:09:21 +08:00
kairee 55c40db047 fix(tools): resolve config path inside container 2026-11-01 02:58:56 +08:00
kairee 274eccba93 feat(web): add fan date range modes and delta column 2026-11-01 02:36:48 +08:00
kairee 998d0fd0c0 fix(tools): guard csv replace against newer fan records 2026-11-01 02:25:18 +08:00
kairee c4c9c0b038 feat(tools): replace xxm fan import with bilibili csv 2026-11-01 02:23:09 +08:00
kairee d8e9a7b0f0 feat(web): show cumulative fan range and limit recent records 2026-11-01 02:14:10 +08:00
kairee 52a8d90c47 feat(web): use history routing and preserve scroll on filter changes 2026-11-01 01:55:37 +08:00
kairee c2ef998720 feat(web): refresh palette, simplify ranking toolbar and drop export 2026-11-01 00:37:20 +08:00
kairee ff101803cd feat(tools): import 90-day fan history from public data source 2026-11-01 00:06:52 +08:00
kairee f9a5478800 fix(web): fix UP card layout and fan delta semantics 2026-11-01 00:06:43 +08:00
kairee 7fcd1db987 fix(web): count initial import from tracked videos 2026-10-31 23:54:56 +08:00
kairee 456e06f105 chore(web): finalize scroll behavior and preview assertions 2026-10-31 23:54:01 +08:00
kairee 257fbe009b fix(web): align trend ranges, next runs and preview task records 2026-10-31 23:46:49 +08:00
kairee 19572171b8 feat(web): add read-only dashboard server and query layer 2026-10-31 23:13:54 +08:00
kairee e7cae035e0 fix(tools): backfill fan counts in chronological order 2026-10-31 23:10:54 +08:00
kairee 94ee9aefd1 feat(tools): add deterministic preview database seeder 2026-10-31 23:05:43 +08:00
kairee 8ffac5103f feat(analytics): add heat, growth and interaction metrics 2026-10-31 23:03:20 +08:00
kairee 8a87ebfb7c refactor(favsort): send bilibili requests through httpx
Reuse a pooled httpx client for favsort GET and POST requests, share the raw-request-derived browser headers, and add folder-specific referers for ids, infos and sort. Add transport tests for header parity and anonymous-to-authenticated fallback.
2026-10-31 22:36:48 +08:00
kairee 5b22ed1c5d feat(http): use httpx with pooled connections and browser headers
Add httpx and route Bilibili and Telegram requests through pooled clients with keepalive and explicit timeouts. Align Bilibili headers with data/raw-request.txt: Chrome 155 UA, sec-ch-ua, space.bilibili.com origin, folder-specific referer, and priority header. Close replaced clients when credentials change. Add transport contract tests and live read-only validation for nav, folder sync, WBI search, and Telegram getUpdates.
2026-10-31 22:28:32 +08:00
kairee 71a0e8c1d6 fix(telegram): back off on transient polling failures
Give getUpdates a wider HTTP timeout than the long-poll window, log transient SSL/network disconnects as warnings, apply exponential backoff with recovery logging, and only escalate to error after five consecutive failures.
2026-10-31 22:01:05 +08:00
kairee 2d42d8ed55 fix(telegram): handle expired callback queries gracefully
Parse Telegram HTTP error bodies so the real description is logged, fall back to a normal message when answerCallbackQuery rejects an expired callback ID, and remove inline buttons after a successful action.
2026-10-31 21:59:04 +08:00
kairee e2e4dc3336 fix(telegram): dedupe candidates before sending
Deduplicate candidates by aid at the notifier boundary so duplicate queue entries cannot produce repeated message bodies and button rows. The discovery layer already deduped by aid; this adds defense in depth with a regression test.
2026-10-31 21:55:10 +08:00
kairee d971e718e9 feat(p3): add discovery, telegram notifications, and one-click favorites
Implement WBI video search with legacy fallback, classification scoring, candidate pool, permanent seen-aid dedupe, blacklist filtering, and batched Telegram notifications. Add write client for fav deal/sort, target-folder selection, insertion position calculation, read-back verification, fav_action locking, retry on failure, ignore and blacklist actions. Wire discovery, candidate cleanup, Telegram long polling, and new discover/candidates CLI commands into the scheduler. Add migration v3 for candidate duration and index stats.
2026-10-31 21:23:12 +08:00
kairee 6a21b5d905 fix: close data integrity and hot-reload review findings
Backfill same-day snapshots for newly added or restored videos, preserve successful fan snapshots on resume, persist incomplete state before forced re-runs, and split collection completion from backup completion so failed backups can retry without API calls. Reject missing data payloads instead of treating them as empty folders, guard against mass-unfav on suspicious empty remote folders, rebuild Bilibili clients when credentials change, recompute primary folder ownership from active relations with per-folder fav_time, preserve original titles for dropped invalid videos, poll config every 60 seconds, and fix favsort verify interval and mixed resource types.
2026-10-31 20:58:36 +08:00