dsh-mobile 0.3.0 → 0.3.2

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 CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  Notable changes to DSH Mobile are recorded here. GitHub Releases remain the source for downloadable packages and complete generated commit notes.
4
4
 
5
+ ## 0.3.2 - 2026-08-29
6
+
7
+ - Special thanks to @JackRushante for [#16](https://github.com/saya-ch/dsh-mobile/pull/16): the secure Android media bridge, image attachments, localization foundation, bounded extension requests, and Funnel lifecycle hardening. This release retains all four original commits and their author metadata.
8
+ - Move image selection and camera capture into a dedicated top row of the composer command menu, without focusing the message editor.
9
+ - Push extension and `/mobile` changes to authenticated phones immediately, while retaining bounded polling as a network-recovery fallback.
10
+ - Bind each mobile UI to its matching Host, script, style, and asset generation; retain the previous Host through a bounded refresh window, fail closed on client activation errors, and tighten scoped requests against encoded path traversal.
11
+ - Bound long-running Android picker and camera interactions, release temporary provider grants across success, cancellation, timeout, rotation, and Activity teardown, and retain compatibility with supported WebView releases.
12
+ - Split mobile language dictionaries into dedicated modules; make native Android screens follow the system locale in Simplified Chinese, English, or Italian; make plugin-owned Web UI follow DSH's selected locale; and retain Italian resources for future DSH support.
13
+ - Correct the mobile extension and Funnel documentation, and record the Android runtime libraries shipped with the app.
14
+
15
+ ## 0.3.1 - 2026-08-28
16
+
17
+ - Credit @BlueandwhiteXD ([#15](https://github.com/saya-ch/dsh-mobile/pull/15)) for the Android keyboard inset report and fix incorporated into the 0.3 mobile layout.
18
+
5
19
  ## 0.3.0 - 2026-08-28
6
20
 
7
21
  - Add one-click connection diagnostics for versions, LAN gateway, network interface, Windows firewall, and the selected remote provider, with a sanitized report for support requests.
package/README.en.md CHANGED
@@ -17,13 +17,13 @@
17
17
 
18
18
  <p align="center"><a href="README.md">简体中文</a> · <a href="CHANGELOG.md">Changelog</a></p>
19
19
 
20
- > DSH Mobile 0.3.0 is a DeepSeek Harness community plugin; the native app supports Android only.
20
+ > DSH Mobile 0.3.2 is a DeepSeek Harness community plugin; the native app supports Android only.
21
21
  >
22
- > **0.3.0 update**: one-click diagnostics, version guidance, and clearer pairing and network errors; faster LAN and remote recovery, caching, and first load; DSH 0.1.2 Workspace, model, session, and community-plugin synchronization; plus status-bar, keyboard, narrow-screen, and app-icon refinements.
22
+ > **0.3.2 update**: image selection and full-resolution capture move into the composer plus menu with file, size, concurrency, and interaction deadlines; extension and `/mobile` edits notify authenticated phones immediately while Host code, scripts, styles, and assets switch as one generation and retain a usable version on failure; scoped request paths and response limits are tightened, Android Bridge temporary files and grants are fully released, Funnel now follows the DSH lifecycle, native app screens follow the system Chinese/English/Italian locale, and plugin-owned UI follows DSH's locale.
23
23
  >
24
- > **With DeepSeek Harness 0.1.2-alpha.1, update both the plugin and app to 0.3.0**; older apps use a status-bar strategy that does not fit the new Web UI, and app 0.1.3 or earlier also requires reinstalling and pairing again.
24
+ > **With DeepSeek Harness 0.1.2-alpha.1, update both the plugin and app to 0.3.2**; older apps use a status-bar strategy that does not fit the new Web UI, and app 0.1.3 or earlier also requires reinstalling and pairing again.
25
25
 
26
- <p align="center"><a href="https://github.com/saya-ch/dsh-mobile/releases/download/v0.3.0/dsh-mobile-android-v0.3.0.apk"><strong>Download Android app 0.3.0</strong></a> · <a href="https://github.com/saya-ch/dsh-mobile/releases/tag/v0.3.0">Release notes and checksums</a></p>
26
+ <p align="center"><a href="https://github.com/saya-ch/dsh-mobile/releases/download/v0.3.2/dsh-mobile-android-v0.3.2.apk"><strong>Download Android app 0.3.2</strong></a> · <a href="https://github.com/saya-ch/dsh-mobile/releases/tag/v0.3.2">Release notes and checksums</a></p>
27
27
 
28
28
  DSH Mobile is a DeepSeek Harness plugin that lets a mobile browser or the Android app connect over a protected LAN or an optional Tailscale Funnel or cpolar remote path. Local and remote access keep the same sessions, Workspaces, messages, and tools while using separate switches and paired-device stores without modifying DeepSeek Harness source.
29
29
 
@@ -35,9 +35,10 @@ It also lets you customize the phone from a DSH conversation: `/mobile <what you
35
35
 
36
36
  - **Continue DSH work from a phone**: the same sessions, Workspaces, messages, and tools, in real time.
37
37
  - **Customize the phone UI by talking to DSH**: change the mobile layout, interactions, and features from a conversation; open pages refresh within seconds.
38
- - **A dedicated touch layout**: session drawer, tool details, settings, question cards, and composer reorganized for phones.
38
+ - **A dedicated touch layout**: session drawer, tool details, settings, question cards, and composer reorganized for phones. Native app screens follow the Android system locale in Simplified Chinese, English, or Italian. Plugin-owned Web UI follows DSH's selected locale; Italian resources are ready for a future DSH Italian locale.
39
+ - **Image attachments**: use the top row of the composer plus menu to select an image or take a photo; PNG, JPEG, WebP, and GIF files up to 8 MiB are supported, plus full-resolution JPEG capture.
39
40
  - **Auto-discovery, no re-pairing**: Wi-Fi, hotspot, or IP changes normally recover automatically.
40
- - **One-click connection diagnostics**: check versions, gateway, network interface, firewall, and the remote path, then copy a report without credentials or complete addresses.
41
+ - **One-click connection diagnostics**: check versions, gateway, network interface, firewall, and the remote path; stable reason codes are localized in the UI, and the copied report excludes credentials and complete addresses.
41
42
  - **Faster reconnection**: trusted connections race during restore, revisioned assets are reused, and mobile boot batches are compressed.
42
43
  - **Three pairing options**: scan a QR code, paste a pairing link, or enter a key.
43
44
 
@@ -110,7 +111,7 @@ Remote providers may impose bandwidth and connection limits: the [cpolar Free pl
110
111
  3. In the Android app, open **Remote access** and scan the QR code to create its separate pairing.
111
112
  4. The app keeps device trust and reconnects automatically. Disable remote access when it is not needed; LAN access remains unchanged.
112
113
 
113
- Tailscale Funnel has broad reach but may be unreliable from mainland China. cpolar is better suited to mainland networks. The plugin validates the pinned component download, stores its configuration and program entirely under `$DSH_HOME/mobile-access/`, and can remove them completely from the panel.
114
+ Tailscale Funnel has broad reach but may be unreliable from mainland China. Its runtime ties the public listener to the parent process and a bounded control channel; parent exit, channel closure, or an explicit stop ends the current generation and cleans up its resources. cpolar is better suited to mainland networks. The plugin validates the pinned component download, stores its configuration and program entirely under `$DSH_HOME/mobile-access/`, and can remove them completely from the panel.
114
115
 
115
116
  The public remote origin still requires DSH device pairing. Managed remote components currently support Windows x64.
116
117
 
@@ -130,6 +131,8 @@ It can also drive computer capabilities the phone can use, like reading the mach
130
131
 
131
132
  Two kinds of changes are supported: the phone UI itself (theme, layout, buttons), and computer capabilities the phone can use (browsing computer files, running programs on the computer). `/mobile` hands the request to the DSH agent, which edits files under the local DSH configuration directory (`$DSH_HOME/mobile-access/`); the phone client applies them automatically. UI changes live in `mobile.css`/`mobile.js`. Computer capabilities come from extensions under `extensions/`, whose `host.mjs` runs with the local user's privileges on the computer. DeepSeek Harness source is not modified.
132
133
 
134
+ Extension manifests, scripts, styles, and assets are revisioned. When the plugin observes a `/mobile` or extension-file change, it notifies authenticated phones to refresh immediately; 45-second visible and 5-minute hidden checks remain only as recovery fallbacks. A failed Host staging pass keeps the current version; if the Host has changed but the new phone UI cannot activate, that extension closes and retries instead of mixing generations.
135
+
133
136
  <sub>You can even use an extension to connect to SillyTavern running on the same computer, give it a lightweight mobile frontend, and open it from the same app.</sub>
134
137
 
135
138
  > `host.mjs` has the same privileges as a local program. Create and run only computer-side extensions that you understand and trust.
@@ -163,7 +166,7 @@ flowchart LR
163
166
  Gateway -->|"loopback proxy"| DSH["Stock DSH Web and Host"]
164
167
  ```
165
168
 
166
- Three layers: the Host face for discovery, pairing, HTTPS, loopback proxying, and extension registration; the Client face for the dedicated mobile layout and extension SDK; and the Android app for a narrow native bridge. Neither the DeepSeek Harness source nor its desktop page on port 3080 is modified.
169
+ Three layers: the Host face for discovery, pairing, HTTPS, loopback proxying, and extension registration; the Client face for the dedicated mobile layout and extension SDK; and the Android app for a narrow native bridge. The bridge uses `androidx.webkit` WebMessage, verifies the exact top-level origin and main frame on every bounded message, and never uses `addJavascriptInterface`. Neither the DeepSeek Harness source nor its desktop page on port 3080 is modified.
167
170
 
168
171
  ## Security
169
172
 
@@ -179,6 +182,8 @@ See [SECURITY.md](SECURITY.md).
179
182
 
180
183
  | DSH Mobile | Verified DeepSeek Harness releases |
181
184
  | --- | --- |
185
+ | `0.3.2` | `0.1.0-rc.5`, `0.1.0-rc.6`, `0.1.0-rc.7`, `0.1.1-rc.2`, `0.1.2-alpha.1` |
186
+ | `0.3.1` | `0.1.0-rc.5`, `0.1.0-rc.6`, `0.1.0-rc.7`, `0.1.1-rc.2`, `0.1.2-alpha.1` |
182
187
  | `0.3.0` | `0.1.0-rc.5`, `0.1.0-rc.6`, `0.1.0-rc.7`, `0.1.1-rc.2`, `0.1.2-alpha.1` |
183
188
  | `0.2.2` | `0.1.0-rc.5`, `0.1.0-rc.6`, `0.1.0-rc.7`, `0.1.1-rc.2` |
184
189
  | `0.2.1` | `0.1.0-rc.5`, `0.1.0-rc.6`, `0.1.0-rc.7`, `0.1.1-rc.2` |
package/README.md CHANGED
@@ -24,13 +24,13 @@
24
24
  <a href="README.en.md">English</a>
25
25
  </p>
26
26
 
27
- > DSH Mobile 0.3.0 是 DeepSeek Harness 社区插件,原生 App 仅支持 Android。
27
+ > DSH Mobile 0.3.2 是 DeepSeek Harness 社区插件,原生 App 仅支持 Android。
28
28
  >
29
- > **0.3.0 更新**:新增一键连接诊断、版本提示与更清晰的配对/网络报错;改进局域网和远程连接恢复、缓存与首次加载;适配 DSH 0.1.2 的工作区、模型、会话及社区插件同步;优化状态栏、键盘、窄屏布局和 App 图标。
29
+ > **0.3.2 更新**:新增输入栏加号菜单中的图片选择与原图拍照,并限制文件类型、大小、并发和交互超时;扩展及 `/mobile` 修改会主动通知已认证手机刷新,Host、脚本、样式和资源按同一代次原子切换,失败时保留可用版本;同时收紧扩展请求路径与响应限制,完整清理 Android Bridge 的临时文件和授权,修正 Funnel 随 DSH 启停的生命周期,并让 App 原生页面跟随系统中/英/意语言、插件界面跟随 DSH 语言。
30
30
  >
31
- > **使用 DeepSeek Harness 0.1.2-alpha.1 时,请将插件与 App 同步升级至 0.3.0**;旧 App 的状态栏策略不适配新版 Web,0.1.3 及更早版本还需卸载重装并重新配对。
31
+ > **使用 DeepSeek Harness 0.1.2-alpha.1 时,请将插件与 App 同步升级至 0.3.2**;旧 App 的状态栏策略不适配新版 Web,0.1.3 及更早版本还需卸载重装并重新配对。
32
32
 
33
- <p align="center"><a href="https://github.com/saya-ch/dsh-mobile/releases/download/v0.3.0/dsh-mobile-android-v0.3.0.apk"><strong>下载 Android App 0.3.0</strong></a> · <a href="https://github.com/saya-ch/dsh-mobile/releases/tag/v0.3.0">版本说明与校验文件</a></p>
33
+ <p align="center"><a href="https://github.com/saya-ch/dsh-mobile/releases/download/v0.3.2/dsh-mobile-android-v0.3.2.apk"><strong>下载 Android App 0.3.2</strong></a> · <a href="https://github.com/saya-ch/dsh-mobile/releases/tag/v0.3.2">版本说明与校验文件</a></p>
34
34
 
35
35
  DSH Mobile 是一个 DeepSeek Harness 插件,让手机浏览器或 Android App 通过局域网,或可选的 Tailscale Funnel、cpolar 远程通道连接电脑,继续使用同一份会话、工作区、消息和工具。局域网与远程访问分别启停、分别管理设备,且都不修改 DeepSeek Harness 源码。
36
36
 
@@ -42,9 +42,10 @@ DSH Mobile 是一个 DeepSeek Harness 插件,让手机浏览器或 Android App
42
42
 
43
43
  - **在手机上继续电脑端的工作**:同一份会话、工作区、消息和工具,实时同步。
44
44
  - **用对话定制手机端**:直接在 DSH 对话里改手机页面的布局、交互和功能,几秒内刷新。
45
- - **专属触屏布局**:会话抽屉、工具详情、设置、提问卡片和输入栏都按手机重新组织。
45
+ - **专属触屏布局**:会话抽屉、工具详情、设置、提问卡片和输入栏都按手机重新组织。App 原生页面跟随系统显示简体中文、英文或意大利文;插件界面跟随 DSH 的语言设置,意大利语资源已为 DSH 后续支持预留。
46
+ - **图片附件**:在已打开会话的输入栏加号菜单顶部选择图片或拍照;支持 PNG、JPEG、WebP、GIF(不超过 8 MiB)和完整分辨率 JPEG。
46
47
  - **自动发现、无需重新配对**:切换 Wi-Fi、热点或 IP 后通常自动恢复。
47
- - **一键连接诊断**:检查版本、网关、网卡、防火墙和远程通道,并生成不含凭据与完整地址的脱敏报告。
48
+ - **一键连接诊断**:检查版本、网关、网卡、防火墙和远程通道;稳定的原因码在界面中本地化,并生成不含凭据与完整地址的脱敏报告。
48
49
  - **更快恢复连接**:远程重开会并行恢复可信连接、复用版本化资源,并压缩移动端启动批次。
49
50
  - **三种配对方式**:扫码、配对链接、密钥。
50
51
 
@@ -117,7 +118,7 @@ dsh plugin --profile web add dshmarket
117
118
  3. 在 Android App 中进入 **远程访问**,扫描二维码完成独立配对。
118
119
  4. 此后 App 会保存设备信任并自动重连;不使用时可以关闭远程访问,局域网连接不会受影响。
119
120
 
120
- Tailscale Funnel 覆盖范围广,但在中国大陆网络下可能不稳定。cpolar 更适合国内网络;插件会校验下载组件的固定版本,配置与程序均保存在 `$DSH_HOME/mobile-access/`,可随时在面板中彻底清除。
121
+ Tailscale Funnel 覆盖范围广,但在中国大陆网络下可能不稳定。其运行组件把公开监听生命周期绑定到父进程和受限控制通道;父进程退出、控制通道关闭或显式停止时会结束当前代次并清理资源。cpolar 更适合国内网络;插件会校验下载组件的固定版本,配置与程序均保存在 `$DSH_HOME/mobile-access/`,可随时在面板中彻底清除。
121
122
 
122
123
  远程公开地址仍受 DSH 设备配对保护。当前托管的远程组件支持 Windows x64。
123
124
 
@@ -137,6 +138,8 @@ Tailscale Funnel 覆盖范围广,但在中国大陆网络下可能不稳定。
137
138
 
138
139
  `/mobile` 把需求交给 DSH 对话中的 agent,由它直接修改本机 `$DSH_HOME/mobile-access/` 下的文件,保存后手机端自动生效。改动分两类:界面和交互在 `mobile.css`/`mobile.js`;需要电脑能力时用 `extensions/` 下的扩展,其 `host.mjs` 以本机用户权限在电脑上运行。不修改 DeepSeek Harness 源码。
139
140
 
141
+ 扩展清单及其脚本、样式和资源按版本标识刷新。插件监听到 `/mobile` 或扩展文件变化后,会通过已认证连接通知手机立即更新;页面可见时每 45 秒、隐藏时每 5 分钟的检查只作为断线兜底。Host 暂存失败会继续使用现有版本;若 Host 已更新但新手机界面激活失败,则关闭该扩展并自动重试,避免混用新旧能力。
142
+
140
143
  <sub>你甚至可以通过扩展连接电脑上运行的酒馆(</sub>
141
144
 
142
145
  > `host.mjs` 与本机程序拥有相同权限;仅创建和运行你理解并信任的电脑端扩展。
@@ -172,7 +175,7 @@ flowchart LR
172
175
  DSH -->|"同一工作区、会话和事件流"| Phone
173
176
  ```
174
177
 
175
- 插件包含三层:Host face 负责发现、配对、HTTPS、回环代理和扩展注册表;Client face 提供独立的移动布局与扩展 SDK;Android App 提供受限的原生 Bridge。DeepSeek Harness 的源码和 3080 桌面页面都不会被修改,安装和卸载完全通过插件机制完成。
178
+ 插件包含三层:Host face 负责发现、配对、HTTPS、回环代理和扩展注册表;Client face 提供独立的移动布局与扩展 SDK;Android App 提供受限的原生 Bridge。Bridge 使用 `androidx.webkit` WebMessage,每条消息都校验精确顶层 Origin 和主 Frame,并限制消息大小;不使用 `addJavascriptInterface`。DeepSeek Harness 的源码和 3080 桌面页面都不会被修改,安装和卸载完全通过插件机制完成。
176
179
 
177
180
  ## 安全
178
181
 
@@ -189,6 +192,8 @@ flowchart LR
189
192
 
190
193
  | DSH Mobile | 已验证的 DeepSeek Harness |
191
194
  | ------------ | ------------------------------------------------------------------------- |
195
+ | `0.3.2` | `0.1.0-rc.5`、`0.1.0-rc.6`、`0.1.0-rc.7`、`0.1.1-rc.2`、`0.1.2-alpha.1` |
196
+ | `0.3.1` | `0.1.0-rc.5`、`0.1.0-rc.6`、`0.1.0-rc.7`、`0.1.1-rc.2`、`0.1.2-alpha.1` |
192
197
  | `0.3.0` | `0.1.0-rc.5`、`0.1.0-rc.6`、`0.1.0-rc.7`、`0.1.1-rc.2`、`0.1.2-alpha.1` |
193
198
  | `0.2.2` | `0.1.0-rc.5`、`0.1.0-rc.6`、`0.1.0-rc.7`、`0.1.1-rc.2` |
194
199
  | `0.2.1` | `0.1.0-rc.5`、`0.1.0-rc.6`、`0.1.0-rc.7`、`0.1.1-rc.2` |
@@ -3,3 +3,5 @@
3
3
  DSH Mobile includes a small Windows helper built from the source in `native/funnel-host`. The helper uses [Tailscale tsnet](https://pkg.go.dev/tailscale.com/tsnet) `v1.102.3`, distributed under the BSD 3-Clause license. Its exact transitive Go module versions are recorded in `native/funnel-host/go.mod` and `native/funnel-host/go.sum`; each dependency remains subject to its own license.
4
4
 
5
5
  The optional cpolar component is not included in the npm package or Android App. When a user explicitly chooses cpolar installation, DSH Mobile downloads the pinned official archive shown in the UI, verifies its size and SHA-256 digest, and stores it only under the user's DSH Mobile data directory. cpolar remains subject to its [terms of service](https://www.cpolar.com/tos).
6
+
7
+ The Android App runtime contains [Kotlin standard library](https://github.com/JetBrains/kotlin) `2.1.0`, [kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) `1.6.4`, [JetBrains annotations](https://github.com/JetBrains/java-annotations) `13.0`, [AndroidX Core](https://developer.android.com/jetpack/androidx/releases/core) `1.15.0`, [AndroidX WebKit](https://developer.android.com/jetpack/androidx/releases/webkit) `1.12.1`, their AndroidX transitive components, [Guava listenablefuture](https://github.com/google/guava) `1.0`, and [ZXing Core](https://github.com/zxing/zxing) `3.5.4`. These runtime libraries are distributed under the Apache License 2.0; the exact resolved tree is produced by `:app:dependencies --configuration releaseRuntimeClasspath` during release review.
Binary file