@jaychang1989/dsh-webchat
Opens the official DeepSeek web app (chat.deepseek.com) in a window from inside DeepSeek Harness: one sidebar entry that opens the page directly, no reimplementation — the official page keeps its model picker, deep think, smart search, history and attachments. Fork of xmuwenxiang/dsh-web-chat, reduced to a launcher. 适合希望在DSH内直接使用官方原版网页聊天、保留完整原生功能的用户。
インストール
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:jaychang1989/dsh-webchatドキュメント
README 全文を読む ↗dsh-webchat
Opens the official chat.deepseek.com web app from inside DeepSeek Harness: one sidebar entry, and clicking it opens the official page directly.
It no longer reimplements the chat UI. The official web app is the client — model picker, deep think, smart search, history and attachments all live there. This plugin opens it and nothing else.
Why a window, and not a pane
Both embedding routes are closed, and that is a measurement rather than a choice:
chat.deepseek.comanswers withContent-Security-Policy: frame-ancestors 'none', so no iframe can host it;- the desktop build runs both windows with
webviewTag: falseand blockswill-attach-webview, so `` is unavailable too.
A real window is therefore the only faithful way to show the official page.
What opens, in order
Clicking the entry tries these in order and reports which one worked in a short toast:
app-window— a window created by the DSH desktop process itself (the desktop app is Electron). An already-open one is focused instead of duplicated.app-window-shell— a chromeless Edge/Chrome window (--app=) with its own--user-data-dir(~/.dsh/dsh-webchat/app-window), so its login stays separate from your everyday browser. Used when the host refuses (1).system-browser— handed to the OS default browser, so the button always does something.
Sign in once; the window's own profile keeps the session.
Install
dsh plugin --profile desktop add @jaychang1989/dsh-webchat
Or straight from this repository:
dsh plugin --profile desktop add github:jaychang1989/dsh-webchat
The npm package is scoped because the unscoped
dsh-webchatname belongs to the unmaintained upstream project. The scope does not change the plugin's identity: the entry id stayswebchat.
Switching from upstream, or from this plugin's 0.3.x: all of them insert the same id: webchat row, and one profile cannot hold the same entry id twice — boot fails on the duplicate. Remove the old package first, then add this one, then restart the desktop app.
Use
- Click the "DeepSeek 网页 / DeepSeek Web" entry in the sidebar — the page opens directly, there is no second click.
- Sign in once in the window it opens; afterwards just use the official web app.
A toast in the corner reports the outcome: 已打开 DeepSeek 网页 / 已交给系统默认浏览器打开 / a failure reason (an HTTP 404 usually means the host half is still an older version — restart the desktop app).
Difference from 0.3.x — this release deletes most of the plugin
| 0.3.x | 0.4.0 |
|---|---|
| Drove the page with Playwright and re-rendered messages in a custom panel | Does not drive the page; opens it. Custom panel removed |
Five agent tools (webchat_status/send/recover/import/transfer) | All removed |
| "Transfer to Harness", "recover from web", "import", "export" | All removed |
Local transcript store at ~/.dsh/dsh-webchat/transcripts.json | Removed (only the window profile directory remains) |
Fifteen /api/dsh-webchat/* routes | Two: state and open |
Depended on playwright-core; the client half needed React and a bundler | No runtime dependencies; plain-DOM client, no build step |
| ~3800 lines of build output | ~700 lines of hand-written JS |
Requirements
- DeepSeek Harness 0.2.0-rc.1 or a newer 0.2.x
- Node.js >= 22
- Strategy 2 needs Edge or Chrome installed; strategy 1 does not
Limitations
- The DeepSeek web front end applies its own rate limiting; the plugin hands the page over and does not mediate its login or requests.
- A strategy-1 window is owned by the DSH process: if you close the DSH main window while it is still open, DSH will not quit (Electron's
window-all-closed). Close that window too. - Reloading the plugin does not close a window that is already open, so a settings change cannot close the conversation you are reading.
Development and tests
node --test # 11 cases: host routes, window-strategy selection, and the browser half mounted into a DOM stand-in
There is no build step: lib/index.js and lib/client.js are the hand-written runtime. See MAINTAINING.md.
License
Apache-2.0. Original copyright belongs to the authors of xmuwenxiang/dsh-web-chat; see NOTICE.