One-click desktop launcher for DSH Web: creates a Windows .lnk with a WPF-style startup popup (progress + timeout), then opens the authenticated browser; plus a floating shutdown button that exits dsh gracefully via ctx.appExit.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:H1Kariiiiiii/dsh-desktop-launcher2
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Icon console for the DeepSeek Harness desktop application: import an icon once and apply it to the desktop shortcut, the Start Menu shortcut, the application window image and the system tray image — plus one-click restart and graceful exit.
中文 · English
⚡ Install (copy this single line)
pwsh -File ~\.dsh\tools\dsh-desktop-cli.ps1 plugin --profile desktop add github:H1Kariiiiiii/dsh-icon-console
The desktop profile is managed exclusively by the Electron application, so an ordinary
dshcommand refuses to touch it — hence the desktop's own CLI. Restart the desktop app afterwards.
Features
Icon customization (core)
| Target | Takes effect | Notes |
|---|---|---|
| Desktop shortcut | Immediately | Rewrites IconLocation on DeepSeek Harness.lnk |
| Start Menu shortcut | Immediately | Same mechanism |
| Application window icon | After restart | Replaces <install>/resources/icon.png (window & taskbar) |
| System tray icon | After restart | Replaces <install>/resources/tray.ico |
- Import: upload from this machine (file picker, base64) or type a disk path
- Formats: shortcuts need
.ico; window/tray images accept.icoand.png - Automatic backup: the pristine icons are copied to
~/.dsh/icon-console/backup/on first run - One-click restore: put the official icons back (shortcuts immediately; window/tray after restart)
- Icon library: keep favourites in
~/.dsh/icon-console/library/, reuse or delete them anytime
Application control
- Restart: ends the current Host process; the desktop shell then shows its official recovery dialog — click 重启 / Restart (that is the default button, so Enter is enough)
- Exit: ends the Host process gracefully
Why is restart implemented this way? The window and process lifecycle belong to the Electron shell; plugins run inside the Host child. The official market (dsh-market) hard-codes
allowRestart: falseunder a desktop host for exactly this reason — relaunching a raw Electron process would bypass the desktop's launcher lifecycle. So this plugin hands the restart back to the shell's own recovery flow, which is the lifecycle-correct path.
Configuration (Settings → Plugins → plugin configuration → Icon console)
| Field | Default | Description |
|---|---|---|
| Enable plugin | true |
Master switch |
| Auto re-apply | false |
Re-apply the remembered icon when a shortcut is found pointing elsewhere |
| Include Start Menu | true |
Process the Start Menu shortcut together with the desktop one |
Settings live in ~/.dsh/icon-console/state.json and in the settings form (volatile fields).
Installation
Requires the DeepSeek Harness desktop application (Electron). Every HTTP route is loopback-only.
Recommended: install from GitHub
# The desktop profile is Electron-owned; use the desktop's own CLI
pwsh -File ~\.dsh\tools\dsh-desktop-cli.ps1 plugin --profile desktop add github:H1Kariiiiiii/dsh-icon-console
# Then restart the desktop app
Development: install from local source
pwsh -File ~\.dsh\tools\dsh-desktop-cli.ps1 plugin --profile desktop add "file:C:/path/dsh-icon-console"
A
file:dependency is copied (not linked) across drives, so after editing source re-runadd(or deletenode_modules/dsh-icon-consoleandpnpm install) to sync.
Verify after install
# The composed layer should list dsh-icon-console
pwsh -File ~\.dsh\tools\verify-desktop-profile.mjs
After restarting the desktop app, open Settings → Plugins → plugin configuration; the "Icon console" card should be there.
Uninstall
pwsh -File ~\.dsh\tools\dsh-desktop-cli.ps1 plugin --profile desktop remove dsh-icon-console
# The icon library and backups stay in ~/.dsh/icon-console/ — delete manually if unwanted
Compatibility
Verified against desktop 0.2.0-rc.2 (bundled DSH runtime):
| Layer | Status |
|---|---|
Host routes (ctx.webServer.register, exact + loopback fence) |
✅ Stable |
Settings form (0.1.7+ .volatile() + describe() / update() contract) |
✅ Implemented against the new contract |
ctx.appExit |
✅ Optional read, process.exit fallback |
Client bundle (window.__ModuleLoader__.load lazy CJS factory) |
⚠️ Private protocol, may change |
Client slot (settings.section, shared with third-party cards such as wallpaper-engine) |
⚠️ Contract details may change |
Icon file replacement (resources/) |
✅ Directory is writable; an app upgrade overwrites it, just apply again |
Degradation guarantee: even if the client UI breaks entirely, icons can still be applied through the HTTP routes; shortcut icons never require an app restart.
FAQ
Q: I selected a window/tray icon but nothing changed. A: Those two require an application restart (Electron reads them once at startup). Use the "Restart" button, or restart manually.
Q: The shortcut icon did not refresh.
A: Windows Explorer caches icons. Press F5 on the desktop, or restart Explorer (taskkill /f /im explorer.exe & start explorer).
Q: "Installation directory not found".
A: Window/tray icons need a locatable install root. Point DSH_DESKTOP_INSTALL at the directory containing resources/.
Q: Can a PNG be used for a shortcut?
A: No — Windows shortcuts only accept .ico. A .png works for the window and tray images.
Q: An app upgrade reverted my icons.
A: Upgrades replace resources/. Apply the icon again; the pristine backup stays in ~/.dsh/icon-console/backup/.
Background
- This plugin was converted from
dsh-desktop-launcher2(a desktop launcher for the dsh web era). The desktop application already starts from a double click and ships its own startup screen and tray-quit entry, so "create a launcher shortcut and open a browser" had no purpose left. - It now focuses on what the desktop genuinely lacks: icon customization (window / tray / shortcuts) and convenient application control.
- The original launcher was ported from
@linxin666/dsh-desktop-launcher@0.2.8(Apache-2.0). The current code is rewritten against the desktop 0.2.0 architecture; only the license and credit remain.
Structure
dsh-icon-console/
├── lib/
│ ├── index.js # host entry: routes, settings (volatile contract), backup
│ ├── client.js # client bundle: settings card UI
│ └── host/
│ ├── icons.js # icon validation / backup / shortcut(.lnk) / resources writes
│ └── restart.js # exit and shell-mediated restart
├── assets/ # bundled dsh icons
├── cordis.patch.yml # bundle patch layer
├── package.json
└── LICENSE # Apache-2.0
Credits
- The original launcher's functionality and UI were ported from
@linxin666/dsh-desktop-launcher@0.2.8(Apache-2.0) in the zhu1090093659/dsh-web-ui repository. - Icon assets come from that package.
License
Apache-2.0 (ported parts retain their original copyright notice).
Links
More in this category
zhu1090093659/dsh-web#packages/dsh-task-board★ 8370
Task board for the dsh web GUI: a sidebar multi-column kanban whose cards run in real DSH agent sessions and can also be scheduled with cron expressions, executed host-side even with the browser closed.
zhu1090093659/dsh-web#packages/dsh-web-all★ 8370
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
ccch1mneyyy/dsh-TUI★ 4036
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 4004
A fixed-corner whale widget for the DSH web GUI — balance, today's usage and per-turn cost with peak/off-peak pricing, editable balance-alert and daily-budget bubbles, a module-based custom bubble queue with A/B weighted choices and random lines or images, 30+ vendor templates (OpenAI, OpenRouter, Kimi, SiliconFlow, Ark, Zhipu, MiniMax and more) with per-model balance and subscription quota, plus task-end sound, imported audio, custom roles and a resource manager. Local-only, no telemetry.
omdsh-dev/DSH-better-sidebar★ 3992
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
Devin-AXIS/deepseek-design#deepseek-idesign★ 1418
Visual design studio for websites, app prototypes, posters, cards, reports, and magazines, with templates, direct element editing, selection-aware AI draft handoff, and export.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.