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

微信桥接 pan17/dsh-wechat

DeepSeek Harnessv0.15.0
pan177 天前有提交已提供中文文档扫描:含敏感能力

DSH插件,将微信私聊消息桥接到DSH,支持文本、图片、文件、音视频的双向传输。目标是在微信端还原DSH的原生体验

49.3/100
综合分
34
GitHub 星标
5,017
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-wechat
npm 源 · dsh-wechat 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · platform
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功(非静态推断);本次验证针对插件 v0.14.0,当前版本为 v0.15.0
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

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

✓npm 包dsh-wechat @ 0.15.0
✓Node 引擎要求 >=20.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖要求 >=0.2.1-0 <0.3.0-0 · 最新 0.2.1-rc.5 兼容
✓入口文件main/exports/bin 已声明

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

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

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

读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 10 处,展示前 10 条)
  • 写入剪贴板
    dist/client.js:298
    navigator.clipboard.writeText(text).catch(fallbackSelect);
  • 发起网络请求
    dist/client.js:496
    return fetch("/wechat/api" + path, {
  • 发起网络请求
    dist/weixin/api.js:148
    res = await fetch(url, { headers: buildHeaders({ token }) });
  • 发起网络请求
    dist/weixin/api.js:188
    const res = await fetch(url, {
  • 发起网络请求
    dist/weixin/media.js:41
    const res = await fetch(url);
  • 发起网络请求
    dist/weixin/media.js:56
    const res = await fetch(url, {
  • 读取本地文件
    dist/dsh/session-log.cjs:210
    names = fs.readdirSync(dir);
  • 读取本地文件
    dist/dsh/session-log.cjs:451
    const buffer = fs.readFileSync(file);
  • 读取本地文件
    dist/dsh/session-log.cjs:567
    return { file, st: fs.statSync(file), compressed: file.endsWith(COMPRESSED_SUFFIX) };
  • 读取本地文件
    dist/dsh/session-log.cjs:697
    const buffer = fs.readFileSync(file);
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

3 张 · 点击查看大图

功能亮点

  • 微信私聊消息桥接
  • 文本图片文件双向传输
  • 音视频双向传输
v0.14.02026-10-26内容较长已截断
· Added · 「完整显示任务完成回复」:跨会话任务完成提醒可以带全文。 以往一个别的会话做完,微信只收到一句 ✅ 任务已完成 加该会话最后 80 字的引用摘要——够知道「做完了」,但想知道做成了什么还得 /session switch 切过去。设置页「消息推送」新增一个勾选框(默认不勾),勾上之后完成提醒里带上该会话这一轮回答的整段正文,不截断;不勾就还是现在这样的一眼摘要。 - 默认关:升级后行为与之前完全一致(defaultConfig() 里 notifyTaskFullReply: false,且 tests/cross-session-notify.test.ts 直接断言了这一条),因为长回答会占掉微信一个窗口里 10 条消息的额度,那是所有普通回复共用的。 - 只决定展示多少,不决定发不发:notifyTaskEvents 关闭时这个开关不产生任何提醒(勾选框在设置页也置灰,值仍随保存提交,重新打开不丢选择),/status 的 • 完成提醒内容 一行同样只在提醒开启时出现——不展示一个当前不起作用的设置。 - 脱敏口径按内容量分开:摘要仍走 maskSecrets(含通用 hex/base64 规则,摘一段话时够安全);全文改走新增的 maskCredentials,只掩 API key、JWT、云访问键、Bearer 这些确定是凭证的形状。原因是 maskSecrets 的通用规则会把回答里每个 commit SHA、文件摘要都换成 *——那正是它自己文件头警告过的误伤。全文也不再逐行加 > 引用(出站 markdown 过滤把行首 > 当标记吃掉),改为空行分隔,正文按原样呈现。 - /status 在提醒开启时多一行 • 完成提醒内容: ⚪ 全文|摘要;/notify status 也会标出 full(完成提醒带全文)/summary(完成提醒带摘要)。新增 9 条行为测试(tests/cross-session-notify.test.ts):默认仍是摘要、勾上后头/中/尾全在、2000 字不截断、SHA 不被误掩、真凭证照样掩、提醒关闭时全文开关不复活提醒、/status 与 /notify status 两种状态、以及经设置页那条 ConfigStore 通道的持久化与垃圾值拒绝;另加 4 条 maskCredentials 单测(tests/redact.test.ts)与 1 条设置页接线守卫(tests/client-panel-wiring.test.ts)。 · /skill:查看当前会话的技能。 微信没有 GUI 的 / 补全面板,所以给一个只读的入口: /skill # 列出技能:编号 + 一句话说明 /skill 2 # 看第 2 个的详细说明 /skill office # 按名字看详细说明 它不执行技能——执行本来就有通道:直接把 /技能名 发出去(例如 /office 把这份报告转成 PDF),宿主 dsh-tool-skill 会在 agent/pre-step 扫到手势并自己注入技能说明,与 GUI 里在输入框打 /技能名 完全同一条链路。所以 /skill 不做标签拼装、不做暂存、没有一次性状态、不需要 /skill off;列表和详情里都会直接写「要执行就发 /技能名」,避免用户以为 /skill 1 会替他跑起来。 技能目录优先读 ctx.sessionSkillCatalog(GUI 的 / 补全同源,按会话的 cwd 与 preset 决定可见层,且不会为列技能而唤醒冷会话),缺失时退回 ctx.skills.list;不跨轮缓存,因为技能是文件,缓存一份过期编号表正是 /skill 3 指错技能的原因。编号按上一次列表的行号解析,越界直接报范围;名称先精确匹配(/skill office 选中的是 office,不是 office-docx),前缀命中多个时列出候选而不猜。带任务的行(/skill 1 帮我做这个事)只回用法、不转发——静默丢掉后半句是最坏的选择。 一个真实边界写在列表里:技能名与命令重名时(比如某技能叫 help),直接打 /help 会被当成命令执行而不是手势,这时先发 /raw once 强制透传再发 /技能名(用 once 而不是 on:只放行下一条就自动回到「命令优先」,不会为一个偶尔撞名的技能留下一个不再响应命令的模式)。详情页只给描述、适用场景、来源路径,不拼「发 / 你的任务」那种执行提示——技能名在别的技能里常是子技能名,拼出来的命令未必是用户想执行的那条。新增 tests/skill-list.test.ts(29 条)覆盖解析、编号/名称解析、越界与歧义、列表渲染、两种 invocati
v0.13.32026-10-22
· Fixed · 设置页每个字段的 ? 悬浮时不再出现两遍提示。 HelpTip 同时设了 title 和 portal 到 body 的 wx_help_float 气泡,鼠标一放上去,浏览器自带的原生提示(贴着光标)和自定义气泡(贴在下方)一起弹出、互相压住,同一句话读两遍还看不清。现在去掉 title,只留自定义气泡;可访问名仍由 aria-label 提供,读屏行为不变。tests/help-catalog.test.ts 新增一条断言钉住 ? 上不再出现 title。 · Changed · 重新扫码 / 退出登录 旁的说明改成安装提示:原「重新扫码会清除本地 token;退出后需重新扫码」→「新安装或者更新本插件后,建议重启DSH再使用」。前者在按钮已经写明动作之后又复述一遍,后者回答的是用户真正会问的问题——更新完要不要重启。
v0.13.22026-10-21
· Fixed · 裸 /model、/s、/ws、/p、/perm 不再回「⚠️ 未知命令 /model,已作为文本转发给 agent」。 这些名字就印在 /help 一览里,回「未知命令」等于当场否认自己刚说的话,而且还会把命令当聊天发给模型。根因是五个 parser 只匹配「子命令 + 参数」的形状,裸形式返回 null,于是掉进未知命令分支。现在它们与 /reasoning /enter /notify /surface 对齐,裸形式一律报状态。 · 已文档化命令的参数写错,回该条的 usage 行而不是「未知命令」。 /model foo 里的 /model 不是未知命令,只是参数不对——新增 commandUsageHint(),按 catalog 的 usage 回答。真未知的名字(/nope)仍然走原来的未知命令提示与转发,行为不变。 · /help 后面的一切都当命令名,解析不到也不转发。 之前 /help fuck 回「⚠️ 未知命令 /help」,/help me write a test 甚至被当成聊天发给模型——用户明摆着在求助,这两种都是答错。现在 /help fuck、/help nope、/help me、乃至整句 /help me write a test 一律回 ⚠️ 没有 /xxx 这条命令,下面是全部命令: + 完整一览,不转发给 agent。理由:/help 是「查帮助」这个动词,以它开头的行不是聊天;man 对不存在的页也是报错 + 自己的用法,不是把词忽略掉。detectUnknownSlashCommand 同步跳过所有本地命令名,所以任何已文档化的名字都不会再被叫「未知命令」。 · 新增 17 条测试(tests/help-topic.test.ts 的「a documented command never answers 未知命令」一组):15 个裸命令逐一断言不回「未知命令」且不转发给 agent、/model foo 回用法、/nope 仍然报未知;外加 /help nope / /help fuck / /help me write a test 都回「没有这条命令」+ 一览且不转发。 · 设置页「指令帮助」里的 /help 条目同步补上 /help :说明改成「查看指令清单与示例」,示例加了 /help s(该命令的全部例子)与 /help merge(写全名也一样),不再只是三个等价的裸别名。 · Changed · 微信 /help 改成两级:一览 + 按需看例子,等宽表格排版。 之前 /help 是一张 26 行 1523 字的语法表(list | switch ),全是占位符,不认识 workspace / preset 的人读不下去。现在: - /help 只出一览(44 行 / 1514 字):代码块里每条命令一行 /命令 (简写) 说明,多子命令的命令下一行列出全部子命令(/s list、/s list current、/s switch、/s switch current、/s pin…)。扫一眼就知道有哪些命令、各自能干什么。list current / switch current 是 /session 的独立形式(只看当前项目的会话),过去在 subcommands 里被 list / switch 吞掉,一览里根本没有它们——现在单独列出。 - /help 出该条的例子块:/help s 与 /help session 输出完全相同,内容是 /session 的 11 条示例,每条一行 /s list 最近 20 个会话(📌 为置顶)。95 条示例一条不少,命令集合与设置页「指令帮助」同源(同一个 src/help-catalog.ts 渲染)。 - 一套措辞,简单但不口语:summary / note 是面板与微信共用的唯一文案。原来的写法偏口语(「别憋了,现在就把暂存的结论发给我」「换脑子、调想多深、定它能动你哪些文件」),在面板里显得随意、在等宽表格里更读不下去。全部改写成说清「做什么」的中性短句(「立即发送暂存的结论」「选择模型、设置推理等级、设定可读写的文件范围」),summary ≤ 40 字、note ≤ 30 字。历史上曾为微信单独加过 terse 字段,随后合并回一套——维护两份同义文案只会漂移。 - 表格放进代码块:微信气泡不会横向滚动,长行只能折行,而折行会落在反引号中间,把一条可复制的命令劈成两半(…(编号看 / + s list))。代码块是客户端那个可横向滑动的等宽框,所以表格整体包在 \\\ 里,并按显示宽度对齐(中文算 2 列)。 - 文案不再手写:formatHelp() / 新增的 help
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-wechat 把微信变成 DeepSeek Harness (DSH) 的第二客户端:在微信里和你的智能体聊天,收发文字、图片、文件和语音,用 slash 命令管理会话、工作区、模型与权限,审批卡和提问卡在微信与桌面端同步弹出。 功能 微信与 DSH 双向同步:文字、图片、文件、语音直接发给智能体,回复与执行过程推回微信,审批卡和提问卡两端同弹、谁先答谁生效;/at 可引用其它会话或文件,把几条消息或「截图 + 问题」合成一轮,静默模式与结论模式控制推送频率,跨会话任务完成提醒可选带摘要或全文;会话、工作区、Preset、模型、权限都能在微信里用 slash 命令管理,与 GUI 同源;另有秘密脱敏、文件范围限制、入站白名单与审计日志等边界,以及内嵌在 DSH 设置里的扫码登录、配置页与指令帮助(每条指令一句说明,点开看全部例子、点一下复制)。 安装 要求 DSH >=0.2.1-0 <0.3.0-0。 方式一:设置页(推荐)— 打开 设置 → 插件 → 添加插件,填 dsh-wechat,点安装,然后重启 DSH。国内网络慢时把安装源切到中国大陆镜像源。
展开完整文档(README 剩余 1 节)
dsh-wechat

把微信变成 DeepSeek Harness (DSH) 的第二客户端:在微信里和你的智能体聊天,收发文字、图片、文件和语音,用 slash 命令管理会话、工作区、模型与权限,审批卡和提问卡在微信与桌面端同步弹出。

功能

微信与 DSH 双向同步:文字、图片、文件、语音直接发给智能体,回复与执行过程推回微信,审批卡和提问卡两端同弹、谁先答谁生效;/at 可引用其它会话或文件,把几条消息或「截图 + 问题」合成一轮,静默模式与结论模式控制推送频率,跨会话任务完成提醒可选带摘要或全文;会话、工作区、Preset、模型、权限都能在微信里用 slash 命令管理,与 GUI 同源;另有秘密脱敏、文件范围限制、入站白名单与审计日志等边界,以及内嵌在 DSH 设置里的扫码登录、配置页与指令帮助(每条指令一句说明,点开看全部例子、点一下复制)。

安装

要求 DSH >=0.2.1-0 <0.3.0-0。

方式一:设置页(推荐)— 打开 设置 → 插件 → 添加插件,填 dsh-wechat,点安装,然后重启 DSH。国内网络慢时把安装源切到中国大陆镜像源。

方式二:命令行(桌面版)

dsh plugin --profile desktop add dsh-wechat
dsh plugin --profile desktop list --depth 0 # 查看已装版本

安装后打开 设置 → WeChat 扫码登录(也可直接访问 http://127.0.0.1:3080/wechat/qr)。

微信命令

| 命令 | 说明 |
| /help(/h、/?) | 命令一览,含当前 profile 已注册的 DSH 原生命令 |
| /help <命令> | 该命令的全部例子,如 /help s、/help merge |
| /status | 工作区、会话、模型、权限、各开关状态;末尾会话级状态默认只显示模式和后台任务(/status full 看全部) |
| /workspace(/ws) | list / status / switch <编号\|路径> / add <路径> |
| /session(/s) | list [current] / switch [current] / pin / unpin / new / status |
| /preset(/p) | list / switch <名称\|编号> 切当前会话(第一条消息前)/ default [名称\|编号] 改新会话默认 / status |
| /model | list / switch <提供商/模型> / status |
| /perm | status / list / switch <名称\|编号> / default [名称\|编号] |
| /reasoning | 查看或切换推理等级 |
| /enter(/busy) | 繁忙时 queue 排队还是 steer 插话 |
| /silent(/sl) | 静默模式:每轮只发最终回复 |
| /final on\|off\|status(/fo) | 结论模式:整条任务只发一条结论 |
| /merge(/mg) | 打字合并开关与状态 |
| /media(/md) | 图片/文件合并开关;at\|path 切换附件交付措辞 |
| /at | 引用其它会话(s)或文件/目录(f),附加到下一条消息 |
| /notify(/watch) | 跨会话决策推送;tasks on\|off 单独控制任务提醒 |
| /history | 查看最近历史,all 含系统消息 |
| /skill | 查看当前会话的技能;/skill 2 或 /skill office 看详细说明 |
| /flush(/f) | 立即取回结论模式暂存的结论 |
| /surface(/wxprompt) | 微信渠道提示词注入开关 |
| /raw | on / off / once / status — 强制透传,命令和文本原样转给智能体,不拦截 |
| /stop | 中断当前任务 |
| /next | 继续发送被微信限流缓存的消息 |
| /rq | 关闭当前会话的待处理卡 |

其它 /xxx 作为文本转发给智能体。DSH 原生 slash 命令(/plan、/goal、/compact 等)由 bridge 直接交给原生 handler,微信端无需改动即可识别。

开发

npm install
npm run build # tsc → dist/
npm test # vitest

改动代码后需重启 DSH 才会生效。架构、配置参考、命令接入细节、已知边界与宿主版本兼容见 docs/DEVELOPMENT.md。

许可

MIT。src/weixin/、src/adapter/ 移植自 wechat-opencode(MIT,原始来源 @tencent-weixin/openclaw-weixin),文件头保留出处注释。

免责声明

本项目与 DeepSeek Harness、腾讯微信官方互不隶属,非官方项目,纯属个人学习用途。使用本项目即表示你自行承担由此产生的一切后果。
预览分享卡片长什么样 ↓pan17/dsh-wechat
分享 · DeepSeek Harness Hub
pan17/dsh-wechat

DSH插件,将微信私聊消息桥接到DSH,支持文本、图片、文件、音视频的双向传输。目标是在微信端还原DSH的原生体验

回到顶部