[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94533":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":13,"subscribersCount":13,"size":13,"stars1d":13,"stars7d":13,"stars30d":14,"stars90d":13,"forks30d":13,"starsTrendScore":13,"compositeScore":15,"rankGlobal":8,"rankLanguage":8,"license":16,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":19,"hasPages":17,"topics":20,"createdAt":8,"pushedAt":8,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":13,"starSnapshotCount":13,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},94533,"WeChat-AI","SMNETSTUDIO\u002FWeChat-AI","SMNETSTUDIO",null,"TypeScript",1757,1255,1,0,405,64.3,"Apache License 2.0",false,"master",true,[],"2026-08-24 04:01:22","\u003Cdiv align=\"center\">\n\n# WeChat-AI\n\n**自托管微信角色扮演对话服务** · Self-hosted WeChat roleplay chatbot service\n\n直连腾讯 **iLink**，数据存 **远端 Redis**，登录用 **LINUX DO OAuth**。\nConnects directly to Tencent **iLink**, stores data in **remote Redis**, and authenticates via **LINUX DO OAuth**.\n\n[功能 Features](#功能-features) · [架构 Architecture](#架构-architecture) · [快速开始 Quick Start](#快速开始-quick-start) · [文档 Docs](#文档-docs) · [许可证 License](#许可证-license)\n\n[![community](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F653f2b6b-ee32-4f0f-abe0-1ba96e4bb473)](https:\u002F\u002Flinux.do\u002F) [![Telegram Group](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTelegram-Group-blue?logo=telegram&style=flat)](https:\u002F\u002Ft.me\u002Fsmnet_group\u002F105727)\n\n\u003C\u002Fdiv>\n\n---\n\n## 功能 Features\n\n| 中文 | English |\n|------|---------|\n| LINUX DO OAuth 登录（用户 \u002F 管理员） | LINUX DO OAuth login (user \u002F admin) |\n| 用户中心：扫码添加\u002F删除微信机器人、批准私聊用户、分配人设 | User center: scan-QR add\u002Fremove WeChat bots, approve chat peers, assign personas |\n| 用户对话：绑定 LINUX DO 后微信内 `@用户名` 请求对话，对方 `\u002F同意` 后双向中继 | P2P chat: after binding, `@username` in WeChat to request a chat, peer replies `\u002Fagree` to relay messages both ways |\n| 管理后台：数据面板、Token 用量、用户与机器人、部署节点、表情包审核 | Admin dashboard: stats, token usage, users & bots, deploy nodes, sticker moderation |\n| 表情包广场：投稿 \u002F 我的库 \u002F 公开需审核；恶意图过滤 | Sticker square: submit \u002F my library \u002F public needs review; malicious-image filtering |\n| 回复文字与图片表情（主人表情库 → 模型引用 slug → iLink CDN 发图） | Text + image sticker replies (owner sticker library → model references slug → sent via iLink CDN) |\n| 输入状态指示（getconfig + sendtyping，回复送达即消失） | Typing indicator (getconfig + sendtyping, disappears when reply is delivered) |\n| 入站图片理解（`VISION_ENABLED`，默认关闭；caption 模式人设模型无需视觉） | Inbound image understanding (`VISION_ENABLED`, off by default; `caption` mode needs no vision-capable roleplay model) |\n| 入站语音转写（微信自带转写，默认开启） | Inbound voice transcription (WeChat built-in STT, on by default) |\n| 远端 Redis 存储（bot token 与表情包均在 Redis） | Remote Redis storage (bot tokens & stickers in Redis) |\n| OpenAI 兼容 LLM + 按日 Token 统计 | OpenAI-compatible LLM + daily token stats |\n| 用户自定义模型 + 联网搜索（经 HF 工具网关出站，主站不直连用户 API） | User custom models + web search (egress only via HF tools gateway) |\n| Chatflow：可视化编排（`\u002Fchatflow`），人设可选 prompt \u002F chatflow 模式 | Chatflow: visual orchestration (`\u002Fchatflow`), personas support prompt \u002F chatflow mode |\n| 多节点同构部署 + Cloudflare Worker 负载均衡 | Multi-node homogeneous deployment + Cloudflare Worker LB |\n| OTA 增量更新（文件差量 + 自动重启） | OTA incremental updates (file diff + auto restart) |\n\n## 架构 Architecture\n\n```\n微信用户 ──► 腾讯 iLink ──► 本系统多节点 (收消息 \u002F 人设+记忆 \u002F LLM \u002F 回消息)\nWeChat user ──► Tencent iLink ──► multi-node system (receive \u002F persona+memory \u002F LLM \u002F reply)\n\n浏览器 ──► 主域名 CF Worker LB ──► Node-1…N (同一镜像, 共享 Redis)\nBrowser ──► main domain CF Worker LB ──► Node-1…N (same image, shared Redis)\n```\n\n## 快速开始 Quick Start\n\n### 本地开发 Local Development\n\n```bash\npnpm install\ncp .env.example .env\n# 必填 Required: REDIS_URL（Upstash 用 rediss:\u002F\u002F）、LLM_API_KEY（平台）、LINUXDO_* 、LINUXDO_ADMIN_IDS\n# 用户自定义 LLM \u002F 联网搜索：部署 huggingface\u002Fwechat-ai-tools，配置 TOOLS_BASE_URL + TOOLS_API_KEY\n\npnpm db:seed\npnpm diag\npnpm dev\n```\n\n页面 \u002F Pages：\n\n| 路径 Path | 说明 Description |\n|-----------|------------------|\n| `\u002F` | 功能落地页 + OG 分享图 Landing page |\n| `\u002Fapp` | 用户中心 User center (LINUX DO login) |\n| `\u002Fdocs` | 使用文档 Documentation |\n| `\u002Fadmin` | 管理后台 Admin dashboard |\n| `\u002Fchatflow` | Chatflow 编辑器 Chatflow editor |\n\n### Docker 一键部署 One-Click Deploy\n\n```bash\n# 配置好 .env 后 After configuring .env\ndocker compose up -d --build\n```\n\n详见 \u002F See `docs\u002Fdocker.md`。\n\n### 多节点 Multi-Node\n\n每台服务器运行**同一镜像**，共享同一个 Upstash Redis，用户只访问主域名。Cloudflare Worker 负责健康检查与轮询分流，源站地址只写在 Worker 的 `ORIGINS` 中。详见 \u002F See `cloudflare-worker\u002FREADME.md`。\n\nEach server runs the **same image**, shares one Upstash Redis; users only visit the main domain. A Cloudflare Worker handles health checks and round-robin, origin addresses live only in the Worker's `ORIGINS`.\n\n## 文档 Docs\n\n| 文档 Doc | 内容 Content |\n|----------|-------------|\n| [docs\u002Fupstash-redis.md](docs\u002Fupstash-redis.md) | Upstash Redis 配置 Redis setup |\n| [docs\u002Foauth-linuxdo.md](docs\u002Foauth-linuxdo.md) | LINUX DO OAuth 配置 |\n| [docs\u002Fdocker.md](docs\u002Fdocker.md) | Docker \u002F 多节点部署 Multi-node deploy |\n| [docs\u002Fcloudflare.md](docs\u002Fcloudflare.md) | Cloudflare 缓存 Cache |\n| [cloudflare-worker\u002FREADME.md](cloudflare-worker\u002FREADME.md) | CF Worker 多源站 LB |\n| [docs\u002Fai-gateway.md](docs\u002Fai-gateway.md) | AI 网关（主站 ↔ HF）AI gateway |\n| [docs\u002Fchatflow.md](docs\u002Fchatflow.md) | Chatflow 编排 |\n| [docs\u002Fadmin-api.md](docs\u002Fadmin-api.md) | 管理 API |\n| [docs\u002Frunbook.md](docs\u002Frunbook.md) | 运维手册 Ops runbook |\n| [docs\u002Fe2e-checklist.md](docs\u002Fe2e-checklist.md) | 真机验收清单 E2E checklist |\n\n## 仓库结构 Repository Structure\n\n```\napps\u002Fapi           # REST + iLink worker + Admin\u002FApp\u002FChatflow UI (public\u002F*.html)\npackages\u002Filink     # iLink HTTP 客户端 iLink HTTP client\npackages\u002Fdb        # Redis 仓储 \u002F seed \u002F 人设与模型连接 Redis repos \u002F seed\npackages\u002Fllm       # OpenAI 兼容 chat + tools 网关客户端\npackages\u002Fcore      # 会话、人设、记忆、路由、chatflow 引擎\nhuggingface\u002F       # wechat-ai-tools：唯一外网 AI\u002F搜索出口（可独立部署）\ncloudflare-worker  # 主域名负载均衡 Cloudflare Worker LB\ndocs\u002F              # runbook、E2E 清单、ADR\nscripts\u002F           # 构建 \u002F 打包 \u002F 验收脚本 build \u002F pack \u002F accept scripts\n```\n\n## 验收 Acceptance\n\n```bash\npnpm accept          # 离线自动化门禁 offline automated gate\n```\n\n真机清单 \u002F Real-device checklist：`docs\u002Fe2e-checklist.md` · 状态 \u002F Status：`docs\u002FACCEPTANCE.md`\n\n## 合规与风险 Compliance & Risk\n\n- 使用腾讯 **微信 ClawBot \u002F iLink** 能力，须遵守相关使用条款。\n  Using Tencent **WeChat ClawBot \u002F iLink** capabilities requires compliance with the applicable terms.\n- 个人 Bot 存在限流与处置风险；默认 **白名单用户** 才可对话。\n  Personal bots face rate-limit and takedown risks; by default only **approved users** can chat.\n- 角色扮演内容会经 LLM API 出机；请自行评估隐私。\n  Roleplay content leaves the machine via LLM APIs; assess your own privacy posture.\n- iLink 协议以实测为准，字段可能变更；适配层见 `packages\u002Filink`。\n  The iLink protocol is based on observed behavior and may change; the adapter lives in `packages\u002Filink`.\n\n## 许可证 License\n\n[Apache-2.0 with Commons Clause](LICENSE)\n\n**禁止商用与转卖**：仅允许个人\u002F非商业使用；不得以任何形式收取费用、提供付费托管\u002F咨询服务，或将本代码用于商业产品转售。详见 [LICENSE](LICENSE)。\n\n**No commercial use \u002F no resale**: personal & non-commercial use only. You may not charge fees, offer paid hosting\u002Fsupport, or resell the code in commercial products. See [LICENSE](LICENSE).\n","WeChat-AI 是一个自托管的微信角色扮演对话服务平台，支持通过腾讯 iLink 协议直连微信，实现用户与 AI 机器人的双向消息中继。核心功能包括：LINUX DO OAuth 统一身份认证、扫码管理微信机器人、基于 OpenAI 兼容接口的 LLM 对话、可视化 Chatflow 编排、表情包投稿与审核、入站语音转写与可选图片理解、多节点同构部署及 Cloudflare Worker 负载均衡。所有状态数据（如 bot token、表情包）统一存储于远端 Redis，支持按日 Token 统计与 OTA 增量更新。适用于需私有化部署、强身份管控与定制化人设交互的微信生态 AI 应用场景，如社区运营、虚拟客服或创意角色实验。",2,"2026-08-11 02:30:08","CREATED_QUERY"]