dsh-remote-wecom 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -151
- package/docs/DESIGN.md +10 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,44 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/dsh-remote-wecom)
|
|
4
4
|
|
|
5
|
-
> Control DeepSeek Harness Desktop sessions from WeCom (企业微信) on your phone
|
|
5
|
+
> Control DeepSeek Harness Desktop sessions from WeCom (企业微信) on your phone. Docs and commands are in Chinese.
|
|
6
6
|
|
|
7
|
-
在手机企业微信里遥控 DeepSeek Harness Desktop
|
|
8
|
-
|
|
9
|
-
它是一个 DSH bundle 插件,跑在 Desktop 的 host 进程里,自己持有企微智能机器人长连接;Desktop 关闭即离线。设计与宿主接口见 [docs/DESIGN.md](docs/DESIGN.md)。
|
|
10
|
-
|
|
11
|
-
## 与 pi-remote-wecom、dsh-im 的关系
|
|
12
|
-
|
|
13
|
-
- [pi-remote-wecom](https://github.com/lukeinx/pi-remote-wecom):遥控 pi 终端 / 后台会话的 launchd daemon + pi 扩展。本项目搬来它的宿主无关部分(企微传输、命令与中文别名、卡片、推送与引用路由、关注/取关、目录别名、产物、outbox、附件),把 TUI / RPC 会话换成 Desktop 会话,HTTP 协议换成插件内直接调用 DSH 会话控制器。两者互不依赖,可以同时运行,但要用不同的机器人。
|
|
14
|
-
- `@xmanrui/dsh-im`:DSH 官方生态里的多 IM 插件,企微交互是斜杠命令 + 单聊绑定单会话。本项目只参考了它的插件写法和审批 / 提问抢答方式,不依赖它;如果它的企微通道和本插件用同一个 BotID,两边会互相顶掉长连接。
|
|
7
|
+
在手机企业微信里遥控 DeepSeek Harness Desktop:发消息、收结果、切会话和模型、审批与回答提问、取回产物。插件跑在 Desktop 里,自己持有企微智能机器人的长连接。
|
|
15
8
|
|
|
16
9
|
## 要求
|
|
17
10
|
|
|
18
|
-
- DeepSeek Harness Desktop(DSH `>=0.2.0-rc.2
|
|
19
|
-
- Node.js `>=22.19.0
|
|
20
|
-
-
|
|
11
|
+
- DeepSeek Harness Desktop(DSH `>=0.2.0-rc.2`)
|
|
12
|
+
- Node.js `>=22.19.0`(命令行用)
|
|
13
|
+
- 一个专用的企业微信智能机器人。同一个机器人只能有一条长连接,不要与其他程序共用
|
|
21
14
|
|
|
22
15
|
## 安装
|
|
23
16
|
|
|
24
|
-
`desktop` profile
|
|
17
|
+
Desktop 运行时会锁住 `desktop` profile,`dsh plugin add` 用不了,需要手动加:
|
|
25
18
|
|
|
26
|
-
1.
|
|
27
|
-
2.
|
|
19
|
+
1. 退出 Desktop。
|
|
20
|
+
2. 在 `~/.dsh/profiles/desktop/package.json` 里追加(保留已有条目):
|
|
28
21
|
|
|
29
22
|
```json
|
|
30
23
|
{
|
|
31
|
-
"dependencies": {
|
|
32
|
-
|
|
33
|
-
},
|
|
34
|
-
"dsh": {
|
|
35
|
-
"profile": {
|
|
36
|
-
"bundles": ["…已有条目…", "dsh-remote-wecom"]
|
|
37
|
-
}
|
|
38
|
-
}
|
|
24
|
+
"dependencies": { "dsh-remote-wecom": "^0.1.0" },
|
|
25
|
+
"dsh": { "profile": { "bundles": ["…", "dsh-remote-wecom"] } }
|
|
39
26
|
}
|
|
40
27
|
```
|
|
41
28
|
|
|
42
|
-
3.
|
|
29
|
+
3. 安装并启动:
|
|
43
30
|
|
|
44
31
|
```sh
|
|
45
32
|
cd ~/.dsh/profiles/desktop
|
|
@@ -47,157 +34,81 @@
|
|
|
47
34
|
open -a "DeepSeek Harness"
|
|
48
35
|
```
|
|
49
36
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
升级:改 `dependencies` 里的版本号后重复第 3 步。
|
|
37
|
+
升级时改版本号,再重复第 3 步。
|
|
53
38
|
|
|
54
|
-
|
|
39
|
+
## 绑定
|
|
55
40
|
|
|
56
|
-
|
|
41
|
+
打开 Desktop「设置 → 企微远程」:
|
|
57
42
|
|
|
58
|
-
|
|
43
|
+
1. 用企业微信扫码,自动创建机器人并连接。
|
|
44
|
+
2. 10 分钟内给机器人发一条单聊消息,发送人即成为主人;过了窗口就发页面上的 6 位绑定码。之后只接主人的单聊。
|
|
59
45
|
|
|
60
|
-
|
|
61
|
-
alias dsh-remote-wecom='node ~/.dsh/profiles/desktop/node_modules/dsh-remote-wecom/bin/dsh-remote.mjs'
|
|
62
|
-
```
|
|
46
|
+
同一页可以换机器人、解绑、选新会话位置、设置手机审批超时。扫不了码时可以手动填 BotID / Secret。
|
|
63
47
|
|
|
64
|
-
|
|
48
|
+
## 手机上用
|
|
65
49
|
|
|
66
|
-
|
|
50
|
+
选中会话后直接发消息;引用某条推送回复,消息会发给该推送所属的会话。图片和文件可以先发,5 分钟内再补说明。任务完成后自动推送结果;审批和提问同时出现在手机和 Desktop,谁先答用谁的。
|
|
67
51
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
52
|
+
| 命令 | 作用 |
|
|
53
|
+
|---|---|
|
|
54
|
+
| `活跃会话` / `ls` | 切换到运行中、置顶或最近活跃的会话 |
|
|
55
|
+
| `历史会话 [关键词]` / `h` | 查找并继续历史会话 |
|
|
56
|
+
| `创建会话 [工作区] [消息]` / `n` | 新建会话并发送首条消息 |
|
|
57
|
+
| `工作区 [名称]` / `cd` | 选择新会话的默认位置 |
|
|
58
|
+
| `插话 内容` / `steer` | 插进正在运行的这一轮 |
|
|
59
|
+
| `目标 [描述]` / `goal` | 设置长期目标,自动续跑到完成 |
|
|
60
|
+
| `模型 [关键词]` / `model` | 切换模型 |
|
|
61
|
+
| `思考强度 [强度]` / `think` | 切换思考强度 |
|
|
62
|
+
| `权限模式 [模式]` / `perm` | 切换当前会话的权限模式 |
|
|
63
|
+
| `压缩` / `compact` | 压缩当前会话上下文 |
|
|
64
|
+
| `产物` / `art` | 取回当前会话生成的文件 |
|
|
65
|
+
| `关注` / `取关` | 电脑上发起的任务也推到手机 / 只推手机发起的 |
|
|
66
|
+
| `状态` / `停止` / `重启` / `帮助` | 查看状态、中断任务、重连、查看全部命令 |
|
|
67
|
+
|
|
68
|
+
中文命令和参数之间要有空格:`模型 high` 是命令,`模型high` 会当普通消息发出。
|
|
69
|
+
|
|
70
|
+
## 离线看门狗(可选,macOS)
|
|
71
|
+
|
|
72
|
+
插件随 Desktop 启停,Desktop 退出后就没人接企微了。看门狗是一个独立的 launchd 进程:发现插件不在线时暂存消息、在后台拉起 Desktop,插件上线后自动处理。
|
|
79
73
|
|
|
80
74
|
```sh
|
|
81
|
-
dsh-remote-wecom
|
|
82
|
-
dsh-remote-wecom watchdog
|
|
75
|
+
alias dsh-remote-wecom='node ~/.dsh/profiles/desktop/node_modules/dsh-remote-wecom/bin/dsh-remote.mjs'
|
|
76
|
+
dsh-remote-wecom watchdog install # 升级插件或换 Node 后要重新执行
|
|
77
|
+
dsh-remote-wecom watchdog status
|
|
83
78
|
dsh-remote-wecom watchdog uninstall
|
|
84
79
|
```
|
|
85
80
|
|
|
86
|
-
|
|
87
|
-
- Desktop 离线时发来的消息先暂存到 `spool/`(附件已下载到 `inbox/`),看门狗用 `open -g -j` 在后台拉起 Desktop。插件上线后连上企微(同一机器人只能有一个连接,看门狗随即被挤下线),按顺序处理暂存的消息;超过 30 分钟的只提示不执行。拉起是预期路径,中间不发「已启动 / 已重启 / 开始处理」之类的通知,手机直接收到结果;只有拉起失败或超时才提醒。
|
|
88
|
-
- 卡片点击引用的是插件内存里的状态,离线期间点了只提示重新操作,Desktop 拉起上线后再提醒一次。
|
|
89
|
-
- 拉起 2 分钟后插件仍未上线(比如插件被停用),手机会收到提醒。
|
|
90
|
-
- 安装时如果 Desktop 正在运行却没有心跳(还是旧版本插件),会拒绝安装:先重启 Desktop 加载新插件再装,否则看门狗会把正在运行的插件挤下线。
|
|
91
|
-
- 安装时记下当前 Node 和插件所在路径,换 Node 版本、升级插件或移动仓库后要重新 `watchdog install`。
|
|
81
|
+
## 命令行
|
|
92
82
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
推荐在 Desktop 里完成:**设置 → 企微远程**。
|
|
96
|
-
|
|
97
|
-
1. 页面显示二维码,用企业微信扫码并确认,自动创建智能机器人并写入 BotID / Secret(`config.json`,权限 600),插件随即连接。
|
|
98
|
-
2. 扫码成功后 10 分钟内,在企业微信里给这个机器人发任意一条单聊消息,发送人即成为主人。页面同时给出 6 位备用绑定码,自动绑定窗口过了也可以发绑定码完成绑定。之后只接主人的单聊消息。
|
|
99
|
-
3. 绑定后在同一页可以:更换机器人(重新扫码)、解绑账号或换绑定码、选「新会话位置」(Desktop 工作区或未分组,与手机上的 `工作区` 命令是同一项;宿主不支持工作区时不显示)、改「手机审批」的超时策略与秒数、开关「新建会话时打开 Desktop」、重新连接;目录别名只能用命令行 `alias` 管理。改动即时保存、立即生效。
|
|
100
|
-
|
|
101
|
-
扫不了码时,页面上的「手动填写 BotID」可以直接输入已有机器人的 BotID / Secret。也可以用命令行(结果相同):
|
|
102
|
-
|
|
103
|
-
```sh
|
|
104
|
-
dsh-remote-wecom setup # 交互输入 BotID / Secret
|
|
105
|
-
dsh-remote-wecom setup --bot-id ID --secret S # 非交互
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
`setup` 写入 `config.json` 并打印 6 位绑定码,在机器人单聊里发送绑定码,第一个发对的人成为主人。运行中的插件每 5 秒检查一次 `config.json` / `bind.json`,命令行改动后自动重连,不必重启 Desktop。
|
|
83
|
+
设置页之外的备用入口(`dsh-remote-wecom` 即上面的 alias):
|
|
109
84
|
|
|
110
85
|
| 命令 | 作用 |
|
|
111
86
|
|---|---|
|
|
112
|
-
| `setup [--bot-id ID --secret S]` |
|
|
113
|
-
| `bind` |
|
|
114
|
-
| `status` |
|
|
115
|
-
| `alias [名称 目录 \| rm 名称]` |
|
|
116
|
-
| `watchdog install\|uninstall\|status` |
|
|
117
|
-
|
|
118
|
-
所有命令都可加 `--dir 目录` 指定数据目录。
|
|
119
|
-
|
|
120
|
-
数据目录默认 `$DSH_HOME/integrations/dsh-remote-wecom/`(`DSH_HOME` 默认 `~/.dsh`),里面有 `config.json`、`bind.json`、`aliases.json`、`.default-place`(新建会话的默认工作区)、`phone-sessions.json`(最近一次用户消息来自手机的会话)、`outbox/`(断网待发)、`inbox/`(手机发来的附件)、`alive.json`(插件心跳)、`spool/` 与 `watchdog.log`(看门狗暂存的消息和日志)、`bridge.log` 等。
|
|
121
|
-
|
|
122
|
-
`config.json` 可选项:
|
|
123
|
-
|
|
124
|
-
| 字段 | 默认 | 说明 |
|
|
125
|
-
|---|---|---|
|
|
126
|
-
| `remoteConfirm` | `ask-then-allow` | 手机发起的任务里,审批转企微卡片;超时后 `ask-then-allow` 允许、`ask` 拒绝;`allow` 不问直接允许 |
|
|
127
|
-
| `remoteConfirmTimeoutMs` | `600000` | 审批与提问的等待上限(1 秒到 1 天) |
|
|
128
|
-
| `openDesktop` | `false` | 「创建会话」后用 `open dsh://open` 把 Desktop 窗口拉到前台(锁屏时跳过);Desktop 对这个链接只做聚焦窗口,不会切到新会话 |
|
|
129
|
-
| `nameWaitMs` | `10000` | 创建会话后等模型起标题的时间,超时用首条消息截断的临时标题 |
|
|
130
|
-
| `inboxDir` | `<数据目录>/inbox` | 附件落地目录 |
|
|
131
|
-
| `dirAliases` | `{"home": "~"}` | 在没有 `aliases.json` 时使用的初始目录别名 |
|
|
132
|
-
|
|
133
|
-
## 常用命令
|
|
134
|
-
|
|
135
|
-
**手机企微**:选中会话后,直接发消息即可。引用某条推送回复,消息会发给推送所属的会话,并把它切为当前会话。有其他会话推送过、你还没回过消息时,不引用直接发的消息会先暂存,弹卡片让你在当前会话和推送过的会话里选,选完直接投递。
|
|
136
|
-
|
|
137
|
-
命令与 pi-remote-wecom 相同;「DSH 下」一栏列出行为差异,空着的表示一致。
|
|
138
|
-
|
|
139
|
-
| 缩写 | 命令 | 用途 | DSH 下 |
|
|
140
|
-
|---|---|---|---|
|
|
141
|
-
| `ls` | `活跃会话` / `切换会话` | 选择活跃会话 | 活跃 = 运行中、当前选中、Desktop 置顶的会话,加上最近 24 小时有活动的(最多 10 个);不含 subagent 和已归档,Desktop 重启不影响;置顶在前(📌),其余按 Desktop 侧栏的工作区顺序分组、未分组最后,每项标出工作区 |
|
|
142
|
-
| `h` | `历史会话 [关键词]` | 查找并继续历史会话;默认隐藏 subagent 会话,加 `全部` 才显示(如 `历史会话 全部 关键词`) | 只检索会话名和每轮用户消息摘要,不检索回复;Desktop 里已归档的会话也要加 `全部` 才显示 |
|
|
143
|
-
| `n` | `创建会话 [工作区] [消息]` / `新建会话` | 新建会话并投递首条消息 | 第一个词是工作区名、`未分组`、目录别名或 `~/路径` 时作为位置,否则用 `工作区` 选的默认位置;`openDesktop` 打开时新建后 `open dsh://open` 拉起窗口(没有跳到指定会话的入口,需在侧栏点开),默认不拉起 |
|
|
144
|
-
| `nb` | `创建后台会话 [工作区] [消息]` / `新建后台会话` | 新建会话,不拉起窗口 | 同样是 Desktop 会话,不管 `openDesktop` 都不拉起 |
|
|
145
|
-
| `steer` | `插话 内容` | 把内容插进正在运行的这一轮,结果随这一轮推回;空闲时等同普通消息 | DSH 独有。直接发消息仍是排到下一轮 |
|
|
146
|
-
| `perm` | `权限模式 [模式名]` / `切换权限模式 [模式名]`(也可 `切换权限`;单发 `权限` 只弹卡片) | 切换当前会话的权限模式(如 read-only / workspace-write) | DSH 独有,走 `/permission`,只影响这个会话 |
|
|
147
|
-
| `goal` | `目标 [描述]` / `目标 修改 描述` / `目标 暂停` / `目标 继续` / `目标 清除` | 给当前会话设一个长期目标,模型在同一会话里自动续跑,直到完成、受阻、暂停或到达轮数上限;不带参数弹卡片看状态、点选操作 | DSH 独有,走 `/goal`。中间各轮不推,结束时推一条并附最后一轮结果;Desktop 重启后执行中的目标不会自己接着跑,发 `目标 继续` |
|
|
148
|
-
| `select N [消息]` | `选择会话 N [消息]` | 按列表序号切换,可顺带消息 | |
|
|
149
|
-
| `model` | `切换模型 [关键词]` / `模型 [关键词]` | 切换当前会话的模型 | 列出 DSH 模型目录里可路由的全部模型,没有 scope 之分 |
|
|
150
|
-
| `think` | `切换思考强度 [强度]` / `思考强度 [强度]` | 切换思考强度;只列当前模型支持的级别 | 级别取模型目录的 `reasoning.efforts` |
|
|
151
|
-
| `compact` | `压缩会话 [说明]` / `压缩 [说明]` | 手动压缩当前会话上下文;运行中不可压缩 | 不支持指定压缩重点,带说明时照常压缩并在卡片提示 |
|
|
152
|
-
| `restart` | `重启 [force]` / `重启服务` | 重启遥控服务;有任务运行时默认拒绝并列出占用会话,`重启 force` 强制 | 只重建插件内的遥控实例(重读配置、重连企微),不重启 Desktop,任务继续跑 |
|
|
153
|
-
| `cd` | `工作区 [名称]` / `切换工作区`(也可 `目录`、`切换目录`) | 选择新建会话的默认位置 | pi 里是选目录;DSH 里列出 Desktop 的工作区和「未分组」(默认),不是工作区的别名目录新会话进未分组 |
|
|
154
|
-
| `art` | `产物` / `查看产物` | 列出当前会话生成的 html/md/pdf/docx/xlsx/pptx/png/svg 文件(不含 git 跟踪的文件、隐藏目录和临时目录):不超过 3 个直接发送,更多时卡片多选 | 来源是 `write` / `edit` / `present` 工具和回复里的文件链接 |
|
|
155
|
-
| `remote` / `mute` | `关注` / `取关`(也可 `取消关注`、`静音`) | 出门时 `关注`:电脑上发起的任务完成后也推送;回到电脑前 `取关`:只推手机发起的 | `关注` 后电脑发起的任务的审批也发到手机(Desktop 关窗后任务还在跑),`取关` 后留在 Desktop |
|
|
156
|
-
| `status` / `stop` / `help` | `状态` / `停止` / `帮助` | 查看状态、中断任务、查看全部命令 | 状态卡片显示工作区(分支)、模型·思考强度、上下文、权限模式与 token 用量,没有花费和扩展状态项 |
|
|
157
|
-
|
|
158
|
-
图片或文件可先发送,再在 5 分钟内补充说明;每次最多 10 件,每件不超过 100MiB。任务完成后自动回传结果,长结果以文件发送。
|
|
159
|
-
|
|
160
|
-
中文别名需要与参数用空白字符分隔:`模型 high` 是命令,`模型high` 会当作普通消息发出。
|
|
161
|
-
|
|
162
|
-
**电脑**:在「设置 → 企微远程」里管理,见上面的「配置与绑定」;没有 pi 里的 `/remote`、`/tabmodel`、`/tabname`(会话名由 DSH 自动生成)。
|
|
163
|
-
|
|
164
|
-
其他行为:
|
|
165
|
-
|
|
166
|
-
- 手机发的消息 2 秒内完成就直接回结果,否则回「运行中」,完成后推送;超长结果转成 Markdown 文件。
|
|
167
|
-
- 手机发起的任务里,审批和 `ask_user_question` 提问会同时出现在手机和 Desktop,谁先答用谁的;当前没选中的会话的弹窗先挂起,切过去时补推。多题逐题推送,可点选也可自己写。审批无人处理时按 `remoteConfirm` 决定。电脑发起的任务:提问也推手机,审批只在 `关注` 后推。
|
|
168
|
-
- 定时提醒(`schedule_*` 工具设的)和目标续跑(goal)自动跑的轮次:会话最近一次用户消息来自手机(或目标是在手机上设定 / 继续的)时推回手机,最近一次来自电脑时按电脑发起处理。定时任务每次都推(「⏰ 定时任务完成」);目标续跑只在结束时推一条(「🎯 目标已完成 / 受阻 / 已暂停 / 到达轮数上限 / 已清除」),正文是最后一轮的结果,中途被中断或出错的一轮照常推。
|
|
169
|
-
- 往 Desktop 里已归档的会话发消息(引用旧推送、「历史会话 全部」选中)会先取消归档并提示;取消失败时 DSH 会拦下这一轮,手机收到「任务失败」。
|
|
170
|
-
|
|
171
|
-
## 限制
|
|
172
|
-
|
|
173
|
-
- 不装看门狗时,Desktop 未运行就离线;装了也只是暂存消息、拉起 Desktop,任务仍在 Desktop 里跑。
|
|
174
|
-
- `compact` 不支持指定压缩重点(DSH `0.2.1-rc.2` 的 `/compact` 不接受参数),带说明时照常压缩并提示。
|
|
175
|
-
- 历史检索只搜会话名和每轮用户消息的摘要(`turnOutline`),不搜回复。
|
|
176
|
-
- 产物来自插件运行期间的事件,打开会话时再用最近 1000 条消息范围的快照补扫;临时目录、隐藏目录和 git 跟踪的文件不算产物。
|
|
177
|
-
- 不能在手机上添加、移除或重命名工作区,也不能改会话名、分叉会话。
|
|
178
|
-
- 插件随 Desktop 启停:Desktop 退出时,运行中的手机任务回一条「任务中断」(结果不再送回,任务本身可能已在电脑上完成),下次启动后收到「已重启」通知。「已重启」只在手机端用得上时发:手机发了 `重启`、重启时有推送中的任务被中断,或手机 30 分钟内用过;在电脑上随手重启 Desktop 不提醒;被看门狗拉起时也不发。看门狗暂存的消息是「至多一次」:插件取出即删,处理到一半时 Desktop 崩溃,剩下的不会重放。
|
|
179
|
-
- 「关注」「取关」只在内存里生效:插件重启后恢复推送绑定会话的电脑任务,电脑发起的审批不再转手机。
|
|
87
|
+
| `setup [--bot-id ID --secret S]` | 写入机器人凭证并生成绑定码 |
|
|
88
|
+
| `bind` | 解除当前主人,生成新绑定码 |
|
|
89
|
+
| `status` | 查看配置、绑定状态和最近日志 |
|
|
90
|
+
| `alias [名称 目录 \| rm 名称]` | 管理目录别名,供「创建会话」「工作区」使用 |
|
|
91
|
+
| `watchdog install\|uninstall\|status` | 离线看门狗 |
|
|
180
92
|
|
|
181
|
-
|
|
93
|
+
数据在 `~/.dsh/integrations/dsh-remote-wecom/`,`config.json` 权限为 600。可选配置和实现细节见 [docs/DESIGN.md](docs/DESIGN.md)。
|
|
182
94
|
|
|
183
|
-
|
|
184
|
-
npm install
|
|
185
|
-
npm run build # 打包设置页前端 client/ → dist/client.js
|
|
186
|
-
npm test # 单元测试
|
|
187
|
-
npm run check # build + 全部源文件语法检查 + 单元测试
|
|
188
|
-
npm run check:public # 发布前检查:不含内网链接、本机路径,package.json 指向公开仓库
|
|
189
|
-
npm run test:e2e # build 后用临时 DSH_HOME 起隔离的 dsh --profile web + 假 LLM + 假企微 + 假扫码接口,约 30 秒
|
|
190
|
-
```
|
|
95
|
+
## 让 Agent 代装
|
|
191
96
|
|
|
192
|
-
|
|
97
|
+
- 改 profile 前先退出 Desktop,只追加条目,不动已有的 `dependencies` 和 `bundles`。
|
|
98
|
+
- 扫码和绑定由用户在手机上完成;不读取、不打印 Secret。
|
|
99
|
+
- 用 `dsh-remote-wecom status` 验证:出现 `Secret:已配置` 和 `主人:已绑定` 即完成。
|
|
100
|
+
- 改本仓库代码前先读 [AGENTS.md](AGENTS.md)。
|
|
193
101
|
|
|
194
|
-
|
|
102
|
+
## 开发
|
|
195
103
|
|
|
196
104
|
```sh
|
|
197
|
-
|
|
105
|
+
git clone https://github.com/lukeinx/dsh-remote-wecom.git && cd dsh-remote-wecom
|
|
106
|
+
npm install
|
|
107
|
+
npm run check # 打包设置页 + 语法检查 + 单元测试
|
|
108
|
+
npm run test:e2e # 隔离的 DSH + 假企微,约 30 秒
|
|
198
109
|
```
|
|
199
110
|
|
|
200
|
-
|
|
111
|
+
本地调试时把 profile 里的依赖改成 `"dsh-remote-wecom": "link:<仓库绝对路径>"`,改完代码重启 Desktop。
|
|
201
112
|
|
|
202
113
|
## 许可
|
|
203
114
|
|
package/docs/DESIGN.md
CHANGED
|
@@ -104,6 +104,16 @@ DeepSeek Harness.app ── host 进程
|
|
|
104
104
|
## 配置与绑定
|
|
105
105
|
|
|
106
106
|
- 数据目录 `$DSH_HOME/integrations/dsh-remote-wecom/`:`config.json`(`botId`、`secret`、`ownerUserId` 等)、`bind.json`、`cards.json`、`seen.json`、`aliases.json`、`.default-place`、`phone-sessions.json`、`outbox/`、`inbox/`、`alive.json`、`watchdog.json`、`spool/`、`bridge.log`、`watchdog.log`。
|
|
107
|
+
- `config.json` 可选项:
|
|
108
|
+
|
|
109
|
+
| 字段 | 默认 | 说明 |
|
|
110
|
+
|---|---|---|
|
|
111
|
+
| `remoteConfirm` | `ask-then-allow` | 手机发起的任务里,审批转企微卡片;超时后 `ask-then-allow` 允许、`ask` 拒绝;`allow` 不问直接允许 |
|
|
112
|
+
| `remoteConfirmTimeoutMs` | `600000` | 审批与提问的等待上限(1 秒到 1 天) |
|
|
113
|
+
| `openDesktop` | `false` | 「创建会话」后用 `open dsh://open` 把 Desktop 窗口拉到前台 |
|
|
114
|
+
| `nameWaitMs` | `10000` | 创建会话后等模型起标题的时间 |
|
|
115
|
+
| `inboxDir` | `<数据目录>/inbox` | 附件落地目录 |
|
|
116
|
+
| `dirAliases` | `{"home": "~"}` | 没有 `aliases.json` 时使用的初始目录别名 |
|
|
107
117
|
- 首选 Desktop「设置 → 企微远程」扫码(见下节);命令行是后备:`node bin/dsh-remote.mjs setup` 写入 BotID / Secret 并生成 6 位绑定码,`bind` 解除原主人并重新生成绑定码,`status` 看状态,`alias` 管理目录别名。插件约每 5 秒检查 `config.json` / `bind.json` 的 mtime,变化后停掉并重建遥控实例(插件自己绑定主人时的写入不算),不必重启 Desktop。
|
|
108
118
|
- 同一 BotID 只能一条长连接:不能与 pi remote、dsh-im 企微通道共用机器人。
|
|
109
119
|
|
package/package.json
CHANGED