Overview
@moonsand/dsh-desktop-restart
README / EN
Package documentation
Registry summary
dsh.pub verifies the pinned bundle contract, runtime facts, and distribution semantics. The complete README remains in the source repository.
Read the full README on GitHubLIMITATIONS
Known limitations
- **The restart is a hard kill** (`TerminateProcess`). The turn in flight is interrupted. Session history and anything already written to disk are unaffected. - **A restart is refused while a package manager is installing into the profile** (`409 installing`). Three signals are checked: the plugin manager's own `plugin-manager/install-state` reports (`installing` / `cancelling` / `applying`) — authoritative, but it never reports completion, so a phase expires after ten minutes; a manifest written within the last 10 seconds, which catches the moment an install *finishes*, since the lockfile is written last; and, as a fallback, a live `node` process whose command line mentions `pnpm`. The 10-second window is kept short on purpose: a finished install should not block a restart for longer than it takes to notice. All three are best-effort and fail open. - Only the Windows desktop app is supported. On a plain `dsh web` Host the route answers `409 not-desktop` and the button falls back to reloading the page. - When the Scheduled Task channel is blocked by policy, the helper falls back to launching PowerShell directly, which may flash a console window; the log marks it `(direct powershell)`. - No keyboard accelerator. The desktop shell hands shortcut combinations to a trusted native bridge before page handlers run, so a page-level listener cannot see them; adding one through the product's shortcut service would pull in a dependency this plugin does not otherwise need. - `tasklist.exe` is *not* used for process detection: on a measured machine it answers `Access denied` (exit 1) in this context, which would make every poll report the app as gone and start several copies. Detection filters by image name first (`Get-Process -Name`) and then checks `.Path`.
