dsh
OpenPetsHQ/openpets将 DeepSeek Harness 的生命周期状态、错误与审批请求,桥接到本地运行的 OpenPets 桌面伙伴。
微信遥控 DeepSeek Harness:iLink 双向加密文件收发(入站自动解密落盘 + /send 出站)、weixin_send 主动通知、完成通知、多会话切换、健康面板与文件日志。
English | 中文
手机微信 = 你的 DeepSeek Harness 电脑遥控器。
微信扫码绑定机器人后,在任何网络(4G/任何 WiFi)通过微信指挥你的 dsh agent:
发命令、发任务、收结果、/ls 看电脑文件夹目录、双向收发文件、主动推送通知、多会话切换。
相比同类 dsh 微信桥接插件(dsh-weixin、dsh-chatnode-wechat、dsh-im-bridge 等):
docs/)——出站 aes_key 编码、上传/消息两套媒体编号、CDN 上传下载流程全部与官方一致;入站 AES 密钥双编码态(base64 原字节 / base64 hex)全支持,坏密钥明确报错不降级/send 与模型回复中的 [[send-file:路径]] 双入口,共用唯一路径白名单校验(symlink 穿透/越界/目录一律拒绝)weixin_send(文本+文件)+ 未绑定会话完成通知(规则化去重防双发);会话令牌过期(-14)返回精确文案,健康面板自动降级提示重新扫码,运行中重新扫码热轮换凭据无需重启/sessions 列表 + /switch 编号/标题双语义切换,手机上在多个电脑任务间跳转;会话被其他窗口接管时旧窗口收到提示,杜绝输出串台/health 健康端点(字段白名单、零内部标识泄露)、登录页三态状态条(运行中/缺凭据/未启动+原因)、gateway.log 文件日志(1MB 轮转、0600)weixin_send 文件受同一路径白名单约束# 1. 安装插件到 web profile
npx @deepseek-ai/dsh plugin --profile web add /path/to/dsh-mobile-remote
# 2. 启动 dsh web(或重启)
dsh web
dsh web 运行后,本机浏览器打开 http://127.0.0.1:3080/mobile-remote-weixin/login登录页顶部有网关状态条(绿=运行中 / 黄=缺凭据 / 红=未启动+原因);
GET /mobile-remote-weixin/health 返回健康快照(仅本机可访问,无内部标识字段)。
| 命令 | 作用 |
|---|---|
/status | 会话状态 + 会话标识 + 工作区 |
/new | 断开当前会话,下条消息开新会话 |
/stop | 停止运行中任务 |
/reply <文本> | 追问当前任务 |
/sessions | 最近 10 个会话(当前绑定标 ⭐) |
/switch <编号或标题> | 切换会话:纯数字先按 /sessions 编号,越界/无列表回退标题匹配 |
/切换聊天窗口:<标题> | 恒按标题匹配切换(标题恰为纯数字时用它直达) |
/send <文件路径> | 把工作区/收件目录内的文件发到微信 |
/ls [路径] | 看电脑文件夹目录 |
/workspace | 查看当前工作区 |
/help | 再次显示命令清单 |
<工作区>/.wechat-inbox/<日期>/
(文件名 = 原名 + 消息哈希,稳定命名防崩溃重放重复落盘;大小上限 maxMediaBytes,默认 100MiB)。
模型会看到 [收到文件] <绝对路径> 提示,可用 vision 等工具继续处理。/send <路径> 直接发;agent 回复中独占一行写 [[send-file:路径]] 也会把文件发到微信
(该指令行不会发给用户)。路径必须落在工作区或收件目录内(同一校验函数,symlink 穿透/越界一律拒绝)。notifyChatId 通知目标)。enableWeixinSendTool(默认开)可整体关闭。notifyChatId + notifyOnTurnEnd: true 后,未绑定微信的会话任务完成时
会推送 ✅ 任务完成:会话「标题」 到通知目标(绑定会话不重复通知;同 turn 已由工具推过则去重)。环境变量:
| 变量 | 默认 | 说明 |
|---|---|---|
WEIXIN_BOT_TOKEN | 无 | 登录 token(扫码登录后自动保存,无需手动设置) |
WEIXIN_ALLOWED_USERS | 扫码者自动加入 | 允许使用 bot 的用户 id,逗号分隔 |
WEIXIN_ALLOWED_GROUPS | 空 | 允许的群 id(群聊需 user+group 双命中) |
WEIXIN_BOT_API_BASE | https://ilinkai.weixin.qq.com | iLink 网关地址 |
WEIXIN_CDN_BASE | https://novac2c.cdn.weixin.qq.com/c2c | 媒体 CDN 地址 |
WEIXIN_MAX_MESSAGE_CHARS | 3500 | 单条回复分块长度 |
WEIXIN_MAX_MEDIA_BYTES | 100MiB | 媒体大小上限 |
WEIXIN_PERMISSION_MODE | full | full=全权限;strict=工具白名单+审批(预留) |
WEIXIN_DSH_WORKSPACE | 自动 | 微信新会话默认工作区(优先级:本变量 > 显式配置 > dsh 当前工作区 > 进程目录) |
cordis 配置项(config 键):
| 键 | 默认 | 说明 |
|---|---|---|
inboxDir | 空(=工作区/.wechat-inbox) | 收件目录;越界自动回退默认并警告 |
enableWeixinSendTool | true | weixin_send 工具总开关 |
notifyChatId | 空 | 完成通知/工具兜底目标(配置后 Web 会话也可用 weixin_send 推送) |
notifyOnTurnEnd | false | 未绑定会话完成时推送通知 |
logDir | 空(=state 同目录) | 网关日志目录(gateway.log,1MB 轮转) |
statePath | ~/.dsh/mobile-remote-weixin/gateway-state.json | 网关状态文件 |
/health):运行状态、轮询活动、连续错误数、绑定数、积压数、凭据、启动失败原因等——
白名单字段,绝不包含 chatId/sessionId/进度等内部标识。gateway.log(append-only、0600、1MB 轮转只留一代、写失败静默降级),同时 tee 到 dsh 日志。filePath 受 /send 同一白名单(工作区/收件目录)约束,但文本内容不受路径校验——不要在不信任的群里使用。.wechat-inbox。选择本插件前请知悉以下边界——部分是设计决策,部分在路线图外:
vision_analyze)读取npm install
npm run typecheck
npm test
npm run build
MIT