前言¶
在 DeepSeek Harness(DSH)里做智能体开发,常见做法是单独开系统浏览器查资料、再切回 Web UI 贴链接或复制正文。工作区里生成的 HTML 报告、Markdown 或下载文件,也往往要借助外部工具打开。DSH 生态强调「一切皆插件」;社区插件目录(如 SkillHub)与 DeepSeek / 幻方无官方从属关系,但其中有不少面向 Web 客户端的扩展。dsh-browser 由社区维护者 Plonkloving 发布,分类为客户端插件,目标是在 Harness 界面内提供带标签页、地址栏和下载能力的浏览面板,并与工作区、搜索和 Agent 会话衔接。
这是什么¶
dsh-browser 是面向 DeepSeek Harness Web UI 的浏览器面板插件。实现上是一个 Cordis bundle:Host 半部注册受围栏保护的 HTTP 路由与一个 Agent 工具;Client 半部注册名为 browser 的主面板,并在侧边栏提供地球图标入口。简介概括为:标签式浏览、DeepSeek 搜索、与工作区绑定的浏览配置(profile)、声明式扩展、沙箱页面渲染与真实目录下载。当前 GitHub 仓库星标为 0;许可证为 MIT(见仓库 LICENSE)。
核心功能¶
标签页与全能地址栏¶
面板提供后退、前进、刷新、主页、标签条,以及全能地址栏(omnibox)。输入可当作 URL、工作区文件路径或搜索关键词处理。Ctrl/⌘+点击、中键点击和 Alt+Enter 可在新标签打开(Shift 保持前台);渲染页内也可上报相同意图。浏览器状态(profile、标签、书签、历史、扩展开关、下载记录)保存在当前站点 localStorage 的键 dsh-browser.state.v1 下。
搜索¶
地址栏搜索通过 POST /dshbrowse/api/search 调用 Harness 的 ctx.web.search(配置为 deepseek-official 时使用原生 web_search 服务端工具)。面板原生展示返回的 sources[],可导出为 CSV 或 JSON;同一会话内相同查询会缓存,避免重复模型调用。
与工作区绑定的浏览配置¶
每个 profile 拥有独立的标签、书签、历史和扩展开关。将文件夹绑定到 profile 时,会注册为 Harness 工作区(workspaces.create({ path })),之后可:
- 通过 New Agent session 在该文件夹下打开会话;
- 使用 Send to Agent:根据页面标题、描述与标题结构起草提示,写入该工作区会话并切换到对话。
页面渲染¶
同一标签下有两种视图:
| 视图 | 行为 |
|---|---|
| Page(默认) | GET /dshbrowse/api/render?url=… 用 ctx.web.fetch 拉取页面,注入指向真实站点的 <base> 以解析 CSS/图片/字体,剥离站点脚本及 CSP/refresh 类 meta,追加导航桥接,从面板同源返回文档。iframe 使用 sandbox="allow-scripts allow-downloads allow-modals",不含 allow-same-origin,文档保持不透明源。 |
| Reader | GET /dshbrowse/api/page 返回原始抓取正文;客户端用 DOMParser 构建文档模型(标题、段落、列表、代码块、图片、表格、链接等),供扩展改写。 |
因文档从面板源提供,站点的 X-Frame-Options / frame-ancestors 不再阻挡嵌入;代价是剥离了站点 JavaScript,纯客户端渲染的 SPA 可能需要 Reader 视图。
工作区文件¶
Harness 写入工作区的文件可直接打开:
GET /dshbrowse/api/files?dir=…列目录;GET /dshbrowse/api/file?path=…提供单文件。HTML/CSS 会重写以便报告样式与脚本可用;其余类型按 MIME 流式返回并带no-cache。- 仅允许已注册工作区目录或下载目录下的规范路径,否则 403。
- HTML、常见图片、PDF、Markdown、纯文本、JSON/CSV、音视频等可内联预览;新标签页与文件浏览器可浏览这些类型。
POST /dshbrowse/api/inbox:browser_open工具将 URL 或工作区文件入队,面板在新标签打开。
声明式扩展¶
采用类似 Chrome 的声明式扩展,不执行任意代码。manifest 字段包括:permissions(展示用)、contentScripts[].matches(匹配 URL)、hide(阅读器移除的选择器)、highlight(s)、width,以及可选的 action(工具栏按钮与面板)。内置广告/跟踪清理、关键词高亮、专注阅读(段落上限)、页面大纲等;管理器支持粘贴 manifest.json 安装、启用/禁用/删除,并提供三个示例 manifest。
下载¶
文件写入真实文件夹,同名不覆盖(如 note (1).txt)。入口包括:页面 HTML / 文章 Markdown 或纯文本;工作区文件(复制的 HTML 会将相对路径改为 file:///);搜索结果 CSV/JSON;设置导出 JSON(profile、书签、历史、扩展与设置)。目标目录为环境变量 $DSH_BROWSER_DOWNLOAD_DIR,未设置时使用系统「Downloads / 下载 / downloads」;该目录也是可浏览根路径,保存后可再在标签中打开。
Host 路由与安全¶
所有 API 挂在 /dshbrowse/api 下,经 Harness 的 browser-trust 围栏(ctx.connection.requestRejection),与内置 /api 通道同类检查,不经第三方代理:
| 路由 | 用途 |
|---|---|
POST /search |
ctx.web.search |
GET /page |
ctx.web.fetch 原始正文 |
GET /render |
无脚本的框架化页面 |
GET /files / GET /file |
允许的目录与文件 |
POST /download |
写入下载目录 |
GET /inbox |
browser_open 队列 |
路径准入对请求做 realpath,须落在已注册工作区或下载目录内;穿越与符号链接逃逸返回 403。扩展 manifest 仅贡献选择器、关键词与宽度,无代码执行路径;下载文件名消毒且不覆盖已有文件。
安装与启用¶
插件无构建步骤、无运行时 npm 依赖;Client 为通过 window.__ModuleLoader__ 加载的纯 JavaScript。官方安装命令如下:
dsh plugin add Plonkloving/dsh-browser
安装后,侧边栏在 Plugins 与 Schedules 之后会出现地球图标,点击打开浏览器面板。修改 Host 侧逻辑后需重载插件行(禁用再启用)或重启 Harness,因为 Loader 会缓存已导入的 ES 模块;Client 侧可通过 HMR 热更新。
依赖的 Host 服务:web、webServer、connection(必需),tools(可选,用于 browser_open)。Client 注入 @deepseek-ai/dsh-client-ui-layout 与 @deepseek-ai/dsh-client-locale;@deepseek-ai/* 由安装环境解析,包本身不声明 dependencies。
典型用法¶
- 执行安装命令,在 Web UI 侧边栏打开浏览器面板。
- 在地址栏输入 URL 浏览(默认 Page 视图),或切换到 Reader 配合内置/自定义声明式扩展阅读长文。
- 输入非 URL 内容触发搜索,在结果列表中查看
sources[],按需导出 CSV/JSON。 - 为 profile 绑定本地文件夹,使其成为 Harness 工作区;从页面使用 Send to Agent 或 New Agent session 与 Agent 协作。
- 在工作区路径或
file?path=…形式打开 Harness 生成的报告或资源;Agent 可通过browser_open工具把链接或文件推送到面板收件箱。 - 需要留档时使用各入口下载到
$DSH_BROWSER_DOWNLOAD_DIR或系统下载目录,并在面板中再次打开已保存文件。
适用场景与注意¶
适合希望在单一 Web UI 内完成检索、只读浏览、工作区文件预览,并与 DSH 工作区及 Agent 会话联动的开发者。不适合依赖目标站点完整客户端脚本交互的场景(Page 视图会剥离脚本)。
插件 Host 路由以当前 DSH 进程权限访问网络与本地路径;安装前应阅读 GitHub 源码 与 MIT 许可证,确认围栏与路径策略符合你的环境。社区目录页:SkillHub - dsh-browser。
结尾¶
dsh-browser 把标签浏览、Harness 侧 web 搜索、沙箱渲染、工作区文件与 profile 绑定、声明式阅读扩展和本地下载收进一个客户端面板,减少在 Harness 与外部浏览器之间来回切换。进一步了解实现细节与中文 README,可访问仓库 Plonkloving/dsh-browser。