dsh-mobile 0.7.0 → 0.8.0
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 +31 -0
- package/CONTRIBUTORS.md +5 -2
- package/README.en.md +58 -25
- package/README.md +58 -25
- package/SECURITY.md +13 -0
- package/THIRD_PARTY_NOTICES.md +4 -2
- package/apps/mobile/README.md +11 -7
- package/apps/mobile/README.zh-CN.md +11 -7
- package/apps/mobile/release.json +3 -3
- package/assets/mobile-push/icon-180.png +0 -0
- package/assets/mobile-push/icon-192.png +0 -0
- package/assets/mobile-push/icon-512.png +0 -0
- package/docs/CADDY_MANAGED.en.md +1 -1
- package/docs/CADDY_MANAGED.md +1 -1
- package/docs/CLOUDFLARE_TUNNEL.en.md +5 -5
- package/docs/CLOUDFLARE_TUNNEL.md +5 -5
- package/docs/CPOLAR_SUBDOMAIN.en.md +2 -2
- package/docs/CPOLAR_SUBDOMAIN.md +2 -2
- package/docs/IROH.en.md +24 -3
- package/docs/IROH.md +24 -3
- package/docs/README.md +3 -1
- package/docs/SELF_HOSTED_ORIGIN.en.md +2 -2
- package/docs/SELF_HOSTED_ORIGIN.md +3 -3
- package/docs/SLOW_CONNECTIONS.en.md +7 -3
- package/docs/SLOW_CONNECTIONS.md +7 -3
- package/docs/WEB_PUSH.en.md +118 -0
- package/docs/WEB_PUSH.md +118 -0
- package/lib/client.js +1919 -243
- package/lib/client.js.map +1 -1
- package/lib/index.d.mts +126 -1
- package/lib/index.mjs +3787 -96
- package/lib/index.mjs.map +1 -1
- package/lib/mobile-layout.js +15 -2
- package/lib/mobile-layout.js.map +1 -1
- package/package.json +17 -5
- package/packages/question-fixes/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,37 @@
|
|
|
2
2
|
|
|
3
3
|
Notable changes are recorded here. GitHub Releases provide the downloadable packages and generated commit notes.
|
|
4
4
|
|
|
5
|
+
## 0.8.0 - 2026-10-30
|
|
6
|
+
|
|
7
|
+
- **iPhone / iPad Web Push:** add opt-in notifications for capable Safari Home Screen web apps on trusted HTTPS, targeting iOS/iPadOS 18.4+. Choose Questions, Plans, Approvals, Responses, Goals and Failures in **DSH Settings → General → Web push notifications**, and send a test without submitting a model request. No native iOS app, service worker or notification SaaS account is required. Thanks @chintoleung for [#297](https://github.com/saya-ch/dsh-mobile/pull/297).
|
|
8
|
+
- Add a complete Safari pairing → Add to Home Screen → notification setup guide in Chinese and English. Explain separate Home Screen login state and generating a fresh pairing code without clearing existing data. Thanks @chintoleung for [#302](https://github.com/saya-ch/dsh-mobile/pull/302).
|
|
9
|
+
- Keep notification consent scoped to the paired device and exact Origin, with generic lock-screen text, encrypted Apple-only delivery, bounded retries, revocation checks and restart recovery. Notification taps never answer or approve a request. Delivery is best effort; this release accepts the contributor's iPhone testing, not independent maintainer Apple-device verification. See the [Web Push guide](docs/WEB_PUSH.en.md).
|
|
10
|
+
- Refuse to report browser logout as completed when optional push services are unavailable but this device still has enabled persistent notification consent; retain authentication for an explicit retry instead of silently leaving notifications enabled.
|
|
11
|
+
- Apply private-file permissions before writing push keys or subscriptions to a replacement file; permission failure removes the empty candidate and leaves the previous state intact.
|
|
12
|
+
- Remember the mobile sidebar's session-list position within the current page, with separate search positions. Sessions behind DSH's **More** control are not automatically expanded; reloading clears this position memory. Thanks @abworks-dev for [#307](https://github.com/saya-ch/dsh-mobile/pull/307).
|
|
13
|
+
- Style Mobile's injected Gallery and Take photo actions consistently at every viewport, including when DSH supplies no native button class. Thanks @LUgABeEEE for [#312](https://github.com/saya-ch/dsh-mobile/pull/312).
|
|
14
|
+
- Keep in-shell dialogs above the wide navigation rail through scoped layout changes, without maintaining a third-party plugin's private class names. Thanks @LUgABeEEE for [#309](https://github.com/saya-ch/dsh-mobile/pull/309).
|
|
15
|
+
- Enable compression on the live `/api/remote.mux` path by default; an explicit `websocketCompression.paths: []` opts out. Savings depend on the data and network. Thanks @LUgABeEEE for [#292](https://github.com/saya-ch/dsh-mobile/pull/292).
|
|
16
|
+
- Compress owned static assets with explicit encoding negotiation and `Vary`, keeping 304 responses bodyless. Request the compatibility bundle by its current content digest to avoid a stale shim after updates. API responses and authenticated HTML are not added to a new offline cache. Thanks @LUgABeEEE for [#310](https://github.com/saya-ch/dsh-mobile/pull/310) and [#311](https://github.com/saya-ch/dsh-mobile/pull/311).
|
|
17
|
+
- Upgrade React development tooling to 19 while retaining the host-provided React runtime, with no second copy bundled. Thanks Dependabot for [#140](https://github.com/saya-ch/dsh-mobile/pull/140).
|
|
18
|
+
- Restore the explicit contributor credit for @qzyqmzn's [#284](https://github.com/saya-ch/dsh-mobile/pull/284), which introduced the integrated iroh transport in 0.7.0.
|
|
19
|
+
|
|
20
|
+
## Android 0.7.1 - 2026-10-30
|
|
21
|
+
|
|
22
|
+
- Update the build toolchain to AGP 9.4.1 / Gradle 9.8.2 and WebKit integration to 1.18.0, retaining `core-ktx` 1.15.0 for compileSdk 36. Thanks Dependabot for [#304](https://github.com/saya-ch/dsh-mobile/pull/304).
|
|
23
|
+
- Keep the compatibility and full iroh APK variants, the established application ID and signer, and existing pairing data. This is App build 86; plugin 0.8.0's iOS Web Push does not require an Android update.
|
|
24
|
+
|
|
25
|
+
## 0.7.1 - 2026-10-29
|
|
26
|
+
|
|
27
|
+
- Reorganize **Mobile access** into a compact channel list and configuration pane, stacked on narrow screens. Device management has its own LAN/remote tabs beside Diagnostics; keyboard focus and Escape follow the open panel.
|
|
28
|
+
- Keep the three main actions in one row, including iroh link copying. Copy remains visible but disabled without valid pairing data; component-dependent actions stay hidden before installation.
|
|
29
|
+
- Improve cloudflared quick/named tunnel switching, expandable settings and tunnel notes. **Save and connect** saves and enables the selected provider in one queued operation; connection readiness remains visible separately. Protect pending edits from duplicate actions and stale reads, and keep incomplete named settings editable.
|
|
30
|
+
- Show the server-issued expiry for LAN and HTTPS remote pairing codes, remove expired QR codes, and reuse the displayed code when copying its link. Generating another code still invalidates the previous one. Thanks @jackfocus15-spec for [#285](https://github.com/saya-ch/dsh-mobile/issues/285).
|
|
31
|
+
- Keep the collapsed navigation rail clear of the conversation between the phone and wide-layout breakpoints, without taking 56 px away from phone content. A collapsed phone drawer no longer leaves a transparent strip intercepting conversation input. Thanks @wintekk for [#306](https://github.com/saya-ch/dsh-mobile/issues/306).
|
|
32
|
+
- Allow removal of the plugin-downloaded iroh component after remote access is turned off. The authenticated Host route also refuses removal while enabled; identities, pairings and external companion installations are retained.
|
|
33
|
+
- Display published APK sizes when available. This optional lookup runs independently of release status and package installation and is cancelled when the plugin stops.
|
|
34
|
+
- Add practical Android VPN/proxy troubleshooting for iroh, including per-app bypass and the limits of domain-only rules. Thanks @ZinChl for [#308](https://github.com/saya-ch/dsh-mobile/issues/308).
|
|
35
|
+
|
|
5
36
|
## 0.7.0 - 2026-10-28
|
|
6
37
|
|
|
7
38
|
- Distribute the iroh sidecar from this plugin. **Install official component** downloads the pinned `dsh-mobile-iroh 0.1.0-alpha.1` release per platform, verifies byte length and SHA-256, and promotes it into the plugin private directory with backup and rollback; a verified companion copy is reused without downloading during the transition, and switching the channel on alone never downloads. The panel names the download size, reports verification progress, and identifies the exact missing/invalid/offline failure instead of a generic not-ready message.
|
package/CONTRIBUTORS.md
CHANGED
|
@@ -87,7 +87,7 @@ Thanks [@jamorzzz](https://github.com/jamorzzz) for the community-auth navigatio
|
|
|
87
87
|
| [@1624318455](https://github.com/1624318455) | [#93](https://github.com/saya-ch/dsh-mobile/pull/93) |
|
|
88
88
|
| [@abworks-dev](https://github.com/abworks-dev) | [#91](https://github.com/saya-ch/dsh-mobile/pull/91), [#98](https://github.com/saya-ch/dsh-mobile/pull/98), [#99](https://github.com/saya-ch/dsh-mobile/pull/99), [#152](https://github.com/saya-ch/dsh-mobile/pull/152), [#184](https://github.com/saya-ch/dsh-mobile/pull/184), [#185](https://github.com/saya-ch/dsh-mobile/pull/185), [#200](https://github.com/saya-ch/dsh-mobile/pull/200) |
|
|
89
89
|
| [@ayiejosh](https://github.com/ayiejosh) | [#109](https://github.com/saya-ch/dsh-mobile/pull/109), [#110](https://github.com/saya-ch/dsh-mobile/pull/110), [#116](https://github.com/saya-ch/dsh-mobile/pull/116), [#117](https://github.com/saya-ch/dsh-mobile/pull/117), [#119](https://github.com/saya-ch/dsh-mobile/pull/119), [#124](https://github.com/saya-ch/dsh-mobile/pull/124), [#125](https://github.com/saya-ch/dsh-mobile/pull/125), [#133](https://github.com/saya-ch/dsh-mobile/pull/133), [#136](https://github.com/saya-ch/dsh-mobile/pull/136), [#226](https://github.com/saya-ch/dsh-mobile/pull/226) |
|
|
90
|
-
| [@chintoleung](https://github.com/chintoleung) | [#104](https://github.com/saya-ch/dsh-mobile/pull/104), [#147](https://github.com/saya-ch/dsh-mobile/pull/147), [#148](https://github.com/saya-ch/dsh-mobile/pull/148), [#158](https://github.com/saya-ch/dsh-mobile/pull/158), [#161](https://github.com/saya-ch/dsh-mobile/pull/161), [#162](https://github.com/saya-ch/dsh-mobile/pull/162), [#167](https://github.com/saya-ch/dsh-mobile/pull/167), [#229](https://github.com/saya-ch/dsh-mobile/pull/229) |
|
|
90
|
+
| [@chintoleung](https://github.com/chintoleung) | [#104](https://github.com/saya-ch/dsh-mobile/pull/104), [#147](https://github.com/saya-ch/dsh-mobile/pull/147), [#148](https://github.com/saya-ch/dsh-mobile/pull/148), [#158](https://github.com/saya-ch/dsh-mobile/pull/158), [#161](https://github.com/saya-ch/dsh-mobile/pull/161), [#162](https://github.com/saya-ch/dsh-mobile/pull/162), [#167](https://github.com/saya-ch/dsh-mobile/pull/167), [#229](https://github.com/saya-ch/dsh-mobile/pull/229), [#297](https://github.com/saya-ch/dsh-mobile/pull/297), [#302](https://github.com/saya-ch/dsh-mobile/pull/302) |
|
|
91
91
|
| [@cjxh21](https://github.com/cjxh21) | [#154](https://github.com/saya-ch/dsh-mobile/pull/154), [#155](https://github.com/saya-ch/dsh-mobile/pull/155) |
|
|
92
92
|
| [@fengfanfan-max](https://github.com/fengfanfan-max) | [#143](https://github.com/saya-ch/dsh-mobile/pull/143) |
|
|
93
93
|
| [@fqf060420](https://github.com/fqf060420) | [#170](https://github.com/saya-ch/dsh-mobile/pull/170) |
|
|
@@ -95,7 +95,7 @@ Thanks [@jamorzzz](https://github.com/jamorzzz) for the community-auth navigatio
|
|
|
95
95
|
| [@JackRushante](https://github.com/JackRushante) | [#16](https://github.com/saya-ch/dsh-mobile/pull/16) |
|
|
96
96
|
| [@liudasheng](https://github.com/liudasheng) | [#100](https://github.com/saya-ch/dsh-mobile/pull/100), [#130](https://github.com/saya-ch/dsh-mobile/pull/130) |
|
|
97
97
|
| [@longisland-icetea](https://github.com/longisland-icetea) | [#59](https://github.com/saya-ch/dsh-mobile/pull/59), [#60](https://github.com/saya-ch/dsh-mobile/pull/60), [#63](https://github.com/saya-ch/dsh-mobile/pull/63) |
|
|
98
|
-
| [@qzyqmzn](https://github.com/qzyqmzn) | [#38](https://github.com/saya-ch/dsh-mobile/pull/38), [#75](https://github.com/saya-ch/dsh-mobile/pull/75) |
|
|
98
|
+
| [@qzyqmzn](https://github.com/qzyqmzn) | [#38](https://github.com/saya-ch/dsh-mobile/pull/38), [#75](https://github.com/saya-ch/dsh-mobile/pull/75), [#284](https://github.com/saya-ch/dsh-mobile/pull/284) |
|
|
99
99
|
| [@Sanksu](https://github.com/Sanksu) | [#118](https://github.com/saya-ch/dsh-mobile/pull/118) |
|
|
100
100
|
| [@StrawberryAO](https://github.com/StrawberryAO) | [#34](https://github.com/saya-ch/dsh-mobile/pull/34), [#40](https://github.com/saya-ch/dsh-mobile/pull/40) |
|
|
101
101
|
| [@xhwxt](https://github.com/xhwxt) | [#105](https://github.com/saya-ch/dsh-mobile/pull/105), [#134](https://github.com/saya-ch/dsh-mobile/pull/134) |
|
|
@@ -159,6 +159,7 @@ Thanks [@xhwxt](https://github.com/xhwxt) for the document-picker proposal in [#
|
|
|
159
159
|
| [@hpsks416](https://github.com/hpsks416) | [#132](https://github.com/saya-ch/dsh-mobile/issues/132) |
|
|
160
160
|
| [@idoall](https://github.com/idoall) | [#42](https://github.com/saya-ch/dsh-mobile/issues/42), [#45](https://github.com/saya-ch/dsh-mobile/issues/45), [#46](https://github.com/saya-ch/dsh-mobile/issues/46), [#47](https://github.com/saya-ch/dsh-mobile/issues/47), [#62](https://github.com/saya-ch/dsh-mobile/issues/62), [#64](https://github.com/saya-ch/dsh-mobile/issues/64) |
|
|
161
161
|
| [@IvyC-zz](https://github.com/IvyC-zz) | [#58](https://github.com/saya-ch/dsh-mobile/issues/58), [#78](https://github.com/saya-ch/dsh-mobile/issues/78) |
|
|
162
|
+
| [@jackfocus15-spec](https://github.com/jackfocus15-spec) | [#285](https://github.com/saya-ch/dsh-mobile/issues/285) |
|
|
162
163
|
| [@jillkayat](https://github.com/jillkayat) | [#10](https://github.com/saya-ch/dsh-mobile/issues/10) |
|
|
163
164
|
| [@jonaskilli](https://github.com/jonaskilli) | [#198](https://github.com/saya-ch/dsh-mobile/issues/198) |
|
|
164
165
|
| [@jueruibo](https://github.com/jueruibo) | [#101](https://github.com/saya-ch/dsh-mobile/issues/101) |
|
|
@@ -184,6 +185,7 @@ Thanks [@xhwxt](https://github.com/xhwxt) for the document-picker proposal in [#
|
|
|
184
185
|
| [@Surpass567](https://github.com/Surpass567) | [#80](https://github.com/saya-ch/dsh-mobile/issues/80), [#81](https://github.com/saya-ch/dsh-mobile/issues/81) |
|
|
185
186
|
| [@Void-LifeStream](https://github.com/Void-LifeStream) | [#205](https://github.com/saya-ch/dsh-mobile/issues/205), [#219](https://github.com/saya-ch/dsh-mobile/issues/219), [#225](https://github.com/saya-ch/dsh-mobile/issues/225), [#234](https://github.com/saya-ch/dsh-mobile/issues/234) |
|
|
186
187
|
| [@WalkerJay666](https://github.com/WalkerJay666) | [#201](https://github.com/saya-ch/dsh-mobile/issues/201) |
|
|
188
|
+
| [@wintekk](https://github.com/wintekk) | [#306](https://github.com/saya-ch/dsh-mobile/issues/306) |
|
|
187
189
|
| [@up-and-down-0618](https://github.com/up-and-down-0618) | [#115](https://github.com/saya-ch/dsh-mobile/issues/115) |
|
|
188
190
|
| [@taki-ohh](https://github.com/taki-ohh) | [#19](https://github.com/saya-ch/dsh-mobile/issues/19) |
|
|
189
191
|
| [@tianyimc](https://github.com/tianyimc) | [#126](https://github.com/saya-ch/dsh-mobile/issues/126) |
|
|
@@ -191,3 +193,4 @@ Thanks [@xhwxt](https://github.com/xhwxt) for the document-picker proposal in [#
|
|
|
191
193
|
| [@xhwxt](https://github.com/xhwxt) | [#107](https://github.com/saya-ch/dsh-mobile/issues/107), [#108](https://github.com/saya-ch/dsh-mobile/issues/108), [#145](https://github.com/saya-ch/dsh-mobile/issues/145), [#146](https://github.com/saya-ch/dsh-mobile/issues/146), [#149](https://github.com/saya-ch/dsh-mobile/issues/149), [#171](https://github.com/saya-ch/dsh-mobile/issues/171) |
|
|
192
194
|
| [@Yurzi](https://github.com/Yurzi) | [#17](https://github.com/saya-ch/dsh-mobile/issues/17), [#213](https://github.com/saya-ch/dsh-mobile/issues/213) |
|
|
193
195
|
| [@Ztyss](https://github.com/Ztyss) | [#22](https://github.com/saya-ch/dsh-mobile/issues/22), [#23](https://github.com/saya-ch/dsh-mobile/issues/23) |
|
|
196
|
+
| [@ZinChl](https://github.com/ZinChl) | [#308](https://github.com/saya-ch/dsh-mobile/issues/308) |
|
package/README.en.md
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
<p align="center">
|
|
19
19
|
<a href="#what-it-does">What it does</a> ·
|
|
20
20
|
<a href="#quick-start">Quick start</a> ·
|
|
21
|
+
<a href="#iphone-and-ipad-home-screen-web-app-pwa">iPhone / iPad</a> ·
|
|
21
22
|
<a href="#connection-guide">Connection guide</a> ·
|
|
22
23
|
<a href="#extend-and-customize">Extend and customize</a> ·
|
|
23
24
|
<a href="#device-management">Device management</a> ·
|
|
@@ -26,23 +27,25 @@
|
|
|
26
27
|
<a href="#compatibility">Compatibility</a> ·
|
|
27
28
|
<a href="docs/README.md">Documentation</a> ·
|
|
28
29
|
<a href="#contributors">Contributors</a> ·
|
|
29
|
-
<a href="https://github.com/saya-ch/dsh-mobile/releases/tag/v0.
|
|
30
|
+
<a href="https://github.com/saya-ch/dsh-mobile/releases/tag/v0.8.0">Release notes</a> ·
|
|
30
31
|
<a href="README.md">简体中文</a>
|
|
31
32
|
</p>
|
|
32
33
|
|
|
33
34
|
> DSH Mobile is a DeepSeek Harness community plugin; the native app supports Android only.
|
|
34
35
|
>
|
|
35
|
-
> **
|
|
36
|
+
> **Using an iPhone or iPad?** Use Safari or [add DSH Mobile to your Home Screen as a web app (PWA)](<#iphone-and-ipad-home-screen-web-app-pwa>)—no native iOS download needed.
|
|
37
|
+
>
|
|
38
|
+
> **Current stable release: 0.8.0**. Add **iPhone / iPad Home Screen setup and Web Push notifications**, with six categories for questions, plans, approvals, responses, goals and failures. Also improve sidebar position retention, attachment actions and slow-link transfers. [Plugin release notes and downloads](https://github.com/saya-ch/dsh-mobile/releases/tag/v0.8.0) · [Full changelog](CHANGELOG.md).
|
|
36
39
|
>
|
|
37
40
|
> **Version policy**: since plugin **0.6.2**, the Android app and plugin use independent version numbers and releases. Their numbers do not need to match, and a plugin update does not imply an app update. [Compatibility notes](#compatibility).
|
|
38
41
|
|
|
39
42
|
<p align="center">
|
|
40
|
-
<a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.7.
|
|
41
|
-
<a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.7.
|
|
42
|
-
<sub><a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.7.
|
|
43
|
+
<a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.7.1/dsh-mobile-android-v0.7.1.apk"><img src="https://raw.githubusercontent.com/saya-ch/dsh-mobile/main/assets/brand/app-icon-rounded.svg" alt="DSH Mobile Android app icon" width="72" height="72"></a><br>
|
|
44
|
+
<a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.7.1/dsh-mobile-android-v0.7.1.apk"><strong>Download Android app 0.7.1 (compatibility)</strong></a><br>
|
|
45
|
+
<sub><a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.7.1/dsh-mobile-android-v0.7.1-iroh.apk">64-bit full APK (experimental iroh)</a> · <a href="https://github.com/saya-ch/dsh-mobile/releases/tag/android-v0.7.1">Release notes and checksums</a></sub>
|
|
43
46
|
</p>
|
|
44
47
|
|
|
45
|
-
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, cpolar, cloudflared, self-hosted FRP, or own reverse-proxy remote path.
|
|
48
|
+
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, cpolar, cloudflared, self-hosted FRP, or own reverse-proxy remote path. The full Android App also supports experimental iroh encrypted direct connections with relay fallback. The phone reaches the computer's sessions, Workspaces, messages and tools. The computer manages LAN and remote switches and pairing authorizations separately; the Android app lists paired computers together. The plugin does not modify DeepSeek Harness source.
|
|
46
49
|
|
|
47
50
|
Mobile access uses a dedicated HTTPS origin and device pairing. The Android app pins the private LAN CA; public remote paths use platform-trusted certificates. The self-signed FRP entry additionally requires the 0.4.6 app to pin a remote CA during pairing.
|
|
48
51
|
|
|
@@ -51,12 +54,13 @@ It also lets you customize the phone from a DSH conversation: `/mobile <what you
|
|
|
51
54
|
## What it does
|
|
52
55
|
|
|
53
56
|
- **Continue DSH work from a phone**: the same sessions, Workspaces, messages, and tools, in real time.
|
|
54
|
-
- **Customize the phone UI by talking to DSH**: request layout, interaction, or feature changes in a conversation;
|
|
55
|
-
- **A dedicated touch layout**: session drawer, tool details, settings, question cards, and composer reorganized for phones
|
|
56
|
-
- **Several remote options**: Tailscale, cpolar, cloudflared quick/named tunnels, self-hosted FRP,
|
|
57
|
+
- **Customize the phone UI by talking to DSH**: request layout, interaction, or feature changes in a conversation; changed customization resources are usually picked up automatically.
|
|
58
|
+
- **A dedicated touch layout**: session drawer, tool details, settings, question cards, and composer reorganized for phones. The sidebar remembers its list position within the page instead of jumping to the top after a session switch. The app follows the system locale (Chinese/English/Italian), plugin UI follows DSH's locale.
|
|
59
|
+
- **Several remote options**: Tailscale, cpolar, cloudflared quick/named tunnels, self-hosted FRP, your own reverse proxy, and experimental iroh without a domain or public port; Windows/Linux x64 can also let the plugin manage Caddy HTTPS and certificates.
|
|
57
60
|
- **Pairing and multi-device**: pair once via QR code, link, or key; Wi-Fi, hotspot, or IP changes normally recover automatically; the app lists LAN and remote paired computers together, checks their reachability periodically, and lets you switch, re-pair, or delete a local record.
|
|
58
61
|
- **One-click diagnostics and approval**: check versions, gateway, network interface, firewall, and the remote path with a redacted report; approve blocked third-party plugin connections per exact path.
|
|
59
|
-
- **
|
|
62
|
+
- **iPhone / iPad Web Push**: add the page to your Home Screen and explicitly enable notifications in DSH General settings. Choose from six categories and receive alerts while the page is closed or the screen is locked, without conversation text on the lock screen. [Requirements and setup](docs/WEB_PUSH.en.md).
|
|
63
|
+
- **Android task notifications**: enable completion and pending-input alerts in DSH General settings inside the app, using its separate native notification channel with redacted lock-screen text.
|
|
60
64
|
- **Defense in depth**: a private CA pinned for LAN, trusted HTTPS for public remote paths, and a remote CA pinned by the 0.4.6 app for the self-signed FRP entry. Credentials are Keystore-backed, device tokens go only to their exact Origin, and third-party WebSockets are blocked by default.
|
|
61
65
|
|
|
62
66
|
A paired device can operate DSH on the computer and must be treated as fully trusted. Enable LAN access only on trusted networks, and use a reliable HTTPS channel for remote access. Revoke a lost phone from the computer immediately.
|
|
@@ -105,12 +109,25 @@ Restart DSH, then search for **dsh-mobile** under **Settings → Plugin Market**
|
|
|
105
109
|
|
|
106
110
|
`setup` automatically selects and remembers the current LAN; Wi-Fi, hotspot, and IP changes normally recover without re-pairing. Use `--address 192.168.x.x` only when automatic selection fails. Settings, certificates, devices, and customization files live under `$DSH_HOME/mobile-access/`.
|
|
107
111
|
|
|
108
|
-
### Install the
|
|
112
|
+
### Install the Android app
|
|
109
113
|
|
|
110
|
-
Download the official Android APK using the link above
|
|
114
|
+
Download the official Android APK using the link above. Then choose LAN or remote access in the [connection guide](#connection-guide); the phone needs no separate tunnel client. For browser access, including iOS, follow the steps below.
|
|
111
115
|
|
|
112
116
|
Registry-installed plugins check for updates when the desktop UI loads and show “Update plugin” beside the access-panel title when a newer release is available. Restart DSH after installation. The app download entry shows the latest version; local development packages are not overwritten, and Android does not check for or push app-version updates.
|
|
113
117
|
|
|
118
|
+
### iPhone and iPad: Home Screen web app (PWA)
|
|
119
|
+
|
|
120
|
+
The plugin runs on the **computer**; Safari loads its mobile interface. There is no native iOS app to install.
|
|
121
|
+
|
|
122
|
+
1. Install and enable the plugin on the computer as above. In **Mobile Access**, configure your [connection](<#connection-guide>); prefer a stable, trusted HTTPS address for a lasting Home Screen installation.
|
|
123
|
+
2. Stay in that connection's panel: use **Copy pairing link** for LAN, or **Generate remote pairing QR code** then **Copy remote pairing link** for Remote. Open the resulting browser link in **Safari** and complete pairing. Use the dedicated Mobile Access link, not the computer's ordinary DSH page; Android `dsh1.`/`dsh2.` keys are not browser pairing codes.
|
|
124
|
+
3. From the paired page, open Safari's **Share** menu → **Add to Home Screen**. Turn on **Open as Web App** if offered, then tap **Add**. Menu layout varies; see [Apple's iPhone instructions](<https://support.apple.com/guide/iphone/bookmark-a-website-iph42ab2f3a7/ios>).
|
|
125
|
+
4. Launch the new Home Screen icon to continue the same DSH sessions and Workspaces. If it shows a **Pairing code** form, follow the [fresh-code recovery steps](<docs/WEB_PUSH.en.md#if-the-home-screen-app-shows-a-pairing-form>); Safari's first code is single-use. A normal reconnect page uses saved pairing instead. Keep existing installations and pairing/site data when troubleshooting.
|
|
126
|
+
|
|
127
|
+
You can also keep using Safari without installing an icon. The computer, DSH and Mobile Gateway must stay running and reachable; adding the web app does **not** provide offline DSH. A changing tunnel hostname does not automatically transfer pairing or push consent.
|
|
128
|
+
|
|
129
|
+
**Enable Web Push:** launch the Home Screen icon, open **DSH Settings → General → Web push notifications**, select **Enable**, allow notifications and choose your categories. This targets capable iOS/iPadOS **18.4+** Home Screen apps on trusted HTTPS; ordinary Safari tabs and the Android app do not show this entry. Notifications are optional and are not required for ordinary access. [Full guide and troubleshooting](docs/WEB_PUSH.en.md).
|
|
130
|
+
|
|
114
131
|
## Connection guide
|
|
115
132
|
|
|
116
133
|
LAN and remote access are independent connections. Prefer LAN while the phone is near the computer for the lowest latency, and enable remote access only when leaving that network. The computer manages their switches and pairing authorizations separately; the Android app shows all paired computers together in its device list.
|
|
@@ -124,10 +141,12 @@ Use this when the phone and computer share Wi-Fi, Ethernet, or a phone hotspot.
|
|
|
124
141
|
</p>
|
|
125
142
|
|
|
126
143
|
1. Connect the phone and computer to the same local network, then open **Mobile Access → Local network** in the lower-left corner of DeepSeek Harness.
|
|
127
|
-
2. If needed, select **Enable local access**, then select **
|
|
144
|
+
2. If needed, select **Enable local access**, then select **Generate pairing QR code**. The panel displays a pairing QR code.
|
|
128
145
|
3. In the Android app, open **Local network**, scan for computers, select the device, then scan the QR code or paste the pairing key.
|
|
129
146
|
4. Pairing creates persistent device trust. Later app launches discover and connect automatically; Wi-Fi, hotspot, and DHCP address changes normally do not require pairing again.
|
|
130
147
|
|
|
148
|
+
LAN and HTTPS remote pairing codes show their expiry time. Generate a new code after expiry; doing so invalidates the previous code. **Copy pairing link** reuses the current valid code instead of invalidating the displayed QR. The computer-side **Device** entry lists and revokes LAN and remote authorizations in separate tabs; it does not manage the saved computer list in the App.
|
|
149
|
+
|
|
131
150
|
When other plugin entries share the sidebar footer, **Mobile access** becomes a phone-icon button. Hover to read its name; clicking opens the same panel. Its text label returns when the entry is alone.
|
|
132
151
|
|
|
133
152
|
Port note: `dsh web --port` changes the DSH Web upstream port (3080 by default), which the plugin follows automatically. `dsh-mobile setup --port` changes the Mobile HTTPS listener (3443 by default), and the pairing QR code includes the selected port. When DSH Desktop starts with `--port 0`, the gateway follows the **actual port in use**; `upstreamOrigin` in `mobile-access/setup.json` is only the snapshot from the first setup, and the plugin refreshes it at startup — do not read it as the upstream the gateway uses.
|
|
@@ -151,6 +170,8 @@ For manual browser pairing, enter the 43-character pairing code shown on the com
|
|
|
151
170
|
|
|
152
171
|
Use this after the phone leaves the computer's network. Remote access is disabled by default, and the phone needs no separate Tailscale, cpolar, cloudflared, or FRP app.
|
|
153
172
|
|
|
173
|
+
**Without a domain or public inbound access, you can also try iroh (experimental).** Install the pinned computer component and the **full Android App 0.7.0** to connect through encrypted direct links with relay fallback. Computer support is currently Windows/Linux x64; the compatibility APK and mobile browsers cannot use iroh. This is not a guaranteed connectivity or acceleration service: VPNs, proxies and both networks can affect it. See [iroh setup and troubleshooting](docs/IROH.en.md).
|
|
174
|
+
|
|
154
175
|
Remote providers may impose bandwidth and connection limits: the [cpolar Free plan](https://svip.cpolar.com/pricing) currently lists 1 Mbps, while [Tailscale Funnel](https://tailscale.com/docs/features/tailscale-funnel#requirements-and-limitations) has non-configurable bandwidth limits, and a cloudflared quick tunnel is a free Cloudflare address with randomized hostnames and rate limiting. DSH Mobile uses gzip for static assets, persistent WebSockets, and load-on-scroll history to improve loading; DSH controls the Session history window and page sizes, and the plugin cannot raise provider quotas.
|
|
155
176
|
|
|
156
177
|
If the page opens but stays on “Reconnecting,” distinguish WebSocket upgrade failures, slow synchronization, and heartbeat deadlines using the [slow-link and reconnection guide](docs/SLOW_CONNECTIONS.en.md). Version 0.5.4 also offers opt-in WebSocket compression per exact path, disabled by default; for long Sessions or metered links, follow the guide and compare actual transfer volume.
|
|
@@ -159,6 +180,7 @@ The usage notes below reflect the maintainer's long-term experience on a persona
|
|
|
159
180
|
|
|
160
181
|
| Channel | Prerequisites | Address and limitation | Maintainer's usage notes |
|
|
161
182
|
| --- | --- | --- | --- |
|
|
183
|
+
| iroh (experimental) | Windows/Linux x64 computer component and full Android App 0.7.0 | No domain, port forwarding or tunnel account; encrypted direct links with relay fallback; [setup and VPN troubleshooting](docs/IROH.en.md) | An option without public ingress, not a stability ranking; verify on both actual networks. Mobile browsers are unsupported |
|
|
162
184
|
| cpolar | Account and Authtoken | Free temporary URLs may change | The free plan's bandwidth limit noticeably slows everyday loading and synchronization |
|
|
163
185
|
| cloudflared quick tunnel | No account or domain | Random temporary URL; no SSE, with [notification limits](docs/CLOUDFLARE_TUNNEL.en.md#quick-tunnel-feature-limits); [officially intended only for development and testing](https://developers.cloudflare.com/tunnel/get-started/quick-tunnels/) | Frequent disconnections in long-term use, with the cause still unconfirmed; a temporary or testing choice |
|
|
164
186
|
| cloudflared named tunnel | Cloudflare account and domain | Fixed hostname; [setup guide](docs/CLOUDFLARE_TUNNEL.en.md) | The most stable of the channels used long-term; worth trying first if you have an account and domain |
|
|
@@ -171,8 +193,10 @@ The usage notes below reflect the maintainer's long-term experience on a persona
|
|
|
171
193
|
<img src="https://raw.githubusercontent.com/saya-ch/dsh-mobile/main/assets/screenshots/remote-access-en.png" width="82%" alt="DSH Mobile remote access and provider selection">
|
|
172
194
|
</p>
|
|
173
195
|
|
|
174
|
-
|
|
175
|
-
|
|
196
|
+
The following steps cover HTTPS remote channels. **iroh uses its own “Generate iroh pairing QR code” action and the full App, as described below.** Do not open its descriptor as an ordinary browser URL.
|
|
197
|
+
|
|
198
|
+
1. Open **Mobile Access** in the lower-left corner of DeepSeek Harness, choose an HTTPS channel and complete its sign-in or configuration.
|
|
199
|
+
2. Once ready, select **Generate pairing QR code**. External proxy mode's **Backend listening** does not establish public readiness; verify public HTTPS and WebSocket access as well.
|
|
176
200
|
3. Select **Remote access** in the Android app and scan the current QR code. A publicly trusted certificate also permits pairing from a mobile browser.
|
|
177
201
|
4. Later launches reconnect using the saved address and credential. If a temporary address changes, scan the current computer QR code to verify it. Do not clear app data; the stored device token never goes to a new Origin.
|
|
178
202
|
|
|
@@ -180,11 +204,12 @@ The usage notes below reflect the maintainer's long-term experience on a persona
|
|
|
180
204
|
<summary>Installation and sign-in for each channel</summary>
|
|
181
205
|
|
|
182
206
|
After selecting the channel in the panel:
|
|
207
|
+
- **iroh (experimental)**: select iroh, choose **Install official component**, then enable remote access after installation and verification. Once ready, choose **Generate iroh pairing QR code** and scan it through the full Android App's iroh flow, or copy the pairing link. Main actions stay hidden before installation; afterwards all three share one row, with Copy disabled until valid pairing data exists. After stopping the channel, component details let you remove the downloaded program without deleting identity or pairings. See the [iroh guide](docs/IROH.en.md) for the full procedure and limits.
|
|
183
208
|
- **Tailscale Funnel**: select **Enable remote access**, complete the one-time Tailscale sign-in on the official page, follow the panel prompt to allow Funnel, then return to DSH and wait until the connection is ready.
|
|
184
209
|
- **cpolar**: select **Install official component**, sign in to the cpolar dashboard and obtain an Authtoken, paste it, then select **Save and connect**. The component is downloaded into the plugin's private directory only after confirmation; free temporary addresses may change after DSH or cpolar restarts.
|
|
185
|
-
- **Self-hosted FRP (advanced)**: if you have a VPS,
|
|
186
|
-
- **Own reverse proxy**: open **
|
|
187
|
-
- **Managed Caddy**: under **
|
|
210
|
+
- **Self-hosted FRP (advanced)**: if you have a VPS, select **Self-hosted FRP** under **Mobile access** and enter its frps details and a public HTTPS domain or real public IPv4 address. Apply the restricted frps + Caddy template manually, or deploy with an SSH key on Ubuntu/Debian with systemd. Password login is unsupported. Use manual deployment and merge the import as described in the guide when custom Caddy sites already exist. Verify the VPS host keys against its console before deployment or cleanup. The local `frpc` is downloaded and verified on demand; VPS cleanup is separate. Android app 0.3.3 or later is required. The [self-hosted FRP guide](docs/SELF_HOSTED_FRP.en.md) covers certificates, ports, and the complete procedure.
|
|
211
|
+
- **Own reverse proxy**: open **Mobile access → Own reverse proxy**, enter the public HTTPS origin (custom ports supported), private listen IP (IPv4 or IPv6 loopback/ULA), separate HTTP backend port (default 3444), and allowed direct proxy source CIDRs, then select **Save and start backend**. This uses your existing Lucky/Nginx/Caddy without a tunnel component and requires Android app 0.4.0 or later. See the [own reverse proxy guide](docs/SELF_HOSTED_ORIGIN.en.md).
|
|
212
|
+
- **Managed Caddy**: under **Mobile access → Own reverse proxy**, select **Managed Caddy**, choose **Install managed Caddy**, and confirm the download. Enter the public HTTPS origin, Tencent Cloud DNSPod credentials and local HTTPS listen port, then choose **Save and start Caddy**. A domain and reachable public ingress are required; this does not bypass CGNAT. See the [managed Caddy guide](docs/CADDY_MANAGED.en.md) for forwarding and complete steps.
|
|
188
213
|
- **cloudflared quick tunnel**: select **Install official component**. After you confirm, the plugin downloads a pinned build from the official release page into its private directory and requests a temporary public address (a quick tunnel) with **no sign-up or sign-in**. Choose this when you would rather not create an account. The quick-tunnel hostname changes on every reconnect, and Cloudflare positions quick tunnels for testing: they are rate-limited and carry no uptime guarantee, so do not rely on one for production access that must stay reachable; it suits temporary or verification use.
|
|
189
214
|
- **cloudflared named tunnel**: with a Cloudflare account and domain, switch **Tunnel type** to **Named**, then supply a connector token, a public hostname and a local forward port to get an address that survives restarts. The token is stored only in the private directory and reaches cloudflared through the environment rather than the command line; see [Cloudflare named tunnel](docs/CLOUDFLARE_TUNNEL.en.md).
|
|
190
215
|
|
|
@@ -193,7 +218,7 @@ After selecting the channel in the panel:
|
|
|
193
218
|
<details>
|
|
194
219
|
<summary>Remote notifications, server maintenance and security limits</summary>
|
|
195
220
|
|
|
196
|
-
> **Remote notifications**:
|
|
221
|
+
> **Remote notifications**: Android task reminders use the page/SSE path and need the app's WebView to remain alive. [iPhone/iPad Web Push](docs/WEB_PUSH.en.md) is explicitly enabled from a capable Safari Home Screen app and does not need an open page. Both require DSH to keep running on the computer; networks, Focus settings and platform scheduling can delay delivery, so neither is a guaranteed alarm service. Independently configured channels such as dsh-ping remain unchanged.
|
|
197
222
|
|
|
198
223
|
The Funnel 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. An unregistered domain on a mainland-China VPS may be intercepted by the cloud provider; public IPv4 mode avoids that dependency. The plugin validates pinned on-demand components; locally managed configuration and binaries live under `$DSH_HOME/mobile-access/` and can be cleaned up from the panel. VPS files require separate cleanup through the self-hosted connection guide.
|
|
199
224
|
|
|
@@ -207,11 +232,11 @@ See [Compatibility](#compatibility) for the supported components and platforms.
|
|
|
207
232
|
|
|
208
233
|
### Experimental iroh connection
|
|
209
234
|
|
|
210
|
-
|
|
235
|
+
Since plugin 0.7.0, the experimental transport from [dsh-mobile-iroh](https://github.com/saya-ch/dsh-mobile-iroh) is integrated into this repository. Its computer component, native Android transport and full APK are maintained here. The standalone repository retains the design and prototype records; normal installation uses this project's plugin and App, without maintaining two Apps. See the [iroh guide](docs/IROH.en.md) for setup, platform limits and troubleshooting.
|
|
211
236
|
|
|
212
237
|
## Extend and customize
|
|
213
238
|
|
|
214
|
-
Type `/mobile <what you want>` in a DSH conversation to hand the request to the current agent.
|
|
239
|
+
Type `/mobile <what you want>` in a DSH conversation to hand the request to the current agent. Changed customization resources are usually picked up within a few seconds. For example:
|
|
215
240
|
|
|
216
241
|
```text
|
|
217
242
|
/mobile turn the phone UI into an old CRT terminal, with messages scrolling like terminal output
|
|
@@ -340,7 +365,8 @@ Selection priority is device choice → computer defaults → plugin configurati
|
|
|
340
365
|
| Client | Best for | Notes |
|
|
341
366
|
| --- | --- | --- |
|
|
342
367
|
| Android app | Everyday use | Separate Local and Remote entries at first pairing; LAN discovery, system trust for public remote certificates, and app-pinned CA for the self-signed FRP entry |
|
|
343
|
-
|
|
|
368
|
+
| iPhone/iPad Safari or Home Screen web app (PWA) | Everyday iOS access and optional push | [Pair in Safari and add a Home Screen icon](<#iphone-and-ipad-home-screen-web-app-pwa>); no native iOS app. Capable Home Screen apps can enable [Web Push](docs/WEB_PUSH.en.md) |
|
|
369
|
+
| Mobile browser | Everyday or cross-platform access | Open the HTTPS origin shown by Mobile Access; a private LAN certificate may need confirmation, while a public remote certificate should not warn. Continuing through a certificate warning does not make the page eligible for Web Push |
|
|
344
370
|
|
|
345
371
|
The Android app is a thin Kotlin WebView shell and contains no frontend copy; mobile browsers load the same page. Developers can append `?frontend=stock` to an authenticated mobile URL to diagnose boot and layout behavior. This entry skips dedicated mobile boot rewriting and module selection, but installed client adaptation and authenticated customizations may still apply. It is not a plugin-free control; some API operations may be rejected, so it does not replace normal mobile access. See [skins and mobile layout](docs/SKIN_COMPATIBILITY.en.md).
|
|
346
372
|
|
|
@@ -401,6 +427,8 @@ The plugin retains DSH host peer declarations without rejecting installation or
|
|
|
401
427
|
|
|
402
428
|
### OS support matrix
|
|
403
429
|
|
|
430
|
+
This table describes the **computer running the plugin**, not the phone's OS; iPhone/iPad access uses the [browser/Home Screen route](<#iphone-and-ipad-home-screen-web-app-pwa>).
|
|
431
|
+
|
|
404
432
|
| Channel | Windows x64 | Linux x64 | Linux arm64 | macOS |
|
|
405
433
|
| --- | --- | --- | --- | --- |
|
|
406
434
|
| Local network | Yes (firewall automated) | Yes (open the firewall yourself) | Yes | Yes |
|
|
@@ -416,6 +444,14 @@ On macOS, local network, cloudflared, self-hosted FRP and the own reverse proxy
|
|
|
416
444
|
|
|
417
445
|
| DSH Mobile plugin | Verified DeepSeek Harness version |
|
|
418
446
|
| --- | --- |
|
|
447
|
+
| `0.8.0` | Push public-contract, settings, encrypted-payload and tap-ownership checks are pinned to `0.2.1-rc.2 / rc.3`; see [CI](https://github.com/saya-ch/dsh-mobile/actions/workflows/ci.yml) for the general boot/layout matrix. iOS device results accept contributor testing; browser checks do not establish every phone, plugin or public route |
|
|
448
|
+
|
|
449
|
+
<details>
|
|
450
|
+
<summary>Earlier release checks</summary>
|
|
451
|
+
|
|
452
|
+
| DSH Mobile plugin | Verified DeepSeek Harness version |
|
|
453
|
+
| --- | --- |
|
|
454
|
+
| `0.7.1` | Isolated packed installation, mobile sidebar and breakpoint hit tests on `0.2.1-rc.3`, plus access-panel, pairing-expiry and component-cleanup checks |
|
|
419
455
|
| `0.6.11` | Isolated packed-browser CI on `0.1.7-alpha.2`, `0.1.7-rc.1`, `0.1.7-rc.2`, `0.2.0-rc.1`, `0.2.0-rc.2`, `0.2.1-alpha.2` and `0.2.1-alpha.3`; additional real history-pagination, viewport-preservation and manual-loading checks on `0.2.0-rc.2` and `0.2.1-alpha.3`. Browser checks do not establish acceptance of every phone engine, third-party plugin or public route |
|
|
420
456
|
| `0.6.12` | Packed installation, mobile boot, missing-API simulation, Workspace streaming, retained-page transport recovery and mobile settings on `0.2.1-rc.2`; authentication/resource regression with the actual community `dsh-web-startup-auth@0.1.12` on `0.2.0-rc.2`. This does not establish physical Chromium 92, arbitrary auth-plugin or public-route acceptance |
|
|
421
457
|
| `0.6.13` | Packed text/image HTTP 400 recovery, Host refusal guard and error-feedback checks on `0.2.0-rc.2` and `0.2.1-rc.2`; Gateway 408/431 classification, bounded diagnostics and four Gateway factory wiring passed local tests. DSH source, iroh P2P and Android native code are outside this release |
|
|
@@ -426,9 +462,6 @@ On macOS, local network, cloudflared, self-hosted FRP and the own reverse proxy
|
|
|
426
462
|
| `0.6.18` | `0.2.1-rc.2`: 18 real packed Chromium directory-picker checks, including compact layout, folder creation and cancellation; the candidate was installed in local official Desktop `0.2.1-rc.3` with LAN and Cloudflare gateways running |
|
|
427
463
|
| `0.7.0` | Packed-browser CI across eight DSH versions (`0.1.7-alpha.2`–`0.2.1-rc.2`), Windows/Linux Gateway and iroh Host checks, both Android ABIs and compatibility APK checks. See the [iroh guide](docs/IROH.en.md) for device and network limits |
|
|
428
464
|
|
|
429
|
-
<details>
|
|
430
|
-
<summary>Historical version checks</summary>
|
|
431
|
-
|
|
432
465
|
| DSH Mobile plugin | Verified DeepSeek Harness version |
|
|
433
466
|
| --- | --- |
|
|
434
467
|
| `0.6.8` | Packed mobile boot, legacy-WebView API simulation, WebSocket Workspace reads, mobile settings, module management, sidebar and composer regressions on `0.2.1-alpha.3`; separate real HTTP/TLS and legacy-credential upgrade tests cover the identity fix. The local official Desktop `0.2.0-rc.2` loads this plugin version with existing pairings preserved. This does not establish phone cellular or every third-party plugin combination |
|
package/README.md
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
<p align="center">
|
|
19
19
|
<a href="#能做什么">能做什么</a> ·
|
|
20
20
|
<a href="#快速开始">快速开始</a> ·
|
|
21
|
+
<a href="#iphone-与-ipad主屏幕-web-apppwa">iPhone / iPad</a> ·
|
|
21
22
|
<a href="#连接教程">连接教程</a> ·
|
|
22
23
|
<a href="#扩展与自定义">扩展与自定义</a> ·
|
|
23
24
|
<a href="#设备管理">设备管理</a> ·
|
|
@@ -26,23 +27,25 @@
|
|
|
26
27
|
<a href="#兼容性">兼容性</a> ·
|
|
27
28
|
<a href="docs/README.md">文档</a> ·
|
|
28
29
|
<a href="#贡献者">贡献者</a> ·
|
|
29
|
-
<a href="https://github.com/saya-ch/dsh-mobile/releases/tag/v0.
|
|
30
|
+
<a href="https://github.com/saya-ch/dsh-mobile/releases/tag/v0.8.0">更新记录</a> ·
|
|
30
31
|
<a href="README.en.md">English</a>
|
|
31
32
|
</p>
|
|
32
33
|
|
|
33
34
|
> DSH Mobile 是 DeepSeek Harness 社区插件,原生 App 仅支持 Android。
|
|
34
35
|
>
|
|
35
|
-
>
|
|
36
|
+
> **使用 iPhone 或 iPad?** 可以用 Safari 访问,或[添加到主屏幕作为 Web App(PWA)使用](<#iphone-与-ipad主屏幕-web-apppwa>),无需下载原生 iOS App。
|
|
37
|
+
>
|
|
38
|
+
> **当前正式版本:0.8.0**。新增 **iPhone / iPad 主屏幕 Web App 引导与网页推送通知**,支持问题、计划、审批、回复、目标和失败六类提醒;同时改善会话列表位置保持、附件操作和慢链路传输。[插件更新与下载](https://github.com/saya-ch/dsh-mobile/releases/tag/v0.8.0) · [完整更新记录](CHANGELOG.md)。
|
|
36
39
|
>
|
|
37
40
|
> **版本说明**:自插件 **0.6.2** 起,Android App 与插件独立编号、独立发布,版本号无需一致;插件升级不代表 App 需要同步升级。[兼容说明](#兼容性)。
|
|
38
41
|
|
|
39
42
|
<p align="center">
|
|
40
|
-
<a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.7.
|
|
41
|
-
<a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.7.
|
|
42
|
-
<sub><a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.7.
|
|
43
|
+
<a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.7.1/dsh-mobile-android-v0.7.1.apk"><img src="https://raw.githubusercontent.com/saya-ch/dsh-mobile/main/assets/brand/app-icon-rounded.svg" alt="DSH Mobile 安卓应用图标" width="72" height="72"></a><br>
|
|
44
|
+
<a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.7.1/dsh-mobile-android-v0.7.1.apk"><strong>下载 Android App 0.7.1(兼容版)</strong></a><br>
|
|
45
|
+
<sub><a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.7.1/dsh-mobile-android-v0.7.1-iroh.apk">64 位完整版(含实验性 iroh)</a> · <a href="https://github.com/saya-ch/dsh-mobile/releases/tag/android-v0.7.1">版本说明与校验文件</a></sub>
|
|
43
46
|
</p>
|
|
44
47
|
|
|
45
|
-
DSH Mobile 是一个 DeepSeek Harness 插件,让手机浏览器或 Android App 通过局域网,或可选的 Tailscale Funnel、cpolar、cloudflared、自建 FRP
|
|
48
|
+
DSH Mobile 是一个 DeepSeek Harness 插件,让手机浏览器或 Android App 通过局域网,或可选的 Tailscale Funnel、cpolar、cloudflared、自建 FRP、自有反向代理远程通道连接电脑;Android 完整版还支持实验性 iroh 加密直连与中继。手机可以继续使用电脑上的会话、工作区、消息和工具。电脑端分别启停局域网与远程访问、分别管理配对授权;Android App 统一显示已配对电脑。插件不修改 DeepSeek Harness 源码。
|
|
46
49
|
|
|
47
50
|
移动访问使用独立 HTTPS 与设备配对;Android App 固定局域网私有 CA,公开远程通道使用系统信任的证书;自签 FRP 入口还需由 0.4.6 App 在配对时固定远程 CA。
|
|
48
51
|
|
|
@@ -51,12 +54,13 @@ DSH Mobile 是一个 DeepSeek Harness 插件,让手机浏览器或 Android App
|
|
|
51
54
|
## 能做什么
|
|
52
55
|
|
|
53
56
|
- **在手机上继续电脑端的工作**:同一份会话、工作区、消息和工具,实时同步。
|
|
54
|
-
- **用对话定制手机端**:在 DSH
|
|
55
|
-
-
|
|
56
|
-
- **多种远程通道**:Tailscale、cpolar、cloudflared 快速/命名隧道、自建 FRP
|
|
57
|
+
- **用对话定制手机端**:在 DSH 对话里提出布局、交互或功能需求;文件修改完成后,自定义资源通常会自动更新。
|
|
58
|
+
- **专属触屏布局**:会话抽屉、工具详情、设置、提问卡片和输入栏都按手机重新组织;侧栏列表在本页内记住位置,切换会话再打开不会总跳回顶部。App 跟随系统语言(简/英/意),插件界面跟随 DSH 语言。
|
|
59
|
+
- **多种远程通道**:Tailscale、cpolar、cloudflared 快速/命名隧道、自建 FRP、自有反向代理,以及无需域名和公网端口的实验性 iroh;Windows/Linux x64 还可由插件托管 Caddy HTTPS 与证书。
|
|
57
60
|
- **配对与多设备**:扫码、链接或密钥配对一次;切换 Wi-Fi、热点或 IP 后通常自动恢复;App 在一个列表中显示局域网和远程配对的电脑,定期检测可达状态,并支持切换、重新配对或删除本地记录。
|
|
58
61
|
- **一键诊断与放行**:检查版本、网关、网卡、防火墙和远程通道,生成脱敏报告;被拦截的第三方插件连接按确切路径一键放行。
|
|
59
|
-
-
|
|
62
|
+
- **iPhone / iPad 网页推送**:将页面添加到主屏幕后,在 DSH“通用设置”中主动开启;支持六类提醒和分类开关,页面关闭或锁屏后也可接收,锁屏文字不含会话正文。[使用条件与设置](docs/WEB_PUSH.md)。
|
|
63
|
+
- **Android 任务通知**:在 App 内 DSH“通用设置”中开启任务完成与待输入提醒,使用独立的原生通知通道,锁屏文本脱敏。
|
|
60
64
|
- **纵深安全**:局域网固定私有 CA,公开远程入口使用受信任 HTTPS;自签 FRP 入口由 0.4.6 App 固定远程 CA。凭据存 Keystore,设备令牌只发往精确 Origin,第三方 WS 默认拦截。
|
|
61
65
|
|
|
62
66
|
配对设备可以操作电脑上的 DSH,应视为完全受信任的设备。局域网只在可信网络开启;远程访问应使用可靠的 HTTPS 通道。手机丢失时,请立即从电脑端撤销设备。
|
|
@@ -105,12 +109,25 @@ dsh plugin --profile web add dshmarket
|
|
|
105
109
|
|
|
106
110
|
`setup` 会自动选择并记住当前局域网,切换 Wi-Fi、热点或 IP 后通常自动恢复;仅在自动选择失败时使用 `--address 192.168.x.x`。设置、证书、设备和自定义文件保存在 `$DSH_HOME/mobile-access/`。
|
|
107
111
|
|
|
108
|
-
###
|
|
112
|
+
### 安装 Android App
|
|
109
113
|
|
|
110
|
-
从上方链接下载正式 Android APK
|
|
114
|
+
从上方链接下载正式 Android APK。随后按[连接教程](#连接教程)选择局域网或远程访问;手机不需要安装额外的隧道客户端。包括 iOS 在内的浏览器访问方式见下文。
|
|
111
115
|
|
|
112
116
|
通过 npm 安装的插件会在桌面界面加载时检查新版本,有更新时在访问面板标题右侧显示“更新插件”,安装后需重启 DSH。App 下载入口展示最新版本;本地开发包不会被自动覆盖,Android App 不会主动检查或推送版本更新。
|
|
113
117
|
|
|
118
|
+
### iPhone 与 iPad:主屏幕 Web App(PWA)
|
|
119
|
+
|
|
120
|
+
插件运行在**电脑**上,Safari 加载其移动界面,无需安装原生 iOS App。
|
|
121
|
+
|
|
122
|
+
1. 按上文在电脑安装并启用插件,在**移动访问**中配置[连接通道](<#连接教程>);长期主屏幕安装优先使用固定、受信任的 HTTPS 地址。
|
|
123
|
+
2. 留在所选通道的面板:局域网用**复制配对链接**;远程用**生成远程配对二维码**,再**复制远程配对链接**。在 **Safari** 中打开所得浏览器链接并完成配对。须使用专用移动访问链接,而非电脑的普通 DSH 页面;Android 的 `dsh1.`/`dsh2.` 密钥不是浏览器配对码。
|
|
124
|
+
3. 在已配对页面打开 Safari 的**分享**菜单 → **添加到主屏幕**。如有以 Web App 打开的选项,请开启,再轻点**添加**。菜单布局随版本变化,参见 [Apple 的 iPhone 添加说明](<https://support.apple.com/guide/iphone/bookmark-a-website-iph42ab2f3a7/ios>)。
|
|
125
|
+
4. 从新主屏幕图标启动,继续使用同一份 DSH 会话和工作区。若显示**配对码**表单,请按[新码恢复步骤](<docs/WEB_PUSH.md#主屏幕-app-显示配对表单时>)操作;Safari 首次使用的码只能消费一次。普通重新连接页使用已有配对,不必重新配对。排障时保留已有安装、配对和网站数据。
|
|
126
|
+
|
|
127
|
+
不添加图标也可以继续使用 Safari。电脑、DSH 与 Mobile Gateway 须保持运行且手机能够连接;添加 Web App **不会**提供离线 DSH。隧道域名改变后,不会自动迁移配对或推送同意。
|
|
128
|
+
|
|
129
|
+
**开启网页推送:**从主屏幕图标进入 DSH,打开 **设置 → 通用设置 → 网页推送通知**,点击**启用**并允许通知,再按需选择六类提醒。目标环境为具备页面级推送能力的 iOS/iPadOS **18.4+**,需要受信任的 HTTPS;普通 Safari 标签页和 Android App 不显示此入口。通知是可选功能,不影响日常访问。[完整指南与排障](docs/WEB_PUSH.md)。
|
|
130
|
+
|
|
114
131
|
## 连接教程
|
|
115
132
|
|
|
116
133
|
局域网和远程访问是两套相互独立的连接:在电脑附近优先使用局域网,延迟最低;离开当前网络时再启用远程访问。电脑端分别管理开关与配对授权;Android App 将所有已配对电脑集中显示在设备列表中。
|
|
@@ -124,10 +141,12 @@ dsh plugin --profile web add dshmarket
|
|
|
124
141
|
</p>
|
|
125
142
|
|
|
126
143
|
1. 让手机和电脑连接同一个局域网,在 DeepSeek Harness 左下角打开 **移动访问 → 局域网**。
|
|
127
|
-
2. 如果尚未开启,点击 **开启局域网访问**;随后点击
|
|
144
|
+
2. 如果尚未开启,点击 **开启局域网访问**;随后点击 **生成配对二维码**,面板会显示配对二维码。
|
|
128
145
|
3. 在 Android App 中进入 **局域网访问**,扫描发现电脑并点击设备,再扫描二维码或粘贴配对密钥。
|
|
129
146
|
4. 配对完成后会建立持久设备信任。以后打开 App 会自动发现并连接,切换 Wi-Fi、热点或 DHCP 地址通常不需要重新配对。
|
|
130
147
|
|
|
148
|
+
局域网和 HTTPS 远程配对码会显示有效截止时间;超时后重新生成即可。生成新码会使旧码失效,**复制配对链接**复用当前有效码,不会另行作废二维码。电脑端的 **设备** 入口可查看和撤销局域网、远程两组授权;这与 App 中保存的电脑列表是不同的管理对象。
|
|
149
|
+
|
|
131
150
|
侧栏底部有其他插件入口时,**移动访问**会收起为手机图标;悬停可查看名称,点击仍打开原面板。独占该区域时恢复文字显示。
|
|
132
151
|
|
|
133
152
|
端口说明:`dsh web --port` 修改 DSH Web 上游端口(默认 3080),插件会自动跟随;`dsh-mobile setup --port` 修改 Mobile HTTPS 监听端口(默认 3443),配对二维码会包含实际端口。若 DSH Desktop 以 `--port 0` 随机端口启动,网关跟随的是**当前实际端口**,`mobile-access/setup.json` 里的 `upstreamOrigin` 只是首次配置的快照,插件启动时会把它更新为当前端口——排查时不要把它当成网关实际使用的上游。
|
|
@@ -151,6 +170,8 @@ dsh plugin --profile web add dshmarket
|
|
|
151
170
|
|
|
152
171
|
适合手机离开电脑所在网络后使用。远程访问默认关闭,手机不需要另外安装 Tailscale、cpolar、cloudflared 或 FRP。
|
|
153
172
|
|
|
173
|
+
**没有域名或公网入站,也可以尝试 iroh(实验性)**:电脑安装固定版本的 iroh 组件,手机安装 **Android App 0.7.0 完整版**,即可通过加密直连、必要时中继连接电脑。电脑端目前支持 Windows/Linux x64;兼容版 APK 和手机浏览器不能使用 iroh。它不是保证连通的加速线路,VPN、代理和两端网络仍可能影响连接。详见 [iroh 使用与排障](docs/IROH.md)。
|
|
174
|
+
|
|
154
175
|
远程服务可能受带宽和连接限额影响:[cpolar 免费方案](https://svip.cpolar.com/pricing) 当前为 1 Mbps,[Tailscale Funnel](https://tailscale.com/docs/features/tailscale-funnel#requirements-and-limitations) 也存在不可配置的带宽限制,cloudflared 的 quick tunnel 由 Cloudflare 免费提供、地址随机且有限流。DSH Mobile 使用静态资源 gzip、WebSocket 长连接和顶部按需加载改善体验;会话的历史窗口与分页大小由 DSH 决定,插件无法提高服务商限额。
|
|
155
176
|
|
|
156
177
|
页面能打开但一直“重连中”,应先区分 WebSocket 升级失败、慢速数据同步和心跳超时,操作见[慢链路与反复重连指南](docs/SLOW_CONNECTIONS.md)。0.5.4 还提供按确切路径启用的 WebSocket 压缩,默认关闭;长会话或计量网络可按指南尝试,并对比实际传输量。
|
|
@@ -159,6 +180,7 @@ dsh plugin --profile web add dshmarket
|
|
|
159
180
|
|
|
160
181
|
| 连接方式 | 需要准备 | 地址特点与注意事项 | 维护者使用参考 |
|
|
161
182
|
| --- | --- | --- | --- |
|
|
183
|
+
| iroh(实验性) | Windows/Linux x64 电脑组件与 Android 0.7.0 完整版 | 无需域名、端口映射或隧道账号;加密直连、中继兜底;[使用与 VPN 排障](docs/IROH.md) | 可作为没有公网入口时的选择;不作稳定性排名,需在两端实际网络验证,手机浏览器不支持 |
|
|
162
184
|
| cpolar | cpolar 账号与 Authtoken | 免费临时地址可能变化 | 免费方案限速明显,日常加载与同步体验较差 |
|
|
163
185
|
| cloudflared 快速隧道 | 无需账号或域名 | 临时随机地址;不支持 SSE,[即时通知存在限制](docs/CLOUDFLARE_TUNNEL.md#快速隧道的功能限制);[官方仅定位为开发测试用途](https://developers.cloudflare.com/tunnel/get-started/quick-tunnels/) | 长期使用中经常断连,原因尚未确认;只作临时或测试选择 |
|
|
164
186
|
| cloudflared 命名隧道 | Cloudflare 账号与域名 | 固定域名;[配置指南](docs/CLOUDFLARE_TUNNEL.md) | 已长期使用的通道中最稳定;有账号和域名可优先尝试 |
|
|
@@ -171,8 +193,10 @@ dsh plugin --profile web add dshmarket
|
|
|
171
193
|
<img src="https://raw.githubusercontent.com/saya-ch/dsh-mobile/main/assets/screenshots/remote-access.png" width="82%" alt="DSH Mobile 远程访问与通道选择">
|
|
172
194
|
</p>
|
|
173
195
|
|
|
174
|
-
|
|
175
|
-
|
|
196
|
+
下面的扫码步骤适用于 HTTPS 远程通道;**iroh 使用独立的「生成 iroh 配对二维码」和完整版 App,按下方 iroh 步骤操作**,不要把其描述符当成普通网址在浏览器打开。
|
|
197
|
+
|
|
198
|
+
1. 在 DeepSeek Harness 左下角打开 **移动访问**,按上表选择 HTTPS 通道,完成登录或配置。
|
|
199
|
+
2. 状态变为“远程访问已就绪”后,点击 **生成配对二维码**。自备代理模式的“后端已监听”不等于公网就绪,仍需确认公网 HTTPS 与 WebSocket 可用。
|
|
176
200
|
3. 在 Android App 中选择 **远程访问**,扫描当前二维码完成配对;公开证书入口也可用手机浏览器打开配对链接。
|
|
177
201
|
4. 以后 App 使用保存的地址与凭据自动重连。临时地址改变时,重新扫描电脑端当前二维码验证新地址,不需要清除 App 数据;旧设备 token 不会发送给新 Origin。
|
|
178
202
|
|
|
@@ -180,11 +204,12 @@ dsh plugin --profile web add dshmarket
|
|
|
180
204
|
<summary>各通道的安装与登录步骤</summary>
|
|
181
205
|
|
|
182
206
|
在面板选择对应通道后:
|
|
207
|
+
- **iroh(实验性)**:选择 iroh,点击 **安装官方组件**,安装并校验完成后打开远程访问;就绪后点 **生成 iroh 配对二维码**,用 Android 完整版 App 的 iroh 流程扫码,也可以复制配对链接。未安装组件时不显示主操作按钮;安装后三个按钮保持同排,没有有效配对内容时复制按钮置灰。关闭通道后,可从组件详情移除插件下载的程序,不删除配对和身份。完整步骤与限制见 [iroh 指南](docs/IROH.md)。
|
|
183
208
|
- **Tailscale Funnel**:点击 **启用远程访问**,在打开的官方页面完成一次 Tailscale 登录;按面板提示继续允许 Funnel,然后返回 DSH 等待连接就绪。
|
|
184
209
|
- **cpolar**:点击 **安装官方组件**,登录 cpolar 控制台取得 Authtoken,粘贴后点击 **保存并连接**。组件只会在确认后下载到插件私有目录;免费临时地址可能在 DSH 或 cpolar 重启后变化。
|
|
185
|
-
- **自建 FRP(高级)**:已有 VPS
|
|
186
|
-
- **自有反向代理**:展开
|
|
187
|
-
- **托管 Caddy**:在
|
|
210
|
+
- **自建 FRP(高级)**:已有 VPS 时,在 **移动访问** 中选择 **自建 FRP**,填写 frps 信息和公开 HTTPS 域名或真实公网 IPv4。可以复制受限的 frps + Caddy 模板手动部署,也可以在 Ubuntu/Debian + systemd 上用 SSH 密钥一键部署;不支持密码登录。已有自定义 Caddy 站点时,请按指南手动部署并合并 import。部署或清理前须到 VPS 控制台核对主机指纹。本机 `frpc` 按需下载校验,VPS 需单独清理。需要 Android App 0.3.3 或更新版本;证书、端口和操作步骤见 [自建 FRP 使用指南](docs/SELF_HOSTED_FRP.md)。
|
|
211
|
+
- **自有反向代理**:展开 **移动访问 → 自有反向代理**,填写公网 HTTPS 地址(支持自定义端口)、私有监听 IP(IPv4 或 IPv6 回环/ULA)、独立 HTTP 后端端口(默认 3444)和代理直连来源 CIDR,再点击 **保存并启动后端**。适合已有 Lucky/Nginx/Caddy 的用户,无需隧道组件;需要 Android App 0.4.0 或更高版本。详见 [自有反向代理指南](docs/SELF_HOSTED_ORIGIN.md)。
|
|
212
|
+
- **托管 Caddy**:在 **移动访问 → 自有反向代理** 中选择 **托管 Caddy**,点击 **安装托管 Caddy** 并确认下载。填写公网 HTTPS 地址、腾讯云 DNSPod 凭据和本机 HTTPS 监听端口,再点击 **保存并启动 Caddy**。需要域名和可达的公网入站,不会替你穿透 CGNAT;端口映射与完整步骤见 [托管 Caddy 指南](docs/CADDY_MANAGED.md)。
|
|
188
213
|
- **cloudflared 快速隧道**:点击 **安装官方组件**,插件在确认后从官方发布页下载固定版本到插件私有目录,随后自动申请一个临时公网地址(quick tunnel),**无需注册或登录**。适合不想注册账号的用户;quick tunnel 地址每次重连都会变化,官方定位为测试用途、有限流且无可用性保证,请勿用于必须长期可达的生产访问,只适合临时或验证场景。
|
|
189
214
|
- **cloudflared 命名隧道**:已有 Cloudflare 账号和域名时,把隧道类型切到 **命名隧道**,填入连接器令牌、公网域名与本机转发端口,即可获得重启后不变的固定地址(令牌只存私有目录、只经环境变量传给 cloudflared)。步骤见 [Cloudflare 命名隧道](docs/CLOUDFLARE_TUNNEL.md)。
|
|
190
215
|
|
|
@@ -193,7 +218,7 @@ dsh plugin --profile web add dshmarket
|
|
|
193
218
|
<details>
|
|
194
219
|
<summary>远程通知、服务器运维与安全限制</summary>
|
|
195
220
|
|
|
196
|
-
>
|
|
221
|
+
> **远程通知说明**:Android 任务提醒使用页面/SSE 路径,须保持 App 的 WebView 存活;[iPhone/iPad 网页推送](docs/WEB_PUSH.md)则由具备能力的 Safari 主屏幕 App 主动启用,不依赖页面一直打开。两者都需要电脑端 DSH 运行,通知可能受网络、专注模式和系统调度影响,不是保证送达的警报服务。独立配置的 dsh-ping 等通道不受影响。
|
|
197
222
|
|
|
198
223
|
Funnel 的运行组件把公开监听生命周期绑定到父进程和受限控制通道;父进程退出、控制通道关闭或显式停止时会结束当前代次并清理资源。中国大陆 VPS 上的未备案域名可能被云厂商拦截,此时可使用公网 IPv4 模式。插件会校验按需下载的固定版本组件;本机托管的配置与程序保存在 `$DSH_HOME/mobile-access/`,可在面板中清理。VPS 侧的文件须按自建连接指南单独清理。
|
|
199
224
|
|
|
@@ -207,11 +232,11 @@ Funnel 的运行组件把公开监听生命周期绑定到父进程和受限控
|
|
|
207
232
|
|
|
208
233
|
### 实验中的 iroh 连接
|
|
209
234
|
|
|
210
|
-
|
|
235
|
+
从插件 0.7.0 起,[dsh-mobile-iroh](https://github.com/saya-ch/dsh-mobile-iroh) 的实验性传输已整合进本仓库,电脑端组件、Android 原生传输和完整版 APK 随本项目维护。独立仓库保留方案与原型记录;日常安装使用本仓库的插件和 App 即可,不必再维护两套 App。连接步骤、平台限制与排障以 [iroh 使用说明](docs/IROH.md) 为准。
|
|
211
236
|
|
|
212
237
|
## 扩展与自定义
|
|
213
238
|
|
|
214
|
-
在 DSH 对话里输入 `/mobile <需求>`,当前会话的 agent
|
|
239
|
+
在 DSH 对话里输入 `/mobile <需求>`,当前会话的 agent 会处理定制请求;文件修改完成后,自定义资源通常会在几秒内更新。例如:
|
|
215
240
|
|
|
216
241
|
```text
|
|
217
242
|
/mobile 把手机端做成老式终端的样子,让消息像终端输出一样逐行滚动
|
|
@@ -340,7 +365,8 @@ excludedClientModules:
|
|
|
340
365
|
| 方式 | 适合场景 | 说明 |
|
|
341
366
|
| --- | --- | --- |
|
|
342
367
|
| Android App | 日常使用 | 首次配对时分别提供局域网与远程入口;局域网自动发现,公开远程证书由系统验证,自签 FRP 入口由 App 固定 CA |
|
|
343
|
-
|
|
|
368
|
+
| iPhone/iPad Safari 或主屏幕 Web App(PWA) | iOS 日常访问与可选推送 | [用 Safari 配对并添加主屏幕图标](<#iphone-与-ipad主屏幕-web-apppwa>),无需原生 iOS App;具备能力的主屏幕 App 可开启[网页推送](docs/WEB_PUSH.md) |
|
|
369
|
+
| 手机浏览器 | 日常或跨平台访问 | 打开“移动访问”卡片显示的 HTTPS 地址;局域网私有证书可能需要手动确认,公开远程证书不应出现警告。绕过证书警告不等于满足网页推送条件 |
|
|
344
370
|
|
|
345
371
|
Android App 只是 Kotlin WebView 薄壳,不内置另一份网页;手机浏览器访问的是同一页面。开发者可在已认证移动地址后追加 `?frontend=stock` 诊断启动与布局行为;该入口跳过专用移动启动改写和模块选择,但仍可能加载客户端移动适配及已认证定制,并非不含插件的对照页。部分 API 操作可能被拒绝,不能代替正常移动入口。详见[皮肤与移动布局](docs/SKIN_COMPATIBILITY.md)。
|
|
346
372
|
|
|
@@ -401,6 +427,8 @@ flowchart LR
|
|
|
401
427
|
|
|
402
428
|
### 系统支持矩阵
|
|
403
429
|
|
|
430
|
+
此表说明**运行插件的电脑系统**,不是手机系统;iPhone/iPad 使用[浏览器/主屏幕入口](<#iphone-与-ipad主屏幕-web-apppwa>)。
|
|
431
|
+
|
|
404
432
|
| 通道 | Windows x64 | Linux x64 | Linux arm64 | macOS |
|
|
405
433
|
| --- | --- | --- | --- | --- |
|
|
406
434
|
| 局域网 | 支持(自动配防火墙) | 支持(防火墙自理) | 支持 | 支持 |
|
|
@@ -416,6 +444,14 @@ macOS 上局域网、cloudflared、自建 FRP 与自有反向代理可用;Funn
|
|
|
416
444
|
|
|
417
445
|
| DSH Mobile 插件 | 已验证的 DeepSeek Harness 版本与范围 |
|
|
418
446
|
| --- | --- |
|
|
447
|
+
| `0.8.0` | 网页推送的公共接口、设置、加密载荷与点击归属检查固定在 `0.2.1-rc.2 / rc.3`;通用启动与布局矩阵见 [CI](https://github.com/saya-ch/dsh-mobile/actions/workflows/ci.yml)。iOS 真机结果采信贡献者实测;浏览器检查不代表所有手机、第三方插件或公网线路已验收 |
|
|
448
|
+
|
|
449
|
+
<details>
|
|
450
|
+
<summary>较早版本的验证记录</summary>
|
|
451
|
+
|
|
452
|
+
| DSH Mobile 插件 | 已验证的 DeepSeek Harness 版本与范围 |
|
|
453
|
+
| --- | --- |
|
|
454
|
+
| `0.7.1` | `0.2.1-rc.3` 的隔离打包安装、手机侧栏与断点命中回归;另验证访问面板、配对有效期和组件清理 |
|
|
419
455
|
| `0.6.11` | `0.1.7-alpha.2`、`0.1.7-rc.1`、`0.1.7-rc.2`、`0.2.0-rc.1`、`0.2.0-rc.2`、`0.2.1-alpha.2`、`0.2.1-alpha.3` 的隔离打包浏览器 CI;`0.2.0-rc.2` 与 `0.2.1-alpha.3` 另通过真实历史分页、滚动位置保持和手动加载检查。浏览器检查不代表所有手机内核、第三方插件或公网线路已验收 |
|
|
420
456
|
| `0.6.12` | `0.2.1-rc.2` 的打包安装、移动启动、缺失 API 模拟、工作区实时读取、保留页面的断线恢复及移动设置;`0.2.0-rc.2` 搭配实际社区认证插件 `dsh-web-startup-auth@0.1.12` 的认证与资源回归。未将 Chromium 92 真机、任意认证插件或公网线路写成已验收 |
|
|
421
457
|
| `0.6.13` | `0.2.0-rc.2`、`0.2.1-rc.2` 的打包图文 HTTP 400 恢复、Host 拒绝护栏与错误提示回归;网关 408/431 分类、三类受限诊断及四种 Gateway 工厂接线通过本地测试。DSH 源码、iroh P2P 和 Android 原生代码不在本版范围 |
|
|
@@ -426,9 +462,6 @@ macOS 上局域网、cloudflared、自建 FRP 与自有反向代理可用;Funn
|
|
|
426
462
|
| `0.6.18` | `0.2.1-rc.2` 上的 18 项真实打包 Chromium 目录选择检查,含紧凑布局、目录创建和取消;本机官方 Desktop `0.2.1-rc.3` 已装入候选并启用局域网与 Cloudflare 网关 |
|
|
427
463
|
| `0.7.0` | 8 个 DSH 版本(`0.1.7-alpha.2`–`0.2.1-rc.2`)的打包浏览器 CI;Windows/Linux Gateway 与 iroh Host、Android 双 ABI 和兼容版包检查。设备与网络范围见 [iroh 说明](docs/IROH.md) |
|
|
428
464
|
|
|
429
|
-
<details>
|
|
430
|
-
<summary>历史版本验证记录</summary>
|
|
431
|
-
|
|
432
465
|
| DSH Mobile 插件 | 验证支持的 DeepSeek Harness 版本 |
|
|
433
466
|
| ----------------------------------------- | -------------------------------------------------------------- |
|
|
434
467
|
| `0.6.8` | `0.2.1-alpha.3` 的打包移动页面、旧 WebView API 模拟、WebSocket 工作区读取、移动设置、模块管理、侧栏及输入栏回归;身份修复另有真实 HTTP/TLS 与旧凭据升级测试。本机官方 Desktop `0.2.0-rc.2` 已加载该版本插件,原配对保留;不代表手机 5G 或全部第三方插件组合已验收 |
|