dsh-mobile 0.1.0-alpha.11 → 0.1.0-alpha.13

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 CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  <h1 align="center">DSH Mobile</h1>
6
6
 
7
- <p align="center">Private, authenticated LAN access to the stock DeepSeek Harness Web UI.</p>
7
+ <p align="center">Private, authenticated LAN access to DeepSeek Harness.</p>
8
8
 
9
9
  <p align="center">
10
10
  <a href="https://www.npmjs.com/package/dsh-mobile"><img src="https://img.shields.io/npm/v/dsh-mobile?label=npm&amp;color=CB3837" alt="npm version"></a>
@@ -24,7 +24,7 @@
24
24
 
25
25
  > Public npm alpha. The source repository remains private during the current testing phase. Android is the only supported native app. This is a community project, not an official DeepSeek product.
26
26
 
27
- DSH Mobile reuses DSH's own Web application, sessions, and plugin slots. It adds an authenticated HTTPS gateway, device pairing, session revocation, and a small responsive Client face. Use the Android shell without browser chrome, or open the same LAN address directly in any mobile browser.
27
+ DSH Mobile keeps the stock DSH Host, sessions, workspaces, and plugin capabilities, but provides its own lightweight mobile Web app. It does not reuse desktop page components or patch the desktop DOM. The desktop UI stays unchanged; Android and mobile browsers read the same live DSH data through the standalone mobile client.
28
28
 
29
29
  The mobile client is self-editable: ask DSH in an ordinary conversation to change `mobile.css` for presentation or `mobile.js` for behavior, keep the phone open, and watch the Android app or mobile browser apply the result automatically within about one second.
30
30
 
@@ -32,14 +32,14 @@ The mobile client is self-editable: ask DSH in an ordinary conversation to chang
32
32
 
33
33
  | Capability | Android app | Mobile browser |
34
34
  | --- | :---: | :---: |
35
- | Live DSH Web UI | Yes | Yes |
35
+ | Standalone mobile DSH Web UI | Yes | Yes |
36
36
  | Authenticated HTTPS LAN access | Yes | Yes |
37
37
  | One-time device pairing | Yes | Yes |
38
38
  | Extend mobile UI and Web functions through a DSH conversation with live preview | Yes | Yes |
39
- | File selection and downloads | Yes | Browser-dependent |
39
+ | Phone/computer image selection and downloads | Yes | Yes (the browser supplies the phone picker) |
40
40
  | iOS native app | Not yet | Safari can use the Web UI |
41
41
 
42
- Host-native actions such as opening desktop files remain subject to stock DSH and operating-system restrictions. Treat every paired device as a fully trusted operator of the computer, not as a guest account.
42
+ The mobile client owns its conversation column, Workspace drawer, composer, and computer directory browser. It subscribes directly to DSH's `sessions` and `workspaces` services, so desktop and phone use the same authoritative Workspace account. The image action asks for Phone files or Computer files: the first opens Android's or the browser's picker, while the second browses the computer inside the phone UI. Stock DSH currently models image attachments only, so this surface does not pretend that arbitrary files can be sent. Treat every paired device as a fully trusted operator of the computer, not as a guest account.
43
43
 
44
44
  ## Quick start
45
45
 
@@ -68,7 +68,7 @@ Both paths install the public npm package into stock DSH without patching its so
68
68
  3. Open the Android app, select **Scan**, then select the discovered DSH. Paste the key and connect.
69
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
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. The app can rediscover the same DSH installation on the default port after its LAN address changes and renew its short Web session without another key. Browser profiles still pair separately.
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
72
 
73
73
  ## Everyday control
74
74
 
@@ -79,6 +79,13 @@ The two access modes are equivalent:
79
79
  - Android app: a thin system WebView shell without browser address and tab bars.
80
80
  - Mobile browser: open the setup origin directly; no app installation is required.
81
81
 
82
+ On a narrow screen, only the active conversation is shown. Use the top-left navigation button for the session and workspace drawer; choosing a session closes it. The image button in the composer offers two sources:
83
+
84
+ - **Phone files** opens photos, camera, or device storage and uploads selected images into the current composer.
85
+ - **Computer files** browses computer folders inside the phone UI and uploads the selected image without opening a desktop dialog.
86
+
87
+ **Add workspace** always shows the computer directory browser on the phone, including folder creation and navigation. It does not browse phone storage because the workspace is owned by the DSH Host running on the computer.
88
+
82
89
  While Mobile Access is running, DSH publishes a small DNS-SD/mDNS service and a periodic UDP announcement. Each contains only the computer name, HTTPS origin, port, protocol version, and stable installation identifier. Android listens to both, also sends the original UDP query, and keeps HTTPS `/24` probing as a last compatibility fallback. Results are merged by installation identifier, so a new Wi-Fi or hotspot address updates the existing device instead of requiring another pairing. No pairing key, CA, device token, Cookie, or DSH data is discoverable. The first screen contains only Scan and the discovered DSH list; the pairing-key field appears after selecting one result.
83
90
 
84
91
  After the user selects a result and enters its fingerprint-bound pairing key, the app fetches the public CA from that selected HTTPS origin without sending the key or any credential. It keeps the CA only inside the app and accepts the DSH certificate only when its chain, hostname, validity, and SHA-256 fingerprint match the key and discovered installation identifier. Nothing is installed into Android's system trust settings. Mobile browsers cannot use this app-private trust and therefore still need an already trusted certificate.
@@ -160,7 +167,7 @@ One standard bundle contributes two faces: the Host face owns the gateway and lo
160
167
  ```mermaid
161
168
  flowchart LR
162
169
  Phone["Android app or mobile browser"] -->|"HTTPS and paired session"| Gateway["DSH Mobile plugin"]
163
- Gateway -->|"loopback-only proxy"| DSH["Stock DSH Web UI"]
170
+ Gateway -->|"loopback-only proxy"| DSH["Stock DSH Host and Client Runtime"]
164
171
  ```
165
172
 
166
173
  ## Security model
@@ -191,7 +198,7 @@ dsh plugin --profile web remove dsh-mobile
191
198
 
192
199
  ## Android app
193
200
 
194
- The supported native shell lives in [`apps/mobile/android`](apps/mobile/android). It does not bundle a copy of the DSH frontend; it renders the same authenticated HTTPS page used by mobile browsers. See the [Android guide](apps/mobile/README.md).
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).
195
202
 
196
203
  ## Development
197
204
 
package/README.zh.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  <h1 align="center">DSH Mobile</h1>
6
6
 
7
- <p align="center">让手机通过受保护的局域网连接直接控制原生 DeepSeek Harness Web UI。</p>
7
+ <p align="center">让手机通过受保护的局域网连接使用 DeepSeek Harness。</p>
8
8
 
9
9
  <p align="center">
10
10
  <a href="https://www.npmjs.com/package/dsh-mobile"><img src="https://img.shields.io/npm/v/dsh-mobile?label=npm&amp;color=CB3837" alt="npm 版本"></a>
@@ -24,7 +24,7 @@
24
24
 
25
25
  > 当前为公开 npm Alpha,源码仓库在测试阶段暂时保持私有,仅支持 Android。它是社区项目,不是 DeepSeek 官方产品。
26
26
 
27
- DSH Mobile 不是另一套远程控制面板。插件直接复用 DSH 自己的 Web 应用、会话和插件槽位,在外层增加 HTTPS、设备配对、会话撤销和移动端样式。你可以用 Android App 获得无浏览器栏的体验,也可以直接用手机浏览器访问同一个局域网地址。
27
+ DSH Mobile 保留原生 DSH Host、会话、工作区和插件能力,但移动端页面由插件独立实现,不再复用桌面页面组件或给桌面 DOM 打补丁。桌面界面保持原样;Android App 和手机浏览器通过同一个轻量移动前端访问同一份实时数据。
28
28
 
29
29
  移动端客户端可以“自己改自己”:直接在普通 DSH 对话中要求 DSH 修改负责外观的 `mobile.css` 或负责功能的 `mobile.js`,手机页面保持打开,Android App 和手机浏览器通常会在一秒内自动应用结果。
30
30
 
@@ -32,14 +32,14 @@ DSH Mobile 不是另一套远程控制面板。插件直接复用 DSH 自己的
32
32
 
33
33
  | 能力 | Android App | 手机浏览器 |
34
34
  | --- | :---: | :---: |
35
- | 实时访问 DSH Web UI | 支持 | 支持 |
35
+ | 独立移动端 DSH Web UI | 支持 | 支持 |
36
36
  | HTTPS 局域网入口 | 支持 | 支持 |
37
37
  | 一次性设备配对 | 支持 | 支持 |
38
38
  | 在 DSH 对话中扩展移动 UI与网页功能并实时预览 | 支持 | 支持 |
39
- | 文件选择与下载 | 支持 | 由浏览器决定 |
39
+ | 手机/电脑图片选择与下载 | 支持 | 支持(手机面板由浏览器提供) |
40
40
  | iOS | 暂不支持 | 可用 Safari 访问网页 |
41
41
 
42
- 宿主文件选择器、打开本机文档等动作仍受原生 DSH 和操作系统限制。配对设备应视为电脑上的完全可信操作者,而不是低权限访客。
42
+ 移动端采用自己的单栏对话、工作区抽屉、输入栏和电脑目录浏览器,数据直接来自 DSH 的 `sessions` 与 `workspaces` 服务,因此电脑和手机看到的是同一份工作区账户。图片入口会先询问“手机文件”或“电脑文件”:前者打开 Android/浏览器文件面板,后者直接在手机页面中浏览电脑目录。当前原生 DSH 的附件协议只支持图片,因此这里不会把任意文件伪装成可发送附件。配对设备应视为电脑上的完全可信操作者,而不是低权限访客。
43
43
 
44
44
  ## 快速开始
45
45
 
@@ -68,7 +68,7 @@ pnpm dsh --profile web
68
68
  3. 打开 Android App,点击“扫描”并选择发现的 DSH,再粘贴密钥连接。
69
69
  4. 直接连接。App 会把这台 DSH 的证书指纹固定在自身加密存储中,不会向 Android 系统安装 CA。手机浏览器仍需要它本身已经信任的 HTTPS 证书。
70
70
 
71
- 密钥和浏览器链接两分钟内有效且只能使用一次。配对后,Android 会用 Android Keystore 加密保存可随时撤销的设备凭据。局域网 IP 变化后,App 能在默认端口重新找到同一个 DSH,并自动续期短期 Web 会话,不需要新密钥。浏览器仍需单独配对。
71
+ 密钥和浏览器链接两分钟内有效且只能使用一次。配对后,Android 会用 Android Keystore 加密保存可随时撤销的设备凭据;以后每次打开 App 都会静默换取新的短期 Web 会话,不再要求输入密钥。只有电脑端撤销该设备、信任到期或清除 App 数据后才需要重新配对。局域网 IP 变化后,App 也能在默认端口重新找到同一个 DSH。浏览器仍需单独配对。
72
72
 
73
73
  ## 日常使用
74
74
 
@@ -79,6 +79,13 @@ pnpm dsh --profile web
79
79
  - Android App:使用系统 WebView 打开同一 DSH 页面,没有浏览器地址栏和标签栏。
80
80
  - 手机浏览器:直接访问向导显示的 `https://局域网地址:端口`,无需安装 App。
81
81
 
82
+ 窄屏页面默认只显示当前会话。点左上角导航按钮可打开会话与工作区抽屉;选择会话后抽屉自动收起。输入框中的图片按钮提供两个来源:
83
+
84
+ - “手机文件”从相册、相机或手机存储选择图片并上传到当前输入框。
85
+ - “电脑文件”在手机端打开电脑文件列表,选择图片后上传到当前输入框,不会在电脑上弹系统窗口。
86
+
87
+ “添加工作区”始终在手机页面显示电脑目录,可逐层进入、新建文件夹并选择工作区。它不会读取手机目录,因为工作区实际运行在电脑上的 DSH Host 中。
88
+
82
89
  “移动访问”运行时,DSH 会同时发布小型 DNS-SD/mDNS 服务和周期性 UDP 公告。二者只包含电脑名称、HTTPS 地址、端口、协议版本和稳定安装标识。Android 同时监听两种公告,也保留原有的主动 UDP 查询,最后再以 HTTPS `/24` 网段探测兼容特殊热点。结果按安装标识合并,因此切换 Wi-Fi、热点或 DHCP 地址后只会更新同一设备的 IP,不需要重新配对。发现阶段不会传输配对密钥、CA、设备令牌、Cookie 或任何 DSH 数据。首页仍然只有扫描按钮和设备列表,点击设备后才显示密钥输入框。
83
90
 
84
91
  用户选中设备并输入带指纹的配对密钥后,App 才从所选 HTTPS 地址获取公开 CA;这个引导请求不会携带密钥或任何凭据。App 只把 CA 保存在自身加密存储中,并且仅在证书链、主机名、有效期和 SHA-256 指纹同时匹配密钥及安装标识时连接,不会向 Android 系统信任设置安装任何内容。手机浏览器无法使用这份 App 私有信任,因此仍需浏览器本身已信任的 HTTPS 证书。
@@ -160,12 +167,12 @@ window.dshMobile.register(({ root, document, request }) => {
160
167
 
161
168
  ## 为什么符合 DSH 的插件理念
162
169
 
163
- DSH Mobile 通过一个标准 bundle 同时贡献两张 face:Host face 提供局域网网关和本地控制接口,Client face 提供移动端样式与左下角控制卡。它只注入原生 `webServer` 服务,通过 `dsh plugin add/remove` 安装和卸载,不修改 `deepseek-harness` 文件。
170
+ DSH Mobile 通过一个标准 bundle 同时贡献两张 face:Host face 提供局域网网关和本地控制接口;Client face 在电脑回环页面贡献左下角控制卡,在远程页面挂载独立移动应用。移动应用只订阅 DSH 的公开会话与工作区服务,不导入桌面页面。插件通过 `dsh plugin add/remove` 安装和卸载,不修改 `deepseek-harness` 文件。
164
171
 
165
172
  ```mermaid
166
173
  flowchart LR
167
174
  Phone["Android App 或手机浏览器"] -->|"HTTPS + 已配对会话"| Gateway["DSH Mobile 插件"]
168
- Gateway -->|"仅回环代理"| DSH["原生 DSH Web UI"]
175
+ Gateway -->|"仅回环代理"| DSH["原生 DSH Host 与 Client Runtime"]
169
176
  ```
170
177
 
171
178
  ## 安全模型
@@ -196,7 +203,7 @@ dsh plugin --profile web remove dsh-mobile
196
203
 
197
204
  ## Android App
198
205
 
199
- 当前仅维护 Android 薄壳,源码位于 [`apps/mobile/android`](apps/mobile/android)。App 不复制 DSH 前端,只渲染插件提供的同一 HTTPS 页面;浏览器访问始终是一等能力。构建与安全边界见 [Android 文档](apps/mobile/README.zh-CN.md)。
206
+ 当前仅维护 Android 薄壳,源码位于 [`apps/mobile/android`](apps/mobile/android)。App 不打包前端副本,只渲染插件实时提供的独立移动页面;浏览器访问始终是一等能力。构建与安全边界见 [Android 文档](apps/mobile/README.zh-CN.md)。
200
207
 
201
208
  ## 开发
202
209
 
package/cordis.patch.yml CHANGED
@@ -1,6 +1,16 @@
1
1
  # Community bundle for the stock DSH Web profile. Installation contributes a
2
2
  # Host gateway and a browser Client face; it does not patch DSH source files.
3
+ - id: directory-picker
4
+ name: '@deepseek-ai/dsh-host-directory-picker-auto'
5
+ disabled: true
6
+
3
7
  - insert:
8
+ - id: directory-picker-mobile-host
9
+ name: '@deepseek-ai/dsh-host-directory-picker-browse'
10
+
11
+ - id: directory-picker-mobile-surface
12
+ name: '@deepseek-ai/dsh-client-ui-directory-picker-browse'
13
+
4
14
  - id: mobile-access
5
15
  name: dsh-mobile
6
16
  inject: [webServer]