 huangjianwuandClaude Opus 4.7
|
406789f834
|
feat(extension+backend): 插件直接在浏览器里抓 B 站字幕,跳过后端 download_subtitles
之前 B 站字幕优先逻辑放在后端的 BilibiliSubtitleFetcher,需要后端通过 CookieConfigManager
管理 SESSDATA cookie 才能拿 AI 字幕。这次改为:插件在用户浏览器里直接抓字幕,
天然带着用户当前登录态的 cookie;后端只负责把传过来的字幕当作转写缓存。
extension:
- 新增 logic/bilibili-subtitle.ts,调 /x/web-interface/view → /x/player/wbi/v2 → 字幕 URL JSON
· service worker fetch 走 credentials:'include',借 manifest host_permissions:'*://*/*'
自动带 .bilibili.com 域 cookie,并绕过 CORS
· 优先级:人工中文 > AI 中文 > 任意非空
- popup start() 与 background startTask() 在 platform === 'bilibili' 时先调一次抓取,
结果作为 prefetched_transcript 字段塞到 /api/generate_note payload
- types.ts GenerateRequest 增加 prefetched_transcript 字段
backend:
- VideoRequest 增加可选 prefetched_transcript: dict
- generate_note endpoint 收到时调 _persist_prefetched_transcript() 写到
NOTE_OUTPUT_DIR/<task_id>_transcript.json;NoteGenerator 的 cache-hit 逻辑天然命中,
跳过 downloader.download_subtitles 和音频转写,直接走 GPT 总结
- 字幕清洗:去掉空 segment、必要时合成 full_text、language 默认 'zh'
效果:B 站登录用户的视频,从用户点击到 GPT 拿到全文,省掉一次后端 → B 站 API 的来回,
也彻底告别了 backend 那侧的 cookie 配置心智负担。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-07 12:23:16 +08:00 |
|
 huangjianwuandClaude Opus 4.7
|
d64741628b
|
ui(extension): 渲染时剥掉 backend 注入的 '> 来源链接:URL' 行
backend 的 note_helper 会在笔记开头加一行 '> 来源链接:<url>'。侧边栏顶部已经有
封面 + 标题 + 跳原片链接的卡片,再在正文里出现一遍是冗余还吃高度。
MindMap 也会把它当作根节点的兄弟节点,影响导图结构。
加 stripSourceLink() helper(regex 直接复刻 web 端 MarkdownViewer.tsx:468 的处理),
在 MarkdownView 与 MindMap 渲染前剥掉。复制 / 下载导出的 .md 仍保留原行,便于溯源。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-07 12:18:55 +08:00 |
|
 huangjianwuandClaude Opus 4.7
|
bb9637f30a
|
ui(extension): 侧边栏布局收紧,给笔记内容更多呼吸空间
之前侧边栏堆了:96×56 大封面 + 标题 + URL 链接 + 8 段进度条 + 'Markdown/思维导图/AI 问答' tab + MarkdownView 自带的复制/下载条 + 内容标题 …… 在窄侧栏里太挤,主内容被压到下半屏。
重做:
- 顶栏极简化:左边 'BiliNote',右边「历史 N」按钮 + 「设置」按钮
- 历史任务从底部 details 改成顶栏触发的下拉面板,用了再展开
- 标题区压成一行:12×7 小封面 + 单行标题(hover 显示完整 URL,点击跳原片)+ 行尾状态徽章
· 进行中:蓝色阶段名 + 脉冲动画
· 完成:绿色 ✓
· 失败:红色徽章 + tooltip 显示原因
- 进度条只在 isRunning 时渲染;完成后整段消失
- 视图 tab 与「复制 / 下载」按钮合并到同一行(仅 markdown 视图显示)
- MarkdownView 加 hideActions prop,去掉它自带的按钮区,避免重复;同时去掉 max-h-[400px],撑满父容器
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-07 12:15:05 +08:00 |
|
 huangjianwuandClaude Opus 4.7
|
0793949516
|
feat(extension): popup 改紧凑视图,markdown 详情挪到侧边栏
之前 popup 直接在 400px 宽里渲染 markdown,看起来很挤。改成:
- popup:标题 + 封面缩略图 + 进度条 + 「在侧边栏查看」按钮,不再渲染 markdown
- 提交「生成笔记」后自动调 chrome.sidePanel.open 把侧边栏拉起来
- 最近任务列表显示标题(拿到时)而非 URL
- 新增 logic/api.resolveImageUrl:相对 /static 路径拼后端域名;hdslb / byteimg / kpcdn / ytimg 等带 referer 校验的封面走后端 /api/image_proxy 转发,避免 CORS / 防盗链问题
- 侧边栏顶部同样展示封面 + 标题 + 跳原片链接,方便用户辨识当前任务
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-07 12:11:48 +08:00 |
|
 huangjianwuandClaude Opus 4.7
|
e694b460e8
|
fix(extension): /task_status 拆 ResponseWrapper,进度条不再为空
backend /api/task_status/{id} 实际形状是 R.success({status, message, task_id, result?})
即外面再套一层 {code, msg, data}。原来 getTaskStatus 直接 fetch().json() 没拆包,
导致 res.status 一直是 undefined,TaskProgress 渲染不出阶段标签、进度条全灰,
"最近任务" 列表的状态字段也是空的。
同时把 backend 任务失败时的 R.error(message, code=500) 翻译成 {status:'FAILED', message},
让 UI 能正确显示失败终态、停止轮询,而不是被 request() 抛错卡在那里循环重试。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-07 12:07:45 +08:00 |
|
 huangjianwuandClaude Opus 4.7
|
f37d2e95d1
|
feat(extension): 侧边栏接入思维导图(markmap)与 RAG 问答(P3 + P4)
任务完成(status === SUCCESS)后,侧边栏顶部出现 Markdown / 思维导图 / AI 问答 三个 tab:
- 思维导图:用 markmap-lib + markmap-view 把 markdown 转成可缩放思维导图
- AI 问答:
· 进入 tab 自动调 /api/chat/index 触发后台索引,按 2s 间隔轮询 /api/chat/status
· 索引完成后开放输入框;调 /api/chat/ask 时带上 settings 里的默认 provider/model + 完整 history
· Cmd/Ctrl + Enter 发送
· 回答用 markdown-it 渲染,user 气泡用纯文本
- 切换任务时清空对话历史并重新检查索引
logic/api.ts 补 indexChatTask / getChatStatus / askChat 三件套。
依赖新增:markmap-lib, markmap-view(生产依赖)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-07 12:02:12 +08:00 |
|
 huangjianwuandClaude Opus 4.7
|
be5e1637fa
|
fix(mlx-whisper): 修正 huggingface 仓库 ID 命名
mlx-community 上 Whisper 仓库的命名实际是 'whisper-{size}-mlx'(large-v3-turbo 例外,无 -mlx 后缀)。
之前 hardcode 拼成 'mlx-community/whisper-{size}' 在 HF 上不存在,下载会 404:
Repository Not Found for url:
https://huggingface.co/api/models/mlx-community/whisper-small/revision/main.
修复:
- 在 mlx_whisper_transcriber.py 加 MLX_MODEL_MAP(已用 huggingface API 核对过命名)+ resolve_mlx_repo_id() 帮助函数
- routers/config.py 的 _do_download_mlx_whisper 与 _check ... 路径生成都改用同一份映射表
- 给 transcriber_models_status 的每条 mlx 状态加 available 字段,避免后续若有不支持的 size 时静默失败
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-07 11:59:02 +08:00 |
|
 huangjianwuandClaude Opus 4.7
|
702b57c165
|
feat(bilibili): 优先走官方 player API 直拉字幕
之前 BilibiliDownloader.download_subtitles 走的是 yt-dlp 的 writesubtitles 路径,对 B 站签名/Cookie 的兼容性差,常常空手而归,落到音频下载 + Whisper 转写的慢路径。
新增 bilibili_subtitle.BilibiliSubtitleFetcher:
- /x/web-interface/view?bvid=... → 拿 cid
- /x/player/wbi/v2?bvid=...&cid=... → 拿 subtitle 列表(subtitle_url 已带 auth_key)
- 优先级:人工中文 > AI 中文 > 任意中文 > 任意非空
- fetch JSON body 解析为 TranscriptResult
- 通过 CookieConfigManager 自动注入 SESSDATA cookie(AI 字幕必需)
bilibili_downloader.download_subtitles 顺序改为:先试新 fetcher,失败再回退到原 yt-dlp 路径。NoteGenerator 的字幕优先逻辑无需改动——它本来就调 download_subtitles。
效果:
- B 站视频如果有字幕(人工或 AI),直接秒拿,跳过音频下载 + 转写
- 完全绕开 MLX Whisper 不可用 / 模型未下载 等转写器问题
- 拿不到字幕时仍可走原音频转写路径
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-07 11:55:50 +08:00 |
|
 huangjianwuandClaude Opus 4.7
|
3bd8b670ca
|
feat(extension): options 改为多 tab,搬入 web 端的全部设置项
把原来一长条的 options 拆成五个 tab,覆盖 web 端 SettingPage 的全部能力。今后新功能优先在插件里做,web 端逐步退役。
- 通用:后端地址 + 默认供应商/模型 + 默认生成选项(原 Options.vue 内容)
- 模型供应商:完整 CRUD —— 列表 / 启用切换 / 编辑 / 测试连接 / 添加 / 模型增删
- 音频转写配置:转写器引擎切换(fast-whisper / mlx-whisper / Groq / 必剪 / 快手)+ Whisper 模型大小切换 + 模型本地下载状态 + 触发下载
· 直接修复 'MLX Whisper 不可用' 报错——非 Mac 用户现在能切到 fast-whisper / Groq
- 下载配置:每平台 cookie 显示 / 浏览器一键同步 / 手动粘贴保存
- 部署监控:后端、FFmpeg、CUDA、Whisper 模型 当前状态
logic/api.ts 补齐:provider CRUD / model CRUD / connect_test / transcriber_config / transcriber_models_status / transcriber_download / get_downloader_cookie / deploy_status / sys_health。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-07 11:53:08 +08:00 |
|
 huangjianwuandClaude Opus 4.7
|
880587f2db
|
feat(extension): P2 视频页悬浮按钮 + 右键菜单 + cookie 直通;P3 侧边栏首版
- contentScripts: 仅在支持的视频平台(B 站 / YouTube / 抖音 / 快手)注入悬浮 BiliNote 按钮,点击通过 webext-bridge 发 'bilinote-start' 给 background
- background: 处理 bilinote-start 与右键菜单点击;调 /api/generate_note;写 chrome.storage;自动打开侧边栏。logic/storage 是 Vue 反应式版本,service worker 不能 import,因此把常量抽到 logic/constants.ts
- contextMenus: onInstalled 时注册"用 BiliNote 总结此视频",限定 4 个支持平台域名
- 浏览器 Cookie 同步:options 页加按钮,按平台读 chrome.cookies.getAll,序列化为 'name=value; ...' 后 POST 给后端 /api/update_downloader_cookie。chrome.cookies + contextMenus 权限补到 manifest
- 侧边栏(P3 首版):从 storage 读最近任务并轮询,复用 TaskProgress + MarkdownView。markmap 思维导图与 RAG 问答推到后续
- 修 P1 endpoint 拼错的 bug:/api/get_models_by_provider 实际是 /api/model_enable,404 来自这里
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-07 11:46:09 +08:00 |
|
 huangjianwuandClaude Opus 4.7
|
b8f359e7e7
|
feat(extension): 浏览器插件 P1 MVP
新建 BillNote_extension/ 工作空间(基于 vitesse-webext 骨架,Vue 3 + Vite + UnoCSS + MV3)。
P1 MVP 范围:
- popup:自动读当前 tab URL,识别 Bilibili / YouTube / 抖音 / 快手;提交 /generate_note 后轮询 /task_status;展示 markdown,复制 + 下载 .md
- options:后端地址输入与连通性测试;从 /get_all_providers + /get_models_by_provider 拉供应商/模型列表;默认画质、截图/跳转、笔记风格
- chrome.storage.local 持久化设置与最近 30 个任务,popup 重开恢复进行中任务
- markdown 里的 /static/screenshots 路径在渲染前重写为绝对地址
后端:CORS 改用 regex,新增允许 chrome-extension:// 与 moz-extension:// 源(同时保留 localhost / 127.0.0.1 / tauri.localhost)。无新增 backend endpoint。
P2-P4(content script 悬浮按钮、cookie 直通、side panel、思维导图、RAG 问答)保留 stub 文件,不在本次范围。
去掉 vitesse-webext 自带的 simple-git-hooks postinstall 配置——它会在仓库根装 pre-commit 钩子去跑 pnpm lint-staged,但仓库根没有 package.json,会破坏所有提交流。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-07 11:40:15 +08:00 |
|
 huangjianwuandClaude Opus 4.7
|
108ad270bf
|
fix: 修复 AILogo 噪音、设置页滚动与供应商批量伪内置脏数据
- AILogo: `custom` 名称为合法兜底场景,不再以 console.error 上报;其余未匹配名称降级为 console.warn
- SettingPage/Model: 双栏加 `min-h-0 overflow-y-auto`,让供应商列表与右侧表单各自可滚动
- ProviderService.add_provider: API 创建一律落到 `type='custom'`,并对同名供应商抛 ValueError,避免再产生伪内置行
- CLAUDE.md: 补充 v2.0.0 子系统(RAG/Chat、可选 Nacos+RabbitMQ、i18n、cookie/transcriber 管理器)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-07 11:10:15 +08:00 |
|
 huangjianwuandClaude Sonnet 4.6
|
499366da02
|
fix(docker): 优化 Vite 配置以支持 Docker 构建环境
- 修改 vite.config.ts 在 Docker 环境中使用当前目录加载 .env 文件
- 在 Dockerfile 中设置 DOCKER_BUILD 环境变量
- 移除不必要的 .env.example 复制步骤
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-03-23 18:54:16 +08:00 |
|
 huangjianwuandClaude Sonnet 4.6
|
cb5c11d41a
|
fix(ci): 移除 pnpm install 的 --frozen-lockfile 标志
由于不提交 pnpm-lock.yaml 文件,移除 --frozen-lockfile 标志以修复桌面端构建失败
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-03-23 18:50:48 +08:00 |
|
 huangjianwuandClaude Sonnet 4.6
|
8e2f74c0f5
|
fix(frontend): 修复 ESM 模式下 __dirname 未定义的问题
在 vite.config.ts 中添加 ESM 兼容的 __dirname 定义,修复 Docker 构建时的配置加载错误
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-03-23 18:46:53 +08:00 |
|
 huangjianwuandClaude Sonnet 4.6
|
c0f978bd77
|
fix(docker): 修复前端构建时缺少 .env 文件的问题
在构建前端之前复制 .env.example 到父目录,供 vite.config.ts 加载环境变量使用
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-03-23 18:42:34 +08:00 |
|
 huangjianwuandClaude Sonnet 4.6
|
4bff57c774
|
fix(docker): 修复 apt-get 安装失败问题
将清华镜像源从 https 改为 http 协议,避免 SSL 证书验证问题导致的 apt-get update 失败
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-03-23 18:36:22 +08:00 |
|
 huangjianwuandClaude Sonnet 4.6
|
341d3ded06
|
chore: 删除 ffmpeg 二进制文件并更新 .gitignore
移除错误提交的 301MB ffmpeg 构建文件,并在 .gitignore 中添加 ffmpeg*/ 规则防止再次提交
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-03-23 18:31:32 +08:00 |
|
 huangjianwuandClaude Sonnet 4.6
|
6d5d1ad373
|
fix(ci): 修复 GitHub Actions 构建错误
移除 setup-node 中的 pnpm 缓存配置以修复 macOS 构建失败,修改 Dockerfile 不再依赖 pnpm-lock.yaml 以修复 Docker 构建失败
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-03-23 18:11:55 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
3582e65dc5
|
feat(ci): 桌面端构建自动创建 GitHub Release 并附带安装包
- 新增 release job:等所有平台构建完成后自动创建 Release
- 收集各平台产物(dmg/msi/exe/deb/AppImage)到统一目录
- 使用 softprops/action-gh-release 创建 Release 并上传产物
- 自动生成 SHA256 校验和文件
- 自动根据 commits 生成 Release Notes
- 仅在推送 tag 时触发 Release 创建
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 17:58:57 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
6090982261
|
docs: 更新 README 至 v2.0.0,补充新功能说明和 Docker 部署方式
- 版本号升级为 2.0.0(README、tauri.conf.json、about 页面)
- 新增 v2.0.0 功能说明:RAG 问答、Function Calling、封面 Banner、面板折叠等
- Docker 部署改为推荐方式,支持 docker pull 预构建镜像
- 补充源码部署为方式二,修正前端访问端口为 3015
- 更新功能特性列表,补充快手、AI 问答等新功能
- TODO 标记 RAG 问答为已完成
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 17:52:30 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
f6a3438079
|
feat(build): 全面优化打包流程,Docker 镜像自动发布到 GHCR
Docker 优化:
- Dockerfile 层缓存(requirements/lockfile 先复制再安装)
- ARG 可配置镜像源,国际用户可覆盖为默认源
- 前端 Dockerfile 改用 corepack + frozen-lockfile
- 精简 .dockerignore,排除 .git 和 Tauri 构建产物
CI/CD 优化:
- docker-build 自动推送到 GHCR,支持 amd64/arm64 双架构
- 桌面端 CI 增加 pip/pnpm/cargo 缓存,升级 actions 版本
- Python 版本对齐为 3.11,增加 Linux 构建矩阵
- build.sh 加 -y 覆盖标志
文档更新:
- README Docker 部署简化为 docker pull + docker run
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 17:48:34 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
f4801d5be7
|
feat(youtube): 使用 youtube-transcript-api 优先获取字幕,有字幕时跳过音频下载
- 新增 YouTubeSubtitleFetcher 模块,通过 youtube-transcript-api 获取字幕
- 重构笔记生成流程:缓存 → 平台字幕 → 按需下载 → 转写 fallback
- 有字幕时仅提取视频元信息,不下载音视频文件
- 添加 youtube-transcript-api 依赖
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 17:31:30 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
27758f95dd
|
feat(ui): 工作区和生成历史面板支持折叠/展开
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 16:09:57 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
795615f0f7
|
fix(ui): 修复 Banner 封面图不显示
MarkdownViewer 的 baseURL 去掉了 /api 前缀,导致
image_proxy 请求路径错误。改为组件内部直接读取
VITE_API_BASE_URL,与 NoteHistory 保持一致。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 15:59:02 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
c46c971e64
|
fix(ui): Banner 封面通过后端代理加载,移除来源链接模块
- 封面图通过 /image_proxy 代理请求,解决 B 站等 CDN 跨域问题
- 渲染 markdown 时过滤掉开头的「来源链接」行,
该信息已由 VideoBanner 的「原视频」按钮替代
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 15:56:48 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
55cc3bcd63
|
feat(ui): 笔记顶部新增视频封面 Banner
- 视频封面做模糊暗色背景,上方叠加视频信息
- 显示视频标题、作者/UP主、平台
- 右侧「原视频」按钮跳转原始链接
- 无封面时降级为渐变背景
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 15:54:36 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
05877a2197
|
feat(chat): 支持 function calling,模型可主动查询原文数据
新增三个工具供 LLM 调用:
- lookup_transcript: 查询转录原文(按时间范围、关键词、位置筛选)
- get_video_info: 获取视频元信息(标题、作者、简介、标签等)
- get_note_content: 获取完整笔记 Markdown 内容
实现 tool calling 循环(最多 3 轮),LLM 可根据问题
主动调用工具获取所需信息,不再完全依赖 RAG 检索。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 15:48:23 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
3e9f908d7b
|
fix(chat): 按固定配额检索,确保三种来源均被召回
之前各来源各取 n_results 条再按距离排序取 top-n,
markdown 距离普遍更近导致 transcript 被挤掉。
改为固定配额:meta 1 条、markdown 2 条、transcript 3 条。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 15:44:25 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
8a8e448e22
|
feat(chat): 索引视频元信息(标题、作者、简介、标签等)
- 新增 _build_meta_chunk,将 audio_meta 中的标题、UP主、
简介、标签、时长、平台、链接等构建为可检索的 chunk
- query 时同时从 meta/markdown/transcript 三种来源检索
- is_indexed 检测旧索引缺少 meta 时返回 false,自动触发重建
- system prompt 新增 [视频信息] 来源说明
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 15:41:07 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
a92c779dd6
|
fix(chat): RAG 检索同时召回笔记和转录内容
之前 query 只做一次全局检索,embedding 模型倾向匹配笔记,
导致转录原文几乎不会被召回。
- 改为分别对 markdown 和 transcript 各检索 n_results 条,
合并后按距离排序取 top-n
- 更新 system prompt,明确区分笔记和转录两种来源,
引导 LLM 根据问题类型选择合适的来源回答
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 15:35:31 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
ef1dec1e47
|
feat(chat): AI 回复支持 Markdown 渲染
通过 Bubble role 的 contentRender 使用 ReactMarkdown
渲染 AI 回复内容,支持列表、加粗、代码块等格式。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 15:31:55 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
fea376d1cb
|
fix(chat): 修复 avatar 传对象导致 React 渲染报错
avatar 属性类型是 ReactNode,不是 props 对象,
改为直接传 JSX 元素作为头像。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 15:30:15 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
b18277a3a0
|
fix(chat): 修复消息气泡左右布局不生效
- Bubble.List 的角色配置属性名是 role(单数)而非 roles
- 用户消息:右侧蓝色填充气泡 + 蓝色头像
- AI 回复:左侧描边气泡 + 灰色头像
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 15:29:09 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
d8fbceaadf
|
refactor(chat): 全屏/半屏切换移入 ChatPanel 内部
- Header 恢复单个"AI 问答"按钮,点击默认打开半屏模式
- ChatPanel 头部新增全屏/半屏切换按钮(Maximize2/Minimize2 图标)
- 半屏:markdown 与问答并排各占一半
- 全屏:问答占满内容区,隐藏 markdown
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 15:23:55 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
dea393e713
|
feat(chat): 问答面板支持半屏和全屏两种模式
- 半屏模式:ChatPanel 与 markdown 各占一半并排显示
- 全屏模式:ChatPanel 占满整个内容区域,隐藏 markdown
- Header 新增两个按钮(问答 / 全屏问答),点击切换,再次点击关闭
- 当前激活的模式按钮高亮显示
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 15:20:07 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
ae2bfe4d0a
|
fix(chat): 修复 ChatPanel 不显示的布局问题
- ChatPanel 容器添加 h-full shrink-0 确保有高度且不被压缩
- ScrollArea 从 w-full 改为 flex-1 min-w-0,为 ChatPanel 让出空间
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 15:15:14 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
2f2eb646a4
|
fix(chat): 索引改为后台异步执行,前端轮询状态并展示进度提示
后端:
- /chat/index 改为 BackgroundTasks 异步执行,立即返回
- /chat/status 返回细粒度状态(idle/indexing/indexed/failed)
- 内存追踪索引进度,避免重复触发
前端:
- ChatPanel 每 2 秒轮询索引状态,索引完成后自动停止
- 索引中显示"正在索引笔记内容..."及首次下载模型提示
- 索引失败显示重试按钮
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 14:46:37 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
fdc888512a
|
fix(chat): 修复 ChromaDB 1.x 兼容性问题导致索引失败
- ChromaDB 1.x delete/get 不存在的 collection 抛 NotFoundError
而非 ValueError,统一改为 except Exception
- 简化 _collection_name,UUID 格式本身就是合法的 collection name
- requirements.txt 放宽 chromadb 版本约束
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 14:43:57 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
3cd4c749c1
|
fix(chat): 修复 ChatPanel 无限重渲染导致的 Maximum update depth exceeded
- useTaskStore 选择器内调用 getCurrentTask() 每次返回新对象引用,
改为分别选取 currentTaskId + tasks 后用 useMemo 派生
- chatHistory[taskId] || [] 在选择器内每次创建新空数组引用,
改为选择器返回原始值,外部用 ?? [] 兜底
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 14:40:47 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
efadbc267d
|
feat(chat): 基于 RAG 的笔记内容 AI 问答功能
实现类似 Google NotebookLM 的效果:笔记生成后自动向量化,
用户可针对笔记内容进行 LLM 问答。
### 后端
- 新增 VectorStoreManager(ChromaDB),按标题/转录分块建立向量索引
- 新增 chat_service.py RAG 问答:检索相关片段 → 构建 prompt → 调用 LLM
- 新增 /chat/index, /chat/ask, /chat/status API 端点
- 笔记生成完成后自动建立向量索引
### 前端
- 使用 @ant-design/x Bubble.List + Sender 组件构建聊天面板
- 新增 chatStore(Zustand + persist)持久化聊天记录
- MarkdownViewer 右侧嵌入 ChatPanel,通过"AI 问答"按钮切换
- 首次打开自动检查/触发索引,支持重新索引
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 14:38:39 +08:00 |
|
 huangjianwuandClaude Opus 4.6
|
c105342ded
|
fix: 性能优化、前端转写器配置、任务进度丢失及 MLX Whisper 回退问题修复
### 性能优化
- 后端任务执行从串行锁改为 ThreadPoolExecutor 并发执行(默认3线程)
- 添加 GZipMiddleware 响应压缩 + Nginx gzip 配置
- 数据库连接池参数优化(pool_size=10, max_overflow=20)
- 视频帧提取并行化(ThreadPoolExecutor)
- LLM 重试配置缓存到实例,避免每次请求读 env var
- 前端路由级代码拆分(React.lazy + Suspense)
- Vite manualChunks 拆分 markdown/markmap/vendor
- MarkdownViewer 用 React.memo + useMemo 减少不必要渲染
- NoteHistory Fuse.js 实例 useMemo 缓存
- useTaskPolling 无待处理任务时跳过轮询
- 移除 antd 依赖(NoteForm Alert、modelForm Tag),改用 shadcn/ui
### 前端转写器配置(新功能)
- 新增 TranscriberConfigManager(JSON 文件存储,替代环境变量)
- 新增 GET/POST /transcriber_config API 端点
- 新增 GET /transcriber_models_status 模型下载状态查询
- 新增 POST /transcriber_download 后台模型下载触发
- 前端转写器设置页面:引擎选择、模型大小选择、模型下载管理
- deploy_status 端点同步从配置文件读取
### Bug 修复
- 修复任务进行中切换页面后进度丢失:Home.tsx status 派生逻辑补全中间状态
- 修复 MLX Whisper 静默回退 fast-whisper:移除环境变量门控,macOS 下自动尝试导入
- MLX Whisper 不可用时抛出 RuntimeError 而非静默回退
- 前端展示 MLX Whisper 可用性状态,不可用时禁用保存
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-23 14:09:34 +08:00 |
|
huangjianwu
|
1cd8c33983
|
feat(note): 在笔记开头添加来源链接功能
|
2026-03-23 13:18:40 +08:00 |
|
黄建武
|
44d89e3b73
|
feat(nginx): 调整客户端请求体大小限制
- 设置 client_max_body_size 为 10G,允许上传大文件- 设置 client_body_buffer_size 为 128k,优化请求体缓冲
|
2025-05-15 11:34:39 +08:00 |
|
黄建武
|
aeae3410a0
|
feat(db): 添加 Ollama本地离线模型支持
- 在 builtin_providers.json 中添加 Ollama 提供商配置
- 修改 OpenAI_compatible_provider.py,优化与 Ollama 的兼容性
|
2025-05-14 15:28:57 +08:00 |
|
黄建武
|
3862c657b7
|
build(docker): 更新 docker-compose配置
- 将 Nginx 容器的端口映射改为使用环境变量 APP_PORT- 移除 frontend 服务的依赖
|
2025-05-12 16:13:05 +08:00 |
|
黄建武
|
1c848c727f
|
docs: 更新 .env.example 文件中的 TRANSCRIBER_TYPE 配置选项
- 调整配置选项的描述,使 groq 成为独立的配置项
-优化注释内容,提高可读性和准确性
|
2025-05-12 16:04:42 +08:00 |
|
黄建武
|
a5a523f918
|
feat(.env.example): 添加 groq 语音识别模型配置选项
- 在 TRANSCRIBER_TYPE 中添加 groq 作为可选的 Apple 平台专用模型
- 新增 GROQ_TRANSCRIBER_MODEL 变量,用于指定 groq 提供的 faster-whisper模型,默认为 whisper-large-v3-turbo
|
2025-05-12 15:59:04 +08:00 |
|
黄建武
|
fbb292d0e3
|
docs(README): 更新 BiliNote 版本号
将 README.md 中的 BiliNote 版本号从 v1.6.0 修改为 v1.7.0
|
2025-05-12 15:03:10 +08:00 |
|
黄建武
|
6ff8b4d90f
|
feat(backend): 添加 Groq供应商支持并优化笔记生成流程- 在 builtin_providers.json 中添加 Groq 供应商信息
- 实现 GroqTranscriber 类以支持 Groq 语音转录服务
- 新增异常处理中间件以提高系统稳定性
- 优化笔记生成流程,增加错误处理和日志记录
- 添加思维导图功能和相关组件
-重构 Markdown 查看器以支持切换视图模式
|
2025-05-12 14:59:06 +08:00 |
|
黄建武
|
b2034c0865
|
feat(db): 更新内置 AI 服务提供商配置
- 移除Doubao 服务商配置- 添加 Gemini 服务商配置
- 更新 Claude 服务商的 base_url
|
2025-05-12 09:05:53 +08:00 |
|
黄建武
|
137cf81d29
|
fix(markdown): 修复 Markdown 组件以提高可读性和维护性
- 格式化代码以提高可读性
-优化组件结构以提高维护性- 调整样式和布局以提升用户体验
|
2025-05-09 16:08:18 +08:00 |
|
黄建武
|
1888849270
|
fix:修复视频生成错误
|
2025-05-09 15:38:31 +08:00 |
|
黄建武
|
5e7c381e07
|
refactor(env): 优化环境变量配置和请求基地址设置
- 移除 request.ts 中的重复 baseURL 配置
- 在 vite.config.ts 中添加默认的 API基地址和前端端口- 更新请求基地址为相对路径,提高可维护性
|
2025-05-09 13:24:12 +08:00 |
|
黄建武
|
da645291a2
|
refactor(env): 优化环境变量配置和请求基地址设置
- 移除 request.ts 中的重复 baseURL 配置
- 在 vite.config.ts 中添加默认的 API基地址和前端端口- 更新请求基地址为相对路径,提高可维护性
|
2025-05-09 13:23:29 +08:00 |
|
黄建武
|
048a3b70df
|
refactor(app/utils): 更新 VideoReader 类的目录设置
- 引入 get_app_dir 函数用于获取应用目录路径
- 修改 frame_dir 和 grid_dir 参数默认值为 None
- 在构造函数中使用 get_app_dir 设置默认目录路径
|
2025-05-09 12:40:36 +08:00 |
|
黄建武
|
b75caaea0e
|
Merge remote-tracking branch 'origin/master' into feature/kuaishou
|
2025-05-09 11:58:03 +08:00 |
|
黄建武
|
140c9b1d88
|
refactor(path_helper): 重构路径获取方法,支持打包运行
- 修改 get_data_dir 函数,以支持打包后可写的运行目录- 新增 get_app_dir 函数,提供更灵活的路径获取方式
- 优化路径处理逻辑,确保在不同环境下都能正确获取路径
|
2025-05-09 11:57:41 +08:00 |
|
黄建武
|
668785ebe5
|
refactor(path_helper): 重构路径获取方法,支持打包运行
- 修改 get_data_dir 函数,以支持打包后可写的运行目录- 新增 get_app_dir 函数,提供更灵活的路径获取方式
- 优化路径处理逻辑,确保在不同环境下都能正确获取路径
|
2025-05-09 11:57:11 +08:00 |
|
黄建武
|
8e917ee15e
|
refactor(utils): 优化 request.ts 中的 API 地址配置- 提取 base URL 到单独的常量中
- 使用 import.meta.env.VITE_API_BASE_URL 或本地地址作为默认值
-简化了代码结构,提高了可读性和可维护性
|
2025-05-09 11:12:49 +08:00 |
|
黄建武
|
17216534cb
|
feat(utils): 添加 API 路径到请求基础 URL
- 在请求基础 URL 中加入 '/api' 路径
-确保无论是生产环境还是本地环境,请求 URL 都包含 API路径
|
2025-05-09 10:53:51 +08:00 |
|
黄建武
|
2dfcb600ae
|
refactor(backend): 更新默认提供商路径获取方法并配置前端请求基础 URL
- 新增 get_builtin_providers_path 函数以动态获取内置提供商 JSON 文件路径
- 修改 seed_default_providers 函数,使用新的路径获取方法
- 更新前端请求工具,配置 API 基础 URL 以适应不同环境
|
2025-05-09 10:41:46 +08:00 |
|
黄建武
|
0a5196a475
|
refactor(utils): 更新模型目录获取逻辑以支持打包运行
-增加对打包状态的判断,使用不同的目录路径
-打包时将模型目录设置为 APPDATA 或 ~/.cache 下的 BiliNote/models
- 开发时仍使用项目根目录下的 models目录
- 确保兼容性和可移植性
|
2025-05-09 10:27:16 +08:00 |
|
黄建武
|
732ea0ba2b
|
refactor(layout): 优化网页布局和路由设置
- 更新 logo显示方式,使用 import 代替直接引用
- 将 BrowserRouter 替换为 HashRouter,以适应前端路由
- 在项目中添加 logo.svg 文件,统一 logo 资源
- 调整 vite.config.ts,设置 base 为 './' 以优化构建
|
2025-05-09 09:57:13 +08:00 |
|
黄建武
|
d4d5e063d0
|
refactor(.gitignore and vite.config): 更新忽略文件配置和前端端口设置
- 在 .gitignore 文件中添加 backend/config/* 和 BiliNo 到忽略列表
- 移除 BiliNote_frontend/.idea/* 以便于前端项目的重构
- 在 vite.config.ts 中添加前端端口配置,使用环境变量或默认值 3015
- 修改服务器端口配置,使用新设置的前端端口
|
2025-05-09 09:05:46 +08:00 |
|
黄建武
|
21c9d47495
|
feat(download): 添加快手下载器并优化下载配置功能
- 新增快手下载器,支持快手视频下载
- 添加下载配置页面,可设置各平台Cookies
- 优化后端接口,增加获取和更新Cookies的功能
- 前端新增Downloader组件和相关表单组件
- 更新路由配置,增加下载配置相关路由
|
2025-05-08 18:15:59 +08:00 |
|
黄建武
|
1af6cde68f
|
chore: 添加 .dockerignore 文件
- 新增 .dockerignore 文件,用于配置 Docker 构建过程中需要忽略的文件和目录
- 忽略日志、缓存、临时文件等,以减少 Docker 镜像大小
-排除敏感信息文件,如 .env 等环境变量配置- 忽略开发相关的文件和目录,如 .idea、.pytest_cache 等
|
2025-05-08 15:13:18 +08:00 |
|
黄建武
|
51fb59e3e1
|
feat(transcriber): 使用 ModelScope 替代 Hugging Face 下载模型
- 在 requirements.txt 中添加 modelscope 依赖
- 修改 whisper.py 中的模型下载逻辑,使用 ModelScope 的 snapshot_download 函数- 更新 MODEL_MAP 字典,映射不同大小的模型到对应的 ModelScope 仓库
- 调整模型路径,直接使用 ModelScope 下载的路径
|
2025-05-08 14:42:43 +08:00 |
|
黄建武
|
e2757a18b9
|
docs(README): 更新快速开始指南
- 移除了 .env 文件重命名步骤的单独命令,将其合并到一行中
-简化了端口说明,指出了默认端口为 80
- 更新了访问地址示例,使用默认端口 80
|
2025-05-06 14:00:29 +08:00 |
|
黄建武
|
be4c3313d4
|
feat(deploy): 重构部署方案并添加 nginx 代理
- 新增 nginx 服务作为前端和后端的代理
- 重新配置前端和后端服务,不再直接暴露端口
- 更新前端 Dockerfile,简化为静态文件服务器- 在 MarkdownViewer 组件中添加 ExternalLink 图标
|
2025-05-06 13:56:43 +08:00 |
|
黄建武
|
0bedd7ff6f
|
feat: 更新图片路径生成逻辑- 修改了生成截图 URL 的方式,使用相对路径替代绝对路径- 在前端 Vite 配置中添加了对 /static路径的代理设置
|
2025-05-06 13:13:31 +08:00 |
|
黄建武
|
03c950eb63
|
chore:更新版本号
|
2025-05-04 22:18:18 +08:00 |
|
黄建武
|
cbc94fafce
|
fix(provider): 重新启用通过 ID 获取供应商信息的接口并增强安全性
- 重新启用了 /get_provider_by_id/{id}接口
- 新增了 get_provider_by_id_safe 方法,用于安全地获取供应商信息
- 将原有的 get_provider_by_id 方法重命名为 get_provider_by_id_safe
|
2025-05-04 17:48:15 +08:00 |
|
黄建武
|
0f40a99f70
|
docs(README): 更新版本号至 v1.5.0 并添加新功能说明
- 将版本号从 v1.4.0 更新为 v1.5.0
- 新增功能:支持多版本记录保留
- 修正前端目录名称拼写错误
|
2025-05-04 11:03:58 +08:00 |
|
黄建武
|
d6b50773b9
|
Merge remote-tracking branch 'origin/master' into feature/regenerate
|
2025-05-04 11:01:16 +08:00 |
|
黄建武
|
97f153646f
|
feat(frontend): 新增多版本笔记功能,并做了向下兼容。
- 新增关于页面组件,介绍项目背景、功能和使用方法
- 重构笔记生成逻辑,支持多版本笔记
- 新增笔记版本选择、复制和导出功能
-优化笔记界面布局和交互
- 调整部分组件样式,提升用户体验
|
2025-05-04 11:00:54 +08:00 |
|
黄建武
|
0e055b34ca
|
feat(MarkdownViewer):增强 Markdown 解析和渲染能力
- 添加对 GFM (GitHub Flavored Markdown) 的支持
- 增加数学公式渲染功能
- 实现加粗编号标题的特殊处理
- 优化代码块样式
- 添加图片缩放功能
|
2025-05-03 02:24:56 +08:00 |
|
黄建武
|
bb64936a38
|
docs(README): 更新项目版本和功能说明
- 将 BiliNote 版本号从 v1.3.0 更新为 v1.4.0
- 新增多模态视频理解功能说明- 添加代码参考部分,说明抖音下载功能的代码来源
-增加 Star History 图标和相关说明
|
2025-05-03 00:01:02 +08:00 |
|
黄建武
|
749635e156
|
Merge remote-tracking branch 'origin/master' into feature/video_read
# Conflicts:
# backend/requirements.txt
|
2025-05-02 23:54:05 +08:00 |
|
黄建武
|
6e084f720d
|
feat(note): 添加视频理解功能- 在 GPT 模型中增加 video_img_urls 字段用于存储视频截图
- 在笔记生成请求中添加视频理解相关参数
- 实现视频截图功能,支持按指定间隔生成截图
- 更新笔记生成逻辑,支持视频理解功能- 在前端服务中添加视频理解相关参数
|
2025-05-02 23:47:15 +08:00 |
|
黄建武
|
bbba401637
|
build: 添加 gmssl 和 pycryptodomex 依赖
- 新增 gmssl 依赖,版本为 3.2.2
- 新增 pycryptodomex依赖,版本为 3.22.0
|
2025-05-02 16:10:30 +08:00 |
|
黄建武
|
fd3b105821
|
chore: 忽略 .idea 目录
- 在 .gitignore 文件中添加 .idea/目录,以忽略 IDE 相关的配置文件
|
2025-05-02 15:10:57 +08:00 |
|
黄建武
|
94220c8b97
|
Merge remote-tracking branch 'origin/master' into feature/douyin
|
2025-05-02 14:58:08 +08:00 |
|
黄建武
|
58402c6554
|
feat(env): 添加抖音 Cookie 设置项
- 在 .env.example 文件中添加了 DOUYIN_COOKIES 变量,用于设置抖音 Cookie
|
2025-05-02 14:04:54 +08:00 |
|
黄建武
|
04dad3b72a
|
feat(downloaders): 添加抖音视频识别功能
- 新增 abogus.py 文件,实现 a_bogus 参数的生成逻辑
- 代码源自 JoeanAmier/TikTokDownloader 项目,并进行了适配和优化
- 功能包括生成用户代理字符串、加密 URL 参数和生成最终的 a_bogus值
- 提供了详细的注释和函数说明,便于理解和维护
|
2025-05-02 14:00:29 +08:00 |
|
黄建武
|
b66c366a08
|
refactor(HomePage): 优化笔记表单提交状态显示
- 修改 isGenerating 函数逻辑,增加对任务状态的判断
- 在 onSubmit 函数中添加成功提交任务的提示信息
|
2025-04-29 22:11:44 +08:00 |
|
黄建武
|
06e0eb2ce3
|
fix(modelStore): 修复模型列表加载逻辑,兼容通义模型
- 增加了对 res.data.data.models.length > 0 的判断条件
- 当模型列表存在时,更新 models状态
- 优化了错误处理逻辑
|
2025-04-27 23:19:33 +08:00 |
|
黄建武
|
bd68ba35b9
|
fix(HomePage): 调整生成笔记按钮的位置,解决按钮失效问题
|
2025-04-27 23:14:50 +08:00 |
|
黄建武
|
e24979f6f4
|
fix(frontend): 修正 Error 组件的动画文件引用
- 将 error.json 文件名首字母大写,统一为 Error.json- 更新 Lottie 组件的动画文件引用
- 后端更新依赖文件
|
2025-04-27 22:45:49 +08:00 |
|
黄建武
|
a296e64f7a
|
build: 添加 blinker 依赖
- 在 requirements.txt 中新增了 blinker==1.9.0依赖
|
2025-04-14 08:55:50 +08:00 |
|