Files
BiliNote/CHANGELOG.md
huangjianwu 63577aa1aa fix(ci): pin pnpm 9.15.0 in main.yml,修 v2.2.0 桌面端 Tauri 构建失败
v2.2.1 hotfix 只 pin 了 Docker 那两个 Dockerfile 里的 pnpm,但 .github/workflows/main.yml
(Tauri 桌面端 macOS + Windows 构建)的 'pnpm/action-setup@v4 with: version: latest' 没改,
于是 v2.2.1 tag 触发的桌面端 build 仍然挂在 'Install frontend dependencies' 步:

  ERR_UNKNOWN_BUILTIN_MODULE: No such built-in module: node:sqlite
  Node.js v20.20.2

修:main.yml 的 pnpm version 'latest' → '9.15.0',与 Docker 侧 + extension workflow
保持一致(lockfile 是 pnpm 9 生成的)。

release-extension.yml 已经是 pinned 9,无需改。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 14:49:33 +08:00

167 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Changelog
本项目所有重要变更记录于此。格式参考 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
## [2.2.2] - 2026-05-09
补 v2.2.1 漏掉的 Tauri 桌面端 build 修复。
### Fixed
- 桌面端 Tauri 构建失败v2.2.1 的 hotfix 只修了 Docker 镜像构建里的 pnpm 版本,`main.yml``pnpm/action-setup@v4 with: version: 'latest'` 没改,于是桌面端 build 仍然在 `Install frontend dependencies` 步报 `ERR_UNKNOWN_BUILTIN_MODULE: No such built-in module: node:sqlite`pnpm 11 要求 Node 22+,但 main.yml 用的 node 20。pin 到 `9.15.0`,与 Docker 侧一致。
## [2.2.1] - 2026-05-09
补 v2.2.0 ghcr.io 镜像构建失败。
### Fixed
- Docker 镜像构建失败:`v2.2.0` tag 触发的 ghcr.io 推送在 frontend-builder 第 5/7 步 `pnpm install --frozen-lockfile``ERR_UNKNOWN_BUILTIN_MODULE`。根因:`corepack prepare pnpm@latest` 拉到了 pnpm 11.0.9,而 pnpm 11 要求 Node 22+,跟我们的 `node:20-alpine` 不兼容。
- `Dockerfile.complete``BillNote_frontend/Dockerfile` 的 pnpm 版本 pin 到 `9.15.0`lockfile 由 pnpm 9 生成,匹配 Node 20
## [2.2.0] - 2026-05-09
主线:浏览器插件功能与 web 端 NoteForm 完整对齐;桌面客户端 UX 与错误恢复一波重炼。
### Added — 浏览器插件
- 笔记选项与 web 端 NoteForm 完整对齐:
- `style` 由自由文本改成 9 个预设下拉minimal / detailed / academic / tutorial / xiaohongshu / life_journal / task_oriented / business / meeting_minutes与 backend `prompt_builder.note_styles` 严格匹配(之前自由文本不命中 enum 等于没传——隐性 bug
- `format` 完整 4 个 checkboxtoc / link / screenshot / summary原来只有 screenshot/link
- `extras` 文本框:拼接到 prompt 末尾的 ad-hoc 提示
- 多模态视频理解:`video_understanding` 开关 + `video_interval`1-30 秒)+ `grid_size`[r,c]1-10抽帧拼图喂视觉模型提示需选视觉模型才生效
### Added — 桌面客户端
- **首启 4 步引导**`/onboarding`):后端连通性自检 → LLM 供应商 + 模型 → 转写引擎选择(默认推荐 Groq→ Cookie 同步说明。完成后 `localStorage('bilinote-onboarded')` 标记,纯 web 端不打扰
- **Sidecar 健康度面板**:右下角浮动状态点(绿/黄/红5s 轮询 `/sys_health`),点开抽屉看最近 200 行后端日志、一键重启后端(新增 Tauri command `restart_backend_sidecar`)、复制日志
- **启动期路径诊断**Tauri `setup` 中检测安装路径含非 ASCII / 含空格 / 父目录不可写时emit `backend-warning` 让前端顶端横幅显式告警,主动暴露 README 长期文字警告但无防御的"中文路径"等坑
### Changed
- Whisper 默认模型 size 从 `medium`~1.5GB)改为 `tiny`~75MB新装用户没主动设置时不再卡在首次大模型下载高精度可在「音频转写配置」页主动切
- 切到 `fast-whisper` / `mlx-whisper` 且当前 size 未下载时,「音频转写配置」页保存前 confirm 体积提示,并推荐改用在线引擎
- Tauri sidecar 启动逻辑抽出 `spawn_backend_sidecar()`child handle 存进 `SidecarHandle` state 以支持后续 restart
- sidecar stdout/stderr emit 时不再用 `format!("'{}'", ...)` 包引号,原文直传(前端 hook 兼容旧格式兜底剥引号)
### Fixed
- WhisperTranscriber 在半成品模型目录上死循环报 `Unable to open file 'model.bin'`:判定从「目录存在」改为「`model.bin` 落盘」半成品目录会被识别并重新下载PR `fix/backend-deploy-resilience`
- `/api/deploy_status` 在没装 torch 的部署上 `ModuleNotFoundError: No module named 'torch'` 500torch 改 try/except未装时返回 `{available: false, torch_installed: false}`transcriber 配置 + ffmpeg 也都裹 try单项失败不再打死整个监控页同上 PR
- `routers/config._check_whisper_model_exists` 同步改用 `model.bin` 判定,避免「已下载」状态在监控页误报
## [2.1.4] - 2026-05-07
CI 工程化修复,无运行时行为变化。
### Internal
- 桌面端 Tauri 构建矩阵去掉 Linux`ubuntu-22.04 / x86_64-unknown-linux-gnu`。Linux 桌面端构建持续 17m+且无对应分发渠道Linux 用户继续可以走 Docker 镜像 (`ghcr.io/jefferyhcool/bilinote`)
- commitlint workflow 去掉无效的 `firstParent` inputwagoid/commitlint-github-action@v6 不支持,被忽略并打 warn
- 规范 release merge commit 标题:`chore(release): vX.Y.Z`(合 master/ `chore(release): merge release/X.Y.Z back into develop`(回灌 develop让 commitlint 能正确识别。`RELEASING.md` §3 与 `CONTRIBUTING.md` §6.3 同步更新
## [2.1.3] - 2026-05-07
### Fixed
- DeepSeek 等非多模态供应商被 400 拒绝issue #282`UniversalGPT.create_messages``_build_merge_messages` 此前**无条件**把 content 拼成 OpenAI 多模态数组 `[{"type":"text",...}]`DeepSeek `deepseek-chat` 等模型不识别 `image_url` 变体直接报 `invalid_request_error``GPTFactory.from_config` 一律实例化 `UniversalGPT`,所以问题覆盖**所有**通过模型设置页接入的非多模态供应商,不止 DeepSeek。
- 现按 `video_img_urls` 是否非空切换 content 形态:有图保留多模态数组(视觉模型不退化),无图退回 string。合并阶段历来不带图统一改 string。
- 与同包内 `deepseek_gpt.py` / `openai_gpt.py` / `qwen_gpt.py` 的 message builder 行为对齐。
- 新增 `backend/tests/test_universal_gpt_content_format.py` 6 个 case 回归覆盖(含 `image_url` 字面 not-in JSON 断言)。
感谢 @voidborne-d 的修复(#345)。
## [2.1.2] - 2026-05-07
补 v2.1.1 上 ghcr.io 镜像构建失败的坑。
### Fixed
- Docker 镜像构建失败v2.1.1 tag 触发的 ghcr.io 推送在 frontend-builder 第 7/7 步 `pnpm run build` 挂掉vite `loadConfigFromBundledFile` 加载 `@tailwindcss/vite` plugin 时 1.5s 内异常退出)。
- `Dockerfile.complete``BillNote_frontend/Dockerfile``node:18-alpine``node:20-alpine`Tailwind v4 已不再支持 Node 18Vite 6 也推荐 Node 20+
- `Dockerfile.complete` 的 frontend 阶段同时复制 `pnpm-lock.yaml` 并改用 `--frozen-lockfile`,杜绝每次构建重解析 semver 拉到比本地新的 native dep
- `BillNote_frontend/pnpm-lock.yaml` 强制入库(之前一直未提交,导致 CI / 本地依赖图持续漂移)
- README 联系社区段补上微信群二维码(之前只写"年会恢复更新以后放出最新社区地址"
## [2.1.1] - 2026-05-07
工程化与文档收尾,无运行时行为变化。
### Added
- [`CONTRIBUTING.md`](./CONTRIBUTING.md) — 贡献指南,落地简化 Git Flowmaster + develop + 短生命周期分支)+ 提交规范 + 合并规范
- [`RELEASING.md`](./RELEASING.md) — 发版手册Release Manager 视角),含 release/* 流程 + 各商店人工上传步骤 + 自动发布所需 secrets
- `.github/ISSUE_TEMPLATE/{config,bug_report,feature_request}.yml` — 表单形式的 issue 模板,按工作区分类
- `.github/pull_request_template.md` — PR 模板,把 CONTRIBUTING §5.2 落成 checklist
- `.commitlintrc.json` + `.github/workflows/commitlint.yml` — commitlint CIPR + push develop/master 时校验,自定义 type 白名单,兼容中文 subject
- `.github/workflows/release-extension.yml``v*` tag push 时自动构建插件 .zip / .xpi / .crx 并挂到对应 GitHub Release商店自动发布以注释形式预留
### Changed
- 关于页二维码改为 `import @/assets/wechat.png`,不再依赖腾讯云 COS CDN更新只需替换文件 + 跑构建
- 群聊 QR 替换为最新版本(`doc/wechat.png` + `BillNote_frontend/src/assets/wechat.png`
### Removed
- 关于页 QQ 群联系方式(号 785367111已不再活跃维护
- 旧版 `.md` 格式 issue 模板(被新 yml 表单模板取代)
## [2.1.0] - 2026-05-07
本次发布的主线是**浏览器插件**和 **B 站字幕优先链路**。配合一些后端 / 前端体验修复。
### Added — 浏览器插件 (`BillNote_extension/`)
全新 Chrome / Edge / Firefox MV3 扩展。Vue 3 + Vite + UnoCSS骨架基于 vitesse-webext。
- **入口四件套**
- 工具栏 popup识别当前 tab → 一键提交,紧凑展示标题 + 封面 + 进度
- 视频页悬浮按钮:仅在支持平台注入,点击即触发任务
- 右键菜单"用 BiliNote 总结此视频":限定 4 个支持域名
- 侧边栏side panel详情视图 + 三模式切换
- **侧边栏三视图**
- Markdown渲染笔记复制 / 下载 .md
- 思维导图:基于 markmap-lib + markmap-view 的可缩放 mind map
- AI 问答:复用后端 RAG `/chat/index``/chat/status``/chat/ask` 三件套,自动索引 + 多轮历史
- **设置页五大块**(搬入 web 端全部配置能力,今后插件即配置中心)
- 通用:后端地址、连通性测试、默认供应商 / 模型 / 画质 / 截图 / 跳转 / 风格
- 模型供应商:完整 CRUD、启用切换、连接测试、模型增删
- 音频转写配置fast-whisper / mlx-whisper / Groq / 必剪 / 快手 切换、Whisper 模型大小、本地下载状态、触发下载
- 下载配置:每平台 cookie 显示、浏览器一键同步、手动粘贴
- 部署监控:后端 / FFmpeg / CUDA / Whisper 状态总览
- **浏览器 cookie 直通**`chrome.cookies.getAll` 一键把 `.bilibili.com` 等域 cookie 同步到后端 `/api/update_downloader_cookie`
- **B 站字幕浏览器抓取**:插件直接调 player API 拿字幕,借 host_permissions 自动带本地登录态 cookie绕过 CORS随提交以 `prefetched_transcript` 字段附给后端,后端跳过 `download_subtitles` + 音频转写,直接进 GPT 总结
### Added — 后端
- `BilibiliSubtitleFetcher``app/downloaders/bilibili_subtitle.py`):直接调 B 站 player API 拿字幕,作为非插件场景下 yt-dlp 路径的更可靠替代
- `VideoRequest.prefetched_transcript` 字段:客户端预取的字幕直接落到 `<task_id>_transcript.json`NoteGenerator cache-hit 自动复用
### Added — 前端 Web
- Zustand persist 迁移到 IndexedDB#318
### Changed
- 后端 CORS从静态 origin 列表改为 regex兼容 `chrome-extension://``moz-extension://``localhost``tauri.localhost`
- mlx-whisper 仓库 ID 改用 `MLX_MODEL_MAP``whisper-{size}-mlx` 命名(`large-v3-turbo` 例外),不再 hardcode 出 404
- BilibiliDownloader 从 `CookieConfigManager` 读取 cookie 并注入 yt-dlp cookiefile#333
- CLAUDE.md 补充 v2.0.0 引入的子系统说明RAG / Chat、可选 Nacos+RabbitMQ、i18n、cookie/transcriber 管理器)以及浏览器插件 workspace
### Fixed
- AILogo自定义供应商`logo='custom'`)走兜底渲染时不再误报 `console.error`,未匹配的名称降级为 warn
- SettingPage `Model.tsx` 双栏布局加 `min-h-0 overflow-y-auto`:供应商列表过长时无法滚动
- 供应商开关切换不能实时生效(#336
- `/get_all_providers` 中 301 行历史伪内置脏数据清理 + `add_provider` 加防御(强制 `type='custom'`、同名查重、错误向上抛)
- `/api/task_status` 拆 ResponseWrapper插件侧进度条因未拆 `data` 全灰;同时把 `R.error` 翻译为 `status:'FAILED'`,避免 UI 卡在轮询循环
- ESLint / ESM `__dirname` 在 production build 中未定义(多个 docker / vite 配置修复)
- GitHub Actions 构建错误 + apt-get 安装失败 + 删除仓库内 ffmpeg 二进制
- 渲染时剥掉 backend 注入的 `> 来源链接URL` 行(与 web 端 MarkdownViewer 一致),导出文件保留原行便于溯源
- 侧边栏布局收紧:完成后不再渲染 8 段进度条;标题压成单行;视图切换 + 复制 / 下载并入一行;历史任务从底部 details 改为顶栏下拉
### Internal
- 新增分支策略:`develop` / `release/x.y.z` / `master` git-flow
- 备份 backend SQLite DB 前 / 清理脏数据后均落盘存档