dsh-mobile 0.1.0-alpha.13 → 0.1.0-alpha.14
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.en.md +108 -0
- package/README.md +73 -129
- package/assets/brand/app-icon-master.png +0 -0
- package/assets/brand/repository-hero.png +0 -0
- package/lib/client.js +390 -662
- package/lib/client.js.map +1 -1
- package/lib/index.mjs +3 -1
- package/package.json +8 -7
- package/README.zh.md +0 -217
package/README.en.md
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/brand/repository-hero.png" alt="Use DeepSeek Harness from a phone" width="100%">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">DSH Mobile</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">Secure, live LAN access to DeepSeek Harness from a phone.</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://www.npmjs.com/package/dsh-mobile"><img src="https://img.shields.io/npm/v/dsh-mobile?label=npm&color=CB3837" alt="npm version"></a>
|
|
11
|
+
<a href="https://github.com/saya-ch/dsh-mobile/releases"><img src="https://img.shields.io/badge/Download-Android_App-3DDC84?logo=android&logoColor=white" alt="Download Android app"></a>
|
|
12
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-0F172A" alt="Apache-2.0"></a>
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
<p align="center"><a href="README.md">简体中文</a></p>
|
|
16
|
+
|
|
17
|
+
> Alpha software. Android is the only native app. This is a community plugin, not an official DeepSeek product.
|
|
18
|
+
|
|
19
|
+
<p align="center"><a href="https://github.com/saya-ch/dsh-mobile/releases"><strong>Download the Android app</strong></a></p>
|
|
20
|
+
|
|
21
|
+
DSH Mobile adapts the stock DeepSeek Harness React/Cordis surface for phones and exposes it through an authenticated HTTPS LAN gateway. Desktop, Android, and mobile browsers use the same Workspaces, sessions, messages, tools, settings, and event streams.
|
|
22
|
+
|
|
23
|
+
## Quick start
|
|
24
|
+
|
|
25
|
+
With an installed `dsh` command:
|
|
26
|
+
|
|
27
|
+
```powershell
|
|
28
|
+
dsh plugin --profile web add dsh-mobile
|
|
29
|
+
dsh plugin --profile web exec dsh-mobile setup
|
|
30
|
+
dsh --profile web
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
From a DeepSeek Harness source checkout:
|
|
34
|
+
|
|
35
|
+
```powershell
|
|
36
|
+
corepack enable; pnpm install
|
|
37
|
+
pnpm dsh plugin --profile web add dsh-mobile
|
|
38
|
+
pnpm dsh plugin --profile web exec dsh-mobile setup
|
|
39
|
+
pnpm dsh --profile web
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Open **Mobile** in the lower-left DeepSeek Harness sidebar, enable access, and create a pairing key. In the Android app, tap **Scan**, select the computer, and enter the key. The paired device remains trusted until it is revoked, expires, or its app data is cleared.
|
|
43
|
+
|
|
44
|
+
## Connection options
|
|
45
|
+
|
|
46
|
+
| Client | Best for | Notes |
|
|
47
|
+
| --- | --- | --- |
|
|
48
|
+
| Android app | Everyday use | Automatic discovery, no browser chrome, private certificate pinning |
|
|
49
|
+
| Mobile browser | Temporary or cross-platform access | Open the HTTPS origin shown by the Mobile card |
|
|
50
|
+
|
|
51
|
+
Discovery uses mDNS/NSD, UDP announcements and queries, plus HTTPS probing. It publishes only the device name, address, port, protocol version, and stable `instanceId`. Keys and device tokens are never discoverable. IP changes do not require another Android pairing.
|
|
52
|
+
|
|
53
|
+
## Mobile UI
|
|
54
|
+
|
|
55
|
+
Phones still render the stock DeepSeek Harness page. The plugin provides a lightweight default mobile adaptation, and you can freely redesign the page structure and extend its interactions through **Customize from DeepSeek Harness**. By default, the session sidebar becomes a drawer, details open as an overlay, settings use a single-column layout, and the native composer is adapted for touch. Adding a Workspace browses computer folders inside the phone page. Images can come from the phone or the computer.
|
|
56
|
+
|
|
57
|
+
The Android app is a thin Kotlin WebView shell and contains no frontend copy.
|
|
58
|
+
|
|
59
|
+
## Customize from DeepSeek Harness
|
|
60
|
+
|
|
61
|
+
Customization is intentionally open-ended: use your own ideas to arrange the mobile layout, interactions, and features instead of staying within the default style.
|
|
62
|
+
|
|
63
|
+
Ask DeepSeek Harness to edit:
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
$DSH_HOME/mobile-access/mobile.css
|
|
67
|
+
$DSH_HOME/mobile-access/mobile.js
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Changes are applied to open Android and browser pages in about one second. Customization is not limited to colors: `mobile.js` can add navigation, shortcuts, dashboards, camera, voice, scanning, and complete interactions with same-origin DeepSeek Harness APIs.
|
|
71
|
+
|
|
72
|
+
## How it works
|
|
73
|
+
|
|
74
|
+
```mermaid
|
|
75
|
+
flowchart LR
|
|
76
|
+
Phone["Android / mobile browser"] -->|"HTTPS + device session"| Gateway["DSH Mobile gateway"]
|
|
77
|
+
Gateway -->|"loopback proxy"| DSH["Stock DSH Web and Host"]
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
The Host face owns discovery, pairing, HTTPS, and the proxy. The Client face installs the responsive adapter on the stock DeepSeek Harness page. No DeepSeek Harness source files are modified.
|
|
81
|
+
|
|
82
|
+
## Security
|
|
83
|
+
|
|
84
|
+
Use the plugin only on a trusted LAN or trusted VPN. Never expose it directly to the public Internet. A paired device is a fully trusted DeepSeek Harness operator. Revoke lost devices from the computer. See [SECURITY.md](SECURITY.md).
|
|
85
|
+
|
|
86
|
+
## Uninstall
|
|
87
|
+
|
|
88
|
+
```powershell
|
|
89
|
+
dsh plugin --profile web remove dsh-mobile
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
To remove local plugin data first:
|
|
93
|
+
|
|
94
|
+
```powershell
|
|
95
|
+
dsh plugin --profile web exec dsh-mobile purge --yes
|
|
96
|
+
dsh plugin --profile web remove dsh-mobile
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Source users replace `dsh` with `pnpm dsh`.
|
|
100
|
+
|
|
101
|
+
## Development
|
|
102
|
+
|
|
103
|
+
```powershell
|
|
104
|
+
npm ci
|
|
105
|
+
npm run verify
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
See the [Android guide](apps/mobile/README.md). Licensed under [Apache-2.0](LICENSE).
|
package/README.md
CHANGED
|
@@ -1,49 +1,43 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="
|
|
2
|
+
<img src="assets/brand/repository-hero.png" alt="使用手机连接 DeepSeek Harness" width="100%">
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<h1 align="center">DSH Mobile</h1>
|
|
6
6
|
|
|
7
|
-
<p align="center"
|
|
7
|
+
<p align="center">在手机上安全、实时地使用电脑中的 DeepSeek Harness。</p>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
|
-
<a href="https://www.npmjs.com/package/dsh-mobile"><img src="https://img.shields.io/npm/v/dsh-mobile?label=npm&color=CB3837" alt="npm
|
|
11
|
-
<a href="https://
|
|
12
|
-
<img src="https://img.shields.io/badge/
|
|
13
|
-
<a href="
|
|
14
|
-
<a href="#a-native-dsh-plugin"><img src="https://img.shields.io/badge/DSH-stock%20compatible-2563EB" alt="Compatible with stock DSH"></a>
|
|
15
|
-
<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-0F172A" alt="Apache-2.0 license"></a>
|
|
10
|
+
<a href="https://www.npmjs.com/package/dsh-mobile"><img src="https://img.shields.io/npm/v/dsh-mobile?label=npm&color=CB3837" alt="npm 版本"></a>
|
|
11
|
+
<a href="https://github.com/saya-ch/dsh-mobile/releases"><img src="https://img.shields.io/badge/下载-Android_App-3DDC84?logo=android&logoColor=white" alt="下载 Android App"></a>
|
|
12
|
+
<img src="https://img.shields.io/badge/DSH-插件-2563EB" alt="DSH 插件">
|
|
13
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-0F172A" alt="Apache-2.0"></a>
|
|
16
14
|
</p>
|
|
17
15
|
|
|
18
16
|
<p align="center">
|
|
19
|
-
<a href="
|
|
20
|
-
<a href="
|
|
21
|
-
<a href="
|
|
22
|
-
<a href="
|
|
17
|
+
<a href="#快速开始">快速开始</a> ·
|
|
18
|
+
<a href="#连接方式">连接方式</a> ·
|
|
19
|
+
<a href="#自定义移动布局与功能">自定义</a> ·
|
|
20
|
+
<a href="README.en.md">English</a>
|
|
23
21
|
</p>
|
|
24
22
|
|
|
25
|
-
>
|
|
23
|
+
> Alpha 版本,当前原生 App 仅支持 Android。本项目是社区插件,不是 DeepSeek 官方产品。
|
|
26
24
|
|
|
27
|
-
|
|
25
|
+
<p align="center"><a href="https://github.com/saya-ch/dsh-mobile/releases"><strong>下载 Android App</strong></a></p>
|
|
28
26
|
|
|
29
|
-
|
|
27
|
+
DSH Mobile 不复制 DeepSeek Harness 前端。它为原生 React/Cordis 页面增加移动布局,并通过受保护的局域网 HTTPS 网关让 Android App 或手机浏览器访问同一份工作区、会话、消息和运行状态。
|
|
30
28
|
|
|
31
|
-
##
|
|
29
|
+
## 能做什么
|
|
32
30
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
| Phone/computer image selection and downloads | Yes | Yes (the browser supplies the phone picker) |
|
|
40
|
-
| iOS native app | Not yet | Safari can use the Web UI |
|
|
31
|
+
- 实时控制电脑上的 DeepSeek Harness,会话和消息与桌面端同步。
|
|
32
|
+
- 复用原生对话、Markdown、工具卡、模型、设置、批准和已安装 UI 插件。
|
|
33
|
+
- 手机侧边栏、单列设置、移动输入栏和工具详情层。
|
|
34
|
+
- 从手机或电脑选择图片;添加工作区时在手机上浏览电脑目录。
|
|
35
|
+
- 自动发现局域网中的 DSH,IP 变化后按稳定设备标识更新地址。
|
|
36
|
+
- 直接在 DeepSeek Harness 对话中修改移动布局和功能,手机约一秒内实时刷新。
|
|
41
37
|
|
|
42
|
-
|
|
38
|
+
## 快速开始
|
|
43
39
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
Use the first block when `dsh` is available globally:
|
|
40
|
+
已经安装 `dsh` 命令:
|
|
47
41
|
|
|
48
42
|
```powershell
|
|
49
43
|
dsh plugin --profile web add dsh-mobile
|
|
@@ -51,162 +45,112 @@ dsh plugin --profile web exec dsh-mobile setup
|
|
|
51
45
|
dsh --profile web
|
|
52
46
|
```
|
|
53
47
|
|
|
54
|
-
|
|
48
|
+
直接使用 DeepSeek Harness 源码:
|
|
55
49
|
|
|
56
50
|
```powershell
|
|
57
|
-
corepack enable
|
|
58
|
-
pnpm install
|
|
51
|
+
corepack enable; pnpm install
|
|
59
52
|
pnpm dsh plugin --profile web add dsh-mobile
|
|
60
53
|
pnpm dsh plugin --profile web exec dsh-mobile setup
|
|
61
54
|
pnpm dsh --profile web
|
|
62
55
|
```
|
|
63
56
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
1. Open the Mobile card in the lower-left corner of the desktop DSH UI.
|
|
67
|
-
2. Start access and select **Create pairing key**. The fingerprint-bound key is copied to the clipboard; the same card also shows a complete browser link.
|
|
68
|
-
3. Open the Android app, select **Scan**, then select the discovered DSH. Paste the key and connect.
|
|
69
|
-
4. Connect. The app fingerprint-pins this DSH inside its encrypted private storage; it does not install a CA into Android settings. Mobile browsers still require an HTTPS certificate they already trust.
|
|
70
|
-
|
|
71
|
-
The key and browser link expire after two minutes and work once. After pairing, Android stores a revocable device credential encrypted by Android Keystore. Every later app launch silently renews a short Web session from that credential; no key is requested again unless the device is revoked, its trust expires, or app data is cleared. The app can rediscover the same DSH installation on the default port after its LAN address changes. Browser profiles still pair separately.
|
|
72
|
-
|
|
73
|
-
## Everyday control
|
|
74
|
-
|
|
75
|
-
The Mobile card remains in DSH's lower-left corner. Stopping mobile access closes only the external HTTPS listener and active mobile sessions; the local DSH Web UI keeps running. Starting it again does not reinstall the plugin.
|
|
76
|
-
|
|
77
|
-
The two access modes are equivalent:
|
|
57
|
+
启动后:
|
|
78
58
|
|
|
79
|
-
|
|
80
|
-
|
|
59
|
+
1. 在 DeepSeek Harness 左下角打开“移动端”,确认移动访问已开启。
|
|
60
|
+
2. 点击“生成配对密钥”。
|
|
61
|
+
3. Android App 点击“扫描”,选择电脑并输入密钥。
|
|
62
|
+
4. 配对完成后会建立持久设备信任,以后打开 App 无需重复输入。
|
|
81
63
|
|
|
82
|
-
|
|
64
|
+
插件不会修改 DeepSeek Harness 源码。设置、证书、设备和自定义文件保存在 `$DSH_HOME/mobile-access/`。
|
|
83
65
|
|
|
84
|
-
|
|
85
|
-
- **Computer files** browses computer folders inside the phone UI and uploads the selected image without opening a desktop dialog.
|
|
66
|
+
## 连接方式
|
|
86
67
|
|
|
87
|
-
|
|
68
|
+
| 方式 | 适合场景 | 说明 |
|
|
69
|
+
| --- | --- | --- |
|
|
70
|
+
| Android App | 日常使用 | 自动发现、无浏览器栏、App 内私有证书固定 |
|
|
71
|
+
| 手机浏览器 | 临时或跨平台访问 | 打开“移动端”卡片显示的 HTTPS 地址 |
|
|
88
72
|
|
|
89
|
-
|
|
73
|
+
Android 同时使用 mDNS/NSD、UDP 公告、主动 UDP 查询和 HTTPS 探测发现 DeepSeek Harness。发现只广播设备名、地址、端口、协议版本和稳定 `instanceId`,不会广播密钥或令牌。
|
|
90
74
|
|
|
91
|
-
|
|
75
|
+
App 配对后保存可撤销的设备凭据和私有证书信任;Wi-Fi、热点或 DHCP 导致 IP 变化时不需要重新配对。手机浏览器不能使用 App 的私有信任,因此需要浏览器本身信任该 HTTPS 证书。
|
|
92
76
|
|
|
93
|
-
##
|
|
77
|
+
## 移动端界面
|
|
94
78
|
|
|
95
|
-
|
|
79
|
+
手机端仍然渲染原生 DeepSeek Harness 页面。插件提供轻量的默认移动适配;你也可以通过“自定义移动布局与功能”自由调整页面结构并扩展交互:
|
|
96
80
|
|
|
97
|
-
-
|
|
98
|
-
-
|
|
81
|
+
- 左上角打开工作区与会话抽屉。
|
|
82
|
+
- 对话、轨迹、工具详情和 Session log 保持原有能力。
|
|
83
|
+
- 设置页使用顶部分类和单列内容。
|
|
84
|
+
- 输入栏保留命令、权限、模型、上下文、图片和发送控件。
|
|
85
|
+
- “添加工作区”在手机上展示电脑目录,不会在电脑上弹系统选择器。
|
|
99
86
|
|
|
100
|
-
|
|
87
|
+
Android App 只是 Kotlin WebView 薄壳,不内置另一份网页。手机浏览器访问的也是同一页面。
|
|
101
88
|
|
|
102
|
-
|
|
89
|
+
## 自定义移动布局与功能
|
|
103
90
|
|
|
104
|
-
|
|
105
|
-
Turn DSH Mobile into a one-handed field console by editing
|
|
106
|
-
$DSH_HOME/mobile-access/mobile.css and mobile.js.
|
|
107
|
-
|
|
108
|
-
Add a bottom command dock, swipe shortcuts for switching conversations,
|
|
109
|
-
a push-to-talk button when the browser supports speech input, and a collapsible
|
|
110
|
-
session monitor. Keep every feature mobile-only. Register JavaScript through
|
|
111
|
-
window.dshMobile.register(), return a cleanup function, and do not modify DSH source.
|
|
112
|
-
```
|
|
91
|
+
自定义程度很高:你可以发挥创意,自由布置移动端的布局、交互和功能,而不必局限于默认样式。
|
|
113
92
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
Setup creates:
|
|
93
|
+
直接在 DeepSeek Harness 对话中提出修改即可。默认文件:
|
|
117
94
|
|
|
118
95
|
```text
|
|
119
96
|
$DSH_HOME/mobile-access/mobile.css
|
|
120
97
|
$DSH_HOME/mobile-access/mobile.js
|
|
121
98
|
```
|
|
122
99
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
`mobile.js` uses a small lifecycle entry point:
|
|
126
|
-
|
|
127
|
-
```js
|
|
128
|
-
window.dshMobile.register(({ root, document, request }) => {
|
|
129
|
-
const workspace = document.createElement('section')
|
|
130
|
-
workspace.ariaLabel = 'My mobile workspace'
|
|
131
|
-
root.append(workspace)
|
|
132
|
-
|
|
133
|
-
// Build any mobile Web UI and behavior inside workspace. Use request()
|
|
134
|
-
// for same-origin DSH API calls with the paired Session and CSRF protection.
|
|
135
|
-
|
|
136
|
-
return () => workspace.remove()
|
|
137
|
-
})
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
The supplied `root` isolates mobile-only DOM, while `request()` rejects cross-origin targets and carries the paired session plus the gateway's CSRF header. An extension may still use ordinary secure-context browser APIs directly when the device grants permission.
|
|
141
|
-
|
|
142
|
-
Basic theme controls:
|
|
143
|
-
|
|
144
|
-
```css
|
|
145
|
-
:root {
|
|
146
|
-
--dsh-mobile-accent: #2563eb;
|
|
147
|
-
--dsh-mobile-font-scale: 1.05;
|
|
148
|
-
--dsh-mobile-radius: 16px;
|
|
149
|
-
}
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
Narrow-screen adjustments:
|
|
100
|
+
例如对 DeepSeek Harness 说:
|
|
153
101
|
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
}
|
|
102
|
+
```text
|
|
103
|
+
请编辑 $DSH_HOME/mobile-access/mobile.css 和 mobile.js,
|
|
104
|
+
把移动端改成适合单手操作的开发控制台:增加底部快捷指令、
|
|
105
|
+
会话状态面板和长按语音入口。只影响窄屏,不修改 DSH 源码。
|
|
159
106
|
```
|
|
160
107
|
|
|
161
|
-
|
|
108
|
+
保存后,已打开的 App 和浏览器通常会在一秒内应用变化。自定义能力不限于配色:`mobile.js` 可以添加导航、快捷操作、状态面板、相机、语音、扫码,以及调用同源 DSH API 的完整交互。
|
|
162
109
|
|
|
163
|
-
##
|
|
164
|
-
|
|
165
|
-
One standard bundle contributes two faces: the Host face owns the gateway and loopback control route; the Client face owns the responsive layer and desktop control card. The package injects only stock `webServer`, installs with `dsh plugin add`, and uninstalls with `dsh plugin remove`.
|
|
110
|
+
## 工作原理
|
|
166
111
|
|
|
167
112
|
```mermaid
|
|
168
113
|
flowchart LR
|
|
169
|
-
Phone["Android
|
|
170
|
-
Gateway -->|"
|
|
114
|
+
Phone["Android App / 手机浏览器"] -->|"HTTPS + 设备会话"| Gateway["DSH Mobile 网关"]
|
|
115
|
+
Gateway -->|"回环代理"| DSH["原生 DSH Web 与 Host"]
|
|
116
|
+
DSH -->|"同一工作区、会话和事件流"| Phone
|
|
171
117
|
```
|
|
172
118
|
|
|
173
|
-
|
|
119
|
+
插件包含两部分:Host face 提供发现、配对、HTTPS 和回环代理;Client face 为原生 DeepSeek Harness 页面安装移动响应式适配。安装和卸载都通过 DeepSeek Harness 插件机制完成。
|
|
120
|
+
|
|
121
|
+
## 安全
|
|
174
122
|
|
|
175
|
-
-
|
|
176
|
-
-
|
|
177
|
-
-
|
|
178
|
-
-
|
|
179
|
-
- Authentication happens before any request reaches the stock DSH loopback server. DSH itself is never rebound to `0.0.0.0`.
|
|
180
|
-
- `mobile.js` runs as application code inside the paired DSH page. Only let trusted DSH conversations edit it, and review generated integrations before keeping them.
|
|
123
|
+
- 仅在可信家庭、办公局域网或可信 VPN 中使用,不要转发到公网。
|
|
124
|
+
- 配对设备拥有控制电脑端 DeepSeek Harness 的能力,应视为完全可信设备。
|
|
125
|
+
- 移动网关开启时才监听局域网;关闭后 DeepSeek Harness 仍正常在电脑本机运行。
|
|
126
|
+
- 丢失手机后应在电脑端撤销设备。
|
|
181
127
|
|
|
182
|
-
|
|
128
|
+
完整说明见 [SECURITY.md](SECURITY.md)。
|
|
183
129
|
|
|
184
|
-
##
|
|
130
|
+
## 卸载
|
|
185
131
|
|
|
186
|
-
|
|
132
|
+
保留设备和自定义数据:
|
|
187
133
|
|
|
188
134
|
```powershell
|
|
189
135
|
dsh plugin --profile web remove dsh-mobile
|
|
190
136
|
```
|
|
191
137
|
|
|
192
|
-
|
|
138
|
+
同时清除插件数据:
|
|
193
139
|
|
|
194
140
|
```powershell
|
|
195
141
|
dsh plugin --profile web exec dsh-mobile purge --yes
|
|
196
142
|
dsh plugin --profile web remove dsh-mobile
|
|
197
143
|
```
|
|
198
144
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
The supported native shell lives in [`apps/mobile/android`](apps/mobile/android). It does not bundle a frontend copy; it renders the standalone mobile page served live by the plugin, which is also available to mobile browsers. See the [Android guide](apps/mobile/README.md).
|
|
145
|
+
源码模式把上述 `dsh` 换成 `pnpm dsh`。
|
|
202
146
|
|
|
203
|
-
##
|
|
147
|
+
## 开发
|
|
204
148
|
|
|
205
149
|
```powershell
|
|
206
150
|
npm ci
|
|
207
151
|
npm run verify
|
|
208
152
|
```
|
|
209
153
|
|
|
210
|
-
|
|
154
|
+
Android 构建见 [App 文档](apps/mobile/README.zh-CN.md)。
|
|
211
155
|
|
|
212
|
-
Apache-2.0
|
|
156
|
+
Apache-2.0,详见 [LICENSE](LICENSE)。
|
|
Binary file
|
|
Binary file
|