huangjianwu
8fbac5b2c5
chore(release): prepare v2.4.5
2026-08-25 13:59:27 +08:00
huangjianwu
a8ae70a239
test(transcriber): cover persisted Whisper model selection
2026-08-25 13:57:58 +08:00
huangjianwu
9eb0fc8658
test(downloader): cover yt-dlp retry budget
2026-08-25 13:57:58 +08:00
huangjianwu
5f51b34672
test(youtube): keep metadata tests runnable with retry options
2026-08-25 13:54:54 +08:00
huangjianwu
990bc69ca2
docs(readme): 推荐 KaCutAI 素材搜索工具
2026-08-04 16:18:00 +08:00
huangjianwu and Claude Opus 4.8
bebf2e8c61
fix(backend): 修复 DeepSeek 模型列表为空 & whisper 下载不走代理 ( #417 )
...
问题1 — DeepSeek 模型下拉为空:
provider 的 /models 调用失败时,get_model_list 吞掉异常返回 [],
get_all_models_by_id 再对 [] 取 .data 触发 AttributeError 又被吞,
最终接口返回 {"code":0,"msg":"success","data":[]},把失败伪装成空成功,
用户看不到任何原因。
- 捕获并回传真实错误,不再二次吞
- 新增 model_fallback.normalize_models 兼容 SyncPage/list/dict,绝不再 .data 崩
- 内置供应商提供已知模型兜底清单(DeepSeek→deepseek-chat/deepseek-reasoner,
Qwen→qwen-plus 等),动态拿不到时回退,保证下拉非空;动态可用时仍以动态为准
问题2 — whisper 模型下载不走代理(Docker 里代理没生效):
snapshot_download 既不读 UI 配的代理,HF_ENDPOINT 又固定 hf-mirror.com。
- ProxyConfigManager.apply_to_env() 把生效代理 export 到 HTTP(S)_PROXY/ALL_PROXY,
huggingface_hub 即可复用;在每次下载前与启动时应用(覆盖转写按需下载)
- 网络类下载报错翻译成可操作提示(配代理 / 改 HF_ENDPOINT / 检查容器外网)
- .env.example 补充 HF_ENDPOINT 与代理覆盖说明
新增 tests/test_model_fallback.py、tests/test_proxy_apply_env.py(14 用例)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-29 13:54:44 +08:00
huangjianwu
6d67e5a76a
Merge branch 'hotfix/2.4.4'
2026-06-23 11:46:41 +08:00
huangjianwu
6a43043874
Merge branch 'hotfix/2.4.4' into develop
2026-06-23 11:46:41 +08:00
huangjianwu
e21e329d42
chore(release): 2.4.4
2026-06-23 11:46:10 +08:00
huangjianwu and Claude Opus 4.8
55946b82ec
fix(deps): 升级 starlette 0.46.1→0.47.2 修复 CVE-2025-54121
...
starlette < 0.47.2 在解析 multipart 表单的大文件时,SpooledTemporaryFile
从内存溢写到磁盘的 rollover 是在事件循环线程内同步执行的,攻击者可借大文件
上传阻塞事件循环造成拒绝服务(GHSA-2c2j-9gv5-cj73)。0.47.2 把 rollover
写入移到线程池(UploadFile.write 命中 _will_roll 时走 run_in_threadpool)。
由于 FastAPI 0.115.12 的约束为 starlette<0.47.0,同步升级 FastAPI
0.115.12→0.116.2(约束放宽至 starlette<0.48.0/<0.49.0),与现有
pydantic 2.11.2 / anyio 4.9.0 / python-multipart 0.0.20 均兼容。
验证:pip check 无冲突;2MB multipart 上传走 rollover 路径正常;
docker 整套栈在新框架下 boot 健康(sys_health backend/db ok)。
Closes #411
Refs GHSA-2c2j-9gv5-cj73
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 11:45:28 +08:00
huangjianwu
f5bd0be29a
Merge branch 'hotfix/2.4.3' into develop
2026-06-23 10:52:58 +08:00
huangjianwu
5380f4c412
Merge branch 'hotfix/2.4.3'
2026-06-23 10:52:50 +08:00
huangjianwu
4ef3631712
chore(release): 2.4.3
2026-06-23 10:52:11 +08:00
huangjianwu and Claude Opus 4.8
4a87c5b93b
fix(transcriber): 下载失败时透传错误到前端并提示
...
issue #402 衍生问题:whisper 模型后台下载失败时,/transcriber_models_status
只回传 downloading/downloaded 两个布尔,failed 态被直接丢弃,于是前端表现为
「点了下载没反应、状态一直未下载、且无任何错误提示」。
后端:新增轻量模块 model_download_state 统一维护下载状态(downloading/done/
failed)与失败原因,config.py 的下载触发与状态查询共享同一份内存态;状态接口
新增 failed 字段,失败时附带 error(仓库 404、网络中断、本地路径缺 model.bin 等)。
前端:模型管理列表新增「下载失败」红色徽标 + 错误详情,按钮在失败后变为「重试」;
自定义模型项同样展示失败图标与原因;并对「本次新出现的失败」弹一次 toast 主动提示。
测试:新增 test_model_download_state 覆盖状态流转(downloading/done/failed、
失败原因透传、downloaded 覆盖 failed、重下清错、mlx key 隔离)。
已用 docker compose 启动整套栈验证:触发本地路径缺失与 HF 仓库 404 两种失败,
/transcriber_models_status 均正确回传 failed:true + error。
Refs #402
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 10:50:55 +08:00
huangjianwu and Claude Opus 4.8
3841719d5a
fix(transcriber): 修复 large-v3-turbo 因仓库 404 无法下载
...
Systran/faster-whisper-large-v3-turbo 已从 HuggingFace 下架(API 返回
401/404,仓库不存在)。用户点击下载后,后台 snapshot_download 立即抛错
被吞掉,_downloading 置为 failed 但状态接口只回传 downloading/downloaded
两个布尔,于是表现为:无进度转圈、状态一直「未下载」、前端无错误提示。
改用社区维护的 CT2 转换版 deepdml/faster-whisper-large-v3-turbo-ct2:
HF 直链可达(200,无重定向,保证缓存目录名与存在性检测一致),含
model.bin 等全部所需文件,与 faster-whisper 的 large-v3-turbo 等价。
附回归测试,断言 large-v3-turbo 解析到存活仓库而非已失效的 Systran 仓库。
Closes #402
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 10:50:55 +08:00
huangjianwu
2c2c2e9982
Merge branch 'hotfix/docker-nginx' into develop
2026-06-17 11:29:17 +08:00
huangjianwu
7baaefd76e
Merge branch 'hotfix/docker-nginx'
2026-06-17 11:29:02 +08:00
huangjianwu
3002e311ac
chore(release): 2.4.2
2026-06-17 11:17:52 +08:00
huangjianwu and Claude Opus 4.8
ad57bc5489
fix(docker): 修复 Docker 部署打开显示 nginx 欢迎页
...
nginx/default.conf 被 docker-compose(多容器)与 Dockerfile.complete(单镜像)
共用,但两种模式对 location / 的需求相反:多容器需反代独立的 frontend 容器,
单镜像需直接服务本地静态文件。此前共用一份配置,导致其中一种部署总会回退到
nginx 默认欢迎页(本次为 compose 入口 nginx 用了 root 但容器内无前端产物)。
拆分为两份配置,各司其职、互不干扰:
- nginx/default.conf:compose 版,location / 反代 http://frontend:80
- nginx/standalone.conf(新增):单镜像版,location / 服务 /usr/share/nginx/html,
/api、/static 代理到本地 127.0.0.1:8483
- Dockerfile.complete 改用 standalone.conf,移除不再需要的 sed 改写
已用 nginx -t 校验 standalone.conf 语法通过。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-17 11:17:52 +08:00
huangjianwu
fcf1da5c21
Merge branch 'release/2.4.1' into develop
2026-06-17 10:21:03 +08:00
huangjianwu
a7d8995f3a
Merge branch 'release/2.4.1'
2026-06-17 10:20:57 +08:00
huangjianwu
67486c4d66
chore(release): 2.4.1
2026-06-17 10:00:34 +08:00
huangjianwu and Claude Opus 4.8
f79dc612fb
fix(bilibili): 注入 dm_img 风控参数修复 wbi/playurl 412
...
B 站 wbi/playurl 网关新增 dm_img_list/dm_img_str/dm_cover_img_str/
dm_img_inter + web_location 风控校验,缺失即返回 HTTP 412。对于网页不内嵌
playinfo、必须走 API 的视频(如 BV1X9L16oEgB),yt-dlp(含最新版)尚未适配,
导致下载失败,且刷新 cookie 无效。
通过猴补丁在 BilibiliBaseIE._download_playinfo 的 wbi 签名前注入哑值 dm_img
参数(取值形态对齐 yt-dlp 自身在 arc/search 端点的用法),即可恢复 200。
已验证补丁对固定版 2025.03.31 与最新 2026.06.09 签名一致、向前兼容;新增 4 个单元测试。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-17 09:55:54 +08:00
huangjianwu
71c931be55
Merge branch 'master' into develop
2026-06-07 02:09:05 +08:00
huangjianwu and Claude Opus 4.8
f5bfb43619
docs(readme): 群二维码改为关注公众号回复「交流群」获取
...
将 README 社区区块中 5 个会过期的微信群二维码,替换为公众号二维码,
关注后回复「交流群」获取最新群码,避免群码失效。与关于页保持一致。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 02:09:03 +08:00
huangjianwu
24b4d4c57c
Merge branch 'release/2.4.0' into develop
2026-06-07 02:05:37 +08:00
huangjianwu
ddaa0eef92
Merge branch 'release/2.4.0'
2026-06-07 02:05:37 +08:00
huangjianwu and Claude Opus 4.8
e41a3e27eb
chore(release): 2.4.0
...
- 版本号 2.3.4 → 2.4.0(tauri.conf.json / README)
- CHANGELOG 补充 2.4.0、回填 2.3.4
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 02:05:30 +08:00
huangjianwu
fd18aa2955
Merge branch 'pr-383' into develop
2026-06-07 02:03:40 +08:00
huangjianwu
0a93911f3e
Merge branch 'docs/gpu-deploy-notes' into develop
2026-06-07 02:03:40 +08:00
huangjianwu
d0760bcbbc
Merge branch 'feat/configurable-whisper-models' into develop
2026-06-07 02:03:40 +08:00
huangjianwu
2fc558e00a
Merge branch 'master' into develop
2026-06-07 02:01:09 +08:00
huangjianwu and Claude Opus 4.8
a83642e602
feat(about): 群二维码改为扫描公众号回复「交流群」获取
...
关于页社区区块由直接展示会过期的微信群二维码,改为展示公众号二维码,
引导用户关注公众号后回复「交流群」获取最新群二维码,避免群码过期失效。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 02:00:56 +08:00
huangjianwu
9bc3b2960b
Merge branch 'master' into develop
2026-05-27 02:52:11 +08:00
huangjianwu
095d772c7d
Merge branch 'release/2.3.4'
2026-05-27 02:51:43 +08:00
huangjianwu and Claude Opus 4.7
2e3fda7df4
feat: 新增 BiliNote AI笔记系统一对一搭建服务二维码(README + 关于页),bump 版本至 2.3.4
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-27 02:51:15 +08:00
huangjianwu and Claude Opus 4.7
64a0400792
docs(readme): 补全 GPU/CUDA 部署说明
...
原 CUDA 段落只有一行链接。补上实操步骤与常见坑:
- 宿主机前提:NVIDIA 驱动 + NVIDIA Container Toolkit + --gpus all 验证命令
- 切换:先 docker-compose down(两套 compose 容器名相同)再 -f docker-compose.gpu.yml up --build -d
- 数据不丢(两套 compose 都绑挂 ./backend);首次构建大而慢
- 只有本地 Faster Whisper 吃 GPU(在线引擎无关);device 自动检测无需配置
- 确认走 GPU 的方法 + 没走 GPU 的排查清单 + 国内镜像 build-arg 提示
另:把 compose 块里 GPU 那行 up -d 改成 up --build -d(首次需构建)。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-22 21:51:47 +08:00
huangjianwu and Claude Opus 4.7
58d992f28f
feat(transcriber): 可配置 whisper 模型 + 名称映射(自定义 HF repo / 本地路径)
...
此前 fast-whisper 把「size → Systran/faster-whisper-{size}」的约定隐式散落在
加载/下载/检测三处,用户想用命名不符该约定的模型(社区微调版、或自己下到本地
的模型)接不上。本功能把映射显式化 + 可配置(对齐已有的 MLX_MODEL_MAP 模式)。
后端:
- 新增 app/transcriber/whisper_models.py 注册表:内置映射 + 用户自定义
(config/whisper_models.json 持久化,Docker 下随 config 卷保留);resolve
优先级 自定义 > 内置 > 直通(含 / 的 repo_id / 已存在本地目录)。
- whisper.py / config.py 的加载、下载、完整性检测统一走 resolve;HF cache 目录从
任意 repo_id 推导(models--{org}--{name})不再写死 Systran;本地路径跳过下载,
_purge_cache 绝不删用户本地模型。
- 新增 /whisper_models 增删查 API;/transcriber_config 返回内置+自定义列表;
下载校验放开到「已登记/可解析」的模型。
前端:transcriber.tsx 新增「自定义模型」卡片(增删 + 下载状态),模型下拉自动含自定义。
Docker:自定义 HF 模型下到 /app/backend/models(v2.3.3 models 卷已持久化);本地模型
走挂载目录 + 配置路径,UI 已提示挂载。
测试:tests/test_whisper_models.py 13 个单测全过;并在 v2.3.3 镜像真实后端环境做了
import 链 + resolve + 真实模型检测的集成冒烟,均通过。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-22 15:09:06 +08:00
huangjianwu
db556b8991
Merge branch 'release/2.3.3'
...
v2.3.3:预构建镜像持久化数据库/笔记,修升级丢配置与历史。
2026-05-22 14:07:00 +08:00
huangjianwu
717df2af7b
Merge branch 'release/2.3.3' into develop
...
回合并 v2.3.3 版本号。
2026-05-22 14:07:00 +08:00
huangjianwu and Claude Opus 4.7
b431db545a
docs: v2.3.3 CHANGELOG + README + tauri 版本
...
Docker 镜像数据持久化修复版本。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-22 14:07:00 +08:00
huangjianwu
25face4b67
Merge branch 'fix/docker-data-persistence' into develop
...
v2.3.3:预构建镜像持久化数据库/笔记,修升级丢配置与历史。
2026-05-22 14:06:24 +08:00
huangjianwu and Claude Opus 4.7
edfd6e4765
fix(docker): 预构建镜像持久化数据库/笔记,修升级丢配置与历史
...
README 的 docker run 只挂了 -v …:/app/backend/data(仅媒体缓存),但
SQLite 库在 /app/backend/bili_note.db、笔记在 /app/backend/note_results
都不在该卷下 → 用户删容器重建(如 docker pull 升级镜像)会丢失 LLM
供应商配置和全部笔记历史。
- Dockerfile.complete:DATABASE_URL 重定向到 /app/backend/data/bili_note.db、
NOTE_OUTPUT_DIR 改到 data/note_results,并预建 /app/backend/data 目录;
两条 supervisord environment 行同步(兜底默认值 + %(ENV_*)s 透传)。
- README:docker run 改挂 data(库+笔记)/ config(供应商·Cookie·转写配置)/
static(截图)/ models(模型缓存,可选)四个数据卷,并警告不要挂整个
/app/backend(命名卷会固化镜像内代码,导致 docker pull 升级不生效)。
- docker-build.yml:同步发布说明里 echo 的 run 命令。
截图仍留在 /app/backend/static(static_dir 硬编码服务,不能重定向),单独挂卷。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-22 13:30:42 +08:00
huangjianwu
b53cafda5a
Merge branch 'release/2.3.2' into develop
...
回合并 v2.3.2 版本号。
2026-05-22 11:41:17 +08:00
huangjianwu
adda5fd240
Merge branch 'release/2.3.2'
...
v2.3.2:修后端启动崩溃(ctranslate2 4.6.0) + whisper 模型路径 + 桌面端版本号。
2026-05-22 11:41:04 +08:00
huangjianwu and Claude Opus 4.7
3e28f1fe38
docs: v2.3.2 CHANGELOG + README + tauri 版本
...
docker 启动崩溃 / whisper 模型路径 / 桌面端版本号 修复版本。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-22 11:40:55 +08:00
huangjianwu
bffa285cd0
Merge branch 'fix/docker-startup-and-qr' into develop
...
v2.3.2 修复集:
- ctranslate2 4.5.0→4.6.0 修后端启动崩溃(可执行栈 / glibc 2.41)
- whisper 模型下载/加载统一 HF cache 布局
- 桌面端构建版本号从 tag 注入(修产物恒为 2.0.0)
2026-05-22 11:40:21 +08:00
huangjianwu and Claude Opus 4.7
b740e70068
fix(desktop): 构建时从 tag 注入版本号,修产物版本恒为 2.0.0
...
桌面端构建产物(.dmg/.msi 文件名 + app 内部版本)一直是 2.0.0:
Tauri 取 tauri.conf.json 的静态 version 字段作为产物版本,而 Release
工作流只把 tag 名用作 Release 标题,没同步到 conf → 产物版本与 Release
版本错位。
在 pnpm tauri build 前新增 Sync version 步骤,从 github.ref_name(形如
v2.3.2,去掉前缀 v)注入版本到 tauri.conf.json。以后每次 tag 发版自动
对齐;workflow_dispatch 手动构建无 tag 时跳过,保留静态值不破坏。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-22 11:40:04 +08:00
huangjianwu and Claude Opus 4.7
261c95cf12
fix(transcriber): whisper 模型下载/加载统一走 HF cache 布局
...
此前用 modelscope 下到自定义目录 whisper-{size}/ 再把该路径传给
WhisperModel。但 faster-whisper 1.1.1 只要 path 含 '/' 就当成 HF
repo_id 处理,没有「本地目录直接返回」分支 → 在线请求失败后 fallback
local_files_only,又因 modelscope 布局命不中 HF cache → LocalEntryNotFound,
误导用户以为是「离线模式」。
改为下载与加载路径对齐:
- 下载:huggingface_hub.snapshot_download(cache_dir=model_dir),落到 HF
cache 布局 models--Systran--faster-whisper-{size}/snapshots/<hash>/
- 加载:WhisperModel(model_size_or_path=size, download_root=model_dir),
让 faster-whisper 自己映射到 Systran/faster-whisper-* 并命中同一 cache
- 完整性检测 / 损坏自愈(_purge_cache) 同步按 HF cache 布局,并兼容老
modelscope 目录(向后兼容已下载的老用户)
HF_ENDPOINT 已在 Dockerfile 指向 hf-mirror.com,国内可用。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-22 11:27:03 +08:00
huangjianwu and Claude Opus 4.7
1cc7f38e14
fix(backend): 升级 ctranslate2 4.5.0→4.6.0 修复后端启动崩溃
...
Docker 容器反复重启,启动即报:
ImportError: libctranslate2-*.so.4.5.0: cannot enable executable
stack as shared object requires: Invalid argument
根因:ctranslate2 4.5.0 预编译 wheel 把共享库标记为「需要可执行栈」,
新内核 / glibc 2.41+ 加载时拒绝并返回 EINVAL。faster-whisper 在
whisper.py 顶层 import,import 失败直接拖垮整个后端启动 → 重启死循环。
ctranslate2 4.6.0 加入 noexecstack 链接标志(OpenNMT/CTranslate2 #1852、
#1861)从 wheel 层根治。faster-whisper 1.1.1 依赖 ctranslate2<5,>=4.0,
4.6.0 兼容;同时覆盖 web / GPU / 桌面 三条构建链。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-22 11:26:49 +08:00
huangjianwu
7fffd6873b
Merge branch 'release/2.3.1' into develop
...
回合并 v2.3.1 版本号(CHANGELOG + README)。
2026-05-22 10:51:49 +08:00
huangjianwu
7b927db363
Merge branch 'release/2.3.1'
...
v2.3.1:更新微信交流群二维码(群 1-5)。
2026-05-22 10:51:39 +08:00
huangjianwu and Claude Opus 4.7
c42ceaaa32
docs: v2.3.1 CHANGELOG + README 版本
...
二维码热修补丁版本。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-22 10:51:30 +08:00
huangjianwu
177ee4ba3a
Merge branch 'fix/docker-startup-and-qr' into develop
...
更新微信交流群二维码(群 1-5,旧码即将失效)。
同步 master 上的二维码热修(README 二维码区块 + 5 张入群图)到 develop。
2026-05-22 10:51:05 +08:00
huangjianwu and Claude Opus 4.7
aae17abf9a
docs: 更新微信交流群二维码(群 1-5,有效期至 5/29)
...
旧二维码即将失效,替换 README 中 5 个交流群的入群二维码。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-22 10:42:12 +08:00
huangjianwu and Claude Opus 4.7
33d44e32d2
docs: 突出 BiliNote Pro 在线版 + 更新微信交流群二维码
...
- README 顶部新增 BiliNote Pro 在线版推广区块(www.bilinote.app),
项目简介后加引导提示,「在线使用」章节改为「在线使用(推荐)」
- 微信交流群二维码更新为 5 个群,doc/wechat-group-1~5.png
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-14 21:45:34 +08:00
huangjianwu and Claude Opus 4.7
56e075253a
docs: v2.3.0 CHANGELOG + README 版本
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-14 19:05:46 +08:00
huangjianwu and Claude Opus 4.7
f1b091b846
chore(deploy): docker 镜像源/restart 策略 + .env 修正 + 文档
...
- 所有 Dockerfile 加 BASE_REGISTRY build-arg,国内拉不到 docker.io
时可换 daocloud 等镜像源;compose 透传该 arg
- docker-compose: restart 从 on-failure:3 改 unless-stopped(避免短暂
崩溃后永久打死);gpu compose 补齐 healthcheck/restart/mem_limit
- Dockerfile.complete: supervisord 用 %(ENV_*)s 透传环境变量给 backend
子进程(之前只白名单 2 个,docker run -e 配的变量后端看不到)
- .env.example: 修正 VITE_API_BASE_URL 端口(8000→8483)、
WHISPER_MODEL_SIZE medium→tiny(首次启动不被大模型下载卡住)、
补 Docker 部署说明注释
- README: 新增 Docker 部署常见问题 FAQ(镜像源/restart/数据持久化等)
- CLAUDE.md: 勘误(移除不存在的 messaging/i18n/worker_registry 描述,
修正 events 路径),补 pytest/typecheck 命令
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-14 19:01:55 +08:00
huangjianwu and Claude Opus 4.7
37f7ee6e15
feat(desktop): 后端健康监控韧性 + onboarding 修复 + 全局代理 UI
...
- useCheckBackend 重写:60s 总超时取代 while(true) 死轮询,订阅 Tauri
backend-ready/terminated/startup-timeout 事件,裸 fetch 探测避免
启动期 toast 叠堆
- Tauri lib.rs:spawn 后 HTTP 探针轮询 /api/sys_check 拿 200 才算就绪
(之前 TCP connect 会被孤儿进程误判);RunEvent::Exit 钩子退出前
kill sidecar,修孤儿进程占端口;restart 前发 backend-restarting
让前端忽略主动 kill 引发的 terminated
- BackendInitDialog:失败态展示原因 + 最近 stderr + 重启/复制日志按钮
- StartupBanner:收到 restarted/ready 自动清「已退出」横幅
- BackendHealthIndicator:修 /api/api/sys_health 双前缀 404
- Onboarding:step1 后端连通改自动重试 + 事件触发 + 手动按钮;step2
撞预置供应商名时改为更新已存在供应商;errText 统一错误文案
- 全局代理 UI:下载配置页新增代理卡片(services/proxy.ts + ProxyConfig)
- request.ts 加 suppressToast 配置位,预期失败不弹全局红 toast
- NoteForm/taskStore:捕获就绪门禁错误,引导去音频转写配置页下载
- providerCard:整行可点切换(之前只有 icon 区域响应)
- Monitor 页 Whisper 卡显示模型本地下载状态
- tauri/api 升级对齐 2.11,修 vite build 版本不匹配
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-14 19:01:37 +08:00
huangjianwu and Claude Opus 4.7
41f17592c2
fix(backend): 部署韧性——模型自愈/就绪门禁/全局代理/启动诊断
...
- whisper: model.bin 截断/损坏时删目录重下重试一次,修「Unable to
open file model.bin」死循环;mlx 同样按 config.json 判完整性
- /generate_note 加就绪门禁:本地转写引擎模型没下好直接拦截,返回
reason=transcriber_model_not_ready,不让任务静默卡在首次下载
- 全局代理:新增 ProxyConfigManager(JSON 配置 + HTTP_PROXY env 兜底)
+ build_openai_client,统一注入代理到 LLM/Groq 客户端;yt-dlp 与
youtube-transcript-api 也走代理
- build_openai_client 校验 api_key 非空,空 key 给「xxx 的 API Key
未配置」而不是天书般的 Illegal header value b'Bearer '
- universal_gpt: 模型拒绝自定义 temperature(o1/o3/gpt-5 系列)时
就地去掉参数重试,不消耗重试预算
- connect_test 改用真实 chat completion 而非 /v1/models 探测
- main.py: lifespan 拆 [startup 1/5..5/5] 分段日志 + 异常清晰定位
- /sys_health 重构为结构化返回 {backend,ffmpeg,db,whisper_model}
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-14 19:01:14 +08:00
huangjianwu
de630dadb3
chore(release): merge hotfix/tauri-api-dep into develop
2026-05-09 14:53:18 +08:00
huangjianwu
7b5e6099e8
chore(release): v2.2.3
...
补 P1/P2 用了 @tauri-apps/api 但没声明为直接依赖导致的 vite build CI 失败。
2026-05-09 14:53:01 +08:00
huangjianwu and Claude Opus 4.7
bb9a70eee2
fix(frontend): @tauri-apps/api 提升为直接依赖,修 vite build CI 失败
...
v2.2.0 加的 P1/P2 桌面端组件(StartupBanner / useBackendEvents)用了
'await import(\"@tauri-apps/api/event\")' 与 '@tauri-apps/api/core',但
@tauri-apps/api 只是 @tauri-apps/plugin-shell 的 transitive,没在
BillNote_frontend/package.json 直接声明。
本地开发能跑(pnpm 节点解析容忍 transitive),但 vite 6 的 production
rollup 静态分析时报:
Rollup failed to resolve import "@tauri-apps/api/event"
之前我只跑了 typecheck 没跑 build,所以这个问题先在 v2.2.0 / v2.2.1 / v2.2.2
的 CI 上才暴露出来。本地 DOCKER_BUILD=1 pnpm run build 已复现并修复验证。
修:BillNote_frontend/package.json 把 '@tauri-apps/api' 加为直接依赖
(^2.10.1,与 lockfile 中已存在的 transitive 版本对齐),lockfile 同步更新。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 14:52:56 +08:00
huangjianwu
e9d4740cc7
chore(release): merge hotfix/desktop-pnpm-version into develop
2026-05-09 14:49:53 +08:00
huangjianwu
c5900a9026
chore(release): v2.2.2
...
补 v2.2.1 漏掉的桌面端 Tauri 构建 pnpm 版本 pin。
2026-05-09 14:49:39 +08:00
huangjianwu and Claude Opus 4.7
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
huangjianwu
ec33ae35ed
chore(release): merge hotfix/docker-pnpm-version into develop
2026-05-09 14:47:25 +08:00
huangjianwu
2e69d1179b
chore(release): v2.2.1
...
补 v2.2.0 ghcr.io 镜像构建失败(pnpm 版本不兼容 Node 20)。
2026-05-09 14:47:11 +08:00
huangjianwu and Claude Opus 4.7
7e5be46cda
fix(docker): pin pnpm 到 9.15.0,修复 v2.2.0 ghcr.io 镜像构建失败
...
v2.2.0 tag 触发的 ghcr.io 推送挂在 frontend-builder 第 5/7 步
'pnpm install --frozen-lockfile',错误:
code: 'ERR_UNKNOWN_BUILTIN_MODULE'
Node.js v20.20.2
根因:'corepack prepare pnpm@latest' 拉到 pnpm 11.0.9,pnpm 11+ 要求 Node 22+,
跟我们 node:20-alpine 不兼容。lockfile 本身是 lockfileVersion '9.0' 由 pnpm 9
生成,理应跟 pnpm 9 配。
修:Dockerfile.complete + BillNote_frontend/Dockerfile 都 pin 到 pnpm@9.15 .0;
不再用 @latest,避免上游再次升级悄悄破坏 CI。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 14:47:06 +08:00
huangjianwu
0742387235
chore(release): merge release/2.2.0 back into develop
2026-05-09 14:43:48 +08:00
huangjianwu
604cdefa15
chore(release): v2.2.0
...
主线:浏览器插件功能与 web 端 NoteForm 完整对齐;桌面客户端 UX 与错误恢复一波重炼。
详见 CHANGELOG.md。
2026-05-09 14:43:38 +08:00
huangjianwu and Claude Opus 4.7
ff91f74bef
docs: v2.2.0 CHANGELOG + README 版本
...
主线:浏览器插件功能与 web 端 NoteForm 完整对齐;桌面客户端 UX 与错误恢复一波重炼。
详见 CHANGELOG.md。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 14:43:25 +08:00
huangjianwu
9bbae2c0c4
fix(backend): 把 deploy-resilience 合入 release/2.2.0
...
P0 修:whisper 半成品目录死循环 + /deploy_status 硬依赖 torch。
原 PR fix/backend-deploy-resilience 未走 develop,直接随本次发版上 master,
回灌时 develop 也拿到。
2026-05-09 14:42:11 +08:00
huangjianwu and Claude Opus 4.7
721bda5280
feat(transcriber): 默认 size 改 tiny + 切本地引擎前 confirm 模型下载
...
桌面端用户首次跑视频时挂在 fast-whisper 模型下载(默认 medium ~1.5GB),
两处改动:
1. backend/app/services/transcriber_config_manager.py:
默认 whisper_model_size 从 'medium' (~1.5GB) → 'tiny' (~75MB)。
新装用户没主动设置时不再被首次下载卡住;想要更高精度的用户去配置页主动切。
2. BillNote_frontend/src/pages/SettingPage/transcriber.tsx:
handleSave 在保存前判断:选了 fast-whisper / mlx-whisper 且当前 size 在
modelStatuses 里既未下载也不在下载中 → window.confirm 弹一个体积提示,
推荐改用 Groq / 必剪 / 快手 等在线引擎;用户取消则不保存。
不改业务逻辑;零回归风险(已有用户 transcriber.json 里写了什么就还是什么)。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 14:32:41 +08:00
huangjianwu and Claude Opus 4.7
a928e0e38f
feat(desktop): 桌面端首启 4 步引导
...
桌面端用户安装后空白进 web 主页面,提示填模型但不知道从哪填、转写引擎从哪选、
为什么 fast-whisper 在下东西。新增首启 onboarding wizard,把四件事拉成一条线:
1. 后端连通性自检(启动后调 /api/get_all_providers,OK 才能进下一步)
2. LLM 供应商 + 模型:填 OpenAI 兼容 base_url + key + model_name,调
/add_provider 创建并 addModel 默认 model,附带 testConnection
3. 转写引擎:四选一,**默认推荐 Groq**(在线、免下载本地模型);
选 fast-whisper 时显式提示"将下载模型"
4. Cookie 同步说明:桌面端无 chrome.cookies API,引导手动配;并指向插件版
实现:
- 新页 src/pages/Onboarding/index.tsx,单文件 stateful wizard
- App.tsx 加 /onboarding 路由 + OnboardingGuard 路由守卫:
· 仅 Tauri 桌面端(__TAURI_INTERNALS__)拦截,纯 web 端透传,不打扰
· localStorage('bilinote-onboarded') 不为 '1' 时强制跳 /onboarding
- 完成第 4 步 markOnboarded() 写 localStorage 后 navigate('/')
回归风险:纯 web 用户无感知;旧桌面端用户的 localStorage 没这个 key,
首次升级到含此 PR 的版本时会跳一次 onboarding(建议在升级 release notes 里
说明,避免老用户疑惑)。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 14:30:05 +08:00
huangjianwu and Claude Opus 4.7
1329390f98
feat(desktop): Sidecar 健康度面板 + 重启后端能力
...
P1 已经把 backend-warning / backend-terminated 横幅做出来了;P2 把
lib.rs 那条 stdout/stderr/terminated 信息流真正落到一个常驻 UI 上:
- 右下角浮动状态点(绿/黄/红),轮询 /api/sys_health 决定颜色
- 点开抽屉看最近 200 行日志(ring buffer),含「重启后端」「复制日志」按钮
Rust:
- src-tauri/src/lib.rs:把 sidecar 启动抽出 spawn_backend_sidecar(),
CommandChild 存进 SidecarHandle(Mutex<Option<CommandChild>>) 这个 state
- 新增 #[tauri::command] restart_backend_sidecar:kill 旧 child + 重新 spawn +
emit 'backend-restarted' 给前端
- 监听任务 stdout/stderr emit 时不再用 format!("'{}'", ...) 包引号,原文直传;
前端 hook 同时兼容旧形式(兜底剥引号)
前端:
- components/BackendHealth/useBackendEvents.ts:listen 四个事件 +
ring buffer (MAX 200 行) + invoke restart + clipboard 复制日志
- BackendHealthIndicator.tsx:右下角浮动状态点,5s 轮询 /api/sys_health;
连续 3 次失败或 backend-terminated 触发 → 红
- BackendLogPanel.tsx:右侧抽屉,深色 monospace 日志区 + 操作按钮
- 纯 web 环境(无 __TAURI_INTERNALS__)下静默不挂载
P3 / P4 还在路上。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 14:27:02 +08:00
huangjianwu and Claude Opus 4.7
9a64a2da8e
feat(desktop): 启动期路径诊断 + 顶端横幅,主动暴露已知失败因素
...
桌面端历史痛点:PyInstaller sidecar 在含非 ASCII / 含空格 / 不可写的安装路径下
直接炸(README:36 仅文字警告"不要中文路径",无主动防御)。Sidecar 退出事件 lib.rs
已 emit 但前端没 listener 消化,用户看到的是空白主页。
- src-tauri/src/lib.rs:
· setup 中 env::current_exe() 之后做 InstallPathDiagnostics(is_ascii / 空格 /
父目录 write_probe),命中任一异常就 emit 'backend-warning' 给前端
· 用 std::thread::spawn + 1500ms sleep 等首屏 listener 挂上再 emit,避免事件丢失
· 新增 Tauri command get_install_path_diagnostics,前端可主动重查(用户卸载到
新目录后首次启动)
- BillNote_frontend/src/components/SystemDiagnostic/StartupBanner.tsx(新建):
· 监听 backend-warning(路径警告,可关闭)+ backend-terminated(致命,常驻)
· 纯 web 环境(无 __TAURI_INTERNALS__)下静默不挂载,对桌面端定向起效
· backend-error(stderr 噪音)暂不展示,留给后续 P2 日志面板
- App.tsx:StartupBanner 在 BackendInitDialog 之前就挂载,让"后端还在初始化时"
也能看见路径警告(正是该场景容易炸)
不改任何业务逻辑;纯桌面端 UX 加固。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 14:22:41 +08:00
huangjianwu and Claude Opus 4.7
2bb69d1581
fix(backend): 部署友好性——whisper 半成品目录与 deploy_status 硬依赖 torch
...
两处部署反馈来的问题:
1. WhisperTranscriber 反复抛 'Unable to open file model.bin in
model whisper-base'
· 原因:__init__ 只看目录是否存在判定模型已下载(Path(model_path).exists()),
但首次下载若中断 / 网络异常会留下空 / 半成品目录,下次启动绕过下载分支直接
进 WhisperModel 加载,于是死循环报错
· 修:判定条件换成 'model.bin' 落盘存在;目录在但 model.bin 缺失时打 warn
并触发重新下载
· routers/config.py 的 _check_whisper_model_exists 同步改用 model.bin 判定,
避免「已下载」状态在监控页误报
2. /api/deploy_status 在没装 torch 的部署上 500
ModuleNotFoundError: No module named 'torch'
· 原因:endpoint 顶部直接 import torch,仅 fast-whisper 才用得到的依赖被强制为
全局必需。轻量部署 / 用户切到 Groq / 必剪 / 快手 在线引擎时无 torch 也合理
· 修:torch 改为 try/except,未装或 cuda 检测异常时返回
{available: false, torch_installed: false};同时把 transcriber 配置 +
ffmpeg 都包在 try 里,保证整个监控 endpoint 不会被任一子项打死
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 13:57:34 +08:00
huangjianwu and Claude Opus 4.7
a7c717abbd
feat(extension): 多模态视频理解开关 + 抽帧/拼图参数(对齐 web NoteForm)
...
web 端 NoteForm 早就有 video_understanding / video_interval / grid_size 三件套,
插件之前没有,导致用户在视觉模型上想用「画面理解」时只能去 web 端发任务。
新增字段(types.ts Settings 与 GenerateRequest 同步):
- video_understanding: boolean,默认 false(关)
- video_interval: number,1-30 秒,默认 6(与 web NoteForm 默认一致)
- grid_size: [number, number],1-10,默认 [2,2]
UI 落地:
- popup 「高级」折叠区:开关 + interval + grid_size 行/列三栏,启用时才显示后两个,
并提示需要选视觉模型
- options General 页:单独一节「视频理解(多模态)」展开同样字段
- popup start() 与 background startTask() 在 generate_note 请求里带上这三个字段;
关闭时不传(避免覆盖 backend 默认)
回归风险:默认 false,对现有用户行为不变。
依赖:feature/extension-form-parity(叠加在它之上,因为 Settings 是同一片字段域)。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-07 17:22:57 +08:00
huangjianwu and Claude Opus 4.7
799ab64a28
feat(extension): NoteForm 字段对齐 web 端(style 预设 + format 完整 + extras)
...
之前插件 popup / options 的笔记选项跟 web 端 NoteForm 不齐,存在三处差距:
1. style 字段实质 broken
· backend prompt_builder.get_style_format 是 enum 映射(minimal/detailed/
academic/tutorial/xiaohongshu/life_journal/task_oriented/business/
meeting_minutes 共 9 个),不命中直接 return ''
· 插件原来给的是自由文本框,用户填什么都对不上 enum,等于没传
· 改:popup + options 都换成 9 个预设的下拉框,与 backend 严格对齐
2. format 字段缺一半
· backend 支持 toc / link / screenshot / summary 四个
· 插件只暴露了 screenshot / link 两个 checkbox
· 改:types.ts 新增 NOTE_FORMATS 常量,UI 渲染完整 4 个 checkbox。
生成请求时 format 数组、screenshot/link 单布尔由 settings.formats 派生,单一真相源
3. 缺 extras 字段
· backend VideoRequest.extras 直接拼到 prompt 末尾给 LLM
· 改:popup 折叠的"高级"区 + options 默认生成选项区都加 textarea
Settings 默认值:style='minimal'、formats=['toc','summary']、extras=''。
旧 settings 里若 style 是无效字符串,下拉会显示空白,用户重选一次即可。
logic/types.ts:
- 新增 NoteStyle / NoteFormat type alias 与 NOTE_STYLES / NOTE_FORMATS 常量
- Settings 接口加 formats: NoteFormat[] / extras: string,style 改为 NoteStyle
- 老的 screenshot / link 布尔保留(向后兼容旧 storage),但 UI 不再绑定,submit 时也由 formats 派生
popup / background / options 三处提交 generate_note 的逻辑同步收口。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-07 17:18:28 +08:00
huangjianwu
c0837e0132
chore(release): merge release/2.1.4 back into develop
2026-05-07 16:45:11 +08:00
huangjianwu
c9497b502c
chore(release): v2.1.4
...
CI 工程化修复,无运行时行为变化。详见 CHANGELOG.md。
2026-05-07 16:44:59 +08:00
huangjianwu and Claude Opus 4.7
1aea86a8d6
docs: v2.1.4 CHANGELOG + README 版本
...
CI 工程化修复,无运行时行为变化。详见 CHANGELOG.md。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-07 16:44:49 +08:00
huangjianwu and Claude Opus 4.7
ac72cc6d6e
ci(tauri): 桌面端构建去掉 Linux,只保留 macOS + Windows
...
Tauri Linux 构建 (ubuntu-22.04, x86_64-unknown-linux-gnu) 在 v2.1.x 这几次发版上
持续 17m+ 才完成,相比 macOS / Windows 更慢,且没有面向 Linux 桌面端用户的实际分发渠道。
直接从 matrix 里去掉。
清理:
- matrix 删除 ubuntu-22.04 条目
- 'Install Linux Dependencies' step(仅 ubuntu 触发)整段移除
- artifact 收集步里的 .deb / .AppImage 两条 find 命令移除
Linux 用户继续可以走 Docker 镜像 (ghcr.io/jefferyhcool/bilinote),那条线没变。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-07 14:30:07 +08:00
huangjianwu and Claude Opus 4.7
7358cd0123
fix(ci): commitlint workflow 去掉伪 input + 规范 release merge commit 格式
...
v2.1.3 push master 时 Lint commit messages job 红了,根因两条:
1. workflow 里写了 'firstParent: false',但 wagoid/commitlint-github-action@v6
的合法 input 列表里没这个字段,被 ignore 同时打 warn
2. release merge commit 标题 'Release v2.1.3' 不符合 type(scope): subject 格式,
commitlint 报 subject-empty + type-empty
· @commitlint/config-conventional 默认 ignore 'Merge ' 前缀的 commit,
但我们手动 -m 把标题写成 'Release vX.Y.Z' 跳过了豁免
修:
- 去掉 .github/workflows/commitlint.yml 里那条 firstParent 假 input
- RELEASING.md §3 加入 merge commit 标题模板:
· 合 master 用 'chore(release): vX.Y.Z'
· 回灌 develop 用 'chore(release): merge release/X.Y.Z back into develop'
- CONTRIBUTING.md §6.3 同步加这条提醒
历史上 master / develop 的 'Release v2.1.x' 那几个 merge commit 已经在 history
里,没法回头改(不能强推 master)。但 commitlint 在 push 时只 lint 推送范围里的
新 commit,旧 commit 不会重新校验,所以不会持续报错。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-07 14:19:39 +08:00
huangjianwu
80f081613b
Merge branch 'release/2.1.3' back into develop
2026-05-07 14:14:43 +08:00
huangjianwu
26e23d0f2c
Release v2.1.3
...
修 issue #282 (DeepSeek 等非多模态供应商被 400 拒绝)。详见 CHANGELOG.md。
2026-05-07 14:14:33 +08:00
huangjianwu and Claude Opus 4.7
234e3b9d2a
docs: v2.1.3 CHANGELOG + README 版本
...
修 issue #282(DeepSeek 等非多模态供应商被 400 拒绝)。详见 CHANGELOG.md。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-07 14:14:22 +08:00
huangjianwu
c19d462505
Merge branch 'release/2.1.2' back into develop
2026-05-07 14:06:35 +08:00
huangjianwu
64882e6a77
Release v2.1.2
...
补 v2.1.1 ghcr.io 镜像构建失败。详见 CHANGELOG.md。
2026-05-07 14:06:26 +08:00
huangjianwu and Claude Opus 4.7
f32a6944d1
docs: v2.1.2 CHANGELOG + README 版本
...
补 v2.1.1 ghcr.io 镜像构建失败。详见 CHANGELOG.md。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-07 14:06:16 +08:00
huangjianwu and Claude Opus 4.7
c4413c66a1
fix(docker): 修复 Tag push 触发的镜像构建失败
...
ghcr.io 镜像推送在 v2.1.1 tag 上失败,停在 frontend-builder 第 7/7 步
'pnpm run build':vite loadConfigFromBundledFile 1.5s 内挂掉,没具体行号——
典型现象是 vite.config.ts 顶部 import 的某个 plugin(@tailwindcss/vite)的
native binding 在容器里 require 失败。
三处修复:
1. Dockerfile.complete + BillNote_frontend/Dockerfile:node:18-alpine → node:20-alpine
· Tailwind v4 已不再支持 Node 18(package 现实需要 20+)
· Vite 6 也建议 Node 20+
2. Dockerfile.complete 的 frontend 阶段:复制 pnpm-lock.yaml + 改用 --frozen-lockfile
· 之前没传 lockfile,每次 pnpm install 重解析 semver,有可能拉到比本地更新的 native dep
3. BillNote_frontend/pnpm-lock.yaml 强制入库(git add -f)
· 之前根 .gitignore 有条诡异的 'BiliNote/pnpm-lock.yaml'(拼错的路径),
虽然没真匹配上这个文件,但 lockfile 历史上一直没被提交,导致 CI 与本地依赖图持续漂移
· lockfile 里 @tailwindcss/oxide 同时锁了 musl 与 gnu 变体,alpine 跑没问题
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-07 14:01:26 +08:00
huangjianwu and Claude Opus 4.7
29fa3d9540
docs(readme): 联系和加入社区段落补上微信群二维码
...
之前只写"年会恢复更新以后放出最新社区地址",现在直接挂 doc/wechat.png 上去。
GitHub 渲染相对路径图片时按 raw.githubusercontent.com 自动转,无需 CDN。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-07 13:57:40 +08:00
huangjianwu
61cb4ec9fa
Merge branch 'release/2.1.1' back into develop
2026-05-07 13:55:01 +08:00
huangjianwu
a46880f169
Release v2.1.1
...
工程化与文档收尾,无运行时行为变化。详见 CHANGELOG.md。
2026-05-07 13:54:50 +08:00
huangjianwu and Claude Opus 4.7
c187dce5cb
docs: v2.1.1 CHANGELOG + README 版本
...
工程化与文档收尾,无运行时行为变化。详见 CHANGELOG.md。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-07 13:54:23 +08:00
huangjianwu and Claude Opus 4.7
f583f3cc8c
chore(frontend): about 页移除 QQ 群联系方式,仅保留微信群
...
QQ 群已不再活跃维护,关联展示也容易让用户搜不到。保留微信群入口即可。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-07 13:50:23 +08:00
huangjianwu and Claude Opus 4.7
2e7fe8d3a8
chore(frontend): 关于页二维码改为 import 本地资源,不再依赖 CDN
...
之前 about 页直接拉腾讯云 COS 上的 wechat.png,每次换码都要手动重新上传 CDN
+ 刷缓存。改成 import @/assets/wechat.png,由 Vite 打包,更新时只需替换文件。
doc/wechat.png 仍保留作为源 / 备份。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-07 13:49:25 +08:00
huangjianwu and Claude Opus 4.7
1e055c3068
chore(docs): 更新群聊微信二维码
...
doc/wechat.png 替换为最新版(396×396)。
⚠️ 前端 SettingPage/about.tsx:207 实际渲染的是腾讯云 COS 上的同名文件
https://common-1304618721.cos.ap-chengdu.myqcloud.com/wechat.png
仓库这边只是源文件,CDN 那份需要项目维护者手动重新上传:
- 登录腾讯云 COS 控制台
- 找到 common-1304618721 桶
- 把根目录的 wechat.png 替换为 doc/wechat.png 这一份
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-07 13:47:23 +08:00
huangjianwu and Claude Opus 4.7
b2af0e4e53
chore(repo): 仓库工具链——issue/PR 模板 + commitlint CI + 插件发版工作流
...
把 CONTRIBUTING.md 里写的规范落到 GitHub 工程化层。
Issue / PR 模板:
- .github/ISSUE_TEMPLATE/{config,bug_report,feature_request}.yml
· yml 表单形式,跟随当前工作区分类(backend / frontend / extension / Tauri)
· bug_report 强制选版本 + 部署方式 + 复现步骤;提交前自查不夹带 secrets
· config.yml 禁用空白 issue,引导 Discussions
- .github/pull_request_template.md:把 CONTRIBUTING §5.2 的 PR 正文要求落成 checklist
- 删旧版 .md 模板(含中文文件名那条),避免新老两套并存
Commitlint:
- .commitlintrc.json:extend conventional + 自定义 type 白名单(feat/fix/docs/style/refactor/perf/test/build/ci/chore/ui/revert)
- .github/workflows/commitlint.yml:用 wagoid/commitlint-github-action@v6,PR + push develop/master 时校验
· subject-case / subject-full-stop 关掉,兼容中文 subject
· header-max-length 100 字符 warn 级别,不阻塞合并
插件发版工作流:
- .github/workflows/release-extension.yml:v* tag push 时
· cd BillNote_extension && pnpm install + build
· pack:zip / pack:xpi / pack:crx(crx 缺 key 自动跳过)
· 产物重命名带版本后缀,挂到对应 GitHub Release
- 末尾保留 publish-chrome / publish-edge / publish-firefox 三段注释,配齐 secrets 即可启用商店自动发布
- RELEASING.md:发版执行手册,覆盖 release/* 流程 + 各商店人工上传步骤 + 自动发布所需 secrets
CONTRIBUTING.md 关联文档区指到新增的 RELEASING.md,commit 章节加 commitlint 落地说明。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-07 13:45:32 +08:00