[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-96215":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":16,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":17,"hasPages":17,"topics":19,"createdAt":9,"pushedAt":9,"updatedAt":20,"readmeContent":21,"aiSummary":22,"trendingCount":14,"starSnapshotCount":14,"syncStatus":23,"lastSyncTime":24,"discoverSource":25},96215,"wechat-local-viewer","ops120\u002Fwechat-local-viewer","ops120","微信本地聊天记录查看器 — 会话浏览\u002F全文搜索\u002F多格式导出\u002F可选 LLM 智能总结，全部本地运行，零外部依赖。",null,"Python",131,89,108,0,5.86,"MIT License",false,"master",[],"2026-09-21 02:04:30","# WeChat Local Viewer (本地微信数据库查看器)\n\n> ⚠️ **本项目只提供查看界面，不提供任何解密工具**\n>\n> 本仓库不含密钥提取、数据库解密等任何工具与代码。聊天数据由用户自行准备后导入目录。\n\n\n> 实测微信版本：**4.1.13.12**（Windows）\n\n让用户在本机直接浏览微信聊天记录：会话列表、消息浏览、全文搜索、多格式导出。数据由用户提供，本工具**只负责查看**，全部本地运行，零外部依赖。\n\n## 功能特性\n\n- 📱 **会话列表**：按时间倒序展示所有会话（单聊\u002F群聊\u002F公众号）\n- 💬 **消息浏览**：按时间正序渲染（64 万条消息已实测导入，浏览流畅）\n- 🔍 **全文搜索**：基于 FTS5，1 秒内返回搜索结果\n- 🤖 **LLM 集成**：支持 OpenAI 兼容协议（DeepSeek \u002F OpenAI \u002F 硅基流动 \u002F Ollama 等），流式输出总结\u002F问答\n- ⚡ **本地优先**：所有数据本地处理，零外部依赖（除用户配置的 LLM）\n\n## 环境要求\n\n- Python 3.10+\n- Node.js 22+\n- Windows 10\u002F11\n\n## 界面预览\n\n主界面：\n\n![主界面](demo\u002Fui.png)\n\n联系人导出（支持按类型\u002F关键词筛选，导出 CSV \u002F JSON）：\n\n![联系人导出](demo\u002Fcontacts-export.png)\n\n## 一键启动\n\n1. 把用户自己的聊天数据放到项目根目录（二选一，自动识别）：\n   ```\n   wechat-local-viewer\u002F\n   ├── decrypted\u002F   （或 .decrypted\u002F）\n   │   ├── contact\u002F     # 联系人数据\n   │   ├── session\u002F     # 会话数据\n   │   ├── message\u002F     # 消息数据（message_*.db）\n   │   └── hardlink\u002F    # 图片索引（可选）\n   └── start.bat\n   ```\n2. 双击 `start.bat`\n3. 浏览器自动打开 http:\u002F\u002F127.0.0.1:18787\u002F（后端直接托管前端构建产物）\n\n### 默认端口\n\n| 端口 | 用途 |\n|---|---|\n| **18787** | 后端 FastAPI（避开 8765 等 Windows 保留端口） |\n| **15713** | 前端 Vite dev（避开 5173 易冲突） |\n\n### 自定义端口\n\n```powershell\nset WCVIEWER_PORT=28888\nset WCVIEWER_FRONT_PORT=25813\nstart.bat\n```\n\nstart.bat 启动前会做端口冲突检测，被占用会报错并给出提示。\n\n## 手动启动\n\n```bash\n# 后端\ncd backend\npip install -r requirements.txt\npython -m uvicorn app.main:app --host 127.0.0.1 --port 18787\n\n# 前端（开发模式）\ncd frontend\nnpm install\nnpm run dev\n# 生产用：npm run build → 后端自动托管 dist\n```\n\n## 目录结构\n\n### 源数据（用户提供）\n\n```\ndecrypted\u002F  （或 .decrypted\u002F，二选一自动识别）\n├── contact\u002F     # 联系人数据\n├── session\u002F     # 会话数据\n├── message\u002F     # 消息数据（message_*.db 等）\n└── hardlink\u002F    # 图片文件索引（hardlink.db，可选）\n```\n\n### 项目结构\n\n```\n.\n├── backend\u002F           # 后端服务\n│   ├── app\u002F\n│   │   ├── api\u002F       # API 路由\n│   │   ├── parsers\u002F   # 数据解析器\n│   │   ├── llm\u002F       # LLM 客户端\n│   │   └── etl.py     # ETL 主流程\n│   ├── tests\u002F\n│   └── requirements.txt\n├── frontend\u002F          # 前端应用\n│   ├── src\u002F\n│   │   ├── api\u002F       # API 客户端\n│   │   ├── stores\u002F    # Pinia 状态管理\n│   │   ├── views\u002F     # 页面组件\n│   │   └── components\u002F# UI 组件\n│   └── package.json\n├── .github\u002F           # CI 工作流\n├── start.bat          # 一键启动脚本\n├── refresh.bat        # 增量刷新脚本\n├── THIRD_PARTY_NOTICES.md         # 第三方组件说明\n├── CONTRIBUTING.md \u002F CHANGELOG.md \u002F LICENSE\n└── README.md\n```\n\n### 运行时数据目录（不属于仓库）\n\n以下目录由工具\u002F服务在运行时生成或由用户提供，均已通过 `.gitignore` 排除，**不要**提交到版本库：\n\n| 目录 | 作用 |\n|---|---|\n| `decrypted\u002F` 或 `.decrypted\u002F` | 微信聊天数据（用户提供） |\n| `.cache\u002F` | 中间层数据库 `app.db`（ETL 自动创建） |\n| `.export\u002F` | 导出产物 |\n| `.tmp\u002F` | 日志等临时文件 |\n\n## 系统架构\n\n```\n┌──────────────────────────────────────┐\n│  数据源（用户提供）                    │\n│  decrypted\u002F                           │\n└──────────────┬──────────────────────┘\n               │ ① ETL (etl.py)\n               │    指纹判断：全量 \u002F 增量 \u002F 跳过\n               │    parse_sessions→sessions 表\n               │    parse_contacts→contacts 表\n               │    parse_messages→messages 表 (+FTS5 索引)\n               │    _update_session_stats 聚合统计\n               ▼\n┌──────────────────────────────────────┐\n│  .cache\u002Fapp.db  (中间层查询库)        │\n│  sessions \u002F contacts \u002F messages + FTS │\n└──────────────┬──────────────────────┘\n               │ ② API (FastAPI :18787)\n               ▼\n┌──────────────────────────────────────┐\n│  frontend (Vue, 已构建至 dist)        │\n│  会话列表 \u002F 消息浏览 \u002F 搜索 \u002F 导出     │\n└──────────────────────────────────────┘\n```\n\n## 验证步骤\n\n1. **检查文件结构**\n   ```powershell\n   cd \u003C仓库根目录>\n   tree \u002FF frontend\n   ```\n\n2. **前端依赖安装**\n   ```bash\n   cd frontend\n   npm config set registry https:\u002F\u002Fregistry.npmmirror.com\n   npm config set maxsockets 4\n   npm config set audit false\n   npm install\n   ```\n\n3. **一键启动**\n   ```powershell\n   cd \u003C仓库根目录>\n   start.bat\n   ```\n\n## API 端点\n\n| 端点 | 方法 | 说明 |\n|---|---|---|\n| `\u002Fapi\u002Fsessions` | GET | 会话列表（按 `last_time` 倒序） |\n| `\u002Fapi\u002Fsessions\u002F{username}` | GET | 单会话详情 |\n| `\u002Fapi\u002Fmessages?session=X` | GET | 消息分页 |\n| `\u002Fapi\u002Fmessages\u002F{id}` | GET | 单消息详情 |\n| `\u002Fapi\u002Fmessages\u002F{id}\u002Fcontext` | GET | 消息上下文 |\n| `\u002Fapi\u002Fsearch?q=X` | GET | 全文搜索（FTS5） |\n| `\u002Fapi\u002Fsearch\u002Fsuggest?q=X` | GET | 搜索建议 |\n| `\u002Fapi\u002Fcontacts\u002Fexport` | GET | 联系人导出（csv\u002Fjson，支持 type\u002Fkeyword 筛选） |\n| `\u002Fapi\u002Fadmin\u002Fetl` | POST | 触发 ETL（`{force:bool}`） |\n| `\u002Fapi\u002Fadmin\u002Fstatus` | GET | ETL 状态 |\n| `\u002Fapi\u002Fadmin\u002Flogs` | GET | 日志尾部 |\n| `\u002Fapi\u002Fadmin\u002Frebuild-fts` | POST | 重建 FTS 索引 |\n| `\u002Fapi\u002Fadmin\u002Fstats\u002Fdaily` | GET | 每日统计 |\n| `\u002Fapi\u002Fllm\u002Fconfig` | GET \u002F POST | LLM 配置 |\n| `\u002Fapi\u002Fllm\u002Fchat` | POST | LLM 流式问答（SSE） |\n| `\u002Fmedia\u002F...` | GET | 媒体静态文件（仅已还原的部分图片可用） |\n\n## LLM 配置（可选）\n\n打开页面右上角「设置」，填：\n\n- **Base URL**：OpenAI 兼容服务地址\n  - DeepSeek: `https:\u002F\u002Fapi.deepseek.com\u002Fv1`\n  - OpenAI: `https:\u002F\u002Fapi.openai.com\u002Fv1`\n  - Ollama: `http:\u002F\u002Flocalhost:11434\u002Fv1`\n  - 硅基流动: `https:\u002F\u002Fapi.siliconflow.cn\u002Fv1`\n- **API Key**：对应服务的 key\n- **Model**：模型名（如 `deepseek-chat`、`gpt-4o-mini`、`qwen2.5:7b`）\n\nAPI key 仅存浏览器 `localStorage`，随每次问答请求发给后端（也可用环境变量 `LLM_BASE_URL` \u002F `LLM_API_KEY` \u002F `LLM_MODEL` 做后备默认值）。未配置时点「总结」会给出明确提示。\n\n## 安全\n\n- **零外发**：除 LLM base_url 外无任何 outbound HTTP。\n- 静态 `\u002Fmedia\u002F` 不列目录。\n- LLM API key 仅存浏览器 localStorage。\n\n## 性能预算\n\n| 项 | 备注 |\n|---|---|\n| 启动 → 首屏 | 数秒（64 万消息库，未实测计时） |\n| 打开会话（首屏 30 条） | 索引查询，表现良好（未实测计时） |\n| 全文搜索 | FTS5 索引，秒级（未实测计时） |\n| LLM 流式首字 | 取决于模型服务（未实测计时） |\n\n## 约束\n\n- Python pip 用清华源。\n- Node `^22.19.0 || >=24.0.0`。\n- 默认端口 **18787（后端）\u002F 15713（前端）**，避开 8765（Windows 保留）\u002F 5173（易冲突）。\n\n## 许可证\n\n本项目基于 [MIT License](LICENSE) 开源。\n\n## 社区\n\n本项目在 [LINUX DO](https:\u002F\u002Flinux.do) 社区进行开源推广，感谢社区佬友的交流、反馈与建议。\n\n## 致谢 \u002F 第三方组件\n\n- [FastAPI](https:\u002F\u002Fgithub.com\u002Ffastapi\u002Ffastapi)、[Vue](https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fcore)、[Vite](https:\u002F\u002Fgithub.com\u002Fvitejs\u002Fvite) 及所有开源依赖的作者。","WeChat Local Viewer 是一款本地运行的微信聊天记录可视化与分析工具，专为已解密的微信数据库提供安全、离线的浏览能力。核心功能包括会话列表管理、按时间序的消息渲染、基于 SQLite FTS5 的毫秒级全文搜索、多格式（CSV\u002FJSON）导出，以及可选的 OpenAI 兼容 LLM 接口用于智能总结与问答。所有数据处理均在用户本机完成，不依赖外部服务或云端组件。适用于数字取证辅助、个人聊天归档整理、法律证据初步梳理等需严格保障数据隐私与本地可控性的场景。",2,"2026-09-12 02:30:08","CREATED_QUERY"]