dsh-clean-desktop-shell 0.1.2 → 0.1.4
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 +192 -168
- package/README.md +175 -161
- package/build/icon.ico +0 -0
- package/electron/aumid.js +17 -0
- package/electron/config.js +3 -2
- package/electron/main.js +65 -8
- package/electron/shortcut.js +130 -0
- package/electron/tray.js +24 -10
- package/electron/window.js +21 -2
- package/lib/client.js +15 -6
- package/lib/index.js +323 -6
- package/package.json +5 -1
- package/scripts/build.mjs +12 -3
- package/src/client/client.js +15 -6
- package/src/host/index.js +323 -6
- package/version.txt +1 -1
package/README.en.md
CHANGED
|
@@ -1,168 +1,192 @@
|
|
|
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,
|
|
8
|
-
|
|
9
|
-
[English](README.en.md) · [中文](README.md)
|
|
10
|
-
|
|
11
|
-
[](https://github.com/Icather/dsh-clean-desktop-shell)
|
|
12
|
-
[](LICENSE)
|
|
13
|
-
[](https://github.com/Icather/dsh-clean-desktop-shell/releases/latest)
|
|
14
|
-
[](https://github.com/deepseek-ai/deepseek-harness)
|
|
15
|
-
[](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,
|
|
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
|
-
##
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
-
|
|
131
|
-
|
|
132
|
-
- The
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
npm
|
|
141
|
-
npm run
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
-
|
|
154
|
-
|
|
155
|
-
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
-
|
|
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, just like a normal app. No frosted glass, no fancy materials. **Clean.**
|
|
8
|
+
|
|
9
|
+
[English](README.en.md) · [中文](README.md)
|
|
10
|
+
|
|
11
|
+
[](https://github.com/Icather/dsh-clean-desktop-shell)
|
|
12
|
+
[](LICENSE)
|
|
13
|
+
[](https://github.com/Icather/dsh-clean-desktop-shell/releases/latest)
|
|
14
|
+
[](https://github.com/deepseek-ai/deepseek-harness)
|
|
15
|
+
[](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, 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
|
+
## Install
|
|
33
|
+
|
|
34
|
+
**Option 1: download the installer from Releases (for a standalone desktop app)**
|
|
35
|
+
|
|
36
|
+
- Windows: `DSH-Clean-Desktop-Shell-Setup-<version>.exe`
|
|
37
|
+
- macOS: `DSH-Clean-Desktop-Shell-<version>.dmg` (Intel) or `-arm64.dmg` (Apple Silicon)
|
|
38
|
+
|
|
39
|
+
The installer **creates a desktop shortcut automatically** and provides the full desktop experience (tray). 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.
|
|
40
|
+
|
|
41
|
+
**Option 2: install as a DSH plugin (DSH ecosystem users)**
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
dsh plugin --profile web add dsh-clean-desktop-shell
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Restart `dsh web` and the desktop shell window **opens automatically** (the first run prepares the Electron runtime over the network, ~1-2 minutes).
|
|
48
|
+
|
|
49
|
+
> Option 2 gives you a shell that launches alongside DSH: the window is spawned by the plugin when `dsh web` starts, with **no standalone installer / desktop icon**. For a double-clickable app with a desktop shortcut and auto-update, use Option 1. The core window experience is identical either way.
|
|
50
|
+
|
|
51
|
+
> The shell needs a reachable `dsh web` service (local or configured remote address). See Usage.
|
|
52
|
+
|
|
53
|
+
### Windows SmartScreen warning
|
|
54
|
+
|
|
55
|
+
**Why does the warning appear?**
|
|
56
|
+
|
|
57
|
+
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`).
|
|
58
|
+
|
|
59
|
+
**When Edge downloads the file:**
|
|
60
|
+
|
|
61
|
+
It may be flagged as "not commonly downloaded". To keep it:
|
|
62
|
+
|
|
63
|
+
1. Hover the download entry and click the `...` menu on the right
|
|
64
|
+
2. Choose **Keep**
|
|
65
|
+
3. Confirm with **Keep anyway**
|
|
66
|
+
|
|
67
|
+
**When you double-click the installer:**
|
|
68
|
+
|
|
69
|
+
A blue dialog appears: "Windows protected your PC" — Microsoft Defender SmartScreen prevented an unrecognized app from starting.
|
|
70
|
+
|
|
71
|
+
1. Click **More info**
|
|
72
|
+
2. Verify the file name is `DSH-Clean-Desktop-Shell-Setup-<version>.exe`
|
|
73
|
+
3. Click **Run anyway**
|
|
74
|
+
|
|
75
|
+
**Alternative: unblock the file once (recommended)**
|
|
76
|
+
|
|
77
|
+
Right-click the installer → Properties → General → tick **Unblock** at the bottom → OK. No more warnings afterwards.
|
|
78
|
+
|
|
79
|
+
Or bulk-unblock via PowerShell:
|
|
80
|
+
|
|
81
|
+
```powershell
|
|
82
|
+
Unblock-File -Path "$env:USERPROFILE\Downloads\DSH-Clean-Desktop-Shell-Setup-*.exe"
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
> 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.
|
|
86
|
+
|
|
87
|
+
## Architecture
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
┌─────────────────── Core (dsh web / headless service) ───────────────────┐
|
|
91
|
+
│ Sessions · Agent · Plugins · Memory live here, decoupled from UI │
|
|
92
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
93
|
+
▲
|
|
94
|
+
┌───────────────┴───────────────┐
|
|
95
|
+
│ dsh-clean-desktop-shell │
|
|
96
|
+
│ Electron shell (client) │
|
|
97
|
+
│ tray · single-instance · │
|
|
98
|
+
│ │
|
|
99
|
+
└────────────────────────────────┘
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
- **Default**: loads the local `127.0.0.1:3080` (your configured web profile, zero migration).
|
|
103
|
+
- **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.
|
|
104
|
+
|
|
105
|
+
### Platform matrix
|
|
106
|
+
|
|
107
|
+
| Platform | Shell | Status |
|
|
108
|
+
|:--|:--|:--|
|
|
109
|
+
| Windows | ✅ Electron (frameless + native window buttons) | Released (NSIS installer) |
|
|
110
|
+
| macOS | ✅ Electron (hiddenInset) | Released (CI builds Intel + Apple Silicon DMG) |
|
|
111
|
+
| Linux | — (browser / PWA to the core) | Not planned |
|
|
112
|
+
| Termux / phone / tablet | — (headless / PWA to the core) | Covered by remote core access |
|
|
113
|
+
|
|
114
|
+
## Usage
|
|
115
|
+
|
|
116
|
+
1. Start `dsh web` (or configure a remote service address).
|
|
117
|
+
2. Launch the shell: it auto-detects local 3080 — loads the page if the backend is up, otherwise shows the "backend offline" screen where you can start it in one click.
|
|
118
|
+
3. Drag the window by its top area (right side reserved for native buttons); close minimizes to tray by default.
|
|
119
|
+
|
|
120
|
+
**All backend controls live in the tray** — the main window stays a pure shell:
|
|
121
|
+
|
|
122
|
+
- Start / restart / stop the backend (with progress dialogs; stopping really
|
|
123
|
+
shuts down the service on 3080, including externally started instances)
|
|
124
|
+
- Auto-detect backend · set the backend install folder (auto-detect default)
|
|
125
|
+
- Reload window · check for updates · repo homepage
|
|
126
|
+
|
|
127
|
+
**Window reliability (Edge-style instant refresh):**
|
|
128
|
+
|
|
129
|
+
- Shows immediately on launch, never waits for the backend
|
|
130
|
+
- While the backend is down, a local "backend offline" screen is shown and
|
|
131
|
+
re-probed; the real page loads automatically the moment it answers
|
|
132
|
+
- The instant the backend stops (tray stop, kill or crash) the window flips
|
|
133
|
+
back to the offline screen — a stale page never fakes "still alive"
|
|
134
|
+
- The offline screen has self-service buttons: reload / start backend /
|
|
135
|
+
auto-detect backend / set backend install folder
|
|
136
|
+
|
|
137
|
+
## Development
|
|
138
|
+
|
|
139
|
+
```sh
|
|
140
|
+
npm install
|
|
141
|
+
npm run build # build the plugin bundle
|
|
142
|
+
npm run dev # launch the shell (dev mode)
|
|
143
|
+
npm run pack # package NSIS (Win) / DMG (mac)
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Changelog
|
|
147
|
+
|
|
148
|
+
### 0.1.4
|
|
149
|
+
- Branch 2 (plugin-market distribution) is now live: `dsh plugin add` →
|
|
150
|
+
restart `dsh web` → the desktop shell opens automatically. The Electron
|
|
151
|
+
runtime is self-provisioned by the plugin (local reuse / network-aware
|
|
152
|
+
source selection).
|
|
153
|
+
- Desktop shortcut: first-run prompt + one-click "create desktop shortcut"
|
|
154
|
+
in the tray (both the installer and plugin forms).
|
|
155
|
+
- Icons: Windows taskbar and macOS Dock show the whale icon in bare-runtime
|
|
156
|
+
(plugin) mode.
|
|
157
|
+
- Auto-launch (login item) removed — both forms are now fully manual.
|
|
158
|
+
|
|
159
|
+
### 0.1.2
|
|
160
|
+
- Windows auto-update: tray "check for updates" now downloads in the
|
|
161
|
+
background with progress and installs on restart (electron-updater);
|
|
162
|
+
macOS keeps the manual download flow.
|
|
163
|
+
- Launch-time backend auto-start removed (fully manual now, no longer
|
|
164
|
+
fights an explicit "stop backend").
|
|
165
|
+
- Contributor files added (CONTRIBUTING / CoC / SECURITY / issue & PR
|
|
166
|
+
templates).
|
|
167
|
+
- README: Windows SmartScreen install guide; clarified that "plugin
|
|
168
|
+
registration ≠ installing the desktop app".
|
|
169
|
+
|
|
170
|
+
### 0.1.1
|
|
171
|
+
- Backend lifecycle: fixed `spawn EINVAL` / stuck "starting" on Windows;
|
|
172
|
+
"stop backend" now really shuts the service down (including externally
|
|
173
|
+
started instances); start/restart/stop show progress dialogs.
|
|
174
|
+
- Window reliability: shows instantly on double-click; flips to the offline
|
|
175
|
+
screen the moment the backend stops; auto-reconnects when it comes back
|
|
176
|
+
(Edge-style instant refresh).
|
|
177
|
+
- Offline screen self-service: reload / start backend / auto-detect backend /
|
|
178
|
+
set backend install folder.
|
|
179
|
+
- Tray: new "reload window" item; macOS builds released (Intel + Apple
|
|
180
|
+
Silicon DMG).
|
|
181
|
+
|
|
182
|
+
### 0.1.0
|
|
183
|
+
- Initial release: Electron shell skeleton, system tray / single instance, DSH plugin mounting.
|
|
184
|
+
|
|
185
|
+
## Contributing
|
|
186
|
+
|
|
187
|
+
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).
|
|
188
|
+
|
|
189
|
+
## Credits
|
|
190
|
+
|
|
191
|
+
- [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) — the core.
|
|
192
|
+
- Architecture inspired by [Hermes Agent Desktop](https://github.com/NousResearch/hermes-agent)'s shell/core separation.
|