dsh-clean-desktop-shell 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Icather
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Icather
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.en.md CHANGED
@@ -1,91 +1,168 @@
1
- <div align="center">
2
-
3
- # dsh-clean-desktop-shell
4
-
5
- **A clean desktop shell for DeepSeek Harness, shipped as a DSH plugin**
6
-
7
- Does exactly one thing: wraps your already-configured DSH Web in a clean native desktop window — system tray, single instance, auto-launch, just like a normal app. No frosted glass, no fancy materials. **Clean.**
8
-
9
- [English](README.en.md) · [中文](README.md)
10
-
11
- [![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20macOS-0078D6?logo=windows&logoColor=white)](https://github.com/Icather/dsh-clean-desktop-shell)
12
- [![License](https://img.shields.io/badge/License-MIT-22c55e)](LICENSE)
13
- [![Release](https://img.shields.io/github/v/release/Icather/dsh-clean-desktop-shell?color=blue)](https://github.com/Icather/dsh-clean-desktop-shell/releases/latest)
14
- [![DSH](https://img.shields.io/badge/DeepSeek_Harness-rc.7-4D6BFE)](https://github.com/deepseek-ai/deepseek-harness)
15
-
16
- </div>
17
-
18
- ## What is this
19
-
20
- `dsh-clean-desktop-shell` is a **DSH-plugin-shaped clean desktop shell**: it wraps an already-running DSH Web (default `http://127.0.0.1:3080`) in a native desktop window — system tray, single instance, auto-launch, so it behaves like any normal desktop app. **No visual changes at all**: no frosted glass, no skinning — purely a window shell.
21
-
22
- Key differences from other desktop clients in the ecosystem:
23
-
24
- | | Other desktop clients (e.g. dsh-desktop family) | This plugin |
25
- |:--|:--|:--|
26
- | **Form** | Standalone Electron app with its own profile | **DSH plugin** mounted into your existing profile |
27
- | **Profile** | New `desktop` profile, plugins/config must be reinstalled | **Reuses your web profile**, zero migration |
28
- | **Visual changes** | Custom title bar / frosted glass etc. | **None** pure window shell |
29
- | **Upstream** | Pinned version | **Tracks rc.7** |
30
-
31
- ## Architecture
32
-
33
- ```
34
- ┌─────────────────── Core (dsh web / headless service) ───────────────────┐
35
- │ Sessions · Agent · Plugins · Memory live here, decoupled from UI │
36
- └─────────────────────────────────────────────────────────────────────────┘
37
-
38
- ┌───────────────┴───────────────┐
39
- │ dsh-clean-desktop-shell │
40
- Electron shell (client)
41
- tray · single-instance ·
42
- auto-launch
43
- └────────────────────────────────┘
44
- ```
45
-
46
- - **Default**: loads the local `127.0.0.1:3080` (your configured web profile, zero migration).
47
- - **Remote-capable**: configure any remote DSH address; the shell is just a window. Phones / Linux / other devices can reach the core via browser or PWA — the shell is never bound to a local service.
48
-
49
- ### Platform matrix
50
-
51
- | Platform | Shell | Status |
52
- |:--|:--|:--|
53
- | Windows | ✅ Electron (frameless + native window buttons) | First release target |
54
- | macOS | ✅ Electron (hiddenInset) | Planned |
55
- | Linux | (browser / PWA to the core) | Not planned |
56
- | Termux / phone / tablet | — (headless / PWA to the core) | Covered by remote core access |
57
-
58
- ## Install
59
-
60
- ```sh
61
- dsh plugin --profile web add dsh-clean-desktop-shell
62
- ```
63
-
64
- Restart `dsh web`, then launch the shell from the tray / shortcut.
65
-
66
- > The shell needs a reachable `dsh web` service (local or configured remote address). See Usage.
67
-
68
- ## Usage
69
-
70
- 1. Start `dsh web` (or configure a remote service address).
71
- 2. Launch the shell: it auto-detects local 3080; if not running it starts the service per configuration.
72
- 3. Drag the window by its top area (right side reserved for native buttons); close minimizes to tray by default.
73
-
74
- ## Development
75
-
76
- ```sh
77
- npm install
78
- npm run build # build the plugin bundle
79
- npm run dev # launch the shell (dev mode)
80
- npm run pack # package NSIS (Win) / DMG (mac)
81
- ```
82
-
83
- ## Changelog
84
-
85
- ### 0.1.0
86
- - Initial release: Electron shell skeleton, system tray / single instance / auto-launch, DSH plugin mounting.
87
-
88
- ## Credits
89
-
90
- - [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) the core.
91
- - Architecture inspired by [Hermes Agent Desktop](https://github.com/NousResearch/hermes-agent)'s shell/core separation.
1
+ <div align="center">
2
+
3
+ # dsh-clean-desktop-shell
4
+
5
+ **A clean desktop shell for DeepSeek Harness, shipped as a DSH plugin**
6
+
7
+ Does exactly one thing: wraps your already-configured DSH Web in a clean native desktop window — system tray, single instance, auto-launch, just like a normal app. No frosted glass, no fancy materials. **Clean.**
8
+
9
+ [English](README.en.md) · [中文](README.md)
10
+
11
+ [![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20macOS-0078D6?logo=windows&logoColor=white)](https://github.com/Icather/dsh-clean-desktop-shell)
12
+ [![License](https://img.shields.io/badge/License-MIT-22c55e)](LICENSE)
13
+ [![Release](https://img.shields.io/github/v/release/Icather/dsh-clean-desktop-shell?color=blue)](https://github.com/Icather/dsh-clean-desktop-shell/releases/latest)
14
+ [![DSH](https://img.shields.io/badge/DeepSeek_Harness-rc.7-4D6BFE)](https://github.com/deepseek-ai/deepseek-harness)
15
+ [![Contributors](https://img.shields.io/github/contributors/Icather/dsh-clean-desktop-shell?color=blueviolet)](https://github.com/Icather/dsh-clean-desktop-shell/graphs/contributors)
16
+
17
+ </div>
18
+
19
+ ## What is this
20
+
21
+ `dsh-clean-desktop-shell` is a **DSH-plugin-shaped clean desktop shell**: it wraps an already-running DSH Web (default `http://127.0.0.1:3080`) in a native desktop window — system tray, single instance, auto-launch, so it behaves like any normal desktop app. **No visual changes at all**: no frosted glass, no skinning — purely a window shell.
22
+
23
+ Key differences from other desktop clients in the ecosystem:
24
+
25
+ | | Other desktop clients (e.g. dsh-desktop family) | This plugin |
26
+ |:--|:--|:--|
27
+ | **Form** | Standalone Electron app with its own profile | **DSH plugin** mounted into your existing profile |
28
+ | **Profile** | New `desktop` profile, plugins/config must be reinstalled | **Reuses your web profile**, zero migration |
29
+ | **Visual changes** | Custom title bar / frosted glass etc. | **None** — pure window shell |
30
+ | **Upstream** | Pinned version | **Tracks rc.7** |
31
+
32
+ ## Architecture
33
+
34
+ ```
35
+ ┌─────────────────── Core (dsh web / headless service) ───────────────────┐
36
+ │ Sessions · Agent · Plugins · Memory live here, decoupled from UI │
37
+ └─────────────────────────────────────────────────────────────────────────┘
38
+
39
+ ┌───────────────┴───────────────┐
40
+ dsh-clean-desktop-shell │
41
+ Electron shell (client)
42
+ tray · single-instance ·
43
+ │ auto-launch │
44
+ └────────────────────────────────┘
45
+ ```
46
+
47
+ - **Default**: loads the local `127.0.0.1:3080` (your configured web profile, zero migration).
48
+ - **Remote-capable**: configure any remote DSH address; the shell is just a window. Phones / Linux / other devices can reach the core via browser or PWA — the shell is never bound to a local service.
49
+
50
+ ### Platform matrix
51
+
52
+ | Platform | Shell | Status |
53
+ |:--|:--|:--|
54
+ | Windows | ✅ Electron (frameless + native window buttons) | Released (NSIS installer) |
55
+ | macOS | Electron (hiddenInset) | Released (CI builds Intel + Apple Silicon DMG) |
56
+ | Linux | — (browser / PWA to the core) | Not planned |
57
+ | Termux / phone / tablet | — (headless / PWA to the core) | Covered by remote core access |
58
+
59
+ ## Install
60
+
61
+ **Option 1: download the installer from Releases (recommended for end users)**
62
+
63
+ - Windows: `DSH-Clean-Desktop-Shell-Setup-<version>.exe`
64
+ - macOS: `DSH-Clean-Desktop-Shell-<version>.dmg` (Intel) or `-arm64.dmg` (Apple Silicon)
65
+
66
+ The first time you run the Windows installer you may see a SmartScreen warning **this is normal for unsigned programs, not a virus**, see "Windows SmartScreen warning" below.
67
+
68
+ **Option 2: install as a DSH plugin (developers)**
69
+
70
+ ```sh
71
+ dsh plugin --profile web add dsh-clean-desktop-shell
72
+ ```
73
+
74
+ Restart `dsh web`, then launch the shell from the tray / shortcut.
75
+
76
+ > The shell needs a reachable `dsh web` service (local or configured remote address). See Usage.
77
+
78
+ ### Windows SmartScreen warning
79
+
80
+ **Why does the warning appear?**
81
+
82
+ Our installer has **no code signing certificate** (a personal open-source project — certificates cost a few hundred USD per year). Microsoft Defender SmartScreen is a **reputation system**: it decides whether a program is trusted based on download volume plus a history of clean executions. For a rarely-downloaded, unsigned `.exe` it cannot confirm reputation, so it warns. **This does not mean the file is a virus**: the project is fully open source and the binaries are built by GitHub Actions from this repository (see `.github/workflows/build.yml`).
83
+
84
+ **When Edge downloads the file:**
85
+
86
+ It may be flagged as "not commonly downloaded". To keep it:
87
+
88
+ 1. Hover the download entry and click the `...` menu on the right
89
+ 2. Choose **Keep**
90
+ 3. Confirm with **Keep anyway**
91
+
92
+ **When you double-click the installer:**
93
+
94
+ A blue dialog appears: "Windows protected your PC" — Microsoft Defender SmartScreen prevented an unrecognized app from starting.
95
+
96
+ 1. Click **More info**
97
+ 2. Verify the file name is `DSH-Clean-Desktop-Shell-Setup-<version>.exe`
98
+ 3. Click **Run anyway**
99
+
100
+ **Alternative: unblock the file once (recommended)**
101
+
102
+ Right-click the installer → Properties → General → tick **Unblock** at the bottom → OK. No more warnings afterwards.
103
+
104
+ Or bulk-unblock via PowerShell:
105
+
106
+ ```powershell
107
+ Unblock-File -Path "$env:USERPROFILE\Downloads\DSH-Clean-Desktop-Shell-Setup-*.exe"
108
+ ```
109
+
110
+ > A code signing certificate (EV or Azure Trusted Signing) would remove this warning entirely, but it costs money and is rarely worth it for individual open-source maintainers. We may adopt signing when the project allows.
111
+
112
+ ## Usage
113
+
114
+ 1. Start `dsh web` (or configure a remote service address).
115
+ 2. Launch the shell: it auto-detects local 3080; if not running it starts the service per configuration.
116
+ 3. Drag the window by its top area (right side reserved for native buttons); close minimizes to tray by default.
117
+
118
+ **All backend controls live in the tray** — the main window stays a pure shell:
119
+
120
+ - Start / restart / stop the backend (with progress dialogs; stopping really
121
+ shuts down the service on 3080, including externally started instances)
122
+ - Auto-detect backend · set the backend install folder (auto-detect default)
123
+ - Reload window · check for updates · repo homepage · auto-launch
124
+
125
+ **Window reliability (Edge-style instant refresh):**
126
+
127
+ - Shows immediately on launch, never waits for the backend
128
+ - While the backend is down, a local "backend offline" screen is shown and
129
+ re-probed; the real page loads automatically the moment it answers
130
+ - The instant the backend stops (tray stop, kill or crash) the window flips
131
+ back to the offline screen — a stale page never fakes "still alive"
132
+ - The offline screen has self-service buttons: reload / start backend /
133
+ auto-detect backend / set backend install folder
134
+
135
+ ## Development
136
+
137
+ ```sh
138
+ npm install
139
+ npm run build # build the plugin bundle
140
+ npm run dev # launch the shell (dev mode)
141
+ npm run pack # package NSIS (Win) / DMG (mac)
142
+ ```
143
+
144
+ ## Changelog
145
+
146
+ ### 0.1.1
147
+ - Backend lifecycle: fixed `spawn EINVAL` / stuck "starting" on Windows;
148
+ "stop backend" now really shuts the service down (including externally
149
+ started instances); start/restart/stop show progress dialogs.
150
+ - Window reliability: shows instantly on double-click; flips to the offline
151
+ screen the moment the backend stops; auto-reconnects when it comes back
152
+ (Edge-style instant refresh).
153
+ - Offline screen self-service: reload / start backend / auto-detect backend /
154
+ set backend install folder.
155
+ - Tray: new "reload window" item; macOS builds released (Intel + Apple
156
+ Silicon DMG).
157
+
158
+ ### 0.1.0
159
+ - Initial release: Electron shell skeleton, system tray / single instance / auto-launch, DSH plugin mounting.
160
+
161
+ ## Contributing
162
+
163
+ Contributions of any kind are welcome — bug fixes, features, docs. Please read [CONTRIBUTING.md](CONTRIBUTING.md) first (project layout, dev conventions, commit style, PR flow) and follow [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md). Security issues: report privately via [SECURITY.md](SECURITY.md).
164
+
165
+ ## Credits
166
+
167
+ - [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) — the core.
168
+ - Architecture inspired by [Hermes Agent Desktop](https://github.com/NousResearch/hermes-agent)'s shell/core separation.
package/README.md CHANGED
@@ -1,90 +1,161 @@
1
- <div align="center">
2
-
3
- # dsh-clean-desktop-shell
4
-
5
- **DeepSeek Harness 的纯净桌面壳(DSH 插件形态)**
6
-
7
- 只做一件事:给已配置好的 DSH Web 加一层干净的桌面窗口——系统托盘、单实例、开机自启、像普通软件一样用。无毛玻璃、无花哨材质,**纯净**。
8
-
9
- [English](README.en.md) · [中文](README.md)
10
-
11
- [![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20macOS-0078D6?logo=windows&logoColor=white)](https://github.com/Icather/dsh-clean-desktop-shell)
12
- [![License](https://img.shields.io/badge/License-MIT-22c55e)](LICENSE)
13
- [![Release](https://img.shields.io/github/v/release/Icather/dsh-clean-desktop-shell?color=blue)](https://github.com/Icather/dsh-clean-desktop-shell/releases/latest)
14
- [![DSH](https://img.shields.io/badge/DeepSeek_Harness-rc.7-4D6BFE)](https://github.com/deepseek-ai/deepseek-harness)
15
-
16
- </div>
17
-
18
- ## 这是什么
19
-
20
- `dsh-clean-desktop-shell` 是一个 **DSH 插件形态** 的纯净桌面壳:它给已经跑起来的 DSH Web(默认 `http://127.0.0.1:3080`)套一层原生桌面窗口——系统托盘、单实例、开机自启,像普通桌面软件一样使用。**不做任何视觉改造**:不加毛玻璃、不改界面,纯粹是"窗口壳"。
21
-
22
- 与生态里其他桌面端方案的最大区别:
23
-
24
- | | 其他桌面端(如 dsh-desktop 系列) | 本插件 |
25
- |:--|:--|:--|
26
- | **形态** | 独立 Electron 应用,自带独立 profile | **DSH 插件**,挂载进现有 profile |
27
- | **Profile** | 新建 desktop profile,插件/配置要重装 | **复用现有 web profile**,零迁移 |
28
- | **视觉改造** | 自绘标题栏 / 毛玻璃等 | **零改造**,纯净窗口壳 |
29
- | **跟随上游** | 固定版本 | **跟随 rc.7** |
30
-
31
- ## 架构
32
-
33
- ```
34
- ┌──────────────────── 内核(dsh web / headless 服务) ────────────────────┐
35
- │ 会话 · Agent · 插件 · 记忆 都在这层,与界面解耦 │
36
- └─────────────────────────────────────────────────────────────────────────┘
37
-
38
- ┌───────────────┴───────────────┐
39
- │ dsh-clean-desktop-shell │
40
- Electron 壳(客户端)
41
- 托盘 · 单实例 · 开机自启
42
- └────────────────────────────────┘
43
- ```
44
-
45
- - **默认**:加载本地 `127.0.0.1:3080`(已配置好的 web profile,零迁移)。
46
- - **可配远程**:在设置里填入任意远程 DSH 地址,壳只当窗口——手机 / Linux / 其他设备通过浏览器或 PWA 也能接入内核,壳本身不绑定本地服务。
47
-
48
- ### 平台矩阵
49
-
50
- | 平台 | 壳 | 状态 |
51
- |:--|:--|:--|
52
- | Windows | ✅ Electron(无边框 + 原生窗口按钮) | 首发目标 |
53
- | macOS | ✅ Electron(hiddenInset) | 规划中 |
54
- | Linux | —(浏览器 / PWA 直连内核) | 不做 |
55
- | Termux / 手机 / 平板 | —(headless / PWA 直连内核) | 由内核远程访问支持 |
56
-
57
- ## 安装
58
-
59
- ```sh
60
- dsh plugin --profile web add dsh-clean-desktop-shell
61
- ```
62
-
63
- 重启 `dsh web` 后,从系统托盘/快捷方式启动桌面壳即可。
64
-
65
- > 桌面壳需要本机有可用的 `dsh web` 服务(或配置的远程地址)。见下方「使用」。
66
-
67
- ## 使用
68
-
69
- 1. 启动 `dsh web`(或配置远程服务地址)。
70
- 2. 启动桌面壳:自动检测本地 3080;未运行时按配置拉起服务。
71
- 3. 窗口顶部(右侧留系统按钮)可拖动窗口;关闭默认缩到托盘。
72
-
73
- ## 开发
74
-
75
- ```sh
76
- npm install
77
- npm run build # 构建插件 bundle
78
- npm run dev # 启动壳(开发模式)
79
- npm run pack # 打包 NSIS (Win) / DMG (mac)
80
- ```
81
-
82
- ## 更新历史
83
-
84
- ### 0.1.0
85
- - 初始版本:Electron 壳骨架,系统托盘/单实例/开机自启,DSH 插件挂载。
86
-
87
- ## 致谢
88
-
89
- - [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) —— 内核本体。
90
- - 架构参考 [Hermes Agent Desktop](https://github.com/NousResearch/hermes-agent) 的壳/内核分离设计。
1
+ <div align="center">
2
+
3
+ # dsh-clean-desktop-shell
4
+
5
+ **DeepSeek Harness 的纯净桌面壳(DSH 插件形态)**
6
+
7
+ 只做一件事:给已配置好的 DSH Web 加一层干净的桌面窗口——系统托盘、单实例、开机自启、像普通软件一样用。无毛玻璃、无花哨材质,**纯净**。
8
+
9
+ [English](README.en.md) · [中文](README.md)
10
+
11
+ [![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20macOS-0078D6?logo=windows&logoColor=white)](https://github.com/Icather/dsh-clean-desktop-shell)
12
+ [![License](https://img.shields.io/badge/License-MIT-22c55e)](LICENSE)
13
+ [![Release](https://img.shields.io/github/v/release/Icather/dsh-clean-desktop-shell?color=blue)](https://github.com/Icather/dsh-clean-desktop-shell/releases/latest)
14
+ [![DSH](https://img.shields.io/badge/DeepSeek_Harness-rc.7-4D6BFE)](https://github.com/deepseek-ai/deepseek-harness)
15
+ [![Contributors](https://img.shields.io/github/contributors/Icather/dsh-clean-desktop-shell?color=blueviolet)](https://github.com/Icather/dsh-clean-desktop-shell/graphs/contributors)
16
+
17
+ </div>
18
+
19
+ ## 这是什么
20
+
21
+ `dsh-clean-desktop-shell` 是一个 **DSH 插件形态** 的纯净桌面壳:它给已经跑起来的 DSH Web(默认 `http://127.0.0.1:3080`)套一层原生桌面窗口——系统托盘、单实例、开机自启,像普通桌面软件一样使用。**不做任何视觉改造**:不加毛玻璃、不改界面,纯粹是"窗口壳"。
22
+
23
+ 与生态里其他桌面端方案的最大区别:
24
+
25
+ | | 其他桌面端(如 dsh-desktop 系列) | 本插件 |
26
+ |:--|:--|:--|
27
+ | **形态** | 独立 Electron 应用,自带独立 profile | **DSH 插件**,挂载进现有 profile |
28
+ | **Profile** | 新建 desktop profile,插件/配置要重装 | **复用现有 web profile**,零迁移 |
29
+ | **视觉改造** | 自绘标题栏 / 毛玻璃等 | **零改造**,纯净窗口壳 |
30
+ | **跟随上游** | 固定版本 | **跟随 rc.7** |
31
+
32
+ ## 架构
33
+
34
+ ```
35
+ ┌──────────────────── 内核(dsh web / headless 服务) ────────────────────┐
36
+ │ 会话 · Agent · 插件 · 记忆 都在这层,与界面解耦 │
37
+ └─────────────────────────────────────────────────────────────────────────┘
38
+
39
+ ┌───────────────┴───────────────┐
40
+ dsh-clean-desktop-shell
41
+ Electron 壳(客户端)
42
+ │ 托盘 · 单实例 · 开机自启 │
43
+ └────────────────────────────────┘
44
+ ```
45
+
46
+ - **默认**:加载本地 `127.0.0.1:3080`(已配置好的 web profile,零迁移)。
47
+ - **可配远程**:在设置里填入任意远程 DSH 地址,壳只当窗口——手机 / Linux / 其他设备通过浏览器或 PWA 也能接入内核,壳本身不绑定本地服务。
48
+
49
+ ### 平台矩阵
50
+
51
+ | 平台 | 壳 | 状态 |
52
+ |:--|:--|:--|
53
+ | Windows | ✅ Electron(无边框 + 原生窗口按钮) | 已发布(NSIS 安装包) |
54
+ | macOS | Electron(hiddenInset) | 已发布(CI 构建 Intel + Apple Silicon DMG) |
55
+ | Linux | —(浏览器 / PWA 直连内核) | 不做 |
56
+ | Termux / 手机 / 平板 | —(headless / PWA 直连内核) | 由内核远程访问支持 |
57
+
58
+ ## 安装
59
+
60
+ **方式一:从 Release 下载安装包(推荐普通用户)**
61
+
62
+ - Windows:下载 `DSH-Clean-Desktop-Shell-Setup-<版本>.exe`
63
+ - macOS:下载 `DSH-Clean-Desktop-Shell-<版本>.dmg`(Intel)或 `-arm64.dmg`(Apple Silicon)
64
+
65
+ 首次运行 Windows 安装包可能触发 SmartScreen 警告——**这是未签名程序的正常现象,不是病毒**,见下方「Windows SmartScreen 警告说明」。
66
+
67
+ **方式二:作为 DSH 插件安装(开发者)**
68
+
69
+ ```sh
70
+ dsh plugin --profile web add dsh-clean-desktop-shell
71
+ ```
72
+
73
+ 重启 `dsh web` 后,从系统托盘/快捷方式启动桌面壳即可。
74
+
75
+ > 桌面壳需要本机有可用的 `dsh web` 服务(或配置的远程地址)。见下方「使用」。
76
+
77
+ ### Windows SmartScreen 警告说明
78
+
79
+ **为什么会看到警告?**
80
+
81
+ 我们的安装包**没有代码签名证书**(个人开源项目暂未购买,证书年费约数百美元)。Windows 的 Microsoft Defender SmartScreen 是一个**信誉系统**——它根据"下载量 + 干净运行的记录"判断一个程序是否可信。对下载量少、未签名的 exe,它无法确认信誉,就会警告。**这不代表文件有病毒**:本项目完全开源,代码可审阅,也可自行校验 SHA-256(见下)。
82
+
83
+ **Edge 下载时会看到:**
84
+
85
+ 下载面板里该文件被标记为"不常下载的文件",需要手动保留:
86
+
87
+ 1. 悬停下载项,点击右侧的 `...` 菜单
88
+ 2. 选择「保留」(Keep)
89
+ 3. 弹窗确认,选择「仍要保留」(Keep anyway)
90
+
91
+ **双击安装时会看到:**
92
+
93
+ 蓝色对话框「Windows 已保护你的电脑」——Microsoft Defender SmartScreen 阻止了无法识别的应用启动:
94
+
95
+ 1. 点击「更多信息」(More info)
96
+ 2. 核对文件名确实是 `DSH-Clean-Desktop-Shell-Setup-<版本>.exe`
97
+ 3. 点击「仍要运行」(Run anyway)
98
+
99
+ **备选:一次性解除锁定(推荐)**
100
+
101
+ 右键安装包 → 属性 → 常规 → 底部勾选「解除锁定」→ 确定。之后双击不再有警告。
102
+
103
+ 或 PowerShell 批量解除:
104
+
105
+ ```powershell
106
+ Unblock-File -Path "$env:USERPROFILE\Downloads\DSH-Clean-Desktop-Shell-Setup-*.exe"
107
+ ```
108
+
109
+ **关于文件安全性的说明**
110
+
111
+ 安装包由 GitHub Actions 从本仓库源码自动构建(见 `.github/workflows/build.yml`),代码完全开源可审阅。如仍有疑虑,可自行 `git clone` 后按「开发」一节本地构建比对,或稍等下载量积累——SmartScreen 信誉度上去后警告会自动消失。
112
+
113
+ > 说明:代码签名证书(EV 或 Azure Trusted Signing)可以彻底消除这个警告,但需要付费且对个人开源维护者不划算。本仓库会在条件允许时考虑接入签名。
114
+
115
+ ## 使用
116
+
117
+ 1. 启动 `dsh web`(或配置远程服务地址)。
118
+ 2. 启动桌面壳:自动检测本地 3080;未运行时按配置拉起服务。
119
+ 3. 窗口顶部(右侧留系统按钮)可拖动窗口;关闭默认缩到托盘。
120
+
121
+ **后端的一切操作都在托盘右键**,主窗口保持纯壳:
122
+
123
+ - 启动 / 重启 / 关闭后端(带进度弹窗;关闭会真正停掉 3080 上的服务,包括外部启动的实例)
124
+ - 自动探测后端 · 设置后端安装文件夹(默认自动探测定位)
125
+ - 刷新窗口 · 检查更新 · 仓库主页 · 开机自启
126
+
127
+ **窗口的可靠性(Edge 式即时刷新)**:
128
+
129
+ - 双击启动立即出窗,不等后端就绪
130
+ - 后端没起来时显示「后端未连接」页,自动探测;后端一通立即加载
131
+ - 后端关闭 / 被杀的一刻,窗口立刻切回离线页——不会停在旧页面假装还活着
132
+ - 离线页内置快捷按钮:重新加载 / 启动后端 / 自动探测后端 / 设置后端安装文件夹
133
+
134
+ ## 开发
135
+
136
+ ```sh
137
+ npm install
138
+ npm run build # 构建插件 bundle
139
+ npm run dev # 启动壳(开发模式)
140
+ npm run pack # 打包 NSIS (Win) / DMG (mac)
141
+ ```
142
+
143
+ ## 更新历史
144
+
145
+ ### 0.1.1
146
+ - 后端生命周期:修复 Windows 下启动报 `spawn EINVAL`、卡「启动中」的问题;「关闭后端」现在能真正停掉后端(含外部启动的实例);启动 / 重启 / 关闭带进度弹窗。
147
+ - 窗口可靠性:双击立即出窗;后端关闭窗口立刻切离线黑屏;后端恢复自动重连(Edge 式即时刷新)。
148
+ - 离线页自助:重新加载 / 启动后端 / 自动探测后端 / 设置后端安装文件夹。
149
+ - 托盘:新增「刷新窗口」;macOS 构建发布(Intel + Apple Silicon DMG)。
150
+
151
+ ### 0.1.0
152
+ - 初始版本:Electron 壳骨架,系统托盘/单实例/开机自启,DSH 插件挂载。
153
+
154
+ ## 贡献
155
+
156
+ 欢迎任何形式的贡献——修 bug、加功能、改进文档都行。请先阅读 [CONTRIBUTING.md](CONTRIBUTING.md)(含项目结构、开发约定、提交规范、PR 流程),并遵守 [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)。安全漏洞请走 [SECURITY.md](SECURITY.md) 的私密报告流程。
157
+
158
+ ## 致谢
159
+
160
+ - [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) —— 内核本体。
161
+ - 架构参考 [Hermes Agent Desktop](https://github.com/NousResearch/hermes-agent) 的壳/内核分离设计。
package/cordis.patch.yml CHANGED
@@ -1,4 +1,4 @@
1
- # dsh bundle patch: inserts this plugin into a profile's layer stack.
2
- - insert:
3
- - id: clean-desktop-shell
4
- name: 'dsh-clean-desktop-shell'
1
+ # dsh bundle patch: inserts this plugin into a profile's layer stack.
2
+ - insert:
3
+ - id: clean-desktop-shell
4
+ name: 'dsh-clean-desktop-shell'