DeepSeek Web Dock

DeepSeek Web Dock for DSH

在 DeepSeek Harness Desktop 左侧「工作区」上方加入一个按钮,
把免费的 DeepSeek 网页版接入原生右侧栏。

English · 安装指南 · 实现说明 · 网页上传 · 更新日志

> 非官方社区插件,与 DeepSeek 官方无关。插件使用 DeepSeek 网页版账号,不绕过登录、额度或付费限制。 ## 功能 | 操作 | 行为 | | --- | --- | | **单击**(关闭状态) | 等待 175 ms 判定后,以普通半屏宽度打开 | | **双击**(175 ms 内) | 直接全屏打开,不会先闪一下半屏 | | **单击**(已打开) | 等待判定后,以原生收起动画关闭右侧栏 | | **Esc** | 立即收起;同时取消尚未执行的单击动作 | | Tab 上的 **×** | 真正关闭 DeepSeek 标签页 | - 按钮位于「工作区」标题上方,使用 DSH 侧栏主题变量。 - 网页运行在 Electron 隔离 `webview` 中,不是 iframe,不受 `X-Frame-Options` 限制。 - 自动跟随 DSH 明暗主题。 - 首次在网页中登录后,自动保存,并在进入主页面前预注入网页登录态,避免已登录时先闪一下登录界面。 - 规避 DeepSeek 每次启动重复弹出的“使用环境异常”提示:进入主页前在 DeepSeek 同源页面写入它自己的 `closeUnsafeEnvWarn` 关闭偏好(等同点击提示上的 ×),不修改 User-Agent,也不改变实际隔离。该提示是 DeepSeek 对非官方嵌入环境的风险提醒;如不接受,请使用官方网页/应用。 - 关闭右栏时保留标签和网页状态,再次打开回到原页面;要销毁页面请点标签上的 ×。 - 没有 Host 路由、Harness API Key 读取或模型工具;Harness 凭证不会进入网页。 ## 系统要求 - **DeepSeek Harness Desktop**,需要右侧栏和 Electron `webview` 支持。 - 当前版本在 **DSH Desktop 0.2.1-rc.3(Windows)** 上实测。 - 普通浏览器(Web 版 DSH)不可用:没有隔离 webview,按钮会被禁用。 - 插件没有构建步骤,也没有运行时 npm 依赖。 ## 安装 1. 下载或 clone 本仓库到一个稳定目录。 2. 在 DSH Desktop 的插件管理中使用“从本地目录安装”(如果你的版本提供该入口);或按 [安装指南](docs/INSTALL.md) 手动链接到 `desktop` profile。 3. 完全退出 DSH Desktop 后重新启动。 4. 打开任意会话,点击左侧「工作区」上方的 **DeepSeek 网页版**。 > 仅关闭窗口到托盘不会重新加载 Host 插件;需要真正退出应用。 > > 包名 `@local/dsh-deepseek-web` 是 DSH 本地 bundle 的安装标识,本项目不发布 npm;GitHub 仓库名可以独立取作 `dsh-deepseek-web-dock`。 手动安装的核心是把本目录链接到: ```text /profiles/desktop/node_modules/@local/dsh-deepseek-web ``` 并把 `@local/dsh-deepseek-web` 加入该 profile 的 `dsh.profile.bundles`。完整步骤见 [docs/INSTALL.md](docs/INSTALL.md)。 ## 使用 1. 打开任意会话(没有会话时会先创建一个空会话)。 2. 单击按钮:半屏打开;双击按钮:全屏打开。 3. 第一次使用时,在右侧网页里登录 DeepSeek 账号。之后插件会恢复网页登录态。 4. 再次单击按钮或按 **Esc**:收起右栏。动画与鼠标点右栏右上角收起按钮一致。 5. 再点按钮会回到之前的网页页面,不会重新加载。 单击动作有 **175 ms** 的判定延迟,用来区分双击;双击会取消单击并直接进入全屏。 ## 实现概览 ```text 工作区按钮 │ click / 175ms 判定 ├── 单击 → openTab + 半屏(push) ├── 双击 → openTab + 全屏(fullscreen) └── 已打开单击 / Esc → 点击原生收起按钮 → 滑出动画 │ └── webview 保持挂载,状态保留 ``` - **Host**:空实现,只负责作为 Cordis bundle 被加载。 - **Client**:在 Workspace 区头前插入按钮;注册 `deepseek-web` 右侧栏 Tab;通过 Desktop browser bridge 申请隔离 guest。 - **webview**:`about:blank#` 启动,`dom-ready` 后加载 `https://chat.deepseek.com/`,离开时释放 lease。 - **登录**:读取 DeepSeek 自己的 `userToken` / `__appKit_userInfo`,保存到 DSH 文档 `localStorage` 的 `dsh.deepseek-web.auth.v1`,下次加载后恢复。 - **主题**:把 DSH 的明暗状态同步到网页的 `data-ds-dark-theme` 和 `color-scheme`。 更完整的生命周期、接口与安全边界见 [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)。 ## 登录与隐私 - 网页登录 token 只保存在本机 DSH 渲染进程的 `localStorage`。 - 插件不读取、保存或上传 DeepSeek API Key,也不把 Harness 凭证传给网页。 - 内嵌网页运行在 Electron sandbox 中,不具备 Node、preload 或 Harness 权限。 - 网页内容属于 DeepSeek;插件只负责承载和恢复登录状态。 安全细节与漏洞报告方式见 [SECURITY.md](SECURITY.md)。 ## 兼容性与已知限制 - 仅支持 **DSH Desktop**;Web 版按钮禁用。 - Windows 已实测;macOS/Linux 使用同一套 Electron/DOM 接口,但未实机验证。 - 右栏宽度低于 768 px 时,DSH 会自动全屏展示,此时无法强制半屏。 - 双击必须在 175 ms 内完成;更慢的两次点击会按两次单击处理。 - 登录恢复依赖 DeepSeek 当前的 localStorage 结构;官方改版后可能需要重新登录一次。 - 插件依赖 DSH 的右侧栏、`sidebar.right.pane.tab` 和 Desktop webview 桥;DSH 大版本升级后建议回归一次。 - 只提供网页承载,不包含抓取对话、回填输入框或自动发送功能。 ## 故障排查 **按钮没出现** - 确认使用 DSH Desktop,且左侧栏处于展开状态。 - 确认 profile 的 `dsh.profile.bundles` 包含 `@local/dsh-deepseek-web`。 - 完全退出并重启 DSH;查看客户端控制台是否有插件加载错误。 **右侧栏空白或加载失败** - 确认网络可以访问 `https://chat.deepseek.com/`。 - 确认不是普通浏览器环境。 - 关闭后重新打开;插件会重新申请 webview guest。 **登录没有恢复** - 在网页里重新登录一次。 - DeepSeek 可能修改了 `userToken` / `__appKit_userInfo` 的格式;可提交 issue。 **双击变成两次单击** - 两次点击需在 175 ms 内。单击后等待 175 ms 才会执行,属于预期行为。 ## 开发 无需构建,直接修改 `client.js` / `index.js`。仓库自带一个不依赖第三方包的静态检查: ```bash npm run check ``` CI 配置在 [.github/workflows/check.yml](.github/workflows/check.yml)。 ```text index.js Host 半部:空实现 client.js Client 半部:按钮、侧栏 Tab、webview、主题、登录恢复 cordis.patch.yml bundle patch icon.svg 插件图标 package.json DSH bundle / client 声明 scripts/check.mjs 清单、bundle id 与语法检查 docs/INSTALL.md 手动安装与卸载 docs/ARCHITECTURE.md 实现与接口说明 ``` ## 发布到 GitHub 仓库内容已经按 GitHub 根目录组织。建议仓库名:`dsh-deepseek-web-dock`。 不想安装 Git 时,按 [从 GitHub 网页创建并上传](GITHUB_WEB_UPLOAD.md) 操作即可。 ```bash git init git add . git commit -m "feat: initial release" git branch -M main # 先在 GitHub 创建一个空仓库,不要勾选自动生成 README git remote add origin git push -u origin main ``` 如果本机没有 Git,可以用 GitHub Desktop,或在 GitHub 新建空仓库后用网页的 “uploading an existing file” 上传整个目录;注意 `.github/` 和 `.gitignore` 是隐藏目录/文件,需要让文件选择器显示隐藏项。不要上传 `.git`、`node_modules` 或本机 profile。 建议的仓库描述: > DeepSeek Web Dock for DeepSeek Harness: open the free DeepSeek web chat in the native right sidebar, with half/fullscreen, native close animation, theme sync and persistent web sign-in. 建议 topics: ```text dsh dsh-plugin deepseek deepseek-harness electron sidebar webview ``` 注意不要把本机 `.dsh` profile、登录 token、`node_modules` 或包含私人会话的截图提交进仓库。 ## 许可 [MIT](LICENSE)。图标与“网页登录态保存/恢复”的做法参考了 [S-anZZz/dsh-deepseek-web-sync](https://github.com/S-anZZz/dsh-deepseek-web-sync)(MIT);本项目为独立实现,不包含其对话抓取/回填功能。 DeepSeek、DeepSeek Harness 及相关商标归各自权利人所有。