# dsh-page-reload [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) > A **whole-page reload** shortcut for DeepSeek Harness — the recovery key for a wedged or white-screened UI. The built-in `page.refresh` (`Ctrl+R`) only refreshes the right sidebar panel. This plugin registers a real **full page reload** command, default `Ctrl+Shift+R`. > 中文: [README.md](README.md) ## Why this exists - The packaged DSH desktop build has **no page reload entry point** on Windows: the application menu is replaced by two hidden DevTools items, and the `reload` menu item is only registered in development mode (`...development ? [...] : []` in `app.asar` `lib/main.js`). - The built-in `page.refresh` (`Ctrl+R`) **only refreshes the right sidebar panel**, not the whole page (implemented in `dsh-client-ui-sidebar-right`'s `registerSidebarShortcuts`). - The usual culprit behind a white screen is a renderer-process OOM exit (confirmed by `userData\logs\crash-*-renderer.log`: `Desktop renderer exited: oom`). A page-level JS deadlock also needs a full reload. ## What it does Registers the `page.reload` command through DSH's own shortcut service (`@deepseek-ai/dsh-client-shortcuts`): - Default binding: `Ctrl+Shift+R` (Windows/Linux desktop and Web), `Cmd+Shift+R` on macOS. - The command appears in **Settings → Shortcuts** (`Ctrl+/`), where you can rebind or clear it. - Second safety layer: a capture-phase native `keydown` listener that still fires if the shortcut service is unavailable (it yields via `defaultPrevented` when both trigger). ## Install ```sh # from GitHub dsh plugin --profile desktop add github:/dsh-page-reload # or from a local checkout dsh plugin --profile desktop add link:/path/to/dsh-page-reload ``` Then restart DSH (tray icon → Quit → reopen). The plugin is client-only with zero runtime dependencies. The host half intentionally does nothing, so it can never fail activation on the desktop shell. ## Honest limits - The shortcut runs **inside the renderer process**. If that process has already crashed, no in-page key can help — Electron shows a fatal-error dialog; click **Restart**, or use the tray icon → Quit → reopen. - If the frontend is merely JS-deadlocked while the renderer is alive, `Ctrl+Shift+R` recovers it. - Never force-kill the process just to refresh — that truncates the session log. Quit via the tray instead. ## Diagnostics Execution state is written to `localStorage["dsh-page-reload-probe"]` (phases: `registered`, `raw-listener-installed`, `command-run`, `raw-listener-run`, `error`, …). To read it from disk: ```powershell $ud = Join-Path $env:APPDATA '@deepseek-ai\dsh-desktop\Local Storage\leveldb' Get-ChildItem $ud -File | ForEach-Object { Select-String -Path $_.FullName -Pattern 'dsh-page-reload-probe' } ``` ## Uninstall Remove the entry from your profile's `package.json` (`dependencies` and `dsh.profile.bundles`), delete the `node_modules` link, and restart. Keybinding preferences (stored in `userData/keybindings.json`) remain but are harmless. ## License MIT