Tools & Capabilities
@local/dsh-deepseek-web
AJYDX-swj/dsh-deepseek-web-dock · ★ 0
网页端ds接入dsh
安装
dsh plugin --profile web add 'github:AJYDX-swj/dsh-deepseek-web-dock#3a344a941fca13a0b4f557bbd0a49382822580cd'GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
For install and environment setup, plus plugin development tutorials, see DSH community docs ↗
README
Table of contents
Unofficial community plugin. Not affiliated with DeepSeek. It uses a normal DeepSeek web account and does not bypass sign-in, quotas or paid plans.
Features
| Action | Result |
|---|---|
| Single click, panel closed | Opens at the normal half-width layout after a 175 ms double-click check |
| Double click, within 175 ms | Opens directly in fullscreen; no half-width flash |
| Single click, panel open | Collapses the Sidebar using the native slide-out animation |
| Session row click, panel fullscreen | Switches to that session, then collapses the DeepSeek panel; the tab and page stay mounted |
| Escape | Collapses immediately and cancels a pending single-click action |
| Tab × | Closes the DeepSeek tab for real |
- Button sits directly above the Workspace section and follows DSH sidebar tokens.
- Uses an isolated Electron
webview, not an iframe, soX-Frame-Optionsis not a problem. - Follows the DSH light/dark theme.
- Saves the DeepSeek web sign-in locally and restores it on a same-origin warmup page before the chat app boots, so an existing session does not flash a login screen.
- Avoids DeepSeek's repeated “abnormal usage environment” advisory by writing its own
closeUnsafeEnvWarnpreference on a same-origin page before the chat app boots (the same state its X button writes). It does not spoof the User-Agent or change the actual isolation. The advisory is DeepSeek's warning about non-official embedding; use the official web/app if you do not accept it. - Closing the panel keeps the DeepSeek tab and page state; reopening returns to the same page.
- No Host routes, no Harness API-key access, no model-facing tools.
Requirements
- DSH Desktop with the right Sidebar and Electron webview support.
- Tested with DSH Desktop 0.2.1-rc.3 on Windows.
- Web-only DSH cannot run this plugin: the button is disabled without an isolated webview.
- No build step and no runtime npm dependencies.
Install
- Download or clone this repository to a stable folder.
- Install the folder through DSH Desktop's plugin manager (“install from local directory”), if available, or follow the manual install guide.
- Fully quit and relaunch DSH Desktop.
- Open a session and click DeepSeek Web above Workspace.
The manual path links this repository to:
<DSH_HOME>/profiles/desktop/node_modules/@local/dsh-deepseek-web
and adds @local/dsh-deepseek-web to the profile's dsh.profile.bundles.
The package name
@local/dsh-deepseek-webis the local DSH bundle identity; this project is not published to npm. The GitHub repository name can differ (for exampledsh-deepseek-web-dock).
Usage
- Open any session (an empty one is created if needed).
- Single click for half width; double click within 175 ms for fullscreen.
- Sign in to DeepSeek once in the embedded page.
- Single click again or press Esc to collapse the Sidebar.
- Click the button again to return to the same page without reloading.
The 175 ms check means a single click is intentionally delayed before it opens or closes the panel.
How it works
Workspace button
│ click / 175 ms decision
├── single → openTab + normal half-width layout
├── double → openTab + fullscreen
└── open + click / Esc → click native collapse control → slide-out
│
└── webview stays mounted, state preserved
- Host half: empty Cordis bundle entry.
- Client half: injects the button, registers the
deepseek-webSidebar tab and hostschat.deepseek.comthrough the Desktop browser bridge. - Webview lifecycle: acquires a guest lease, starts on
about:blank#<lease>, loads DeepSeek afterdom-ready, releases the lease on unmount. - Sign-in: reads DeepSeek's own
userToken/__appKit_userInfo, stores the logical value in DSHlocalStorageunderdsh.deepseek-web.auth.v1, and restores it after the next load. - Theme: mirrors DSH dark/light state into the guest.
See docs/ARCHITECTURE.md for details.
Security and privacy
- The web login token is stored only in the local DSH renderer's
localStorage. - The plugin never reads or sends a DeepSeek API key or Harness credentials into the guest.
- The guest runs sandboxed without Node, preload or Harness privileges.
- Web content belongs to DeepSeek; the plugin only hosts and restores the page.
See SECURITY.md.
Limitations
- Desktop only; the Web build has no isolated webview.
- Tested on Windows; macOS/Linux use the same Electron/DOM APIs but have not been verified on-device.
- DSH automatically makes the right Sidebar fullscreen below 768 px, so half width cannot be forced there.
- A double click must finish within 175 ms; slower clicks are treated as two single clicks.
- Login restoration depends on DeepSeek's current storage shape and may break after upstream changes.
- DSH right-Sidebar / webview APIs may change in future major releases.
- No conversation scraping, composer insertion or auto-send.
Development
There is no build step.
npm run check
The check validates the bundle manifest, client loader id, required files and JavaScript syntax without third-party dependencies. CI is in .github/workflows/check.yml.
For a no-Git upload through the GitHub web UI, see the Chinese guide GITHUB_WEB_UPLOAD.md.
License
MIT. The icon and the “store and restore the web sign-in” approach are inspired by S-anZZz/dsh-deepseek-web-sync (MIT). This is an independent implementation without its conversation-capture features.
DeepSeek, DeepSeek Harness and related marks belong to their respective owners.