Estrella Pan
f3d42b8f91
chore(release): 准备 4.0.0-beta.5
4.0.0-beta.5
2026-10-21 10:36:07 +02:00
Xingyu (Estrella) Pan
19d1fe5795
Merge pull request #1142 from EstrellaXD/fix/4.0-beta5
...
fix: 4.0.0-beta.5 问题修复(#1138 #1082 #1072 #1113 等)
2026-10-21 10:36:04 +02:00
Estrella Pan
b592d6cb0d
fix(backend): 连载番剧只超出集数时照常标记并只通知一次,此类标记不随复扫清除 ( #1072 )
...
- offset_scanner: 去掉“建议偏移全为 0 且未完结不标记”的跳过;已标记番剧复扫无不匹配时,只清除建议偏移非 0 的标记,只超出集数的标记由用户忽略或应用(与 3.3 一致)
- 测试:连载番剧首扫标记并通知、复扫不再通知、TMDB 跟上后只超出集数的标记保留而季度不匹配的标记清除;复扫测试的旧标记改为真实不匹配
2026-10-21 10:29:25 +02:00
Estrella Pan
1dda39f2d5
fix: 审查修复——启动时一次性去掉旧搜索订阅关键词里的集号 ( #1138 )、回退到 none 的轮次不为路径未变的文件建记录、路径未变的完成记录在任务从下载器删除后清理 ( #1082 )
...
- migrations:Migration 新增 data_step,在同一 SAVEPOINT 内执行一次性数据修复;v28 按番剧 season_raw 改写搜索源 URL 的关键词参数,并同步番剧 rss_link
- revision_saga:选定策略未登记时,路径未变的文件不建操作记录也不通知,策略恢复后的那一轮再记录并通知
- rename_operation:prune_done 按本实例当前任务清理路径未变的过期 done 记录,任务列表为空时不清理
2026-10-21 09:53:47 +02:00
Estrella Pan
81cbc549b0
fix: 审查修复——连载番剧只超出集数不再每周误报、仍不匹配时更新原因、未完结剧集 TMDB 缓存 24 小时过期、无法滚动时不判触底、路径未变的完成通知按本轮实际策略发送、season_raw 只存季的写法、已归档番剧不列入待检查、复制令牌按真实结果提示
...
- offset_scanner: 建议偏移全为 0 且剧集未完结时不标记不通知;已标记仍不匹配时更新原因与建议偏移(不再通知)
- tmdb_parser: 除 Ended/Canceled 外的状态都按 24 小时过期
- renamer: 路径未变时的通知改由本轮解析出的策略是否为选定策略决定,不再读 NO_RENAME 设置
- tokenizer: season_raw 只记 S03 / Season 2;搜索端保留正则处理旧数据并补上 EPs 写法 (#1138 )
- bangumi: get_needs_review 排除已归档番剧
- webui: isAtBottom 移入 scroll-spy 并要求容器可滚动;搜索确认弹窗复制启用 legacy;新增 copyText,令牌复制失败时报错
- 删除只断言 SQL 语句形态的测试
2026-10-21 09:16:01 +02:00
OctoBored
111cdacf13
docs: point star history chart to a working data source
...
The star history chart in the README has been broken for a while due to GitHub's stargazer API restrictions, so visitors no longer see an up-to-date chart. Update the chart image and link to a working mirror at star-history.dera.page so the graph renders correctly again. The chart was originally added in e9367e3 .
2026-10-21 08:54:46 +02:00
Estrella Pan
6e6461febe
fix(webui): 剩余 carbon 图标改为 Lucide、设置页导航高亮与滚动位置对齐(参考 #1119)、HTTP 下复制令牌回退到兼容方式
2026-10-21 08:47:35 +02:00
Estrella Pan
23a0c2e968
fix(backend): 搜索订阅关键词去掉集号 ( #1138 )、不重命名时完成通知只发一次 ( #1082 )、偏移误报在复扫无偏移时自动清除并让连载番剧的 TMDB 缓存 24 小时过期 ( #1072 )、按番剧批量删除种子 ( #1113 )、/posters 改用严格的目录包含判断
2026-10-21 08:47:35 +02:00
Estrella Pan
cb9de84343
chore(release): 准备 4.0.0-beta.4
4.0.0-beta.4
2026-10-20 18:28:15 +02:00
Xingyu (Estrella) Pan
73fe20562e
Merge pull request #1141 from EstrellaXD/feat/4.0-perf
...
perf: 4.0 性能优化(日志回归、下载页虚拟滚动、SSE 增量、RSS 刷新、懒加载)
2026-10-20 18:28:02 +02:00
Estrella Pan
3a491348bf
fix: 审查修复——订阅改 URL 后已匹配种子仍追加 rss_link、SSE 帧后到达的旧 HTTP 种子列表丢弃、空日志推 log_clear
2026-10-20 18:20:41 +02:00
Estrella Pan
de43f80bb0
fix(webui): 审查修复——懒加载弹窗块失败时刷新一次、语言包加载失败仍挂载、语言切换按最后一次生效、Storybook 保留完整版 vue
2026-10-20 18:13:01 +02:00
Estrella Pan
34b6217041
fix(backend): 审查修复——孤儿种子每轮重新分析、TMDB 请求失败不缓存、SPA 路由 no-cache、清空日志后推全量、去重查询失败只标记单个订阅
2026-10-20 18:13:01 +02:00
Estrella Pan
fa78624bab
Merge branch 'feat/4.0-perf-webui' into feat/4.0-perf
2026-10-20 17:49:38 +02:00
Estrella Pan
fbc08949e4
perf(startup): MCP 与 webauthn 延迟导入,首个 /mcp 请求才构建子应用
...
- main 只导入 module.mcp.security;访问控制套在 /mcp 路由外层,被拒请求不加载 mcp 库
- _LazyMcpApp 在首个放行请求时构建子应用(加锁,并发只构建一次),会话管理器跑在 lifespan 持有的任务组里,关停时随之取消
- module.mcp 改为 PEP 562 __getattr__ 延迟导入 mcp / create_mcp_app
- passkey 在构造 WebAuthnService 时才导入 webauthn
启动 import main 0.49 s -> 0.30 s,冷启动到首个响应 0.56 s -> 0.39 s,RSS 148 MB -> 115 MB
2026-10-20 17:48:53 +02:00
Estrella Pan
3fcf487030
perf(sse): 下载器列表共享 5s 缓存且只推变化,日志改为首帧全量 + log_append 增量
...
- 所有 SSE 连接共用一份种子列表缓存(锁内单次查询,5s TTL);每个连接仅在
负载与上次推送不同时才发 downloader 帧
- log 帧只在连接建立、日志轮转(inode 变化)、截断或 mtime 回退时发送整段
尾部;其余发送新增的完整行 log_append,没有新增不发
- _read_file_tail/_read_log_tail 额外返回读到的末尾偏移,作为增量起点
2026-10-20 17:31:14 +02:00
Estrella Pan
09f43ef78e
perf(webui): 只打包 Vue 运行时、按需加载 zh-CN 语言包与布局弹窗,待审核光晕改为 opacity 动画
2026-10-20 17:30:20 +02:00
Estrella Pan
19e2e88171
perf(webui): SSE 客户端支持 log_append 增量日志,标签页隐藏 30 秒后关闭事件流
2026-10-20 17:18:03 +02:00
Estrella Pan
48e4ec94cb
perf(rss): 每轮每个订阅只拉取一次,聚合分析按 (url, rss_id) 跳过已知种子,偏好去重按候选加载
...
- 聚合订阅分析改在 RSSEngine.refresh_rss 内进行,复用按主机排队拉取的结果(保留 2 s 间隔,#1026),不再二次请求
- 分析前按 (url, rss_id) 过滤本订阅已记录的种子;其他订阅已知的种子仍参与匹配,以追加 rss_link(#1053)
- 每轮只加载一次番剧列表,生成新规则后才重新加载
- 偏好去重:批次中没有偏好候选时直接返回,只为有候选的番剧加载已下载版本
- 删除不再使用的 pull_rss 与 search_aggregate
2026-10-20 17:11:24 +02:00
Estrella Pan
76ec949bc1
perf(webui): 下载器页改为单个虚拟滚动表,分组作为可折叠的表头行
...
- 按保存路径分组的多个 ab-fold-panel + NDataTable 合并为一个 virtual-scroll + flex-height 的 NDataTable,
只渲染可见行;表格不再放在 NCollapseItem 里,SSE 推送的新数据能刷新行
- 分组以树形父行显示(名称与数量),复选框级联勾选整组,可折叠,默认展开
- 选中项改为 Set(shallowRef),成员判断 O(1);移除未使用的 toggleKey/toggleGroup
- 名称列用 CSS 省略号 + title,不再逐行测量宽度
20k 种子(prod 构建):就绪 15.1 s → 0.14 s,堆 3031 MB → 19 MB,KeepAlive 驱逐后重挂载不再崩溃
2026-10-20 17:01:46 +02:00
Estrella Pan
843a014928
perf(backend): 日志修复、gzip、静态缓存头、部分索引命中、TMDB 负缓存与 LRU、镜像预编译
...
- 日志:basicConfig 加 force=True,避免 mcp 先导入后日志文件为空
- GZipMiddleware(minimum_size=1000),SSE 默认排除
- SPA 依赖为 /assets/ 加 immutable,入口 HTML 加 no-cache
- rename_operation 活动过滤改为 NOT IN,命中 ux_rename_operation_active_target
- TMDB 缓存:否定与回退结果 6 小时 TTL,命中时 move_to_end
- Dockerfile 构建阶段预编译字节码
2026-10-20 16:54:54 +02:00
Estrella Pan
9780b5bccd
chore(release): 准备 4.0.0-beta.3
4.0.0-beta.3
2026-10-20 14:38:34 +02:00
Xingyu (Estrella) Pan
14f2fb511b
Merge pull request #1140 from EstrellaXD/feat/4.0-toolchain
...
chore(deps): 4.0 工具链升级(Python 3.14 / FastAPI 0.150 / mcp 2 / Vite 8 / Vue 生态大版本)
2026-10-20 14:38:19 +02:00
Estrella Pan
1de0d5de8e
fix(webui): 底部抽屉容器选择器改为后代匹配
...
.ab-bottom-sheet 不是 .n-drawer-container 的直接子元素,:has(> …) 从未命中:视口尺寸与遮罩模糊都没有生效
2026-10-20 14:32:04 +02:00
Estrella Pan
b6b3812657
fix(webui): 全屏底部抽屉的容器按视口尺寸铺满,并移除临时诊断
...
自定义 ::-webkit-scrollbar 使 WebKit 使用常规滚动条,固定容器的包含块扣掉 6px 滚动条宽度,100dvh 的全屏面板被顶出视口顶部
2026-10-20 14:25:56 +02:00
Estrella Pan
059164617b
test(e2e): 临时诊断移动端抽屉 -6px 偏移
2026-10-20 14:20:37 +02:00
Estrella Pan
d6c366de32
fix(webui): 底部抽屉打开时不再聚焦第一个输入框
...
NDrawer 默认把焦点给第一个可聚焦元素,编辑规则抽屉一打开就聚焦标题输入框(手机上会弹出键盘,键盘避让随之把面板上移)。改为关闭 auto-focus,入场后聚焦面板本身,与原 headlessui 行为一致。
2026-10-20 14:15:51 +02:00
Estrella Pan
38303f297c
fix(webui): 下载页进度与状态列恢复渲染,移动端规则编辑 e2e 等待抽屉入场
...
- downloader.vue 的 formatEta 里有局部变量 h,unimport 因此不再自动导入 vue 的 h(),构建产物中 h 未定义,进度与状态两列为空;局部变量改名为 hours
- naive-ui 抽屉从底部滑入,e2e 先等面板位置稳定再断言全屏尺寸
2026-10-20 14:03:11 +02:00
Estrella Pan
bfc7209491
fix(ci): setup-uv 固定到 v10.3.0,折叠面板补上 region 语义
...
- astral-sh/setup-uv 没有 v10 主版本标签,CI 无法解析 action
- ab-fold-panel 改用 NCollapse 后,标题按钮的父元素不再是整个面板,e2e 用 '..' 找不到面板内的字段。正文改为以标题命名的 region,按钮补上 aria-controls;e2e 改用 getByRole('region')
2026-10-20 13:50:27 +02:00
Estrella Pan
014358ff6a
fix: 修复 Codex 审查发现的两处回归
...
- Bangumi / BangumiUpdate 的 9 个可空字段恢复为必填(default=...),只传部分字段的更新与订阅请求重新返回 422,不再用占位值改写规则和保存路径
- ab-menu 补上 role=menu、打开时把焦点移到菜单、aria-activedescendant 指向高亮项,关闭后焦点回到触发器
2026-10-20 13:13:00 +02:00
Estrella Pan
124b156b7a
fix: 修复 4.0 工具链升级审查问题
...
- ab-plugin new 与示例插件的 requires-python 改为 >=3.14,与 SDK 0.6.0 一致
- 示例插件 ntfy-notifier / webhook-on-event 改用 httpx2
- openai / anthropic / google-genai 下限改为实际需要的大版本
- 插件 MCP 工具的 input_schema 无效时计入熔断
- 复制 RSS 链接在 HTTP 部署下回退到 execCommand(useClipboard legacy)
- CI 步骤名、PLAYWRIGHT_VERSION、README 徽章与 e2e 指南改为 Python 3.14 / Playwright 1.64.1
2026-10-20 12:12:58 +02:00
Estrella Pan
a7a3143683
Merge branch 'feat/4.0-toolchain-webui' into feat/4.0-toolchain
2026-10-20 11:49:15 +02:00
Estrella Pan
1bf799791c
docs: 补齐 4.0.0-beta.3 英日文破坏性变更说明与日文插件 SDK 文档(0.6.0 / httpx2 / Python 3.14)
2026-10-20 11:49:05 +02:00
Estrella Pan
6e8f2f0f35
refactor(webui): 图标换成 @lucide/vue,headlessui 换成 naive-ui,并改用 Vue 3.5 写法
...
- 30 个文件的 @icon-park/vue-next 图标换成 @lucide/vue;侧栏与移动导航的 RSS 图标
改用 Lucide Rss,删除 vue-inline-svg 与 public/images/RSS.svg
- ab-modal 用 NModal、ab-bottom-sheet 用 NDrawer、ab-menu 与 ab-status-bar 系统菜单
用 NDropdown、通知中心用 NPopover、ab-fold-panel 用 NCollapse;公开 props/emits/slots
不变,dialog 语义、aria-expanded、menuitem 角色与 Esc 关闭由组件补齐;删除 @headlessui/vue
- naive-ui 主题覆盖移到 src/style/naive-theme.ts(abNaiveTheme),新增 Dropdown/Collapse/
Popover 的 ab-* token;遮罩颜色统一为 --color-overlay
- withDefaults 改为响应式 props 解构;模板引用改用 useTemplateRef;ab-bottom-sheet、
llm-auth-dialog、ab-list 的 v-model 改用 defineModel;visualViewport 监听用
onWatcherCleanup 撤销;复制提示改用 useClipboard({ copiedDuring })
2026-10-20 11:45:48 +02:00
Estrella Pan
9b874acec0
chore(ci): 后端 CI 增加 ruff format 检查并登记 blame 忽略清单
2026-10-20 11:42:49 +02:00
Estrella Pan
e63b42af48
style(backend): 改用 ruff format 统一格式
2026-10-20 11:41:14 +02:00
Estrella Pan
73fbca985b
refactor(mcp): 升级 mcp 2.3,改用 MCPServer 与 Streamable HTTP(端点 /mcp)
...
- 内置工具与资源改为 AutoBangumiMCP(MCPServer 子类)上的 @mcp.tool() /
@mcp.resource(),参数 schema 由类型注解生成,工具名、描述与参数名不变;
结果仍是一段 JSON 文本,异常返回 is_error 结果
- 插件工具与资源在子类的 list / call / read 中追加与分发,熔断与超时逻辑
不变;mcp 2 不再校验参数,插件工具按 input_schema 用 jsonschema 校验,
不合法的参数不计入熔断
- 传输只保留 Streamable HTTP,以路由挂载在 /mcp(mount 会把 /mcp 重定向到
/mcp/),删除 /mcp/sse 与 /mcp/messages/;会话管理器在应用 lifespan 中运行;
关闭 DNS rebinding 防护,访问控制仍由 IP 白名单与令牌负责
- 更新 MCP 文档、e2e 用例与 4.0 更新日志的破坏性变更
2026-10-20 11:40:32 +02:00
Estrella Pan
5d8a02787a
chore(webui): ESLint 10 + antfu flat 配置取代 Prettier,husky 升级到 9
2026-10-20 11:12:07 +02:00
Estrella Pan
7013d476ac
chore(deps): 升级 FastAPI 0.150 / Starlette 1.9 / uvicorn 0.54,SSE 与前端托管改用 FastAPI 原生实现
...
- fastapi 0.150.0、starlette 1.9.0、uvicorn 0.54.0、python-multipart 0.0.32,
抬高 pyproject 下限;删除直接依赖 sse-starlette(mcp 仍间接依赖)
- events/search 两个 SSE 端点改用 fastapi.sse 的 EventSourceResponse +
ServerSentEvent(raw_data=...);搜索无关键词时返回空的 200 事件流
- uvicorn.run 设 timeout_graceful_shutdown=5:原生 SSE 没有关停监听,
常开的事件流不再拖住退出与在线更新重启
- mount_webui 改用 APIRouter.frontend 托管 dist,CSP 由路由依赖加在前端
文件上;未知 /api 路径返回 404,只有浏览器导航才回落 index.html;
去掉 Jinja2Templates 与三个 StaticFiles 挂载
- 插件路由合并后不再统计 router.routes(0.137 起为内部树结构)
2026-10-20 11:10:48 +02:00
Estrella Pan
13dc621ff7
chore(deps): 前端运行时升级到 vue-router 5 / pinia 4 / vueuse 15 / vue-i18n 11 / axios 1.20
2026-10-20 11:06:50 +02:00
Estrella Pan
2f1fa317d1
chore(deps): 前端构建与测试工具链升级到 Vite 8 / Vitest 5 / TS 6 / Storybook 10
...
- vite 8、@vitejs/plugin-vue 6、vitest 5、happy-dom 21、@vue/test-utils 2.5、
typescript ~6.0.3、vue-tsc 3.3、unocss 66.11、unplugin-auto-import 21、
unplugin-vue-components 32、sass-embedded 1.105、playwright 1.64.1、storybook 10.6
- vite.config:去掉 defineModel 开关;Sass 改用 @use;esbuild.drop 换成
rolldown 的 dropConsole;__dirname 换成 import.meta.dirname;两处 alias
改为 resolve.tsconfigPaths
- 删除 plugin-vue-jsx:三个 SFC 的 JSX 改写为 h()
- 删除 preset-attributify:模板里的属性式工具类全部改回 class
(含 space-y-*、text-*、line、i-carbon-* 等,不止 5 处 flex="~")
- 删除 vite-plugin-pwa:改为静态 manifest.webmanifest + 自毁 sw.js(4.1 删除)
- tsconfig:moduleResolution Bundler、去掉 baseUrl 与 JSX 配置,
app 的 types 只留 vitest/globals
- Storybook 10:addon-links + addon-docs,stories 改从 @storybook/vue3-vite 导入类型
- @intlify/unplugin-vue-i18n 0.11 -> 11.2.7(Vite 8 下旧版产物被 vite-json 再次解析而失败);
新版只产出 AST 文案,故打开 __INTLIFY_JIT_COMPILATION__,hasKey 识别 AST 叶子
2026-10-20 11:00:31 +02:00
Estrella Pan
ca7fcdf058
chore(deps): httpx 全面迁移到 httpx2,SOCKS5 改用原生代理,升级 LLM SDK 大版本
...
- 依赖 httpx[socks] 换为 httpx2[socks]>=2.15,移除 httpx-socks / python-socks 及其 mypy 覆盖
- backend/src、ab_sdk、e2e 与单元测试统一使用 httpx2(异常类与 httpx 不通用)
- request_url 与 LLM 客户端工厂合并为 proxy_url(),SOCKS5 走 httpx2 原生代理(主机名由代理解析)
- 保留 #1104 过期连接池替换:httpcore2 2.15.1 的 start_tls 失败路径仍会泄漏隧道
- 日志同时压低 httpx2 与 httpx(google-genai、mcp 仍依赖旧 httpx)
- openai 3.35.1 / anthropic 1.15.0 / google-genai 2.31.0;结构化解析改用 chat.completions.parse
- ab_sdk 升到 0.6.0,客户端类型改为 httpx2.AsyncClient,同步插件文档
2026-10-20 10:56:32 +02:00
Estrella Pan
2ea56c50c6
chore(deps): 升级 sqlmodel 0.0.48 / SQLAlchemy 2.1.5 / pydantic 2.14.1
...
- Field 位置参数改为 default=,Optional 字段补 default=None
- 测试中 Torrent(bangumi_id=) 改用别名 refer_id,字典解包补类型标注,移除不存在的 Bangumi(offset=)
- 依赖改为 sqlalchemy[aiosqlite],移除独立的 aiosqlite
2026-10-20 10:46:20 +02:00
Estrella Pan
0f2af080af
chore(deps): 后端工具链升级到 Python 3.14,路由统一鉴权并清理 black/urllib3/dict 垫片
2026-10-20 10:43:24 +02:00
Estrella Pan
02e0c3ea63
chore(deps): CI 运行时升级到 Node 24 / pnpm 12,并移除未用依赖
...
- Node 24、pnpm 12.14.0、pnpm/action-setup@v6,@types/node ^24
- .npmrc 的 public-hoist-pattern 迁入 pnpm-workspace.yaml,新增 allowBuilds
- docs 同步迁移 pnpm 12
- 删除 @vueuse/components、radash、generate-pwa-assets 脚本、失效的 coverage 配置、app AutoImport 的 vitest 预设与 Components dirs
2026-10-20 10:41:07 +02:00
Estrella Pan
bf607693ac
chore(release): 准备 4.0.0-beta.2
4.0.0-beta.2
2026-10-09 17:04:36 +02:00
Xingyu (Estrella) Pan
c0a670a213
Merge pull request #1136 from EstrellaXD/feat/4.0-plugin-market-ui
...
feat(webui): 插件市场页面与内置插件英文
2026-10-09 17:04:00 +02:00
Xingyu (Estrella) Pan
b7d82fb2a9
Merge pull request #1137 from EstrellaXD/fix/plugin-manual-pick-sha
...
fix(plugins): manual-pick 的 sha256 改为排除 web-src 后的 zip
plugins
2026-10-09 17:00:29 +02:00
Estrella Pan
065fed1a5c
fix(plugins): manual-pick 的 sha256 改为排除 web-src 后的 zip
...
PR 检查用的是 base 分支的 ab_sdk,那时 pack 还没有排除 web-src,
算出的 715b… 包含了前端源码。合并后构建得到 08caa4…。
2026-10-09 16:59:38 +02:00
Xingyu (Estrella) Pan
e7ac456a81
Merge pull request #1133 from EstrellaXD/feat/4.0-plugin-market
...
feat(plugins): 插件市场索引与签名发布流水线
2026-10-09 16:58:14 +02:00