349 Commits

Author SHA1 Message Date
Jianwu Huang
2cd43770eb Merge pull request #318 from linwinfan/feat/zustand-indexeddb 2026-05-05 14:34:18 +08:00
Jianwu Huang
e3134f2078 Merge pull request #333 from Lizhilin/fix/bilibili-cookie-injection 2026-05-05 14:32:32 +08:00
Jianwu Huang
118b7357c5 Merge pull request #336 from liang09255/fix-switch-0502 2026-05-05 14:32:22 +08:00
liang09255
c9ab763f1b fix(frontend): 修复供应商开关切换不能实时生效的问题 2026-05-02 21:51:33 +08:00
Lizhilin
c5e08e1ec6 fix: BilibiliDownloader 从 CookieConfigManager 读取 cookie 并注入 yt-dlp cookiefile 2026-04-28 23:20:34 +08:00
linwinfan
20fcf2c29c feat(frontend): migrate Zustand persist storage to IndexedDB
- Add idb-keyval dependency for IndexedDB support
- Configure persist middleware to use IndexedDB
- Improves persistence reliability in browser environments
2026-04-07 15:51:53 +08:00
Jianwu Huang
8fa3101f0f Merge pull request #311 from JefferyHcool/feature/optimize-build
fix(docker): 优化 Vite 配置以支持 Docker 构建环境
2026-03-23 18:55:35 +08:00
huangjianwu
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
Jianwu Huang
1f52185539 Merge pull request #310 from JefferyHcool/feature/optimize-build
fix(ci): 移除 pnpm install 的 --frozen-lockfile 标志
2026-03-23 18:52:56 +08:00
huangjianwu
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
Jianwu Huang
c9ee3e6957 Merge pull request #309 from JefferyHcool/feature/optimize-build
fix(frontend): 修复 ESM 模式下 __dirname 未定义的问题
2026-03-23 18:47:42 +08:00
huangjianwu
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
Jianwu Huang
274e5d25a8 Merge pull request #308 from JefferyHcool/feature/optimize-build
fix(docker): 修复前端构建时缺少 .env 文件的问题
2026-03-23 18:43:58 +08:00
huangjianwu
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
Jianwu Huang
e7db5124ea Merge pull request #307 from JefferyHcool/feature/optimize-build
fix(docker): 修复 apt-get 安装失败问题
2026-03-23 18:39:15 +08:00
huangjianwu
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
Jianwu Huang
198f01d079 Merge pull request #306 from JefferyHcool/feature/optimize-build
chore: 删除 ffmpeg 二进制文件并更新 .gitignore
2026-03-23 18:32:54 +08:00
huangjianwu
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
Jianwu Huang
7da4f9587b Merge pull request #305 from JefferyHcool/feature/optimize-build
Feature/optimize build
2026-03-23 18:26:34 +08:00
Jianwu Huang
0e10a3d906 Merge pull request #304 from JefferyHcool/master
修复打包错误
2026-03-23 18:13:24 +08:00
huangjianwu
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
huangjianwu
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>
v2.0.0
2026-03-23 17:58:57 +08:00
Jianwu Huang
3010690d2e Merge pull request #303 from JefferyHcool/feature/update-readme-v2
docs: 更新 README 至 v2.0.0,补充新功能说明和 Docker 部署方式
2026-03-23 17:56:15 +08:00
Jianwu Huang
a40bb19743 Merge branch 'master' into feature/update-readme-v2 2026-03-23 17:56:07 +08:00
huangjianwu
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
Jianwu Huang
90aeb22853 Merge pull request #302 from JefferyHcool/feature/optimize-build
feat(build): 全面优化打包流程,Docker 镜像自动发布到 GHCR
2026-03-23 17:49:25 +08:00
huangjianwu
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
Jianwu Huang
c553fd898f Merge pull request #301 from JefferyHcool/feature/youtube-subtitle-innertube
feat(youtube): 使用 youtube-transcript-api 优先获取字幕,有字幕时跳过音频下载
2026-03-23 17:32:48 +08:00
huangjianwu
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
Jianwu Huang
5861ef4168 Merge pull request #300 from JefferyHcool/feature/ui-optimize
feat(ui): 工作区和生成历史面板支持折叠/展开
2026-03-23 16:12:32 +08:00
huangjianwu
27758f95dd feat(ui): 工作区和生成历史面板支持折叠/展开
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 16:09:57 +08:00
Jianwu Huang
a2ab457f75 Merge pull request #299 from JefferyHcool/feature/note-qa-chat-optimize
Feature/note qa chat optimize
2026-03-23 16:00:15 +08:00
huangjianwu
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
huangjianwu
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
huangjianwu
55cc3bcd63 feat(ui): 笔记顶部新增视频封面 Banner
- 视频封面做模糊暗色背景,上方叠加视频信息
- 显示视频标题、作者/UP主、平台
- 右侧「原视频」按钮跳转原始链接
- 无封面时降级为渐变背景

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 15:54:36 +08:00
huangjianwu
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
huangjianwu
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
huangjianwu
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
huangjianwu
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
huangjianwu
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
huangjianwu
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
huangjianwu
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
huangjianwu
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
huangjianwu
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
huangjianwu
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
huangjianwu
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
huangjianwu
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
huangjianwu
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
huangjianwu
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
Jianwu Huang
63b8ac7e2b Merge pull request #298 from JefferyHcool/bugfix/performance-and-transcriber-config
fix: 性能优化、前端转写器配置、任务进度丢失及 MLX Whisper 回退问题修复
2026-03-23 14:23:03 +08:00