🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

微信远程接入 Carl-5535/dsh-wechat-gateway

DeepSeek Harness
Carl-553512 天前有提交已提供中文文档扫描:含敏感能力

微信 × DeepSeek Harness DSH:进程内插件,扫码即用,双向消息/文件,wechatnotify…

36.5/100
综合分
10
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/23 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Carl-5535/dsh-wechat-gateway
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · platform
装得上吗
实装验证未通过(repo_missing),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 12 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(repo_missing · 2026/10/23) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-wechat-gateway(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=20.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 14:42:20

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 27 处,展示前 26 条)
  • 发起网络请求
    src/client.ts:124
    void fetch(`/wechat-gateway/api/state${start ? '?start=1' : ''}`).then(async response => setState(await response.json() as StateResponse)).catch(() =>
  • 发起网络请求
    src/client.ts:128
    void fetch('/wechat-gateway/api/workspace').then(async r => {
  • 发起网络请求
    src/client.ts:135
    void fetch('/wechat-gateway/api/expiry-warn').then(async r => {
  • 发起网络请求
    src/client.ts:143
    void fetch('/wechat-gateway/api/expiry-warn', {
  • 发起网络请求
    src/client.ts:154
    void fetch(`/wechat-gateway/api/browse?path=${encodeURIComponent(path)}`).then(async r => {
  • 发起网络请求
    src/client.ts:169
    void fetch('/wechat-gateway/api/workspace', {
  • 发起网络请求
    src/ilink.ts:249
    const response = await this.#fetch(uploadUrl, {
  • 发起网络请求
    src/ilink.ts:306
    const response = await this.#fetch(url, { signal, redirect: 'error' })
  • 发起网络请求
    src/ilink.ts:340
    const response = await this.#fetch(`${this.#apiBase}${path}`, {
  • 写入本地文件
    src/media.ts:95
    await mkdir(directory, { recursive: true, mode: 0o700 })
  • 读取本地文件
    src/media.ts:113
    const workspaceReal = await realpath(workspace)
  • 读取本地文件
    src/media.ts:114
    const candidateReal = await realpath(candidate)
  • 读取本地文件
    src/media.ts:119
    const metadata = await stat(candidateReal)
  • 读取本地文件
    src/media.ts:122
    return { path: candidateReal, name: safeFileName(candidateReal, 'file.bin'), bytes: await readFile(candidateReal) }
  • 发起网络请求
    src/qrlogin.ts:43
    const response = await fetch(`${apiBase.replace(/ $/, '')}${path}`, {
  • 读取本地文件
    src/store.ts:60
    const metadata = await stat(path)
  • 读取本地文件
    src/store.ts:65
    const value: unknown = JSON.parse(await readFile(path, 'utf8'))
  • 写入本地文件
    src/store.ts:75
    await mkdir(parent, { recursive: true, mode: 0o700 })
  • 写入本地文件
    src/store.ts:76
    if (process.platform !== 'win32') await chmod(parent, 0o700)
  • 写入本地文件
    src/store.ts:85
    if (process.platform !== 'win32') await chmod(temporary, 0o600)
  • 写入本地文件
    src/store.ts:87
    await rename(temporary, path)
  • 删除本地文件
    src/store.ts:89
    await unlink(temporary).catch(() => undefined)
  • 读取本地文件
    src/store.ts:97
    await access(path)
  • 读取本地文件
    src/web-login.ts:311
    await stat(root)
  • 读取本地文件
    src/web-login.ts:319
    const metadata = await stat(targetPath)
  • 读取本地文件
    src/web-login.ts:324
    const items = await readdir(targetPath, { withFileTypes: true })
扫描于 2026/11/2(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-default-model@deepseek-ai/dsh-attachment@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-tools@deepseek-ai/dsh-user-approval@deepseek-ai/dsh-util-values
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 扫码即用
  • 双向消息与文件
  • 主动推送通知

README

由 DeepSeek 最新模型翻译生成
dsh-wechat-gateway CI License: MIT Node 把个人微信变成 DeepSeek Harness (DSH) Agent 的远程入口——手机微信发消息,本机 Agent 干活,回复送回微信。 插件以 Cordis 插件形式运行在 DSH Host 进程内,每个微信聊天对应一个持久会话,可在 Web UI 同时查看和接管。 特性 - 扫码即用 — 侧边栏内直接扫码,全程不离开主页 - 持久会话 — 每个聊天对应一个 DSH 会话,重启自动 resume,/new 随时重开 - 文件双向 — 微信附件落盘到工作区并喂给模型;Agent 用 [[send-file:路径]] 回发,正文提及的工作区文件自动回发(realpath 防越界,单条最多 5 个) - 工作目录 — 侧边栏弹窗内置目录选择器,可视化浏览并切换 Agent 工作目录,运行时立即生效并持久化 - 微信审批 — 越权操作审批直达微信,回复「同意/拒绝」即可,回复「网页」转交 Web UI 面板 - 权限模式 — /permission 切换预设(workspace-write ↔ danger-full-access),立即生效 - 主动推送 — wechat_notify 工具让任何 DSH 会话都能主动推送消息到你的微信
展开完整文档(README 剩余 1 节)
dsh-wechat-gateway

CI
License: MIT
Node

把个人微信变成 DeepSeek Harness (DSH) Agent 的远程入口——手机微信发消息,本机 Agent 干活,回复送回微信。

插件以 Cordis 插件形式运行在 DSH Host 进程内,每个微信聊天对应一个持久会话,可在 Web UI 同时查看和接管。

特性

- 扫码即用 — 侧边栏内直接扫码,全程不离开主页
- 持久会话 — 每个聊天对应一个 DSH 会话,重启自动 resume,/new 随时重开
- 文件双向 — 微信附件落盘到工作区并喂给模型;Agent 用 [[send-file:路径]] 回发,正文提及的工作区文件自动回发(realpath 防越界,单条最多 5 个)
- 工作目录 — 侧边栏弹窗内置目录选择器,可视化浏览并切换 Agent 工作目录,运行时立即生效并持久化
- 微信审批 — 越权操作审批直达微信,回复「同意/拒绝」即可,回复「网页」转交 Web UI 面板
- 权限模式 — /permission 切换预设(workspace-write ↔ danger-full-access),立即生效
- 主动推送 — wechat_notify 工具让任何 DSH 会话都能主动推送消息到你的微信
- 可靠投递 — 回复经持久化发件箱分块发送,超长切分、失败重试、重启续发
- 到期预警 — 凭据 24 小时有效期随收信自动续期;静置不足 4 小时(可配)过期时微信主动提醒,侧边栏可开关并显示剩余有效期
- 安全默认 — 默认拒绝一切来源,未配置白名单时仅响应登录账号本人

快速开始

1. 安装
npm i -g @deepseek-ai/dsh
dsh plugin --profile web add "github:Carl-5535/dsh-wechat-gateway#main"

2. 启动(默认 http://127.0.0.1:3080)
dsh web

3. 侧边栏底部「微信」入口 → 手机微信扫码
4. 用你自己的微信给机器人账号发消息即可

pnpm ≥ 10 需要显式允许 git 插件构建脚本。安装报 ERR_PNPM_GIT_DEPARE_NOT_ALLOWED 时,在 profile 目录(默认 ~/.dsh/profiles/web/)的 pnpm-workspace.yaml 添加 onlyBuiltDependencies: [dsh-wechat-gateway] 后重试。

Windows 本地开发用反斜杠绝对路径(D:\path\to\dsh-wechat-gateway),不要写 file:D:/...。macOS / Linux 用 file:/绝对路径。

也支持不装全局 CLI:把 dsh 换成 npx @deepseek-ai/dsh。

微信命令

| 命令 | 作用 |
| /help /帮助 | 查看说明 |
| /status /状态 | 查看会话状态 |
| /stop /停止 | 中止当前任务 |
| /new /新会话 | 丢弃上下文,开启新会话 |
| /model /模型 | 查看/切换模型(序号、模型 id 或 provider/model,仅当前聊天生效) |
| /permission /权限 | 查看/切换权限模式(序号、名称或中文别名,立即生效) |

其余消息作为用户输入交给 Agent 处理。凭据有效期约 24 小时(腾讯策略),收信自动续期;过期不影响登录和收消息,只是无法主动推送通知,用户发一条消息即可保活续期。

审批与权限

Agent 在 workspace-write 模式下越界操作时触发审批:

- 审批问题先只送达微信,回复认可词(同意/允许/yes)放行当次操作,拒绝词(拒绝/no)驳回
- 回复「网页」转交 Web UI 审批面板(面板待审批项只能由浏览器响应或任务中止清除,不会两侧同时挂起)
- 通道失效或任务中止时自动转交/撤销,不会无人应答
- 待审批期间发送其他消息照常处理,附带待办提醒

/permission 使用 DSH 官方 permissionPresets 服务:

- workspace-write:工作区可写,越界需审批(默认)
- danger-full-access:完全访问,不弹审批

切换写入会话事件日志,立即生效,Web UI 同步显示;/new 后回到默认。

主动推送

扫码登录后 wechat_notify 工具对所有 Agent 会话可用,推送目标为扫码账号:

- 编译/测试跑完通知结果、定时任务推送日报、长任务关键节点汇报
- 未登录时返回明确错误;超长自动分块、带重试、60 秒超时
- 微信会话内正常回复自动送达,无需此工具

安全模型

任何能给登录账号发微信消息的人,都在向你的 Agent 下达指令。 因此默认拒绝一切来源:

- 未配置白名单时仅响应登录账号本人(扫码凭据自动进白名单)
- Agent 默认 workspace-write(越界需审批),出站文件 realpath 校验锁定在工作区内
- 凭据与状态文件 600 权限落盘,登录路由仅限本机回环
- 微信通道条款禁止营销、客服、高频群发用途

配置

所有配置均可通过环境变量覆盖:

| 变量 | 默认值 | 说明 |
| WECHAT_BOT_TOKEN | — | 直接注入 token(优先于凭据文件) |
| WECHAT_CREDENTIAL_PATH | $DSH_HOME/wechat-gateway/account.json | 凭据文件 |
| WECHAT_STATE_PATH | $DSH_HOME/wechat-gateway/state.json | 网关状态文件 |
| WECHAT_WORKSPACE | 用户主目录 | Agent 工作区(cwd + 文件边界) |
| WECHAT_ALLOWED_USERS | 登录账号本人 | 用户白名单,逗号分隔 |
| WECHAT_MEDIA_DIR | $WORKSPACE/.wechat-gateway/inbox | 入站媒体目录 |
| WECHAT_BOT_API_BASE | https://ilinkai.weixin.qq.com | iLink API 入口 |
| WECHAT_CDN_BASE | https://novac2c.cdn.weixin.qq.com/c2c | 媒体 CDN |
| WECHAT_MAX_MESSAGE_CHARS | 3500 | 单条回复最大字符数 |
| WECHAT_MAX_MEDIA_BYTES | 104857600 | 单个媒体大小上限 |
| WECHAT_AUTO_SEND_FILES | true | 正文提及的工作区文件自动回发(0/false 关闭) |
| WECHAT_EXPIRY_WARN_LEAD_HOURS | 4 | 凭据到期预警提前量(小时,0 关闭) |

架构

手机微信 ⇄ iLink Bot API ⇄ ┌─ dsh web (Host 进程) ─────────────┐ │ wechat-gateway 插件 (Cordis) │ │ ├─ ILinkClient 长轮询/发送/媒体 │ │ ├─ WechatGateway 会话映射+投递 │ │ ├─ wechat_notify 主动推送 │ │ └─ 登录路由 + 侧边栏 UI │ │ agents.create/resume → DSH Agent │ └────────────────────────────────────┘

入站 getupdates 长轮询 → 去重 → 白名单 → 命令解析或 agent.followup()。出站 turn/end → 提取文本 → 持久化 outbox → 分块投递。chatId→sessionId 映射、轮询游标、去重表、发件箱断点全部落盘可续跑。

开发

npm install
npm run typecheck # 类型检查
npm test # 65 个单元测试
npm run build # 产出 lib/(含客户端 bundle)

已知限制

- 凭据有效期约 24 小时(腾讯策略),收到消息即自动续期;过期不影响登录,仅无法主动推送通知,用户发一条消息即可保活
- 腾讯可能随时调整协议端点;微信条款禁止营销、客服、高频群发
- 每个聊天内消息串行处理,多聊天之间并行

致谢与许可

MIT License 开源。独立实现,部分设计衍生自社区 MIT 实现:iLink 协议层与投递队列参考 dsh-weixin,协议细节与 dsh-wechat-bridge 及官方 SDK 交叉验证。完整第三方声明见 LICENSE。

wechat 服务(供其它插件调用)

网关加载后向 ctx 暴露 wechat 服务(软探测 ctx.get('wechat') 即可使用,无需 inject 声明):

| 成员 | 说明 |
| notify(text, image?) | 把文本(可附带一张图片 { name, data: Uint8Array })主动推送到登录账号的微信,返回送达人数;未登录时抛错 |

图片走 ILinkClient.sendMedia 的 CDN 加密上传,按文件名分类为原生图片/文件消息。未登录或通道失效时 notify 抛错,调用方应自行降级。
预览分享卡片长什么样 ↓Carl-5535/dsh-wechat-gateway
分享 · DeepSeek Harness Hub
Carl-5535/dsh-wechat-gateway

微信 × DeepSeek Harness DSH:进程内插件,扫码即用,双向消息/文件,wechatnotify…

回到顶部