Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
ac75d50
feat: 新增聊天 AI 助手、智能检索与通知支持
xiaoshengbao Sep 9, 2026
46d1e32
fix(contacts): 修复实时联系人查询失败时的本地回退
xiaoshengbao Sep 9, 2026
9da6264
merge: 同步上游 main 并保留双方忽略规则
xiaoshengbao Sep 9, 2026
710acc6
fix(export): 复用 native broker 避免并发导出 BUSY
xiaoshengbao Sep 9, 2026
15be7f1
fix(ci): use uv-managed Python for AI SQLite checks
xiaoshengbao Sep 9, 2026
58cc8cd
feat(ai): 完善模型能力配置与 Vue 对话体验
xiaoshengbao Sep 9, 2026
d7eb6bf
fix(installer): 修复中文路径编码及安装器回填乱码
xiaoshengbao Sep 9, 2026
2ee61bb
feat(ai): 按参考设计精简执行过程与引用样式
xiaoshengbao Sep 9, 2026
534e0d8
feat(ai): 完成后默认折叠过程并聚焦最终回答
xiaoshengbao Sep 9, 2026
0791eaa
test(installer): 在 PR 和发布阶段强制检查中文路径回归
xiaoshengbao Sep 9, 2026
b18f4cf
feat(ai): 用独立过程面板区分执行记录与最终回答
xiaoshengbao Sep 9, 2026
54730b5
style(ai): 将收起的执行过程改为轻量文字入口
xiaoshengbao Sep 9, 2026
30c76b1
fix(ci): 避免安装器检查跨提交取消并完善超时诊断
xiaoshengbao Sep 9, 2026
989818b
fix(favorites): 兼容非 UTF-8 收藏字段及标签
xiaoshengbao Sep 9, 2026
fd0e84b
fix(ai): 统一执行过程交互并修复会话菜单和最近消息范围
xiaoshengbao Sep 9, 2026
6c10be6
style(ai): 移除执行过程运行态的魔法棒图标
xiaoshengbao Sep 9, 2026
14c31f0
style(ai): 统一移除执行过程入口的前置状态图标
xiaoshengbao Sep 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions .github/workflows/ai-cross-platform.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: AI Cross-Platform Checks

on:
workflow_dispatch:
pull_request:
paths:
- '.github/workflows/ai-cross-platform.yml'
- 'src/wechat_decrypt_tool/ai/**'
- 'src/wechat_decrypt_tool/local_search/**'
- 'src/wechat_decrypt_tool/routers/ai*.py'
- 'src/wechat_decrypt_tool/routers/local_search.py'
- 'src/wechat_decrypt_tool/resources/local_search*.json'
- 'desktop/scripts/ai-packaging.cjs'
- 'desktop/scripts/build-backend.cjs'
- 'desktop/src/ai-notifications.cjs'
- 'desktop/src/renderer-startup.cjs'
- 'desktop/src/main.cjs'
- 'desktop/tests/ai-*.test.cjs'
- 'desktop/tests/renderer-startup.test.cjs'
- 'tools/verify_ai_runtime.py'
- 'tools/build_ai_smoke.cjs'
- 'frontend/components/**'
- 'frontend/composables/useAiApi.js'
- 'tests/test_ai*.py'
- 'tests/test_local_search*.py'
- 'pyproject.toml'
- 'uv.lock'

permissions:
contents: read

jobs:
ai:
strategy:
fail-fast: false
matrix:
os: [windows-2022, macos-14]
runs-on: ${{ matrix.os }}
timeout-minutes: 30
env:
# macOS setup-python builds may lack SQLite loadable-extension support.
# Use uv-managed CPython for both source checks and the frozen runtime.
UV_MANAGED_PYTHON: 'true'
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: '3.11'
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
- run: python -m pip install uv
- name: Install Python with SQLite extension support
run: uv python install 3.11
- run: uv sync --locked --extra build
- name: AI runtime and media (synthetic, no API calls)
run: uv run python tools/verify_ai_runtime.py
- name: AI and local search regression
shell: bash
run: uv run pytest -q tests/test_ai*.py tests/test_local_search*.py
- run: npm ci
working-directory: frontend
- run: npx vitest run
working-directory: frontend
- run: npm run generate
working-directory: frontend
- name: Desktop notification and packaging contracts
run: node --test desktop/tests/ai-notifications.test.cjs desktop/tests/ai-packaging.test.cjs desktop/tests/renderer-startup.test.cjs
- name: Frozen AI runtime (no account or API credentials)
run: node tools/build_ai_smoke.cjs
58 changes: 58 additions & 0 deletions .github/workflows/installer-unicode.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Windows Installer Unicode

on:
workflow_dispatch:
pull_request:
paths:
- 'desktop/**'
- '.github/workflows/installer-unicode.yml'
- '.github/workflows/release.yml'
- '.gitattributes'
push:
branches: [main]
paths:
- 'desktop/**'
- '.github/workflows/installer-unicode.yml'
- '.github/workflows/release.yml'
- '.gitattributes'

permissions:
contents: read

concurrency:
# 不同提交分别完成回归检查,避免连续推送让旧提交留下 Cancelled 状态。
# 同一提交的重复触发仍可取消,减少重复运行。
group: installer-unicode-${{ github.workflow }}-${{ github.ref }}-${{ github.sha }}
cancel-in-progress: true

jobs:
unicode-paths:
name: Windows installer Unicode paths
runs-on: windows-2022
timeout-minutes: 15
steps:
- name: Checkout
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
cache: npm
cache-dependency-path: desktop/package-lock.json
# 仅测试安装器函数,不构建完整应用,也不需要签名或真实用户数据。
- name: Install locked test dependencies
working-directory: desktop
run: npm ci --ignore-scripts
- name: Verify Unicode install, upgrade, settings and data migration
working-directory: desktop
shell: pwsh
run: |
node --test `
tests/desktop-settings.test.cjs `
tests/output-dir.test.cjs `
tests/installer-output-dir.test.cjs `
tests/installer-safety.test.cjs `
tests/installer-unicode-integration.test.cjs
if ($LASTEXITCODE -ne 0) {
throw 'Windows installer Unicode regression tests failed.'
}
5 changes: 5 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -563,6 +563,11 @@ jobs:
shell: pwsh
run: |
node --test `
tests/desktop-settings.test.cjs `
tests/output-dir.test.cjs `
tests/installer-output-dir.test.cjs `
tests/installer-safety.test.cjs `
tests/installer-unicode-integration.test.cjs `
tests/package-config.test.cjs `
tests/native-core-before-pack.test.cjs `
tests/native-core-packaging.test.cjs `
Expand Down
11 changes: 11 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,17 @@ pnpm-lock.yaml

# Local scratch file accidentally generated during development
/bento-summary.html
/tmp/local-search-validation/

# 本地跨平台验收的传输包、运行目录与远程连接辅助脚本
/tmp/macos-ai-*
/tmp/macos-public-manifest.json
/tmp/mac-desktop-probe.cjs
/tmp/mac-ui-check.cjs
/tmp/mac-user-ui.cjs
/tmp/mac-e2e-private.json
/tmp/ai-frozen-check/
/tmp/ai-macos-regression-*/

# 高级版演示走片的默认输出目录(website/dev/shot.mjs),只是本地调试产物
pro-shots/
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,12 @@ npm run dev
- API服务(默认): http://localhost:10392 (可通过环境变量 WECHAT_TOOL_PORT 修改)
- API文档(默认): http://localhost:10392/docs

## 聊天 AI 总结与关注提醒

在「设置 → AI 服务」配置模型后,点击聊天右上角 AI,可按条数或时间批量总结群聊与好友消息,并设置定时总结、消息阈值和 AI 语义关注提醒。支持图片、常见文档分析及桌面通知。详见 [使用与开发说明](docs/chat-ai.md)。

可在「设置 → AI 服务 → 本地检索」按账号开启可选的语义检索,使用 Hugging Face 固定版本模型,支持 CPU 与 NVIDIA GPU 自动回退。使用方法、下载来源和兼容性实测见 [本地语义检索说明](docs/local-semantic-search.md)。

## MCP 服务

设置页中的“AI 接入提示词”会包含 endpoint 和 Bearer token,可直接复制给客户端作为接入指令。
Expand Down
32 changes: 32 additions & 0 deletions THIRD_PARTY_NOTICES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
# Third-Party Notices

## AI provider icons

AI provider SVG brand marks in `frontend/assets/icons/ai-providers/` come from
[`@lobehub/icons-static-svg` 1.95.0](https://www.npmjs.com/package/@lobehub/icons-static-svg/v/1.95.0),
part of [Lobe Icons](https://github.com/lobehub/lobe-icons), copyright (c) 2023 LobeHub.
The SVG files are distributed unchanged under the MIT License. Color variants
retain their original colors; monochrome variants use themed CSS masks. The license is included in
`docs/licenses/lobe-icons-MIT.txt`. Brand marks identify their respective services.

The PNG app icons are original assets served by the respective official websites:

- Doubao: https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/favicon/new-doubao/128x128.png
- LM Studio: https://lmstudio.ai/assets/marketing/logo-192x192.png

These PNG assets are not covered by the Lobe Icons MIT License. All brand names
and trademarks belong to their respective owners and are used to identify services.

## Optional local voice transcription

The optional local voice transcription feature uses the following Python packages:
Expand Down Expand Up @@ -31,3 +48,18 @@ The complete upstream license text is included at
The optional Windows QQ feedback bridge reuses WeQ's `nt_helper.node` and QQ
flash-transfer protocol implementation. WeQ is copyright H3CoF6 and licensed under
CC BY-NC-SA 4.0: https://github.com/H3CoF6/WeQ

## Optional local semantic search

Local retrieval uses ONNX Runtime (MIT), Hugging Face Hub (Apache-2.0),
Hugging Face tokenizers (Apache-2.0), and sqlite-vec (MIT / Apache-2.0 dual license).
Embedding weights are downloaded separately from fixed Hugging Face revisions:
BAAI BGE Small/Base Chinese converted to ONNX by Xenova, and intfloat
multilingual E5 Small. Their selected repositories declare MIT; source,
revision and file hashes are recorded in `local_search_models.json`.

The optional NVIDIA component downloads pinned official Python wheels for CUDA
Runtime, cuBLAS, cuDNN and cuFFT. These libraries retain their NVIDIA license
terms and bundled notices; they are not relicensed under this repository's
license. ONNX Runtime GPU remains MIT. See `docs/local-semantic-search.md` and
`local_search_gpu.json` for the exact component list and validation status.
Loading
Loading