dsh-mobile 0.6.10 → 0.6.12
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 +25 -0
- package/CONTRIBUTORS.md +24 -6
- package/README.en.md +22 -19
- package/README.md +22 -19
- package/SECURITY.md +9 -0
- package/apps/mobile/README.md +71 -90
- package/apps/mobile/README.zh-CN.md +131 -0
- package/apps/mobile/release.json +3 -3
- package/docs/ATTACH_EXISTING_FRPS.en.md +1 -1
- package/docs/ATTACH_EXISTING_FRPS.md +1 -1
- package/docs/CADDY_MANAGED.en.md +7 -7
- package/docs/CADDY_MANAGED.md +7 -7
- package/docs/CLIENT_MODULES.en.md +2 -0
- package/docs/CLIENT_MODULES.md +2 -0
- package/docs/CLOUDFLARE_TUNNEL.en.md +1 -1
- package/docs/CLOUDFLARE_TUNNEL.md +1 -1
- package/docs/CPOLAR_SUBDOMAIN.en.md +1 -1
- package/docs/CPOLAR_SUBDOMAIN.md +1 -1
- package/docs/DSH_0.1.5_LAN.md +1 -1
- package/docs/EXTENSION_WORKERS.en.md +2 -2
- package/docs/EXTENSION_WORKERS.md +2 -2
- package/docs/MOBILE_COMPOSER_TOOLBAR.en.md +10 -4
- package/docs/MOBILE_COMPOSER_TOOLBAR.md +10 -4
- package/docs/README.md +4 -2
- package/docs/SELF_HOSTED_FRP.en.md +2 -2
- package/docs/SELF_HOSTED_FRP.md +2 -2
- package/docs/SELF_HOSTED_ORIGIN.en.md +3 -1
- package/docs/SELF_HOSTED_ORIGIN.md +3 -1
- package/docs/SKIN_COMPATIBILITY.en.md +1 -0
- package/docs/SKIN_COMPATIBILITY.md +1 -0
- package/docs/SLOW_CONNECTIONS.en.md +12 -0
- package/docs/SLOW_CONNECTIONS.md +12 -0
- package/lib/client.js +234 -37
- package/lib/client.js.map +1 -1
- package/lib/index.d.mts +34 -3
- package/lib/index.mjs +402 -209
- package/lib/index.mjs.map +1 -1
- package/lib/mobile-compat.js +5 -1
- package/lib/mobile-compat.js.map +1 -1
- package/package.json +6 -1
- package/packages/question-fixes/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
Notable changes are recorded here. GitHub Releases provide the downloadable packages and generated commit notes.
|
|
4
4
|
|
|
5
|
+
## 0.6.12 - 2026-10-18
|
|
6
|
+
|
|
7
|
+
- Send explicit non-navigation Fetch Metadata during the Gateway's internal DSH cookie exchange. This avoids the HTML navigation bounce produced by community authentication plugins without accepting arbitrary HTTP 200 pages, following redirects, or forwarding the upstream Cookie to the phone. Thanks @jamorzzz for [#230](https://github.com/saya-ch/dsh-mobile/issues/230).
|
|
8
|
+
- Separate invalid pairing/renewal/probe attempts from valid credentials behind a shared proxy. Invalid requests retain direct-peer limits; valid pairing secrets receive bounded admission, while renewal and probe budgets belong to the authenticated device. Keep operations accounted for until they settle even when the caller disconnects, and recheck credentials inside serialized writes. Forwarded IP headers remain untrusted. Thanks @Akiyuki1130 for [#231](https://github.com/saya-ch/dsh-mobile/issues/231).
|
|
9
|
+
- Extend the pre-boot compatibility script with identified missing array, string, object and structured-clone APIs. Add Chinese, English and Italian startup-failure feedback with explicit reload/wait actions when DSH has not rendered; mounted DSH and its own loader are not replaced, and no automatic reload is added.
|
|
10
|
+
- Identify unsupported class static-block syntax in DSH 0.2.1-rc.2's published frontend: Chromium 92 cannot parse that bundle. API shims and the existing old-engine advisory do not establish support for that engine. The feedback script itself targets Chromium 92; it does not transpile DSH. Thanks @yunyunlyk for the detailed engine and entry-mode comparison in [#232](https://github.com/saya-ch/dsh-mobile/issues/232).
|
|
11
|
+
- Add DSH 0.2.1-rc.2 to the packed-browser CI matrix and distinguish plugin-update SSE from conversation transport in troubleshooting. Android App 0.6.5 (build 81) remains independently published; no native change or new APK is part of this release.
|
|
12
|
+
|
|
13
|
+
## 0.6.11 - 2026-10-17
|
|
14
|
+
|
|
15
|
+
- Stabilize earlier-history loading by requiring fresh touch or wheel input before an automatic load near the top. DSH's own scroll-position compensation cannot re-arm loading; switching sessions or scroll containers withdraws the previous input. Track only touch contacts started on the owned scroller so another finger elsewhere cannot keep an old loading intent active.
|
|
16
|
+
- Keep the original localized Load earlier button visible and keyboard-accessible as a manual fallback, without the previous enabled/disabled collapse and expansion. Preserve usable button geometry and larger text. Thanks @chintoleung for [#228](https://github.com/saya-ch/dsh-mobile/issues/228) and [#229](https://github.com/saya-ch/dsh-mobile/pull/229); the author's five original commits are retained.
|
|
17
|
+
- Add bounded HTTP authentication and CSRF rejection diagnostics to the plugin log: rejection type/status, request method, a safe route or route category, credential presence/counts, normalized Origin and recognized fetch-site metadata. Credential values, query strings and arbitrary request paths are not logged.
|
|
18
|
+
- Rate-limit each Gateway's authorization and CSRF diagnostic categories separately, recording the first rejection immediately and aggregating suppressed repeats within a 30-second window. Keep the diagnostic callback from changing the HTTP rejection response if logging fails. This improves evidence collection; it does not repair an underlying 401/403 or cover every WebSocket/native-pairing failure.
|
|
19
|
+
- Retain @ayiejosh's original [#226](https://github.com/saya-ch/dsh-mobile/pull/226) contribution alongside maintainer privacy, rate-limit, cookie-counting and failure-containment corrections. Existing authorization, CSRF enforcement and remote-provider behavior remain unchanged; this plugin change does not require a new Android APK.
|
|
20
|
+
- Reorganize bilingual guides around installation, device settings and troubleshooting; clarify module selection, remote-channel prerequisites and the scope of compatibility checks. Link the independently released Android App 0.6.5 (build 81).
|
|
21
|
+
|
|
22
|
+
## Android 0.6.5 - 2026-10-17
|
|
23
|
+
|
|
24
|
+
- Keep an immediate Cancel connection action available during LAN/remote startup, saved-computer connection and pairing. Stop reconnecting keeps a usable DSH page; a blank or failed document returns to the device list. Preserve existing local pairings and prevent cancelled attempts or their queued retries from navigating later.
|
|
25
|
+
- End transient connection failures visibly instead of leaving a saved-computer row indefinitely at Connecting. Apply an overall 30-second LAN or 60-second remote budget through initial page loading; retries do not reset it. A cached unreachable status still permits a manual retry, and failure does not silently select a different computer.
|
|
26
|
+
- Retain the whale-girl connection background with a centered loading indicator and a cancellation button instead of a separate modal dialog. Reveal the trusted DSH page at its first visible commit while components continue loading; retain only a small cancellation button until usable controls appear. Keep the overall deadline during boot, discard stale readiness results and stop the completed document's loading timer instead of later reconnecting an already usable page.
|
|
27
|
+
- Request native HTTP cancellation and keep physical work accounted for until it exits. Computer-side pairing already accepted is not rolled back; a consumed one-time code must be replaced explicitly. Add Chinese, English and Italian cancellation and timeout copy. Thanks @Void-LifeStream for [#225](https://github.com/saya-ch/dsh-mobile/issues/225).
|
|
28
|
+
- Release build 81 with the existing package identity, permission list, pairing protocol and established signing certificate. Official installations can upgrade in place while retaining pairing data.
|
|
29
|
+
|
|
5
30
|
## 0.6.10 - 2026-10-16
|
|
6
31
|
|
|
7
32
|
- Preserve the first Funnel failure and its validated official authorization URL instead of replacing them with a later process-exit error. Discard queued events from the failed connection while allowing an explicit reconnect to start a new one. Failed resource cleanup remains visible and can be retried without discarding owned resources.
|
package/CONTRIBUTORS.md
CHANGED
|
@@ -1,8 +1,24 @@
|
|
|
1
1
|
# 贡献者 / Contributors
|
|
2
2
|
|
|
3
|
-
GitHub 的 [Contributors 图表](https://github.com/saya-ch/dsh-mobile/graphs/contributors) 按进入默认分支的提交自动统计,无法手动加入仅提交 issue 或 PR 提案的成员。本页按截至 2026-10-
|
|
3
|
+
GitHub 的 [Contributors 图表](https://github.com/saya-ch/dsh-mobile/graphs/contributors) 按进入默认分支的提交自动统计,无法手动加入仅提交 issue 或 PR 提案的成员。本页按截至 2026-10-18 的实际参与方式感谢社区成员;仓库维护者与自动依赖更新仍可在 GitHub 历史记录中查看。
|
|
4
4
|
|
|
5
|
-
GitHub's Contributors graph counts commits on the default branch; issue reports and PR proposals cannot be manually added to it. This page credits community members by how they contributed, through 2026-10-
|
|
5
|
+
GitHub's Contributors graph counts commits on the default branch; issue reports and PR proposals cannot be manually added to it. This page credits community members by how they contributed, through 2026-10-18. The repository maintainer and automated dependency updates remain visible in GitHub's history.
|
|
6
|
+
|
|
7
|
+
## 0.6.12 问题定位 / Issue findings for 0.6.12
|
|
8
|
+
|
|
9
|
+
感谢 [@jamorzzz](https://github.com/jamorzzz) 在 [#230](https://github.com/saya-ch/dsh-mobile/issues/230) 提供社区认证插件的导航响应与网关握手分析,[@Akiyuki1130](https://github.com/Akiyuki1130) 在 [#231](https://github.com/saya-ch/dsh-mobile/issues/231) 复现共享代理下的匿名限流耗尽,以及 [@yunyunlyk](https://github.com/yunyunlyk) 在 [#232](https://github.com/saya-ch/dsh-mobile/issues/232) 提供具体华为内核版本与 App/浏览器对照。这些报告分别促成认证握手、凭据限流和旧内核启动反馈改进;未将报告者真机写成已完成修复验收。
|
|
10
|
+
|
|
11
|
+
Thanks [@jamorzzz](https://github.com/jamorzzz) for the community-auth navigation and Gateway exchange analysis in [#230](https://github.com/saya-ch/dsh-mobile/issues/230), [@Akiyuki1130](https://github.com/Akiyuki1130) for reproducing anonymous rate-limit exhaustion behind a shared proxy in [#231](https://github.com/saya-ch/dsh-mobile/issues/231), and [@yunyunlyk](https://github.com/yunyunlyk) for the exact Huawei engine version and App/browser comparison in [#232](https://github.com/saya-ch/dsh-mobile/issues/232). These reports informed authentication, credential-admission and old-engine startup feedback improvements; they are not recorded as completed acceptance on the reporters' devices.
|
|
12
|
+
|
|
13
|
+
## 0.6.11 代码贡献 / Code contributions in 0.6.11
|
|
14
|
+
|
|
15
|
+
[@ayiejosh](https://github.com/ayiejosh) 的 [#226](https://github.com/saya-ch/dsh-mobile/pull/226) 为 HTTP 认证和 CSRF 拒绝添加诊断记录。0.6.11 保留原作者提交 [`115b174`](https://github.com/saya-ch/dsh-mobile/commit/115b174d65c5bcb33f96f671e83dcb15db461e3f),并追加隐私、限频、统计和错误隔离修正。
|
|
16
|
+
|
|
17
|
+
[@ayiejosh](https://github.com/ayiejosh)'s [#226](https://github.com/saya-ch/dsh-mobile/pull/226) adds diagnostic records for HTTP authentication and CSRF rejections. Version 0.6.11 retains author commit [`115b174`](https://github.com/saya-ch/dsh-mobile/commit/115b174d65c5bcb33f96f671e83dcb15db461e3f) alongside privacy, rate-limit, counting and failure-containment corrections.
|
|
18
|
+
|
|
19
|
+
[@chintoleung](https://github.com/chintoleung) 在 [#228](https://github.com/saya-ch/dsh-mobile/issues/228) 定位历史加载时的滚动抖动,并在 [#229](https://github.com/saya-ch/dsh-mobile/pull/229) 提供加载行尺寸、自动加载输入判定及浏览器回归测试。0.6.11 保留原作者的五个提交,包括最终修正 [`675154d`](https://github.com/saya-ch/dsh-mobile/commit/675154d5739c3a2de663e7c35da6ba8657017a5e),并追加维护者修正。
|
|
20
|
+
|
|
21
|
+
[@chintoleung](https://github.com/chintoleung) traced history-loading scroll oscillation in [#228](https://github.com/saya-ch/dsh-mobile/issues/228) and contributed loader sizing, input-aware auto-loading and browser regression checks in [#229](https://github.com/saya-ch/dsh-mobile/pull/229). Version 0.6.11 retains the author's five commits, including final correction [`675154d`](https://github.com/saya-ch/dsh-mobile/commit/675154d5739c3a2de663e7c35da6ba8657017a5e), alongside maintainer corrections.
|
|
6
22
|
|
|
7
23
|
## 0.6.7 代码贡献 / Code contributions in 0.6.7
|
|
8
24
|
|
|
@@ -28,8 +44,8 @@ GitHub's Contributors graph counts commits on the default branch; issue reports
|
|
|
28
44
|
| --- | --- |
|
|
29
45
|
| [@1624318455](https://github.com/1624318455) | [#93](https://github.com/saya-ch/dsh-mobile/pull/93) |
|
|
30
46
|
| [@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) |
|
|
31
|
-
| [@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) |
|
|
32
|
-
| [@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) |
|
|
47
|
+
| [@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) |
|
|
48
|
+
| [@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) |
|
|
33
49
|
| [@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) |
|
|
34
50
|
| [@fengfanfan-max](https://github.com/fengfanfan-max) | [#143](https://github.com/saya-ch/dsh-mobile/pull/143) |
|
|
35
51
|
| [@fqf060420](https://github.com/fqf060420) | [#170](https://github.com/saya-ch/dsh-mobile/pull/170) |
|
|
@@ -64,6 +80,8 @@ GitHub's Contributors graph counts commits on the default branch; issue reports
|
|
|
64
80
|
|
|
65
81
|
## 问题反馈与建议 / Issue reports and ideas
|
|
66
82
|
|
|
83
|
+
感谢 [@Void-LifeStream](https://github.com/Void-LifeStream) 在 [#225](https://github.com/saya-ch/dsh-mobile/issues/225) 提供不可达局域网连接长期停留在等待界面的详细计时与复现,促成 Android 取消连接和超时收尾改进。 / Thanks [@Void-LifeStream](https://github.com/Void-LifeStream) for the timed reproduction of an unreachable LAN connection remaining on its waiting screen in [#225](https://github.com/saya-ch/dsh-mobile/issues/225), informing Android cancellation and timeout handling.
|
|
84
|
+
|
|
67
85
|
感谢 [@Anyways366](https://github.com/Anyways366) 在 [#223](https://github.com/saya-ch/dsh-mobile/issues/223) 提供 Funnel 错误覆盖和诊断信息缺失的详细复现与修正建议。 / Thanks [@Anyways366](https://github.com/Anyways366) for the detailed Funnel error-overwrite and missing-diagnostic reproduction and proposed corrections in [#223](https://github.com/saya-ch/dsh-mobile/issues/223).
|
|
68
86
|
|
|
69
87
|
感谢 [@Yurzi](https://github.com/Yurzi) 在 [#213](https://github.com/saya-ch/dsh-mobile/issues/213) 报告不同电脑的远程配对记录互相覆盖。 / Thanks [@Yurzi](https://github.com/Yurzi) for reporting remote pairing records on different computers overwriting one another in [#213](https://github.com/saya-ch/dsh-mobile/issues/213).
|
|
@@ -87,7 +105,7 @@ Thanks [@xhwxt](https://github.com/xhwxt) for the document-picker proposal in [#
|
|
|
87
105
|
| [@BrainZombie](https://github.com/BrainZombie) | [#128](https://github.com/saya-ch/dsh-mobile/issues/128) |
|
|
88
106
|
| [@CESAEREE](https://github.com/CESAEREE) | [#1](https://github.com/saya-ch/dsh-mobile/issues/1) |
|
|
89
107
|
| [@CharlesLueng](https://github.com/CharlesLueng) | [#68](https://github.com/saya-ch/dsh-mobile/issues/68) |
|
|
90
|
-
| [@chintoleung](https://github.com/chintoleung) | [#103](https://github.com/saya-ch/dsh-mobile/issues/103), [#166](https://github.com/saya-ch/dsh-mobile/issues/166), [#189](https://github.com/saya-ch/dsh-mobile/issues/189) |
|
|
108
|
+
| [@chintoleung](https://github.com/chintoleung) | [#103](https://github.com/saya-ch/dsh-mobile/issues/103), [#166](https://github.com/saya-ch/dsh-mobile/issues/166), [#189](https://github.com/saya-ch/dsh-mobile/issues/189), [#228](https://github.com/saya-ch/dsh-mobile/issues/228) |
|
|
91
109
|
| [@chmzs](https://github.com/chmzs) | [#73](https://github.com/saya-ch/dsh-mobile/issues/73) |
|
|
92
110
|
| [@gjzbbs](https://github.com/gjzbbs) | [#123](https://github.com/saya-ch/dsh-mobile/issues/123) |
|
|
93
111
|
| [@fishdivinity](https://github.com/fishdivinity) | [#202](https://github.com/saya-ch/dsh-mobile/issues/202) |
|
|
@@ -118,7 +136,7 @@ Thanks [@xhwxt](https://github.com/xhwxt) for the document-picker proposal in [#
|
|
|
118
136
|
| [@sortjiajun](https://github.com/sortjiajun) | [#90](https://github.com/saya-ch/dsh-mobile/issues/90) |
|
|
119
137
|
| [@StrawberryAO](https://github.com/StrawberryAO) | [#39](https://github.com/saya-ch/dsh-mobile/issues/39) |
|
|
120
138
|
| [@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) |
|
|
121
|
-
| [@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) |
|
|
139
|
+
| [@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) |
|
|
122
140
|
| [@WalkerJay666](https://github.com/WalkerJay666) | [#201](https://github.com/saya-ch/dsh-mobile/issues/201) |
|
|
123
141
|
| [@up-and-down-0618](https://github.com/up-and-down-0618) | [#115](https://github.com/saya-ch/dsh-mobile/issues/115) |
|
|
124
142
|
| [@taki-ohh](https://github.com/taki-ohh) | [#19](https://github.com/saya-ch/dsh-mobile/issues/19) |
|
package/README.en.md
CHANGED
|
@@ -24,21 +24,22 @@
|
|
|
24
24
|
<a href="#third-party-plugin-compatibility">Third-party plugins</a> ·
|
|
25
25
|
<a href="#security">Security</a> ·
|
|
26
26
|
<a href="#compatibility">Compatibility</a> ·
|
|
27
|
+
<a href="docs/README.md">Documentation</a> ·
|
|
27
28
|
<a href="#contributors">Contributors</a> ·
|
|
28
|
-
<a href="https://github.com/saya-ch/dsh-mobile/releases/tag/v0.6.
|
|
29
|
+
<a href="https://github.com/saya-ch/dsh-mobile/releases/tag/v0.6.12">Release notes</a> ·
|
|
29
30
|
<a href="README.md">简体中文</a>
|
|
30
31
|
</p>
|
|
31
32
|
|
|
32
33
|
> DSH Mobile is a DeepSeek Harness community plugin; the native app supports Android only.
|
|
33
34
|
>
|
|
34
|
-
> **Current stable release: 0.6.
|
|
35
|
+
> **Current stable release: 0.6.12**. Fix page 502 errors with community authentication and pairing/renewal limits behind shared proxies; add missing old-engine APIs and actionable startup feedback. Android App **0.6.5** is unchanged and needs no matching update. [Release notes and downloads](https://github.com/saya-ch/dsh-mobile/releases/tag/v0.6.12) · [Full changelog](CHANGELOG.md).
|
|
35
36
|
>
|
|
36
37
|
> **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).
|
|
37
38
|
|
|
38
39
|
<p align="center">
|
|
39
|
-
<a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.6.
|
|
40
|
-
<a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.6.
|
|
41
|
-
<sub><a href="https://github.com/saya-ch/dsh-mobile/releases/tag/android-v0.6.
|
|
40
|
+
<a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.6.5/dsh-mobile-android-v0.6.5.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>
|
|
41
|
+
<a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.6.5/dsh-mobile-android-v0.6.5.apk"><strong>Download Android app 0.6.5</strong></a><br>
|
|
42
|
+
<sub><a href="https://github.com/saya-ch/dsh-mobile/releases/tag/android-v0.6.5">Release notes and checksums</a></sub>
|
|
42
43
|
</p>
|
|
43
44
|
|
|
44
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. Both routes reach the same sessions, Workspaces, messages, and tools. The computer manages their switches and pairing authorizations separately; the Android app lists paired computers together. The plugin does not modify DeepSeek Harness source.
|
|
@@ -226,7 +227,7 @@ Extension manifests, scripts, styles, and assets are revisioned. When the plugin
|
|
|
226
227
|
|
|
227
228
|
An extension action's `input` may use a callable Schemastery schema such as `api.schema.object(...)` or an adapter with `parse(value)`; mobile `api.host.invoke()` sends JSON explicitly, and the input is validated and normalized before the computer-side action runs.
|
|
228
229
|
|
|
229
|
-
Prefer DSH's built-in file upload for attachments. If an extension must simulate a drop, its `dataTransfer` needs iterable `items` (file items) as well as `files`; a `files` array alone is insufficient. Some WebViews have incomplete native drag-and-drop constructors; see the [plugin's file-delivery implementation](src/native-mobile.ts) for compatibility handling. An accepted `dragover` or successfully dispatched event does not confirm attachment delivery: check the composer's attachments and previews.
|
|
230
|
+
Prefer DSH's built-in file upload for attachments. If an extension must simulate a drop, its `dataTransfer` needs iterable `items` (file items) as well as `files`; a `files` array alone is insufficient. Some WebViews have incomplete native drag-and-drop constructors; see the [plugin's file-delivery implementation](https://github.com/saya-ch/dsh-mobile/blob/main/src/native-mobile.ts) for compatibility handling. An accepted `dragover` or successfully dispatched event does not confirm attachment delivery: check the composer's attachments and previews.
|
|
230
231
|
|
|
231
232
|
The 0.6.3 release adds optional [Worker execution](docs/EXTENSION_WORKERS.en.md) for trusted local JavaScript hosts. It is disabled by default, selectable by extension, and recovers explicitly without replaying interrupted actions. It is not a permission sandbox and does not require a matching App version.
|
|
232
233
|
|
|
@@ -335,9 +336,11 @@ Selection priority is device choice → computer defaults → plugin configurati
|
|
|
335
336
|
|
|
336
337
|
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).
|
|
337
338
|
|
|
338
|
-
|
|
339
|
+
The dedicated mobile page synchronously loads the authenticated, same-origin `/mobile-access/compat.js` before the first DSH boot script. This bundled compatibility layer supplies missing `Iterator` / Iterator helpers, `Promise.withResolvers` and `AbortSignal.any`. It uses feature detection to preserve or repair native implementations, needs no CDN, and does not weaken CSP. The desktop and `?frontend=stock` pages do not load this gateway script. On WebViews that support document-start injection, the Android App also supplies `Promise.withResolvers` early for the paired exact Origin.
|
|
339
340
|
|
|
340
|
-
|
|
341
|
+
**Old-engine limits**: API shims cannot repair JavaScript syntax an engine cannot parse. The published **DSH 0.2.1-rc.2** frontend contains class static blocks, which Chromium **92** cannot parse. This syntax became enabled by default in Chrome 94, but that does not establish full DSH compatibility on 94. [V8 announcement](https://v8.dev/blog/v8-release-94). The App's below-100 advisory is not a compatibility guarantee; choosing Continue does not make the current DSH runnable. If system WebView cannot be updated, use a phone browser already confirmed to work with the computer's mobile address, without clearing existing App pairings.
|
|
342
|
+
|
|
343
|
+
**Plugin 0.6.12** adds identified missing array, string, object and structured-clone APIs, plus startup-failure feedback with Reload page and Keep waiting actions when DSH has not rendered. It does not transpile DSH or reload automatically; acceptance on the physical Huawei Chromium 92 App remains unverified. Reports should include DSH/plugin/App and WebView versions, entry mode and the first redacted console error, never tokens or complete pairing URLs.
|
|
341
344
|
|
|
342
345
|
> **Community client (unofficial)**: [WeChat Mini-Program client](https://github.com/StrawberryAO/dsh-mobile-minapp)
|
|
343
346
|
> A native WeChat Mini-Program that reuses the Mobile Access pairing and Remote stream protocol (requires dsh-mobile ≥ 0.3.8).
|
|
@@ -354,7 +357,7 @@ flowchart LR
|
|
|
354
357
|
Gateway -->|"loopback proxy"| DSH["Stock DSH Web and Host"]
|
|
355
358
|
```
|
|
356
359
|
|
|
357
|
-
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`.
|
|
360
|
+
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`. The plugin does not rewrite source or webpage files in the DeepSeek Harness installation. Its mobile gateway serves the startup compatibility layer and dedicated layout per request; installation and removal use the plugin mechanism. The upstream DSH Web port defaults to 3080 and is configurable through `dsh web --port`.
|
|
358
361
|
|
|
359
362
|
## Security
|
|
360
363
|
|
|
@@ -385,9 +388,7 @@ See [SECURITY.md](SECURITY.md).
|
|
|
385
388
|
|
|
386
389
|
## Compatibility
|
|
387
390
|
|
|
388
|
-
The
|
|
389
|
-
|
|
390
|
-
Version 0.5.2 keeps the DSH host peer names but does not block installation by DSH version. New releases still need the source-contract and paired-browser checks below; an unlisted version is not automatically verified.
|
|
391
|
+
The plugin retains DSH host peer declarations without rejecting installation or startup solely by DSH version. If mobile access breaks after a DSH update, update the plugin and check the verified scope below. An installable version does not establish that every feature is compatible. Release history lives in [CHANGELOG.md](CHANGELOG.md).
|
|
391
392
|
|
|
392
393
|
### OS support matrix
|
|
393
394
|
|
|
@@ -403,6 +404,14 @@ Version 0.5.2 keeps the DSH host peer names but does not block installation by D
|
|
|
403
404
|
|
|
404
405
|
On macOS, local network, cloudflared, self-hosted FRP and the own reverse proxy work; Funnel and cpolar have no managed macOS component yet. The diagnostics firewall check currently covers Windows only and reports “not applicable” elsewhere.
|
|
405
406
|
|
|
407
|
+
| DSH Mobile plugin | Verified DeepSeek Harness version |
|
|
408
|
+
| --- | --- |
|
|
409
|
+
| `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 |
|
|
410
|
+
| `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 |
|
|
411
|
+
|
|
412
|
+
<details>
|
|
413
|
+
<summary>Historical version checks</summary>
|
|
414
|
+
|
|
406
415
|
| DSH Mobile plugin | Verified DeepSeek Harness version |
|
|
407
416
|
| --- | --- |
|
|
408
417
|
| `0.5.5` | `0.1.7-alpha.2`, `0.1.7-rc.1`, `0.1.7-rc.2`, `0.2.0-rc.1`, and `0.2.0-rc.2` (npm installation, isolated pairing, mobile-page boot, and WebSocket Workspace baseline) |
|
|
@@ -413,12 +422,6 @@ On macOS, local network, cloudflared, self-hosted FRP and the own reverse proxy
|
|
|
413
422
|
| `0.6.5` | Packed module-management and mobile-settings regressions on `0.2.0-rc.2` and `0.2.1-alpha.2`; additionally Windows cpolar extraction and populated Trajectory layout with published `maid-atelier` 0.1.7. This does not establish acceptance of every third-party skin or reporter device |
|
|
414
423
|
| `0.6.6` | Packed attachment intake and decoded-preview regressions on `0.2.0-rc.2` and `0.2.1-alpha.2`, covering multiple images, cancellation, late results and superseded requests. Android system-picker changes are released independently, not through the npm update |
|
|
415
424
|
| `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 |
|
|
416
|
-
|
|
417
|
-
<details>
|
|
418
|
-
<summary>Historical version checks</summary>
|
|
419
|
-
|
|
420
|
-
| DSH Mobile plugin | Verified DeepSeek Harness version |
|
|
421
|
-
| --- | --- |
|
|
422
425
|
| `0.5.4` | `0.1.7-alpha.2`, `0.1.7-rc.1`, `0.1.7-rc.2`, `0.2.0-rc.1`, and `0.2.0-rc.2` (npm installation, isolated pairing, mobile-page boot, and WebSocket Workspace baseline) |
|
|
423
426
|
| `0.5.3` | `0.1.7-alpha.2`, `0.1.7-rc.1`, `0.1.7-rc.2`, `0.2.0-rc.1`, and `0.2.0-rc.2` (source contract, npm installation, isolated pairing, mobile-page boot, and WebSocket Workspace baseline) |
|
|
424
427
|
| `0.5.2` | `0.1.7-alpha.2`, `0.1.7-rc.1`, `0.1.7-rc.2`, and `0.2.0-rc.1` (carried forward from earlier verification); `0.2.0-rc.2` (source contract, isolated pairing, mobile-page boot, and WebSocket Workspace baseline) |
|
|
@@ -477,6 +480,6 @@ npm ci
|
|
|
477
480
|
npm run verify
|
|
478
481
|
```
|
|
479
482
|
|
|
480
|
-
Use `npm run check:docs` for quick documentation checks. [CONTRIBUTING.md](CONTRIBUTING.md) covers behavior-specific browser tests, isolated packed DSH acceptance, captures and release steps; the [Android manual](apps/mobile/README.md#build) covers app builds. Do not substitute real user profiles or official app data for test fixtures.
|
|
483
|
+
Use `npm run check:docs` for quick documentation checks. [CONTRIBUTING.md](https://github.com/saya-ch/dsh-mobile/blob/main/CONTRIBUTING.md) covers behavior-specific browser tests, isolated packed DSH acceptance, captures and release steps; the [Android manual](apps/mobile/README.md#build) covers app builds. Do not substitute real user profiles or official app data for test fixtures.
|
|
481
484
|
|
|
482
485
|
Licensed under [Apache-2.0](LICENSE).
|
package/README.md
CHANGED
|
@@ -24,21 +24,22 @@
|
|
|
24
24
|
<a href="#第三方插件适配">第三方插件适配</a> ·
|
|
25
25
|
<a href="#安全">安全</a> ·
|
|
26
26
|
<a href="#兼容性">兼容性</a> ·
|
|
27
|
+
<a href="docs/README.md">文档</a> ·
|
|
27
28
|
<a href="#贡献者">贡献者</a> ·
|
|
28
|
-
<a href="https://github.com/saya-ch/dsh-mobile/releases/tag/v0.6.
|
|
29
|
+
<a href="https://github.com/saya-ch/dsh-mobile/releases/tag/v0.6.12">更新记录</a> ·
|
|
29
30
|
<a href="README.en.md">English</a>
|
|
30
31
|
</p>
|
|
31
32
|
|
|
32
33
|
> DSH Mobile 是 DeepSeek Harness 社区插件,原生 App 仅支持 Android。
|
|
33
34
|
>
|
|
34
|
-
> **当前正式版本:0.6.
|
|
35
|
+
> **当前正式版本:0.6.12**。修复社区认证插件下的页面 502、共享代理下的配对与续期限流问题,并补充旧内核 API 和启动失败提示。Android App **0.6.5** 保持不变,无需同步升级。[更新与下载](https://github.com/saya-ch/dsh-mobile/releases/tag/v0.6.12) · [完整更新记录](CHANGELOG.md)。
|
|
35
36
|
>
|
|
36
37
|
> **版本说明**:自插件 **0.6.2** 起,Android App 与插件独立编号、独立发布,版本号无需一致;插件升级不代表 App 需要同步升级。[兼容说明](#兼容性)。
|
|
37
38
|
|
|
38
39
|
<p align="center">
|
|
39
|
-
<a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.6.
|
|
40
|
-
<a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.6.
|
|
41
|
-
<sub><a href="https://github.com/saya-ch/dsh-mobile/releases/tag/android-v0.6.
|
|
40
|
+
<a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.6.5/dsh-mobile-android-v0.6.5.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>
|
|
41
|
+
<a href="https://github.com/saya-ch/dsh-mobile/releases/download/android-v0.6.5/dsh-mobile-android-v0.6.5.apk"><strong>下载 Android App 0.6.5</strong></a><br>
|
|
42
|
+
<sub><a href="https://github.com/saya-ch/dsh-mobile/releases/tag/android-v0.6.5">版本说明与校验文件</a></sub>
|
|
42
43
|
</p>
|
|
43
44
|
|
|
44
45
|
DSH Mobile 是一个 DeepSeek Harness 插件,让手机浏览器或 Android App 通过局域网,或可选的 Tailscale Funnel、cpolar、cloudflared、自建 FRP 或自有反向代理远程通道连接电脑,继续使用同一份会话、工作区、消息和工具。电脑端分别启停局域网与远程访问、分别管理配对授权;Android App 统一显示已配对电脑。插件不修改 DeepSeek Harness 源码。
|
|
@@ -226,7 +227,7 @@ Funnel 的运行组件把公开监听生命周期绑定到父进程和受限控
|
|
|
226
227
|
|
|
227
228
|
扩展动作的 `input` 可以直接使用 `api.schema.object(...)` 等 Schemastery schema,也可以使用带 `parse(value)` 的适配器;手机端 `api.host.invoke()` 会按 JSON 请求发送,输入会在电脑端动作执行前完成校验和规范化。
|
|
228
229
|
|
|
229
|
-
附件功能优先复用 DSH 自带的文件上传。扩展若需模拟拖放,`dataTransfer` 除了 `files`,还须提供可迭代的 `items`(文件项列表),不能只拼一个 `files` 数组。部分 WebView 的原生拖放构造不完整,兼容处理可参考[插件内的文件投递实现](src/native-mobile.ts);`dragover` 接受或事件派发成功不代表附件已加入,应检查输入框中的附件与预览。
|
|
230
|
+
附件功能优先复用 DSH 自带的文件上传。扩展若需模拟拖放,`dataTransfer` 除了 `files`,还须提供可迭代的 `items`(文件项列表),不能只拼一个 `files` 数组。部分 WebView 的原生拖放构造不完整,兼容处理可参考[插件内的文件投递实现](https://github.com/saya-ch/dsh-mobile/blob/main/src/native-mobile.ts);`dragover` 接受或事件派发成功不代表附件已加入,应检查输入框中的附件与预览。
|
|
230
231
|
|
|
231
232
|
0.6.3 新增可选的 [Worker 执行模式](docs/EXTENSION_WORKERS.md),用于约束可信本地扩展的 JavaScript 阻塞;默认关闭,按扩展选择,故障后显式恢复,不自动重放操作。这不是权限沙箱,也不要求 App 同步版本。
|
|
232
233
|
|
|
@@ -335,9 +336,11 @@ excludedClientModules:
|
|
|
335
336
|
|
|
336
337
|
Android App 只是 Kotlin WebView 薄壳,不内置另一份网页;手机浏览器访问的是同一页面。开发者可在已认证移动地址后追加 `?frontend=stock` 诊断启动与布局行为;该入口跳过专用移动启动改写和模块选择,但仍可能加载客户端移动适配及已认证定制,并非不含插件的对照页。部分 API 操作可能被拒绝,不能代替正常移动入口。详见[皮肤与移动布局](docs/SKIN_COMPATIBILITY.md)。
|
|
337
338
|
|
|
338
|
-
|
|
339
|
+
专用移动页面会在 DSH 的第一个启动脚本之前,同步加载经网关鉴权的同源 `/mobile-access/compat.js`,为缺少 `Iterator` / Iterator helpers、`Promise.withResolvers` 和 `AbortSignal.any` 的 WebView 提供随插件打包的兼容实现。兼容层按能力检测保留或修正原生实现,不依赖 CDN,也不会放宽 CSP;桌面页面与 `?frontend=stock` 页面不会加载这个网关脚本。Android App 还会在支持 document-start 注入的 WebView 中,为配对的精确 Origin 提前补齐 `Promise.withResolvers`。
|
|
339
340
|
|
|
340
|
-
|
|
341
|
+
**旧内核限制**:API 兼容实现不能修复内核无法解析的 JavaScript 语法。DSH **0.2.1-rc.2** 的正式前端包含 class static blocks,Chromium **92** 无法解析;该语法从 Chrome 94 默认可用,但这不代表 94 已通过整个 DSH 的兼容验收。[V8 说明](https://v8.dev/blog/v8-release-94)。App 的“内核低于 100”提醒只是建议,点击继续不代表当前 DSH 可以运行。若系统 WebView 无法更新,可使用已确认正常的手机浏览器访问电脑端提供的移动地址,无需清除原有 App 配对。
|
|
342
|
+
|
|
343
|
+
插件 **0.6.12** 补齐已识别的数组、字符串、对象和结构化克隆 API,并在 DSH 尚未显示时提供启动失败说明、“重新载入页面”和“继续等待”。它不转译 DSH,也不自动刷新页面;华为 Chromium 92 的实际 App 尚未完成验收。反馈问题时请提供 DSH/插件/App 与 WebView 版本、进入方式和脱敏后的首个控制台错误,不要发送令牌或完整配对地址。
|
|
341
344
|
|
|
342
345
|
> **社区客户端(非官方)**:[微信小程序客户端](https://github.com/StrawberryAO/dsh-mobile-minapp)
|
|
343
346
|
> 原生微信小程序实现,复用「移动访问」的配对与 Remote 流协议(需 dsh-mobile ≥ 0.3.8)。
|
|
@@ -355,7 +358,7 @@ flowchart LR
|
|
|
355
358
|
DSH -->|"同一工作区、会话和事件流"| Phone
|
|
356
359
|
```
|
|
357
360
|
|
|
358
|
-
插件包含三层:Host face 负责发现、配对、HTTPS、回环代理和扩展注册表;Client face 提供独立的移动布局与扩展 SDK;Android App 提供受限的原生 Bridge。Bridge 使用 `androidx.webkit` WebMessage,每条消息都校验精确顶层 Origin 和主 Frame,并限制消息大小;不使用 `addJavascriptInterface
|
|
361
|
+
插件包含三层:Host face 负责发现、配对、HTTPS、回环代理和扩展注册表;Client face 提供独立的移动布局与扩展 SDK;Android App 提供受限的原生 Bridge。Bridge 使用 `androidx.webkit` WebMessage,每条消息都校验精确顶层 Origin 和主 Frame,并限制消息大小;不使用 `addJavascriptInterface`。插件不改写 DeepSeek Harness 安装目录中的源码或网页文件;移动网关按请求提供启动兼容层与专用布局,安装和卸载通过插件机制完成。DSH Web 上游端口默认为 3080,可通过 `dsh web --port` 修改。
|
|
359
362
|
|
|
360
363
|
## 安全
|
|
361
364
|
|
|
@@ -386,9 +389,7 @@ flowchart LR
|
|
|
386
389
|
|
|
387
390
|
## 兼容性
|
|
388
391
|
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
0.5.2 保留 DSH 宿主依赖名称,但不按 DSH 版本号拦截安装。新版本仍需经过下方的源码契约与配对启动检查;不在表中的版本不代表已验证。
|
|
392
|
+
插件保留 DSH 宿主依赖声明,但不会仅凭 DSH 版本号拦截安装或启动。升级 DSH 后若遇到移动端异常,请先更新插件并核对下方验证范围;版本号可安装不等于所有功能自动兼容。历史更新见 [CHANGELOG.md](CHANGELOG.md)。
|
|
392
393
|
|
|
393
394
|
### 系统支持矩阵
|
|
394
395
|
|
|
@@ -404,6 +405,14 @@ flowchart LR
|
|
|
404
405
|
|
|
405
406
|
macOS 上局域网、cloudflared、自建 FRP 与自有反向代理可用;Funnel 与 cpolar 暂未提供 macOS 组件。诊断页的防火墙检查目前仅覆盖 Windows,其他系统显示“不适用”。
|
|
406
407
|
|
|
408
|
+
| DSH Mobile 插件 | 已验证的 DeepSeek Harness 版本与范围 |
|
|
409
|
+
| --- | --- |
|
|
410
|
+
| `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` 另通过真实历史分页、滚动位置保持和手动加载检查。浏览器检查不代表所有手机内核、第三方插件或公网线路已验收 |
|
|
411
|
+
| `0.6.12` | `0.2.1-rc.2` 的打包安装、移动启动、缺失 API 模拟、工作区实时读取、保留页面的断线恢复及移动设置;`0.2.0-rc.2` 搭配实际社区认证插件 `dsh-web-startup-auth@0.1.12` 的认证与资源回归。未将 Chromium 92 真机、任意认证插件或公网线路写成已验收 |
|
|
412
|
+
|
|
413
|
+
<details>
|
|
414
|
+
<summary>历史版本验证记录</summary>
|
|
415
|
+
|
|
407
416
|
| DSH Mobile 插件 | 验证支持的 DeepSeek Harness 版本 |
|
|
408
417
|
| ----------------------------------------- | -------------------------------------------------------------- |
|
|
409
418
|
| `0.5.5` | `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`(npm 打包安装、隔离配对、移动页面启动及 WebSocket 工作区读取) |
|
|
@@ -414,12 +423,6 @@ macOS 上局域网、cloudflared、自建 FRP 与自有反向代理可用;Funn
|
|
|
414
423
|
| `0.6.5` | `0.2.0-rc.2`、`0.2.1-alpha.2` 的打包模块管理与移动设置回归;另验证 Windows cpolar 解包及正式 `maid-atelier` 0.1.7 下有内容轨迹的布局修复。不代表全部第三方皮肤或报告者设备已验收 |
|
|
415
424
|
| `0.6.6` | `0.2.0-rc.2`、`0.2.1-alpha.2` 的打包附件接收与图片预览回归,覆盖多图、取消、迟到结果和旧请求;Android 系统选择器改进独立发布,不包含在 npm 更新中 |
|
|
416
425
|
| `0.6.8` | `0.2.1-alpha.3` 的打包移动页面、旧 WebView API 模拟、WebSocket 工作区读取、移动设置、模块管理、侧栏及输入栏回归;身份修复另有真实 HTTP/TLS 与旧凭据升级测试。本机官方 Desktop `0.2.0-rc.2` 已加载该版本插件,原配对保留;不代表手机 5G 或全部第三方插件组合已验收 |
|
|
417
|
-
|
|
418
|
-
<details>
|
|
419
|
-
<summary>历史版本验证记录</summary>
|
|
420
|
-
|
|
421
|
-
| DSH Mobile 插件 | 验证支持的 DeepSeek Harness 版本 |
|
|
422
|
-
| --- | --- |
|
|
423
426
|
| `0.5.4` | `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`(npm 打包安装、隔离配对、移动页面启动及 WebSocket 工作区读取) |
|
|
424
427
|
| `0.5.3` | `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`(源码契约、npm 打包安装、隔离配对、移动页面启动及 WebSocket 工作区读取) |
|
|
425
428
|
| `0.5.2` | `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`(源码契约、隔离配对、移动页面启动和 WebSocket 工作区读取) |
|
|
@@ -478,6 +481,6 @@ npm ci
|
|
|
478
481
|
npm run verify
|
|
479
482
|
```
|
|
480
483
|
|
|
481
|
-
文档快速检查使用 `npm run check:docs`。按改动选择的浏览器测试、隔离 DSH 打包验收、截图和正式发布流程见 [CONTRIBUTING.md](CONTRIBUTING.md);Android 构建见 [App 手册](apps/mobile/README.zh-CN.md#构建)。不要用真实用户配置或正式 App 数据替代测试资料。
|
|
484
|
+
文档快速检查使用 `npm run check:docs`。按改动选择的浏览器测试、隔离 DSH 打包验收、截图和正式发布流程见 [CONTRIBUTING.md](https://github.com/saya-ch/dsh-mobile/blob/main/CONTRIBUTING.md);Android 构建见 [App 手册](apps/mobile/README.zh-CN.md#构建)。不要用真实用户配置或正式 App 数据替代测试资料。
|
|
482
485
|
|
|
483
486
|
Apache-2.0,详见 [LICENSE](LICENSE)。
|
package/SECURITY.md
CHANGED
|
@@ -28,6 +28,13 @@ The maintainer will acknowledge a complete report within seven days. Publication
|
|
|
28
28
|
- Keep pairing closed except during a short local onboarding action.
|
|
29
29
|
- Revoke a lost device immediately and rotate the device registry if credential theft is suspected.
|
|
30
30
|
|
|
31
|
+
### Authentication admission and proxy peers
|
|
32
|
+
|
|
33
|
+
- Invalid pairing guesses, malformed renewal/probe requests and invalid device credentials are limited by the direct TCP peer. `X-Forwarded-For`, `X-Real-IP` and `Forwarded` do not identify an authenticated client. A reverse proxy can therefore give anonymous requests a shared failure budget; this is not a reason to trust forwarded headers without an explicit proxy policy.
|
|
34
|
+
- From plugin 0.6.12, a current valid one-time pairing secret does not consume that anonymous budget. At most one valid pairing candidate can wait for a durable mutation; it is rechecked inside the serialized operation. Renewal and native reachability probes use separate per-device budgets after credential verification, with at most one in-flight operation of each kind per device. Device capacity is independent of the anonymous peer-table capacity. Expiry and revocation are rechecked before mutation; a disconnected caller does not release work that is still pending.
|
|
35
|
+
- These limits protect bounded application work and prevent anonymous failures from exhausting valid credentials' budgets. They do not make an exposed listener immune to connection, bandwidth or CPU exhaustion. Keep pairing windows short, protect proxy ingress, and retain the existing Host/Origin, device-token and CSRF checks.
|
|
36
|
+
- The Gateway's internal upstream cookie exchange requires the configured loopback DSH Origin, its expected redirect status and a valid authentication Cookie. Explicit non-navigation Fetch Metadata avoids community authentication plugins' navigation HTML response; no arbitrary successful HTML page is accepted and no redirect is followed. The upstream Cookie remains server-side.
|
|
37
|
+
|
|
31
38
|
### Installation identity and device-state upgrades
|
|
32
39
|
|
|
33
40
|
- Automatically identified entries without a pairing CA use the random `installation-id` file in the active Mobile state directory for new pairings, not a hash of the state-file path. Explicit operator IDs and CA-bound LAN/self-signed FRP identities remain unchanged. The identifier is public, not an authentication secret. Copying the entire state directory also copies its identity and credentials; this fix does not distinguish cloned installations. Do not delete the identity file to troubleshoot a connection.
|
|
@@ -39,8 +46,10 @@ The maintainer will acknowledge a complete report within seven days. Publication
|
|
|
39
46
|
### Remote components, diagnostics and cleanup
|
|
40
47
|
|
|
41
48
|
- Do not expose the LAN gateway through router port forwarding. Funnel, cpolar, cloudflared, and FRP reach a separate loopback gateway through their selected remote path. The own reverse-proxy provider instead exposes a plugin-owned private HTTP origin restricted by its bind address and allowed source CIDRs; the operator's proxy must provide public HTTPS. Funnel, cpolar, cloudflared, Caddy, or the own proxy terminates public TLS in their respective modes; the 0.4.6 self-signed FRP entry terminates TLS on the computer. DSH pairing, device authentication, CSRF checks, and session revocation remain enforced by the plugin gateway.
|
|
49
|
+
- Optional managed Caddy installation is available on Windows/Linux x64 from the plugin's pinned DSH Mobile component release. It uses the `tencentcloud` DNS module with operator-supplied Tencent Cloud DNSPod credentials for DNS-01, but still needs public HTTPS ingress to the computer; DNS-01 is not a NAT traversal mechanism. Expose only the intended HTTPS ingress and never expose its loopback HTTP Gateway. Component installation or the computer-side public discovery probe does not establish that a phone can reach the public route.
|
|
42
50
|
- The Funnel node stores its Tailscale login state under `$DSH_HOME/mobile-access/remote/tailscale/`. The plugin does not request or store a Tailscale password, Auth Key, or OAuth secret.
|
|
43
51
|
- The proxy-assisted remote diagnostic probes only the public `/mobile-access/health` path. It tries direct HTTPS first and, only after direct failure, may use an HTTP CONNECT proxy named by the DSH process environment unless `NO_PROXY` excludes the target. The probe sends no device token or session Cookie; configured proxy credentials are sent to that proxy for CONNECT, not placed in the diagnostic report. A proxy-only success is a warning to test from the phone, not proof that the phone or the provider route is available. This diagnostic does not change the remote provider's traffic path.
|
|
52
|
+
- Plugin 0.6.11 and later record limited HTTP authorization and CSRF rejection metadata. It omits credential values and query strings, categorizes arbitrary paths, normalizes Origin and admits only recognized fetch-site values. Each Gateway keeps two fixed diagnostic categories with 30-second repeat aggregation, not an unbounded per-client/path history. Diagnostic-callback failures do not change the rejection response. These records are not complete WebSocket or native-pairing traces, and absence of a record does not establish successful authentication. Review even bounded metadata before sharing logs.
|
|
44
53
|
- cpolar is downloaded only after confirmation from a pinned official artifact whose size and SHA-256 are verified. Its Authtoken is stored in a private, self-update-disabled configuration under `$DSH_HOME/mobile-access/`, never returned by the admin API or written to logs. Component removal deletes its managed executable, Authtoken configuration, logs and staging files, but retains LAN and shared remote pairing records.
|
|
45
54
|
- Self-hosted FRP accepts a VPS address, frps control port, operator-generated high-entropy shared token, and standard-port public HTTPS origin. The 0.4.6 self-signed entry additionally selects a non-reserved public TCP port on a globally routable IPv4 address. The plugin validates token length and format; the operator remains responsible for its entropy. Managed deployment creates one HTTP vhost and Caddy; existing-frps attachment changes no VPS files or services and allows either a restricted HTTP vhost with a public CA or one TCP passthrough to a computer-side HTTPS gateway. Arbitrary FRP configuration, general TCP/UDP forwarding, FRP plugins, PATH entries, and startup tasks are not supported.
|
|
46
55
|
- For an HTTP-vhost entry, the generated managed-frps template binds the plaintext listener to `127.0.0.1` and uses Caddy for public HTTPS. An existing frps must have its actual `vhostHTTPPort` entered explicitly and its plaintext vhost kept off the public network; the plugin probes the configured port before starting `frpc`. frps `proxyBindAddr` governs proxy listeners globally: exposing a TCP passthrough on the same instance must not accidentally expose another plaintext vhost. A separate frps instance may be required. For self-signed ingress, the computer-side CA lasts five years and the leaf lasts 397 days; the leaf is renewed under the same CA, but an expired or replaced CA is not silently trusted and requires fresh pairing. A local readiness probe does not establish phone reachability; verify the public entry from an independent network.
|