dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
仅 Desktop。把 DeepSeek 网页版放进 Harness 右侧栏:同步主题、自动打开、网页登录一次即可保持,并一键把提问带入当前对话。
把 DeepSeek 网页版常驻在 DeepSeek Harness 主对话右侧。
左边用 Harness 的 DeepSeek API 对话,右边用 DeepSeek 网页版;主题、登录和提问都尽量连在一起。
技术来源 / Author:ZCFE327
一个面向 DeepSeek Harness Desktop 的右侧栏插件:不使用 iframe、不弹外部链接、不代理聊天内容,用 Electron 隔离
webview承载真实网页版,并把主题、登录态和提问文本接入 Harness。
3.1.0 更新:新增“上下文”抓取、抓取后自动填入、填入并发送(若
inputActions暴露发送方法)、主题手动重同步和登录恢复失败提示;抓取预览会标注来源与读取边界。
DeepSeek API 适合在 Harness 里执行任务,DeepSeek 网页版则保留了完整的聊天体验、历史会话和网页端能力。过去要在两者之间切换,通常需要:
X-Frame-Options、弹窗和外部浏览器跳转。这个插件把上述动作收进一个右侧栏标签:打开 Harness 时网页版自动出现,主题跟随 Harness,网页登录只需一次,选中的提问可以直接进入 Harness 输入框。
| 能力 | 行为 |
|---|---|
| 右侧栏常驻 | 注册为右侧栏原生 Tab,不占用主对话,不覆盖 Harness 自带面板 |
| 自动打开 | 每个会话第一次进入时自动打开;手动关闭后当前运行期间不反复打扰,下次启动再次打开 |
| 真实网页版 | 使用 Electron 隔离 webview 加载 chat.deepseek.com,不是仿制 UI,也不是 iframe |
| 不弹链接 | 不申请 guest 弹窗权限,不提供“在浏览器中打开”入口,新窗口请求被忽略 |
| 主题同步 | 读取 Harness 当前 --dsw-* token,覆盖网页配色、字体、明暗模式和强调色 |
| 美化插件同步 | 第三方主题通过 theme.overrideTokens 写入的 token 会自动进入同步范围 |
| 壁纸同步 | Harness 页面壁纸作为浅水印进入网页,顶部还有一条同款纹理细条 |
| 登录保持 | 捕获 DeepSeek 网页版自己的版本化登录存储,下次启动自动恢复;恢复失败会明确提示 |
| 提问带入 | 抓取网页选区、输入框文本、最近一条提问或最近几条对话上下文,编辑后填入当前 Harness 输入框 |
| 自动填入 | 可选开关:抓取成功后直接填入左侧输入框,发送仍由你手动完成 |
| 填入并发送 | 在预览区一键填入并尝试发送;若 inputActions 没有公开发送方法,则退回为仅填入并提示按 Enter |
| 主题重同步 | 顶部按钮手动重新推送 --dsw-* token 与壁纸,应对网页版样式更新后的遗漏 |
| 来源与边界 | 预览明确标注“来自选区 / 输入框 / 最近提问 / 最近对话”,并说明只读取用户点击的那一处或可见的最近消息 |
| 纯文本桥 | 只有用户主动抓取的文本越过 guest 边界,不上传页面内容,不注入 Node 权限 |
换电脑安装、首次登录和常见问题,见 QUICKSTART.md。
| 环境 | 状态 |
|---|---|
| DeepSeek Harness Desktop 0.2.1-rc.2(macOS) | 已验证 |
| DSH Desktop 0.2.x,右侧栏与 webview 可用 | 预期可用;升级后请做一次标签、主题、抓取和填入回归 |
| 浏览器中的 Harness Web | 不支持:没有隔离 webview |
| DeepSeek 网页版 DOM / 登录存储 / 样式变量变更 | 可能导致抓取、登录恢复或主题同步失效,需要跟随更新 |
webview 能力;面板会明确显示“仅桌面版”,不会偷偷打开外部浏览器。下载或克隆本仓库到本地目录:
git clone https://github.com/S-anZZz/dsh-deepseek-web-sync.git
在 Harness 的 插件管理 中选择从本地目录安装,或调用:
plugin_manager install_bundle <本仓库绝对路径>
安装完成后插件会自动启用;每个会话第一次打开时,右侧栏会出现 DeepSeek 网页版。
若标签被手动关闭,点对话标题栏右侧的 网页版 按钮,或在右侧栏标签条的 + 中选择 DeepSeek 网页版。
本插件没有构建步骤,也没有 npm 运行时依赖;package.json 直接声明 dsh.bundle.patch 和 dsh.client。
inputActions 暴露发送方法,插件会退回为仅填入,并提示你在输入框按 Enter。预览顶部会标注来源(选区 / 输入框 / 最近提问 / 上下文),底部会说明读取边界。插件只读取你点的那一处,或你主动点“上下文”时页面中可见的最近消息;不会读取整页,也不会上传内容。
DeepSeek 网页版和 Harness 使用同一套 --dsw-* 设计变量命名。插件在 Harness 侧读取当前 :root、body、#root 上的实际计算值,并把它们以内联 !important 自定义属性写入 guest 的 <body>:
--dsw-specific-* 之类的页面专用 token。同时根据 Harness 当前主题的 colorScheme 切换网页自己的 body[data-ds-dark-theme] 属性,并监听 theme/change 事件。切换主题、切换明暗模式或启用/禁用美化插件时,网页会重新同步。
Harness 的美化插件可能通过 shell.overlay 给 body 设置壁纸。插件读取当前页面的 background-image,将其以低透明度水印叠加到 guest 页面,并在插件标签顶部绘制一条同款纹理细条。它不改变网页布局,也不牺牲正文可读性。
DeepSeek 网页版把登录态存在自己的版本化 localStorage 包装里:
{ "value": "<token>", "__version": "0" }
插件只读取包装里的逻辑值,不保存包装文本本身。登录后把 token 和账号信息写入 Harness 本机数据;下次打开页面时,如果 guest 还没有登录态,就把 token 写回同样的版本化包装并刷新一次页面。登录、退出和账号切换通过 Storage.prototype.setItem 钩子与轮询共同感知。
openTab('deepseek-web') 打开标签;sessionStorage 标记“本次运行已自动打开”,因此手动关闭不会被反复拉起;allowpopups,不注册外部打开入口;网页的新窗口请求被忽略,右侧视图保持不变。┌──────────────────────────── Harness Desktop ────────────────────────────┐
│ │
│ ┌──────────────┐ ┌────────────────────────────┐ │
│ │ Conversation │ │ Right Sidebar │ │
│ │ (API chat) │ │ ┌──────────────────────┐ │ │
│ │ │ │ │ DeepSeek Web tab │ │ │
│ │ composer ◄──┼──────┼──┤ capture preview │ │ │
│ │ │ text │ │ isolated <webview> ──┼──┼──► chat.deepseek │
│ └──────────────┘ │ └──────────────────────┘ │ .com │
│ ▲ └────────────────────────────┘ │
│ │ theme/change + tokens ▲ auth token restore │
│ ┌──────┴───────┐ ┌────────┴─────────┐ │
│ │ Theme service│ │ local auth store │ │
│ └──────────────┘ └──────────────────┘ │
└──────────────────────────────────────────────────────────────────────────┘
index.js
apply();本插件不需要 Host 资源、模型工具或额外服务。client.js
deepseek-web;sidebar.right.pane.tab 注册面板组件;window.dshDesktop.browser.acquire() 获取隔离 guest lease;inputActions 插入;| 能力 | 使用到的 Harness 接口 |
|---|---|
| 右侧栏标签 | ctx.get('sidebarRightTabs').register(...) |
| 打开/聚焦标签 | ctx.get('sidebarRight').openTab('deepseek-web') |
| 标签正文 | sidebar.right.pane.tab 槽位,按类型 id 注册 |
| 标题栏入口 | conversation.session.header.utilities |
| 隔离网页 | window.dshDesktop.browser.acquire/release + <webview> |
| 主题 | ctx.get('theme').getTheme() + theme/change |
| 填入/发送 | 槽位标准属性 inputActions.captureInsertion() / insertText();发送为尽力而为,探测 submit / send / sendMessage / requestSubmit,不存在时退回仅填入 |
nodeIntegration: false、contextIsolation: true、sandbox: true;executeJavaScript 返回的纯文本/JSON 进入 Harness renderer;chat.deepseek.com;chat.deepseek.com 登录态时使用。webview 和 Desktop preload 桥;普通 Web 页面无法使用。chat.deepseek.com 的网页登录不是同一套 token。插件不会读取或转发 Harness 账号凭据;实际体验是“同一个 DeepSeek 账号在网页里登录一次,之后自动保持”。真正的静默 SSO 需要 DeepSeek 提供网页 token 兑换接口。.
├── client.js # 浏览器半部:标签、webview、主题、登录、抓取
├── index.js # Host 半部:空实现
├── cordis.patch.yml # bundle patch
├── locale/en.json # 插件显示英文
├── locale/zh.json # 插件显示中文
├── icon.svg # 插件图标
└── docs/ARTICLE.md # 详细设计与实现文章
没有构建步骤。修改 client.js 后:
node --check client.js 做语法检查;技术来源:ZCFE327
本项目由 ZCFE327 设计与实现。插件建立在 DeepSeek Harness 公开的 Cordis 插件体系、右侧栏 Tab 域、槽位系统和 Electron 隔离 webview 桥之上;DeepSeek 网页版、Harness 及其相关商标归各自权利人所有。