dsh-pocket 1.0.8 → 1.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.en.md CHANGED
@@ -18,12 +18,15 @@
18
18
 
19
19
  ## What is this
20
20
 
21
- `dsh web` only allows local access by default (`127.0.0.1:3080`). DSH Pocket puts a **header-rewriting proxy** in front of it and hands you QR codes right in the DSH web settings page:
21
+ **You want to use DeepSeek Harness on your computer, even when you're not at the computer.**
22
22
 
23
- ```
24
- Phone ──scan──> dsh-pocket proxy ──> dsh web :3080
25
- (rewrites Host/Origin to loopback; passes DSH's trust fence)
26
- ```
23
+ - On your way home, the agent is running a task on your computer — pull out your phone and see where it is, what it produced.
24
+ - Out and about, you want the agent on your computer to look something up or write a snippet — no remote desktop, no SSH.
25
+ - The computer is at home or in the office, you're elsewhere, and you want to **drive your DeepSeek Harness from your phone** — send tasks, watch the output, tap approvals.
26
+
27
+ That's what DSH Pocket does: **install it, scan a QR code, and your phone shows and controls the DeepSeek Harness UI in real time — from anywhere.**
28
+
29
+ > One-liner: `dsh web` only allows local access by default; DSH Pocket puts a proxy in front of it that safely bridges your phone (see [How it works](#-how-it-works)).
27
30
 
28
31
  ## ✨ Features
29
32
 
@@ -39,6 +42,12 @@ Phone ──scan──> dsh-pocket proxy ──> dsh web :3080
39
42
 
40
43
  ## 🚀 Usage
41
44
 
45
+ **Where the entry is**: after installing and restarting `dsh web`, open **Settings** — the left sidebar shows **"Phone access"** at the top level (same level as General / Models):
46
+
47
+ <p align="center">
48
+ <img src="docs/entry.jpg" alt="Phone access entry" width="70%">
49
+ </p>
50
+
42
51
  **Prerequisite**: [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) installed. If your terminal says `dsh: command not found`, install it first:
43
52
 
44
53
  ```sh
@@ -139,3 +148,7 @@ npm test # proxy rewrite / WS passthrough / tunnel / service / RP
139
148
  [GPL-2.0](LICENSE) — copyleft: free to use, modify, and redistribute, but **derivatives must stay GPL** and keep the copyright notice; commercial use included.
140
149
 
141
150
  > Note: the mobile-adaptation portion is ported from [dsh-web-mobile](https://github.com/mexiaosqwq/dsh-web-mobile) (MIT, GPL-compatible); its copyright notice stays in `client/mobile/LICENSE.dsh-web-mobile`.
151
+
152
+ ---
153
+
154
+ **Questions? Feedback welcome**: bugs, ideas, or feature requests — open an issue at [GitHub Issues](https://github.com/shaobeichen/dsh-pocket/issues) 🙏
package/README.md CHANGED
@@ -18,12 +18,15 @@
18
18
 
19
19
  ## 这是什么
20
20
 
21
- `dsh web` 默认只允许本机访问(`127.0.0.1:3080`)。DSH Pocket 在它前面加一层**改头代理**,并直接在 **DSH 网页设置页**里给你二维码:
21
+ **你不在电脑前,也想用电脑上的 DeepSeek Harness。**
22
22
 
23
- ```
24
- 手机 ──扫码──> dsh-pocket 代理 ──> dsh web :3080
25
- (改写 Host/Origin loopback,DSH 信任栅栏放行)
26
- ```
23
+ - 下班路上,agent 在电脑上跑任务,你想掏出手机看看它干到哪了、结果如何
24
+ - 出门在外,突然想让电脑上的 agent 查点资料、写段代码,但没有远程桌面、没有 SSH
25
+ - 电脑在宿舍/办公室,你人在外面,想随时"操控你的 DeepSeek Harness"——发任务、看输出、点审批
26
+
27
+ DSH Pocket 就是干这个的:**装上它,手机扫个码,就能实时看到并操控电脑上的 DeepSeek Harness 界面**——人在外面也能用。
28
+
29
+ > 原理一句话:`dsh web` 默认只允许本机访问,DSH Pocket 在它前面加一层代理,把手机访问安全地接入(详见[「原理」](#-原理))。
27
30
 
28
31
  ## ✨ 特性
29
32
 
@@ -39,6 +42,12 @@
39
42
 
40
43
  ## 🚀 怎么用
41
44
 
45
+ **入口在哪**:安装完成并重启 `dsh web` 后,打开 **设置**,左侧边栏就能看到 **「手机访问」** 入口(和「通用设置」「模型」同级):
46
+
47
+ <p align="center">
48
+ <img src="docs/entry.jpg" alt="手机访问入口" width="70%">
49
+ </p>
50
+
42
51
  **前提**:电脑上已装好 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)。如果终端提示 `dsh: command not found`(找不到 dsh 命令),先安装:
43
52
 
44
53
  ```sh
@@ -140,3 +149,7 @@ npm test # 代理改写 / WS 透传 / 隧道 / 服务 / RPC(7
140
149
  [GPL-2.0](LICENSE) —— 自由软件许可:可自由使用、修改、分发,但**修改版必须同样以 GPL 开源**并保留版权声明;商用同样适用。
141
150
 
142
151
  > 说明:移动端适配部分移植自 [dsh-web-mobile](https://github.com/mexiaosqwq/dsh-web-mobile)(MIT 许可,兼容 GPL),其版权声明保留在 `client/mobile/LICENSE.dsh-web-mobile`。
152
+
153
+ ---
154
+
155
+ **有问题?欢迎反馈**:遇到 Bug、有想法、想提需求,请到 [GitHub Issues](https://github.com/shaobeichen/dsh-pocket/issues) 告诉我们 🙏
package/client/client.js CHANGED
@@ -1406,9 +1406,18 @@ function PocketSettingsTab({ rpcCall }) {
1406
1406
  { style: styles.card },
1407
1407
  (0, import_react2.createElement)(
1408
1408
  "div",
1409
- null,
1410
- (0, import_react2.createElement)("strong", null, "\u{1F4F1} \u624B\u673A\u8BBF\u95EE | Phone access"),
1411
- (0, import_react2.createElement)("div", { style: styles.muted }, "\u624B\u673A\u626B\u7801\u6253\u5F00\u7684\u5C31\u662F\u7535\u8111\u4E0A\u7684\u8FD9\u4E2A\u754C\u9762\uFF0C\u5B9E\u65F6\u540C\u6B65 | the phone shows this exact screen, live")
1409
+ { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 8 } },
1410
+ (0, import_react2.createElement)(
1411
+ "div",
1412
+ null,
1413
+ (0, import_react2.createElement)("strong", null, "\u{1F4F1} \u624B\u673A\u8BBF\u95EE | Phone access"),
1414
+ (0, import_react2.createElement)("div", { style: styles.muted }, "\u624B\u673A\u626B\u7801\u6253\u5F00\u7684\u5C31\u662F\u7535\u8111\u4E0A\u7684\u8FD9\u4E2A\u754C\u9762\uFF0C\u5B9E\u65F6\u540C\u6B65 | the phone shows this exact screen, live")
1415
+ ),
1416
+ (0, import_react2.createElement)(
1417
+ "a",
1418
+ { href: "https://github.com/shaobeichen/dsh-pocket/issues", target: "_blank", rel: "noreferrer", style: { fontSize: 12, color: "var(--dsw-alias-label-tertiary,#8b93a1)", textDecoration: "none", whiteSpace: "nowrap" } },
1419
+ "\u5F00\u53D1\u8005\uFF1A\u7A0B\u5E8F\u5458\u5C11\u5317\u6668 | by \u5C11\u5317\u6668"
1420
+ )
1412
1421
  ),
1413
1422
  // 更新提示
1414
1423
  updateInfo ? (0, import_react2.createElement)(
@@ -1418,7 +1427,7 @@ function PocketSettingsTab({ rpcCall }) {
1418
1427
  "div",
1419
1428
  { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 8 } },
1420
1429
  (0, import_react2.createElement)("div", { style: { fontWeight: 600, fontSize: 13 } }, `\u{1F4E6} \u65B0\u7248\u672C v${updateInfo.latest} | Update available`),
1421
- updateInfo.result !== "ok" ? (0, import_react2.createElement)("button", { style: styles.primary, onClick: runUpdate, disabled: updateInfo.updating }, updateInfo.updating ? "\u66F4\u65B0\u4E2D\u2026" : `\u66F4\u65B0\u5230 v${updateInfo.latest} | Update`) : null
1430
+ updateInfo.result !== "ok" ? (0, import_react2.createElement)("button", { style: styles.primary, onClick: runUpdate, disabled: updateInfo.updating }, updateInfo.updating ? "\u66F4\u65B0\u4E2D\u2026" : `\u66F4\u65B0\u5230 v${updateInfo.latest} | Update`) : (0, import_react2.createElement)("button", { style: styles.btn, onClick: () => window.location.reload() }, "\u{1F504} \u5237\u65B0\u9875\u9762 | Refresh")
1422
1431
  ),
1423
1432
  (0, import_react2.createElement)(
1424
1433
  "div",
package/client/index.jsx CHANGED
@@ -166,9 +166,13 @@ function PocketSettingsTab({ rpcCall }) {
166
166
  const tunnelStateStarted = tunnelState?.startedAt ?? null;
167
167
 
168
168
  return h('div', { style: styles.card },
169
- h('div', null,
170
- h('strong', null, '📱 手机访问 | Phone access'),
171
- h('div', { style: styles.muted }, '手机扫码打开的就是电脑上的这个界面,实时同步 | the phone shows this exact screen, live'),
169
+ h('div', { style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 8 } },
170
+ h('div', null,
171
+ h('strong', null, '📱 手机访问 | Phone access'),
172
+ h('div', { style: styles.muted }, '手机扫码打开的就是电脑上的这个界面,实时同步 | the phone shows this exact screen, live'),
173
+ ),
174
+ h('a', { href: 'https://github.com/shaobeichen/dsh-pocket/issues', target: '_blank', rel: 'noreferrer', style: { fontSize: 12, color: 'var(--dsw-alias-label-tertiary,#8b93a1)', textDecoration: 'none', whiteSpace: 'nowrap' } },
175
+ '开发者:程序员少北晨 | by 少北晨'),
172
176
  ),
173
177
 
174
178
  // 更新提示
@@ -177,7 +181,7 @@ function PocketSettingsTab({ rpcCall }) {
177
181
  h('div', { style: { fontWeight: 600, fontSize: 13 } }, `📦 新版本 v${updateInfo.latest} | Update available`),
178
182
  updateInfo.result !== 'ok'
179
183
  ? h('button', { style: styles.primary, onClick: runUpdate, disabled: updateInfo.updating }, updateInfo.updating ? '更新中…' : `更新到 v${updateInfo.latest} | Update`)
180
- : null,
184
+ : h('button', { style: styles.btn, onClick: () => window.location.reload() }, '🔄 刷新页面 | Refresh'),
181
185
  ),
182
186
  h('div', { style: styles.muted, marginTop: 4 },
183
187
  updateInfo.result === 'ok' ? '✅ 已更新,重启 dsh web 生效 | updated — restart dsh web'
package/package.json CHANGED
@@ -77,5 +77,5 @@
77
77
  "access": "public",
78
78
  "registry": "https://registry.npmjs.org/"
79
79
  },
80
- "version": "1.0.8"
80
+ "version": "1.0.10"
81
81
  }