← Back to home@IQzhan

dsh-rebooter

A lightweight plugin. The default web UI opens in its own window and does not need a browser. A desktop panel starts, stops, restarts, and updates DeepSeek Harness. Closing either window does not stop the service. | 轻量插件。默认打开的页面是独立窗口,不依赖浏览器。桌面面板用来开启、关闭、重启、更新。关掉窗口不会停掉服务。

Stars
0
Language
JavaScript
Created
Sep 17, 2026
Updated
Sep 20, 2026

Introduction

dsh-rebooter

English · 简体中文

A lightweight DeepSeek Harness plugin for start service / stop service / restart service / update / open. The default web UI is its own window and does not need a browser. The page window's power button opens the lifecycle menu; one desktop entry DSH Server for the status panel. Update stops DSH first, then upgrades every plugin in the current profile.

Plugin conventions: docs/dsh-plugin-spec.md. Design notes: docs/design-notes.md. Status panel: docs/status-panel.md.

How to use

A lightweight plugin. The default web UI is its own window and does not need a browser. Open does not launch Chrome, Edge, or another browser. A program bound with the gear still opens instead. Double-click DSH Server on the desktop to open the panel, which is the same kind of window. The pictures show the Chinese labels.

Both windows are only a display shell. Closing or minimizing them does not stop a running service or the supervisor. To stop, use Stop service or Update and stop. The window's own close button only closes that window.

The separate window needs the OS web component: WebView2 on Windows, the built-in WebKit on macOS, and WebKitGTK on Linux. If that component is missing, or the window cannot be created, the plugin does not install it. DSH Server and the DSH page then open with the system default program, usually the browser. In the browser there is no top-right button group, blank areas cannot drag the window, and Browse on the panel cannot pick a file — type the path. Start, stop, restart, update, language, and theme still work.

Desktop entry named DSH Server

Double-click this icon to open the panel.

Panel while the service is stopped

Stopped: start, update, update and start. If "open the page when the service starts" is checked, the next start also opens the page.

Panel while the service is running

Running: stop, restart, update and stop, update and restart, open the page. The gear binds another program; after that, Open opens that program.

Power menu on the DSH page

The picture above is that separate window, not a browser tab. The top-right starts empty. Move the pointer into the small corner where the top edge meets the right edge, and the buttons appear: power, minimize, maximize, close. Move away and they hide. The power button opens the four items above; Start is not in that menu. The close control at the far right only closes this window.

What it does

ActionMenuPanel / CLI
startnoyes
stopyesyes
restartyesyes
updatenoyes (when stopped)
update-stopyesyes
update-restartyesyes
opennoyes (when running)
panel—opens DSH Server

The four menu items open from the power button on the page window's control bar. Clicking one posts /api/dsh-rebooter/action. Start is not in that menu.

A detached Node supervisor keeps DSH alive after start: an unexpected host exit is relaunched until you stop. Starting the service no longer opens the browser unless Open UI when the service starts is checked in the panel (or you pass --open). Stopping the service also closes the page window. The window close button only closes that window.

Install

node build-rebooter.mjs
dsh plugin --profile web add ./package

Requires Node 24 or newer. The panel window uses the OS web view: WebView2 on Windows, system WebKit on macOS, WebKitGTK on Linux. If that runtime is missing, DSH Server and the DSH page open with the default URL handler. The panel follows the UI language (zh or en). Open UI opens that page in its own window. A bound program, if set, still opens instead.

Then restart dsh web. Host mount also tries to write the panel entry. To (re)write it by hand:

node package/lib/cli.cjs desktop

That writes package/panel/ entry files and a Desktop shortcut named DSH Server. Double-click it to open the status panel. Open the panel anytime with node package/lib/cli.cjs panel.

Update / uninstall

git pull && node build-rebooter.mjs

Uninstall: dsh plugin --profile web remove dsh-rebooter. State lives in $DSH_HOME/rebooter/ and is left in place.

The in-app Update actions run dsh plugin --profile web update --latest, which updates every installed plugin, not only this one.

Layout

FileRole
dsh-rebooter-core.jsPure policy: action names, ports, availability matrix
dsh-rebooter-runtime.jsNode IO: state dir, supervisor, jobs, desktop entry
dsh-rebooter-panel.jsStatus panel HTTP + HTML
dsh-rebooter.host.jsCordis adapter: records launch, HTTP, dispatches CLI
dsh-rebooter.client.jsNo page UI; the menu is on the window bar
dsh-rebooter-cli.jsstart / stop / restart / update* / open / panel / desktop
build-rebooter.mjsBuilds package/
docs/dsh-plugin-spec.mdDSH plugin conventions
docs/design-notes.mdWhy this plugin is shaped this way
docs/status-panel.mdDSH Server panel design

Tests

node verify.mjs

8 suites, 182 assertions: policy core · runtime · panel · adapter · package · menu · bilingual docs · portability guard.

Scratch files stay in-repo under .tmp/, never the system temp directory.

License

MIT