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

微信审批转发 lll-77777777/dsh-wechat-approvals

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

把桌面会话的审批推送到微信,手机上也能批准或拒绝

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lll-77777777/dsh-wechat-approvals
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · platform
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 40 处,展示前 37 条)
  • 写入本地文件
    lib/host.js:313
    mkdirSync(dir, { recursive: true });
  • 写入本地文件
    lib/host.js:316
    writeFileSync(path, media.data);
  • 读取本地文件
    lib/host.js:633
    const text = readFileSync(join(this.#home, 'wechat', BOOT_LOG_NAME), 'utf8');
  • 执行外部命令固定命令
    lib/host.js:1253
    execFile('tasklist', ['/FI', 'IMAGENAME eq LogonUI.exe', '/NH'], { windowsHide: true, timeout: 5_000 }, (error, stdout) => {
  • 读取本地文件
    lib/host.js:1514
    const parsed = JSON.parse(readFileSync(this.#stateFilePath, 'utf-8'));
  • 读取本地文件
    lib/host.js:2529
    if (!existsSync(entry.path)) {
  • 读取本地文件
    lib/host.js:2793
    const data = await readFile(path);
  • 写入本地文件
    lib/host.js:3145
    await writeFile(path, text, 'utf8');
  • 写入本地文件
    lib/host.js:3165
    mkdirSync(dir, { recursive: true });
  • 读取本地文件
    lib/host.js:3983
    const parsed = JSON.parse(readFileSync(stateFile, 'utf-8'));
  • 写入本地文件
    lib/host.js:4016
    mkdirSync(workspace, { recursive: true });
  • 写入本地文件
    lib/host.js:4143
    mkdirSync(dir, { recursive: true });
  • 发起网络请求
    client.js:59
    void fetch(`${PREFIX}/client-error`, {
  • 发起网络请求
    client.js:382
    const response = await fetch(path, {
  • 发起网络请求
    dist/core/lib/http.js:154
    const response = await fetch(url.toString(), {
  • 读取本地文件
    dist/core/lib/state.js:328
    const parsed = JSON.parse(await readFile(this.file, 'utf-8'));
  • 写入本地文件
    dist/core/lib/state.js:369
    await mkdir(dirname(this.file), { recursive: true });
  • 写入本地文件
    dist/core/lib/state.js:372
    await writeFile(temp, `${JSON.stringify(state, null, 2)}\n`, { encoding: 'utf-8', mode: 0o600 });
  • 写入本地文件
    dist/core/lib/state.js:374
    await rename(temp, this.file);
  • 删除本地文件
    dist/core/lib/state.js:377
    await rm(temp, { force: true });
  • 读取本地文件
    dist/core/lib/media.js:111
    data: await readFile(params.path),
  • 读取本地文件
    dist/core/lib/media.js:123
    data: await readFile(path),
  • 读取本地文件
    dist/core/lib/media.js:165
    data: await readFile(params.path),
  • 发起网络请求
    dist/core/lib/media.js:416
    const response = await fetch(params.url, {
  • 发起网络请求
    dist/core/lib/media.js:481
    const response = await fetch(params.target, {
  • 读取本地文件
    dist/core/lib/thumbnail.js:96
    if (existsSync(join(dir, 'package.json')))
  • 读取本地文件
    dist/core/lib/silk.js:34
    if (existsSync(join(dir, 'package.json')))
  • 读取本地文件
    dist/core/lib/session-index.js:134
    const raw = await readFile(join(storeDir, name), 'utf-8');
  • 读取本地文件
    dist/core/lib/session-index.js:189
    const dirs = await readdir(sessionsRoot, { withFileTypes: true });
  • 读取本地文件
    dist/core/lib/session-index.js:201
    const entries = await readdir(join(sessionsRoot, folder), { withFileTypes: true });
  • 读取本地文件
    dist/core/lib/session-index.js:245
    const entries = await readdir(sessionsRoot, { withFileTypes: true });
  • 读取本地文件
    dist/core/lib/session-index.js:255
    const entries = await readdir(join(sessionsRoot, folder), { withFileTypes: true });
  • 读取本地文件
    dist/core/lib/session-index.js:334
    await stat(join(indexDir, name));
  • 读取本地文件
    lib/cli.js:254
    if (!existsSync(params.file))
  • 写入本地文件
    lib/cli.js:429
    mkdirSync(dir, { recursive: true });
  • 写入本地文件
    lib/cli.js:430
    appendFileSync(join(dir, 'boot.log'), `${new Date().toISOString()} ${line}\n`, 'utf-8');
  • 读取本地文件
    lib/cli.js:454
    return await readFile(path);
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

DSH 微信插件 fork:桌面会话审批转发微信 + 双端批准 + 任务完成通知 (dsh-wechat-plugin 0.43.1 fork)

README

由 DeepSeek 最新模型翻译生成
dsh-wechat-approvals 给 DeepSeek Harness 桌面版用的微信插件补丁版(fork)。 基于官方 dsh-wechat-plugin@0.43.1 修改,不是独立插件——它整包替换官方插件,只多做了三件事: | 能力 | 官方版 | 这个版本 | | 桌面会话要审批时通知到微信 | 只通知「绑定微信的那个会话」 | 任何桌面会话都推 | | 微信上直接批准/拒绝 | 只有绑定会话能 | 桌面会话的审批也能,微信回「允许」就生效 | | 任务完成时通知微信 | 没有 | 有(只报干了活的轮次,不刷屏) | | 双端批准 | — | 桌面卡片照常显示;10 秒内没人点才推微信;两边都能批,谁先批算谁 | 手机在兜里、人已经离开电脑时,桌面那边卡在审批上——这个补丁就是为这个场景写的。 安装 前提:DSH 桌面版(desktop profile)、官方微信插件 0.43.1、并且已经绑定了至少一个微信会话。 没绑定会话时,审批和通知找不到推送目标,功能等于不生效(最容易漏的一步)。
展开完整文档(README 剩余 1 节)
dsh-wechat-approvals

给 DeepSeek Harness 桌面版用的微信插件补丁版(fork)。

基于官方 dsh-wechat-plugin@0.43.1 修改,不是独立插件——它整包替换官方插件,只多做了三件事:

| 能力 | 官方版 | 这个版本 |
| 桌面会话要审批时通知到微信 | 只通知「绑定微信的那个会话」 | 任何桌面会话都推 |
| 微信上直接批准/拒绝 | 只有绑定会话能 | 桌面会话的审批也能,微信回「允许」就生效 |
| 任务完成时通知微信 | 没有 | 有(只报干了活的轮次,不刷屏) |
| 双端批准 | — | 桌面卡片照常显示;10 秒内没人点才推微信;两边都能批,谁先批算谁 |

手机在兜里、人已经离开电脑时,桌面那边卡在审批上——这个补丁就是为这个场景写的。

安装

前提:DSH 桌面版(desktop profile)、官方微信插件 0.43.1、并且已经绑定了至少一个微信会话。
没绑定会话时,审批和通知找不到推送目标,功能等于不生效(最容易漏的一步)。

1. 先装官方微信插件(提供登录、扫码、消息通道)
npm 包名:dsh-wechat-plugin 官方仓库:https://github.com/xcisxc29/dsh-wechat
建议锁 0.43.1 —— 本 fork 就是基于这个版本改的
dsh plugin --profile desktop add dsh-wechat-plugin@0.43.1

2. 再用本仓库覆盖同名包
dsh plugin --profile desktop add github:lll-77777777/dsh-wechat-approvals

3. 重启 DSH

也可以直接在 DSH 的「插件 → 添加插件」里粘贴仓库地址。

别下错:官方插件是 dsh-wechat-plugin(作者 xcisxc29,仓库 dsh-wechat);本仓库只有 README.md、lib/、dist/ 这些替换文件,不是独立插件、不能单独提供登录功能。

顺序不能反:先官方、后本仓库。反过来的话官方版会把本仓库覆盖掉。

不用改配置:三个开关默认就是开的。

配置(可选)

profile 的 cordis.yml 里,dsh-wechat-plugin 的 config 段:

- id: dsh-wechat-plugin
name: dsh-wechat-plugin
config:
autoStart: true
relayUnboundApprovals: true # 桌面会话的审批也推微信(关掉 = 官方行为) relayDelayMs: 10000 # 等桌面多少毫秒没人回应才推微信 notifyTurnEnd: true # 桌面会话完成时推微信(关掉 = 只推审批) notifyTurnEndMinMs: 60000 # 完成通知门槛:这一轮跑满这么久算「干活」 notifyTurnEndMinTools: 5 # 或者工具调用达到这么多次也算「干活」

完成通知的规则:一轮跑满 60 秒 或 工具调用 ≥ 5 次,满足一条才推。短问答(几秒、一两次工具)不打扰手机。嫌吵调高,嫌漏调低。

⚠️ 注意事项 / 已知问题

1. 「串会话」——微信消息跑到别的 DSH 工作区去了

现象:你在 A 工作区干活,手机微信发消息,回复却出现在 B 工作区(通常是 E:\微信 这种插件默认工作区)的会话里。

原因:一个微信对话同一时间只绑定一个 DSH 会话。插件的默认工作区来自设置项 workspacePath;微信里 /new、或已绑定的会话被删除/归档后自动重建时,新会话就落在默认工作区。默认工作区不是你现在用的那个,看起来就是「串」了。

避免办法:
- 把插件默认工作区(设置页 → 微信 → 工作区路径)改成你常用的那个
- 别在 GUI 里删除/归档已经绑定的会话(删了就会重建到默认工作区)
- 微信里用 /list 看会话,/switch <短id> 切回来
- 记住:切换会话 = 换工作上下文,不是换一个「频道」

自检:微信里发 /current,看当前绑定的是哪个会话。

2. 微信批完,桌面审批卡片不会自动消失

桌面那张「需要通过」卡片是 DSH 前端画的,插件在后端批完之后没有 API 能让它收回去(前端只监听「新请求」,没有「已被别处答完」的事件)。

所以:微信批完 → 工具已经继续执行了 → 桌面上那张卡片还挂着。回电脑点一下「允许」或按 Esc 收掉即可,这一点是空操作,不会重复执行、不会重复授权。

3. 微信回复窗口有额度:一条入站消息最多回 10 条

微信 ClawBot 的协议规定:你发一条消息,bot 最多能回 10 条(审批提示、完成通知都占额度)。额度用完后的通知会静默失败。

如果你发现「审批没推过来 / 完成没通知」,先看微信里是不是很久没说过话了——随便发一条消息就能刷新窗口,之前积压的通知不会补发。

4. Windows 上可能遇到 PowerShell 执行策略问题(与本插件无关)

如果装完后 DSH 里所有 shell 工具都报:

无法加载文件 …\dsh-ops\bin\prepare-workspace.ps1,因为在此系统上禁止运行脚本

这是 DSH 自带的 dsh-ops 包调 PowerShell 时没带 -ExecutionPolicy Bypass。修法是给 profiles\desktop\node_modules\dsh-ops\lib\workspace-preparation.js 里的 spawn 参数加上:

'-ExecutionPolicy', 'Bypass'

仓库里的 restore.ps1 包含这段检查与修复(Windows 专用)。

5. 升级会覆盖本插件(有自动恢复)

DSH 或官方微信插件升级时,node_modules\dsh-wechat-plugin 会被重新安装成官方版,本插件的改动丢失。

自动恢复(推荐,一次部署长期有效):

powershell
powershell -ExecutionPolicy Bypass -File .\install-autostart.ps1

它往 Windows「启动」文件夹放一个 vbs,每次登录后台跑一次 check-and-restore.ps1:补丁在 → 什么都不做;被覆盖 → 先做接口自检,通过就备份官方版并恢复,不通过(官方接口大改)就拒绝覆盖并写日志,等人工适配。

- 日志:脚本目录下的 restore.log
- 卸载:powershell -ExecutionPolicy Bypass -File .\install-autostart.ps1 -Remove
- 想用计划任务代替启动项:加 -Task(需要能注册任务的环境)

手动恢复: powershell powershell -ExecutionPolicy Bypass -File .\check-and-restore.ps1

或旧版精简脚本

powershell -ExecutionPolicy Bypass -File .\restore.ps1

脚本是幂等的:检查版本 → 不是本 fork 就备份并覆盖 → 检查 cordis.yml 开关 → 检查 dsh-ops 补丁。跑完重启 DSH。

退出码:0 已就绪/已恢复,2 官方接口不兼容(未覆盖,要人工改 fork),3 官方插件没装。

6. 版本绑定

本 fork 直接用 dsh-wechat-plugin@0.43.1 的内部接口(会话绑定、消息路由、审批交互)。官方版本改动大时可能对不上,届时需要跟进适配。

验证装好了

1. 桌面会话里触发一次需要权限的操作 → 桌面弹审批卡片 → 10 秒不点 → 微信收到「🔐 需要你确认:<工具名>」
2. 微信回「允许」→ 工具继续执行(桌面卡片需手动点掉,见注意事项 2)
3. 桌面跑一个长任务(≥60 秒,或 ≥5 次工具调用)→ 微信收到「✅ 任务完成 + 摘要」;随便问个短问题则不会收到
4. 日志核对:C:\Users\<你>\.dsh\wechat\boot.log 里有 desktop approval answered from WeChat / desktop turn finished: notified WeChat

改了什么(技术说明)

| 文件 | 改动 |
| lib/host.js | 未绑定会话的审批转发、双端审批(10 秒窗口 + 撤回)、完成通知(按 agent 空闲判定轮次)、通知去噪、工作区防改名 |
| lib/services.js | 读取流帧时识别 start 帧(轮次计时锚点) |
| package.json | 版本号 0.43.1-desknotify.1 |
| cordis.patch.yml | 默认配置带上全部开关 |

dist/ 与 client.js 是官方包的构建产物原样保留——本仓库是整包替换,不是打小补丁,所以推仓必须带上它们。

更细的实现笔记见 FORK-NOTES.md。

许可

MIT,继承自上游 xcisxc29/dsh-wechat。见 LICENSE。
预览分享卡片长什么样 ↓lll-77777777/dsh-wechat-approvals
分享 · DeepSeek Harness Hub
lll-77777777/dsh-wechat-approvals

把桌面会话的审批推送到微信,手机上也能批准或拒绝

这是你的仓库?认领条目

回到顶部