dsh-mini-remote 0.2.0 → 0.2.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/CHANGELOG.md +41 -0
- package/README.en.md +198 -147
- package/README.md +198 -154
- package/client/client.js +1931 -3
- package/lib/build.js +32 -1
- package/lib/devices.js +372 -0
- package/lib/index.js +1625 -32
- package/lib/mirror.js +296 -3
- package/lib/page.html +938 -71
- package/lib/page.js +4 -1
- package/lib/remotes.js +279 -0
- package/lib/server.js +937 -55
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,255 +1,299 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
1
3
|
# 极简遥控器 · dsh-mini-remote
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="https://raw.githubusercontent.com/xingzhen199186/dsh-mini-remote/main/docs/promo.webp" alt="极简遥控器:手机上只留你的指令和它的结论,过程想看的时候再调出来" width="720" />
|
|
7
|
+
</p>
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
**专为 DeepSeek Harness(DSH)用户打造的轻量级移动端遥控插件,解决外出离机时查看 Agent 运行状态与下发指令时界面冗余、注意力被大量中间过程绑架的痛点。**
|
|
8
10
|
|
|
9
|
-
](https://www.npmjs.com/package/dsh-mini-remote)
|
|
12
|
+
[](https://nodejs.org/)
|
|
13
|
+
[](https://github.com/deepseek-ai/DeepSeek-Harness)
|
|
14
|
+
[](LICENSE)
|
|
10
15
|
|
|
11
|
-
|
|
16
|
+
[English](README.en.md) · [简体中文](README.md)
|
|
12
17
|
|
|
13
|
-
|
|
18
|
+
</div>
|
|
14
19
|
|
|
15
|
-
|
|
20
|
+
<p align="center">
|
|
21
|
+
<a href="#背景与痛点">背景与痛点</a> ·
|
|
22
|
+
<a href="#核心特性">核心特性</a> ·
|
|
23
|
+
<a href="#效果预览">效果预览</a> ·
|
|
24
|
+
<a href="#桌面端远程窗口">远程窗口</a> ·
|
|
25
|
+
<a href="#快速上手">快速上手</a> ·
|
|
26
|
+
<a href="#使用示例与配置">使用示例与配置</a> ·
|
|
27
|
+
<a href="#开源协议">开源协议</a>
|
|
28
|
+
</p>
|
|
16
29
|
|
|
17
30
|
---
|
|
18
31
|
|
|
19
|
-
##
|
|
20
|
-
|
|
21
|
-
一个 [DeepSeek Harness](https://github.com/deepseek-ai/DeepSeek-Harness)(DSH,一个用插件扩展的 AI agent 框架)插件。装上之后:
|
|
22
|
-
|
|
23
|
-
- 手机上打开一个网页,上面只有一个输入框和最新的一条回答;
|
|
24
|
-
- 你在手机上发的指令,直接交给电脑上正在跑的那个会话;
|
|
25
|
-
- AI 干活的中间过程(工具调用、读写文件、子 Agent、思考正文)**一律不推给手机**;
|
|
26
|
-
- 唯一会「说话」的是鲸鱼娘:模型在步骤之间自言自语的那一句,由她念出来,只进她的气泡。
|
|
27
|
-
|
|
28
|
-
界面长这样——深色和浅色两套,设置里随手换:
|
|
32
|
+
## 背景与痛点
|
|
29
33
|
|
|
30
|
-
|
|
34
|
+
在日常使用桌面端或网页端 Agent 执行复杂工程任务时,一次交互往往涉及数分钟的深度思考、几十次文件读写与密集的工具链调用。现有的移动端远程方案通常选择将桌面端界面完整映射至手机屏,引发以下实际问题:
|
|
31
35
|
|
|
32
|
-
|
|
36
|
+
- **信息密度失衡**:大量原始推理细节、工具调用入参以及代码差异充满小屏,关键结论被淹没。
|
|
37
|
+
- **注意力过度消耗**:外出通勤、就餐或离机休憩时,用户核心诉求仅为确认当前轮次是否结束,并下达下一阶段指令,无暇逐行审查中间步骤。
|
|
38
|
+
- **网络与权限适配单一**:纯内网方案出差无法访问,中心化云端转发则引入额外的凭据托管风险。
|
|
33
39
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
## 什么时候会用到它
|
|
37
|
-
|
|
38
|
-
- **出门在外,任务还在跑。** 你人在外面,电脑在桌上跑着一轮任务;你只想掏出手机看一眼「跑完没有」,顺便把下一句交代过去。
|
|
39
|
-
- **陪孩子、吃饭、散步的时候。** 手不想碰电脑,但脑子里冒出一个念头,想让它先干着。
|
|
40
|
-
- **电脑在书房,人在客厅。** 不值得专门走回去,也不想把电脑端那一整屏过程搬到手机上看。
|
|
40
|
+
**极简遥控器**由此设计:手机界面默认仅保留「你的输入」与「AI 最终结论」,彻底屏蔽执行噪声;同时支持随时展开完整轨迹,将注意力支配权交还给用户。
|
|
41
41
|
|
|
42
42
|
---
|
|
43
43
|
|
|
44
|
-
##
|
|
45
|
-
|
|
46
|
-
```powershell
|
|
47
|
-
dsh plugin --profile web add dsh-mini-remote
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
装完**必须重启一次 DSH**(把 `dsh web` 那个窗口关掉重开),左栏才会多出「手机遥控」;重启后的启动日志里会打印手机访问地址和密码。
|
|
51
|
-
|
|
52
|
-
命令里的 `web` 是 DSH 的**配置档名**(profile)——就是 `~/.dsh/profiles/` 下面那个文件夹的名字,多数人的默认档就叫 `web`。不叫这个的话,把它换成你自己的。
|
|
53
|
-
|
|
54
|
-
<details>
|
|
55
|
-
<summary>从 GitHub 源码装、从本地目录装,以及它适配哪些 DSH 版本</summary>
|
|
56
|
-
|
|
57
|
-
也可以直接从 GitHub 装,这样锁的是源码:
|
|
58
|
-
|
|
59
|
-
```powershell
|
|
60
|
-
dsh plugin --profile web add github:xingzhen199186/dsh-mini-remote
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
手上有源码目录的话,把目录指给它也一样:
|
|
64
|
-
|
|
65
|
-
```powershell
|
|
66
|
-
dsh plugin --profile web add <你放源码的目录>
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
**它适配哪些 DSH 版本。** 这个插件在 DSH **0.1.5-rc.2** 上开发,在 **0.1.7-rc.2** 上重新逐项核对过,**0.2.0 这一版就是在 0.2.0-rc.1 / 0.2.0-rc.2 上做出来的**(插件用到的那些接口,一个都没变,两端各跑了一遍全套检查);**低于 0.1.5 的版本没试过**,声明的上限是 **0.3.0**。`rc` 是官方给预览版编的号,DSH 目前整体还是开发者预览版,跨小版本可能有破坏性改动,所以比 0.2.0 更新的版本同样不保证。真遇上不兼容,症状一般是某一块入口不见了(比如顶栏那行模型),其余部分照常——插件是按「少了哪个服务就关掉哪块功能」写的,不会整个起不来。手机端那些界面适配另有一份清单和一个**升级自检**(`tools/structure-check.mjs`),升级完对着活界面逐条查一遍,就知道哪条被改坏了。
|
|
44
|
+
## 核心特性
|
|
70
45
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
46
|
+
- 🎛️ **三档按需呈现模式**:提供「单帧」(整屏仅留最新结论,极度清爽)、「聊天」(常规气泡对话流)与「完整」(按原有时序就地展开工具调用与文件差异,支持关键词检索)三档视图,随时无缝切换。
|
|
47
|
+
- 📱 **零安装的移动端**:手机端就是一个网页——扫码、用浏览器打开,就是全部。不装 App、不注册账号、不经过任何第三方服务器;可以「添加到主屏幕」,加完那个图标点开是全屏的。
|
|
48
|
+
- 🌐 **多通路安全连接**:内置本地局域网(LAN)、Tailscale 私网(支持 MagicDNS 与 HTTPS 证书)以及 Cloudflare 公网隧道(无公网 IP 场景)三种模式,各通道并存且独立提供二维码与访问口令。
|
|
49
|
+
- 🐬 **拟人化轻量状态流**:提取步骤之间的关键旁白由鲸鱼娘气泡念出,实时呈现队列刻度尺与计时进度,彻底过滤底层原始推理块。
|
|
50
|
+
- 💬 **飞书长连接双向遥控**:基于飞书开放平台 WebSocket 长连接直连桌面端,无需公网 IP 即可实现纯文本交互、选择题回复以及 `/会话` 切换。
|
|
51
|
+
- 🗂️ **移动端就地会话治理**:在移动端支持会话重命名、置顶排序、安全归档以及从指定轮次派生新会话(Fork),并明确提示待审批与待回答事件。
|
|
52
|
+
- 💻 **桌面端嵌入式「远程窗口」**:在 DSH 桌面端左侧栏提供「远程窗口」快捷入口,点击即在主面板中列出已配对的其他电脑,点一行就能把那一台的 DSH 电脑端界面嵌在面板里;再次点击同一行即可退出并返回原面板。跨机可用,配对步骤见下文「桌面端『远程窗口』」。
|
|
53
|
+
- 🔒 **严格的安全与防御边界**:所有接口均实施定长字符串口令校验,防范时序侧信道攻击;配置防暴力破解阈值(1 分钟内试错 5 次锁定 1 分钟);严禁移动端跨目录读取任意文件;配对信息仅限电脑本机回路读取。
|
|
74
54
|
|
|
75
55
|
---
|
|
76
56
|
|
|
77
|
-
##
|
|
57
|
+
## 效果预览
|
|
78
58
|
|
|
79
|
-
|
|
59
|
+
### 对话界面(单帧 / 聊天 / 完整)
|
|
80
60
|
|
|
81
|
-
|
|
82
|
-
| --- | --- | --- | --- |
|
|
83
|
-
| **内网** | 手机和电脑在同一个 Wi-Fi,只在家里用 | 什么都不用装 | 一出家门就断 |
|
|
84
|
-
| **Tailscale** | 出门也要连,地址还想固定 | 电脑和手机各装一个 Tailscale | 两边都要装一个 App |
|
|
85
|
-
| **公网隧道** | 什么都不想装,任何网络都要能连 | 什么都不用装 | 地址每次重启都换;第一次要下一个约 50 MB 的组件 |
|
|
61
|
+
移动端页面使用原生 JavaScript 开发,无前端构建负担,支持深海墨蓝(深色)与冰蓝宝蓝(浅色)两套高对比度主题。同一场对话有三种看法:单帧整屏只留最新一条结论,聊天把历史一条条排成气泡,完整再把每一轮的执行轨迹插回对话原位:
|
|
86
62
|
|
|
87
|
-
|
|
63
|
+
<div align="center">
|
|
64
|
+
<img width="290" alt="聊天(深色):一来一回排成气泡,一屏看得到多条历史" src="https://raw.githubusercontent.com/xingzhen199186/dsh-mini-remote/main/docs/screen-chat-dark.png" />
|
|
65
|
+
<img width="290" alt="聊天(浅色):同一段对话的浅色版" src="https://raw.githubusercontent.com/xingzhen199186/dsh-mini-remote/main/docs/screen-chat-light.png" />
|
|
66
|
+
</div>
|
|
88
67
|
|
|
89
|
-
|
|
68
|
+
### 设置面板与外观切换
|
|
90
69
|
|
|
91
|
-
|
|
70
|
+
通过右上角设置随时切换呈现模式、外观主题与网络重连控制:
|
|
92
71
|
|
|
93
|
-
|
|
72
|
+
<div align="center">
|
|
73
|
+
<img width="290" alt="设置(深色):显示模式三选一、外观选中深色" src="https://raw.githubusercontent.com/xingzhen199186/dsh-mini-remote/main/docs/settings-dark.png" />
|
|
74
|
+
<img width="290" alt="设置(浅色):选中态和主按钮都跟着换成宝蓝" src="https://raw.githubusercontent.com/xingzhen199186/dsh-mini-remote/main/docs/settings-light.png" />
|
|
75
|
+
</div>
|
|
94
76
|
|
|
95
|
-
|
|
77
|
+
### 执行动画状态
|
|
96
78
|
|
|
97
|
-
|
|
79
|
+
任务运行中动态展示拟人化跑动状态、耗时计时器与排队刻度尺,消除不可知等待:
|
|
98
80
|
|
|
99
|
-
|
|
81
|
+
<div align="center">
|
|
82
|
+
<img width="290" alt="执行中(深色):鲸鱼娘正在跑、已计时 14 秒、队列刻度上排着一条" src="https://raw.githubusercontent.com/xingzhen199186/dsh-mini-remote/main/docs/running-dark-phone.jpg" />
|
|
83
|
+
<img width="290" alt="执行中(浅色):同一次执行,鲸鱼娘正在跑、已计时 14 秒、排队中 1 条" src="https://raw.githubusercontent.com/xingzhen199186/dsh-mini-remote/main/docs/running-light-phone.jpg" />
|
|
84
|
+
</div>
|
|
100
85
|
|
|
101
|
-
|
|
86
|
+
### 远程窗口(桌面端)
|
|
102
87
|
|
|
103
|
-
|
|
88
|
+
不用切窗口,也不用远程桌面:在 DSH 桌面端左侧栏点「远程窗口」,把另一台电脑的 DSH 界面直接嵌在主面板里。顶上一行是「← 返回列表 / 这是哪一台 / 再试一次」,界面正常显示时它会自动收起,鼠标碰一下屏幕顶部才滑出来。
|
|
104
89
|
|
|
105
|
-
|
|
90
|
+
<div align="center">
|
|
91
|
+
<img width="720" alt="远程窗口:主面板里嵌着另一台电脑的 DSH 界面,左侧栏「远程窗口」为选中态" src="https://raw.githubusercontent.com/xingzhen199186/dsh-mini-remote/main/docs/remote-window.png" />
|
|
92
|
+
</div>
|
|
106
93
|
|
|
107
|
-
|
|
94
|
+
---
|
|
108
95
|
|
|
109
|
-
|
|
96
|
+
## 快速上手
|
|
110
97
|
|
|
111
|
-
|
|
112
|
-
- **第一次打开会慢**——它在下载一个五十兆左右的组件,只下这一次。这期间状态那行会显示「正在打开…」,那是正常的,不是卡死。注册偶尔会失败,插件会自动重试 3 次。
|
|
98
|
+
### 环境依赖
|
|
113
99
|
|
|
114
|
-
|
|
100
|
+
安装前请确认这台电脑满足以下条件:
|
|
115
101
|
|
|
116
|
-
|
|
102
|
+
- **Node.js**:`^22.19.0 || >=24.0.0`
|
|
103
|
+
- **DSH(DeepSeek Harness)**:`>=0.1.5-rc.2 <0.3.0`
|
|
104
|
+
- **操作系统**:Windows、macOS 或 Linux
|
|
117
105
|
|
|
118
|
-
|
|
106
|
+
> ⚠️ **注意**:DSH 处于活跃迭代期,本插件核心功能在 `0.1.5-rc.2`、`0.1.7-rc.2`、`0.2.0-rc.1` 及 `0.2.0-rc.2` 上完成全量验证。对于低于 `0.1.5` 的历史版本未作兼容承诺;高于 `0.3.0` 的版本存在上游底层接口破坏风险 —— **这一版声明的上界就是 `0.3.0`**,DSH 升上去之后要先等插件跟进,别直接升。
|
|
119
107
|
|
|
120
|
-
|
|
108
|
+
### 安装步骤
|
|
121
109
|
|
|
122
|
-
|
|
110
|
+
#### 途径一:DSH 桌面端图形化安装(推荐)
|
|
123
111
|
|
|
124
|
-
|
|
112
|
+
1. 点击 DSH 顶部导航栏的「插件」按钮进入插件管理页面。
|
|
113
|
+
2. 点击页面右上角的「添加插件」按钮打开对话框。
|
|
114
|
+
3. 在输入框中输入插件包名 `dsh-mini-remote`(亦可输入 GitHub 仓库地址 `github:xingzhen199186/dsh-mini-remote` 或本地目录路径)。安装源保持默认的「npm 官方源」。
|
|
115
|
+
4. 点击对话框底部的「安装」按钮完成安装。
|
|
125
116
|
|
|
126
|
-
|
|
117
|
+
> ⚠️ **注意**:
|
|
118
|
+
> 1. **确认来源可信**:插件在本机以当前用户的完整权限运行,来源不明的插件可能损坏 DeepSeek Harness,或读取和泄露敏感数据。
|
|
119
|
+
> 2. **暂不支持自动更新**:插件安装后暂不支持自动更新。若需升级版本,请先卸载当前版本后再安装新版本。
|
|
127
120
|
|
|
128
|
-
|
|
121
|
+
#### 途径二:从官方 npm 注册表安装(命令行)
|
|
129
122
|
|
|
130
|
-
|
|
123
|
+
在终端中执行对应的安装命令。命令中的 `web` 为 DSH 默认 Profile 名称,若使用自定义配置档,请替换为对应名称:
|
|
131
124
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
125
|
+
```powershell
|
|
126
|
+
dsh plugin --profile web add dsh-mini-remote
|
|
127
|
+
```
|
|
135
128
|
|
|
136
|
-
|
|
129
|
+
#### 途径三:从 GitHub 仓库直接安装
|
|
137
130
|
|
|
138
|
-
|
|
131
|
+
```powershell
|
|
132
|
+
dsh plugin --profile web add github:xingzhen199186/dsh-mini-remote
|
|
133
|
+
```
|
|
139
134
|
|
|
140
|
-
|
|
135
|
+
#### 途径四:本地目录安装(开发者调试)
|
|
141
136
|
|
|
142
|
-
|
|
137
|
+
```powershell
|
|
138
|
+
dsh plugin --profile web add C:\path\to\dsh-mini-remote
|
|
139
|
+
```
|
|
143
140
|
|
|
144
|
-
|
|
141
|
+
### 启动与服务确认
|
|
145
142
|
|
|
146
|
-
|
|
143
|
+
1. 重启 DSH 服务(关闭当前 `dsh web` 窗口并重新运行)。
|
|
144
|
+
2. 查看控制台启动日志,插件将输出初始化就绪信息、本机监听端口与动态访问令牌:
|
|
145
|
+
```text
|
|
146
|
+
[dsh-mini-remote] 已启动:http://127.0.0.1:3090/mini?token=xxxxxxxxxxxx
|
|
147
|
+
```
|
|
148
|
+
3. 打开 DSH 桌面端界面,进入「设置」→ 左侧导航选择「手机遥控」,即可查看配对二维码与连接详情。
|
|
147
149
|
|
|
148
|
-
|
|
150
|
+
> **手机端只有浏览器网页这一种形态。** 扫码用浏览器打开就是全部——没有独立的 App,也没有小程序。可以把这个页面「添加到主屏幕」:加完那个图标点开是全屏的,看着和 App 差不多,跑的仍然是浏览器;换一台手机、或者清掉浏览器数据,就回到重新扫码那一步。
|
|
151
|
+
>
|
|
152
|
+
> 反过来说,这个网页**也不挑设备**:在 PC 浏览器里打开同一个地址同样能用,而且能在里面开出完整的 DSH 电脑端界面——见「进阶设置:内嵌桌面端界面」。
|
|
149
153
|
|
|
150
|
-
|
|
154
|
+
---
|
|
151
155
|
|
|
152
|
-
|
|
156
|
+
## 使用示例与配置
|
|
153
157
|
|
|
154
|
-
|
|
158
|
+
### 连接通道对比与选型
|
|
155
159
|
|
|
156
|
-
|
|
160
|
+
依据当前网络拓扑选择最合适的接入通路:
|
|
157
161
|
|
|
158
|
-
|
|
162
|
+
| 通道类型 | 适用场景 | 依赖条件 | 特性与代价 |
|
|
163
|
+
| :--- | :--- | :--- | :--- |
|
|
164
|
+
| **局域网(LAN)** | 手机与电脑处于同一 Wi-Fi 子网 | 无额外客户端 | 配置即用;脱离当前局域网后立即断开 |
|
|
165
|
+
| **Tailscale** | 跨地域移动访问,要求网络地址稳定 | 电脑与手机均安装并登录 Tailscale | 固定私网 IP;可额外申请 Tailscale HTTPS 证书 |
|
|
166
|
+
| **公网隧道** | 无公网 IP 且不便安装任何额外客户端 | 需开启 Cloudflare 隧道开关 | 每次重启 DSH 自动更换临时二级域名;初次开启下载约 50 MB 运行组件 |
|
|
167
|
+
| **飞书长连接** | 仅依赖企业 IM,完全脱离浏览器 | 配置飞书自建应用机器人凭据 | 无需公网暴露,通过长连接双向收发,支持移动审批 |
|
|
159
168
|
|
|
160
|
-
|
|
169
|
+
### 移动端页面操作指引
|
|
161
170
|
|
|
162
|
-
|
|
171
|
+
- **指令发送与排队**:在底部输入框输入文字并发送。若 Agent 正处于执行中,后续消息自动进入有序队列,并在刻度尺中高亮展示。
|
|
172
|
+
- **斜杠指令交互**:输入 `/` 呼出当前会话绑定的系统级指令列表,支持按键过滤与参数提示。
|
|
173
|
+
- **多选提问与确认**:当 Agent 发起选项询问时,页面弹出答题卡,支持点选、改选或自定义输入补充文本。
|
|
174
|
+
- **回到底部**:在长文本翻阅时,右下角自动浮出「回到底部」悬浮球(单帧模式下不触发)。
|
|
175
|
+
- **权限档位切换**:点击顶栏状态区,可在「仅可查看(read-only)」、「工作区内修改(workspace-write)」与「完全权限(danger-full-access)」之间切换。
|
|
163
176
|
|
|
164
|
-
|
|
177
|
+
> ⚠️ **注意**:
|
|
178
|
+
> 1. 将权限档位提升至「完全权限」意味着 Agent 具备任意文件与系统级指令执行能力,请务必谨慎操作。
|
|
179
|
+
> 2. 系统底层触发的危险命令权限审批弹窗,属于电脑端 DSH 自己的安全边界——手机端没法直接批准,得回电脑上处理。
|
|
165
180
|
|
|
166
|
-
|
|
181
|
+
### 进阶设置:内嵌桌面端界面(手机或 PC 网页)
|
|
167
182
|
|
|
168
|
-
|
|
183
|
+
**手机遥控页不是只能在手机上用。** 在 PC 浏览器里打开同一个地址(扫码打开的那一条),界面一样能用——只是排版是按手机屏幕做的。而让这条路在 PC 上真正好用起来的,是设置里的「进阶设置」:它把完整的 DSH 电脑端界面嵌进来,于是不必额外去开一个 `dsh web`。
|
|
169
184
|
|
|
170
|
-
|
|
185
|
+
怎么打开:
|
|
171
186
|
|
|
172
|
-
|
|
187
|
+
1. 点右上角设置,找到「进阶设置」那一行(提示语是「打开电脑上的 DSH 界面,改那些手机上没有的设置」),切到「开」。
|
|
188
|
+
2. 它会再问你一次——**要点第二次才算开**。
|
|
189
|
+
3. 下面随即多出一行「电脑端界面」(提示语「电脑端 dsh 完整页面」),点「打开」。
|
|
190
|
+
4. 这一页里就嵌进一整屏完整的 DSH 电脑端界面:插件安装、模型配置、会话记录、全量日志都在里面。顶上那条横条可以退出、回到手机遥控页。
|
|
173
191
|
|
|
174
|
-
|
|
192
|
+
**它搬的是这台电脑自己的界面,不是另起一份。** 你在这里改的配置、发的对话,都发生在**这个 DSH 上**——桌面端和它处在同一个状态里。做法也不是"多开一个网页版":插件的服务端先按官方正门认证一次,然后把每个请求**实时转发**到本机那个界面(连实时的界面刷新都原样转,不攒批)。所以手机全程碰不到任何官方凭据。
|
|
175
193
|
|
|
176
|
-
|
|
194
|
+
> ⚠️ **注意**:
|
|
195
|
+
> 1. **这是一个权限开关,不是普通偏好。** 打开它,等于把这个令牌的访问面从"手机页暴露的那点事"扩到**整个电脑端设置面**——模型配置、凭据、插件装卸、会话记录全在内。所以它默认关,而且开着要点两次。
|
|
196
|
+
> 2. 嵌进来的就是电脑端原样的界面,手机窄屏下做了移动端适配;PC 浏览器上就是原样。
|
|
177
197
|
|
|
178
|
-
|
|
198
|
+
### 桌面端「远程窗口」
|
|
179
199
|
|
|
180
|
-
|
|
200
|
+
**一句话**:在 B 电脑的 DSH 桌面端里,直接打开 A 电脑的 DSH 界面。
|
|
181
201
|
|
|
182
|
-
|
|
202
|
+
**它解决什么**:两台电脑各跑各的 DSH 时,想在一台上看另一台的界面,原来只有两条路——开个浏览器窗口(于是要在两套窗口之间来回切),或者上远程桌面(整块屏幕搬过来,分辨率和快捷键全是麻烦)。这个入口把「那一台」变成主面板里的一屏:点开就是它,再点一下回到原来的面板。
|
|
183
203
|
|
|
184
|
-
|
|
204
|
+
#### 用起来是什么样
|
|
185
205
|
|
|
186
|
-
|
|
206
|
+
1. 点左侧栏的「远程窗口」,主面板列出你配对过的电脑——一行一台,带名字、地址、最近一次连上的时间。
|
|
207
|
+
2. 点其中一行,那一台的界面就嵌在面板里。
|
|
208
|
+
3. 再点一下左侧栏那一行(点图标、点文字、点整行空白都算),退出,回到进入前那个面板。
|
|
187
209
|
|
|
188
|
-
|
|
210
|
+
界面正常显示时顶上那行横条会**自动收起**,鼠标碰一下屏幕顶部就滑出来。横条里是「← 返回列表」、这是哪一台、以及「再试一次」——出问题时它是唯一的出口(和换条路重试的入口),所以正在换票、出错、框一直没打开这几种状态下它**不会收起**,一直在。
|
|
189
211
|
|
|
190
|
-
|
|
191
|
-
先看手机和电脑是不是同一个 Wi-Fi。
|
|
212
|
+
#### 安全上做了什么
|
|
192
213
|
|
|
193
|
-
|
|
194
|
-
|
|
214
|
+
- **凭据不过手**:打开窗口时,服务端当场签一张一次性票据(30 秒内有效、只能兑一次)。浏览器拿到的是这张票,**访问口令和长期凭据一个字节都不进浏览器**——既不留进浏览历史,也不进被嵌进来的那个页面。
|
|
215
|
+
- **只有带有效票据的页面才允许被嵌**:跨站嵌入默认禁止,带票的那一次才放开。外部页面即使拿到地址也进不来。
|
|
216
|
+
- **撤销是立即的**:在 A 的设置里撤销 B 这台设备之后,B 已经开着的窗口下一次请求就过不去,不需要等它自己断。
|
|
217
|
+
- **跟着 DSH 一起失效**:A 的 DSH 重启,那一屏的通行凭据自动作废,重新点一次就能再进。
|
|
195
218
|
|
|
196
|
-
|
|
197
|
-
手机切后台再回来经常会这样,页面会自己重连,等几秒;还不行就进设置点「重连」。
|
|
219
|
+
#### 跨机使用(两台电脑)
|
|
198
220
|
|
|
199
|
-
|
|
200
|
-
声音要你先碰过页面才会响,点一下就行。
|
|
221
|
+
下面把被连的那台电脑叫 A,去连的那台叫 B。
|
|
201
222
|
|
|
202
|
-
|
|
203
|
-
说明你打开的链接里没带密码(比如自己手打的地址)。回电脑上重新扫一次二维码就好。
|
|
223
|
+
**A 侧**
|
|
204
224
|
|
|
205
|
-
|
|
206
|
-
|
|
225
|
+
1. **装本插件,版本不低于 `0.2.1`。**「远程窗口」是 `0.2.1` 才有的功能——B 连的是 A 上跑着的那份代码,A 装的是旧版,B 看到的就还是旧界面。
|
|
226
|
+
2. 打开「设置 → 手机遥控 → 允许别的电脑连接」,把这个开关打开。它默认是关的;关着的时候,A 连配对请求也不受理。
|
|
227
|
+
3. 在同一个设置页的「密码」那一块点「复制」,取出 A 的口令。
|
|
207
228
|
|
|
208
|
-
|
|
229
|
+
**B 侧**(在 B 的「设置 → 手机遥控」里操作)
|
|
209
230
|
|
|
210
|
-
|
|
231
|
+
要用的那一块叫「其他电脑」,在设置页靠下。它和上面那块「设备」正好相反:那块是「谁进得来」,这块是「我连得上谁」。
|
|
211
232
|
|
|
212
|
-
|
|
233
|
+
1. 点「添加一台电脑」,摊开三个框。
|
|
234
|
+
2. **那台电脑的地址(它「手机遥控」页那条,不带 `/mini`)**:填 A 的地址。这一格填什么最关键,见下面「地址填哪一条」。
|
|
235
|
+
3. **那台电脑的口令(在它的「手机遥控」设置里复制)**:填 A 侧第 3 步复制来的那串。这一格是打码的。
|
|
236
|
+
4. **给它起个名字(可留空,留空就用地址当名字)**:方便你在名单里认出是哪一台。
|
|
237
|
+
5. 点「确认添加」。这一步会真的去 A 那边配一次对——成功之后 A 的设置页会多出一条「这台电脑」的记录,B 这边多出一行。
|
|
238
|
+
6. 点名单里那一行。
|
|
213
239
|
|
|
214
|
-
|
|
240
|
+
名单每一行显示:名字、地址、`最近成功 <时刻>`(没连成过就是「还没有记录」),右边两枚按钮——**「重连」**重新取一次通行凭据,**「断开」**删掉这条配对。断开前会问你一次,并说明对面那台电脑上的记录**还留着**;要彻底收回,得去 A 那边把这一台撤销。
|
|
215
241
|
|
|
216
|
-
|
|
242
|
+
**地址填哪一条**
|
|
217
243
|
|
|
218
|
-
|
|
244
|
+
- 填 A 的「手机遥控」页里那条地址(末尾不用带 `/mini`);**不要**填你在 A 上打开 DSH 界面时用的那条。
|
|
245
|
+
- **必须 `https://`。** 明文 `http://` 能配对、也能取到通行凭据,但框里是白的——那枚通行凭据在非 https 的地址上会被浏览器丢掉。
|
|
246
|
+
- 推荐走 Tailscale:在 A 上打开「HTTPS 地址(Tailscale)」开关,B 填 `https://<机器名>.<你的 tailnet>.ts.net`,**不用写端口**。地址固定,设一次就完事。
|
|
247
|
+
- 「公网访问」隧道那条地址每次重启都会变,不适合跨机。
|
|
219
248
|
|
|
220
|
-
|
|
249
|
+
**怎么知道做对了**
|
|
221
250
|
|
|
222
|
-
|
|
251
|
+
点名单里那一行,框里出现那台电脑的界面。出问题时那一行底下会有说明——对面没开开关、被撤销了、连不上、地址填错,各有各的说法,照着改就行。
|
|
223
252
|
|
|
224
|
-
|
|
253
|
+
**以后要收回某一台的权限**
|
|
225
254
|
|
|
226
|
-
|
|
255
|
+
在 A 的「设置 → 手机遥控 → 设备」那一块——就是列出「谁进得来」的那份名单,每行带「改名」和「撤销」——找到那台电脑,点「撤销」,再点「确认撤销」。**立即生效**:对面已经开着的窗口,下一次请求就过不去,不用等它自己断。
|
|
227
256
|
|
|
228
|
-
|
|
257
|
+
### 飞书机器人配置流程
|
|
229
258
|
|
|
230
|
-
|
|
259
|
+
1. 登录 [飞书开放平台](https://open.feishu.cn/) 创建企业自建应用。
|
|
260
|
+
2. 记录「凭证与基础信息」中的 `App ID` 与 `App Secret`。
|
|
261
|
+
3. 进入「添加应用能力」页面,添加「机器人」能力。
|
|
262
|
+
4. 进入「事件与回调」页面,配置事件订阅方式为「使用长连接接收事件」,并添加 `im.message.receive_v1` 事件。
|
|
263
|
+
5. 进入「权限管理」页面,检索并开通以下 3 项权限:
|
|
264
|
+
- 接收消息(`im:message:receive_v1`)
|
|
265
|
+
- 以应用身份发消息(`im:message:send_as_bot`)
|
|
266
|
+
- 获取与发送单聊、群组消息(`im:message.group_at_msg:readonly` 等对应集合)
|
|
267
|
+
6. 创建并**发布应用版本**。
|
|
268
|
+
7. 返回 DSH 桌面端「设置」→「手机遥控」→「飞书」栏目,填入凭证并启用开关。首次交互机器人将在单聊中返回用户的 `open_id`,将其复制填入白名单保存后即可正常通讯。
|
|
231
269
|
|
|
232
|
-
|
|
270
|
+
### 核心配置参数表
|
|
233
271
|
|
|
234
|
-
|
|
272
|
+
配置项支持在 DSH 标准配置文件中声明,亦可通过桌面端「手机遥控」界面配置:
|
|
235
273
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
274
|
+
| 参数项 | 数据类型 | 默认值 | 生效方式 | 说明 |
|
|
275
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
276
|
+
| `port` | `number` | `3090` | 重启生效 | 遥控服务监听的本地 HTTP 端口(冲突时自动顺延) |
|
|
277
|
+
| `token` | `string` | *(随机生成)* | 重启生效 | 访问口令(支持手动修改,长度不得低于 12 位) |
|
|
278
|
+
| `defaultMode` | `string` | `"minimal"` | 即时生效 | 移动端默认呈现视图:`"minimal"`、`"chat"`、`"full"` |
|
|
279
|
+
| `externalNotify` | `boolean` | `true` | 即时生效 | 任务完成时是否触发系统通知音效与设备震动 |
|
|
280
|
+
| `tunnel.enabled` | `boolean` | `false` | 重启生效 | 是否启用 Cloudflare 临时公网隧道 |
|
|
281
|
+
| `tailscale.serve` | `boolean` | `false` | 重启生效 | 是否尝试配置并监听 Tailscale 专有 HTTPS 证书通道 |
|
|
282
|
+
| `feishu.enabled` | `boolean` | `false` | 即时生效 | 是否开启飞书应用长连接双向通道 |
|
|
240
283
|
|
|
241
284
|
---
|
|
242
285
|
|
|
243
|
-
##
|
|
286
|
+
## 开源协议
|
|
244
287
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
---
|
|
288
|
+
本项目采用 [MIT 许可证](LICENSE) 进行开源。
|
|
248
289
|
|
|
249
|
-
|
|
290
|
+
### 相关文档与资源索引
|
|
250
291
|
|
|
251
|
-
|
|
292
|
+
- [立绘与动画工艺规范](docs/character.md):记录图像生成工具、共享提示词模板、规格尺寸与验收标准。
|
|
293
|
+
- [立绘基准帧定义(2026-09-28 定稿)](docs/art-refs/2026-09-28/):归档标准帧原图与全量提示词基线。
|
|
294
|
+
- [版本变更历史](CHANGELOG.md):记录各阶段版本详细演进与问题修复依据。
|
|
295
|
+
- [项目代码仓库](https://github.com/xingzhen199186/dsh-mini-remote):GitHub 官方主页。
|
|
252
296
|
|
|
253
|
-
|
|
297
|
+
### 致谢
|
|
254
298
|
|
|
255
|
-
|
|
299
|
+
本项目在通道交互与配对界面设计上,参考了 [dsh-pocket](https://www.npmjs.com/package/dsh-pocket)(作者 @shaobeichen)在多路径独立二维码呈现方面的工程构思。
|