跳到主内容

reef

16Star4Fork1Issue0Watching

DSH 插件全家桶:浏览器自动化 + MCP Server + GitHub/GitLab 自动评审 + 原生嵌入面板,一次安装启用五个模块。

机审证据5/5方法论数据来源安装命令持续维护DSH 版本风险扫描
机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
TypeScript
License
MIT
分支
main
dsh-plugin

安装

命令web profile
$ dsh plugin --profile web add dsh-reef

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 huey1in/reef:先查看仓库 https://github.com/huey1in/reef 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

dsh-reef 是 DeepSeek Harness 的五合一插件包:装一次同时获得浏览器自动化、MCP Server、GitHub 与 GitLab 只读+自动评审、以及一个原生嵌入面板,让 agent 能"开网页、操作表单、看画面、跑评审、被外部 MCP 客户端反向调用"。

核心能力

  • 提供 21 个共享浏览器工具(browser_open、browser_click、browser_type、browser_screenshot、browser_form、browser_profile 等),agent 可在 headless 浏览器里打开页面、点按钮、填表、抓文本、截图,多标签 + 多 profile 隔离登录态
  • 把 DSH 反向暴露为 MCP Server(Streamable HTTP,路径 /reef/mcp),让 Claude Desktop、Cursor、Cline 等客户端调用 dsh_list_sessions / dsh_run_agent 等 5 个工具来操作本地 agent
  • 提供 GitHub 4 个只读工具(仓库元信息、issue 列表、PR 列表、PR 详情)+ webhook 自动 PR 评审 + issue 自动修复闭环(agent 自动建分支修复并开 PR)
  • 提供 GitLab 3 个只读工具(项目信息、issue 列表、MR 列表)+ webhook 自动 MR 评审(结果以 note 形式发布到 MR)
  • 在 DSH Web 界面右下角注入原生浮动面板:实时显示三模块状态、浏览器缩略图(点开大屏实时画面 + 访问历史)、GitHub 事件看板、五模块统一设置区(凭据、浏览器通道、截图清理、评审模型等即时生效)

技术实现

  • 语言: TypeScript(ESM)
  • 关键依赖: playwright-core(浏览器自动化,运行时唯一第三方依赖);@deepseek-ai/cordis(仅 devDependencies,作为编译期类型参考)
  • 架构模式: Cordis bundle 插件,通过 cordis.patch.yml 在宿主页面上 insert 五个独立插件行(reef-browser / reef-mcp / reef-github / reef-gitlab / reef-console),每行 inject 自己需要的服务(tools / webServer);模块通过 ctx.get("tools").register 注册工具,通过 ctx.get("webServer").register 注册 HTTP 路由,通过 ctx.get("webServer").tapIndex 注入浏览器端脚本
  • 入口文件: src/browser/index.ts(reef-browser) / src/mcp/index.ts(reef-mcp) / src/github/index.ts(reef-github) / src/gitlab/index.ts(reef-gitlab) / src/console.ts(reef-console);src/index.ts 仅作包元信息

适用场景

希望 agent 能"看见并操作真实网页"的场景:自动登录后台抓数据、跑回归测试截图比对、批量填表、爬取登录后内容;同时需要把本地 DSH 暴露给其他 MCP 客户端,做"DSH 当主控、Claude Desktop 当前端"的双端协作;有 GitHub/GitLab 仓库的开发者,想要 PR/MR 打开时自动评审、新 issue 自动派给 agent 修复。

前置依赖与兼容性

依赖最低版本说明
DSH未声明通过 cordis.patch.yml 的 5 个插件行注入,源码未声明 dsh 版本要求;运行时需要 ctx.tools、ctx.webServer、ctx.credentials、ctx.systemPrompt、ctx.agents、ctx.sessions、ctx.llm 等服务
Node.js>=22package.json#engines.node 声明
平台macOS / Windows / Linuxsrc/browser/session.ts:142-148 按 process.platform === "win32" 选择 msedge 优先的探测顺序,其他平台 Chrome 优先;playwright-core 跨平台
浏览器系统已装 Edge/Chrome/Chromium 任意之一默认 channel='auto' 自动探测,都没有时回退 playwright 自带 Chromium 或提示 npx playwright install chromium(src/browser/session.ts:177-181)
原生依赖playwright-corepackage.json#dependencies,运行时唯一第三方依赖;不依赖任何 @deepseek-ai 运行时包(README.md:31)

安装方式

dsh plugin --profile web add github:huey1in/reef

配置项

配置类型说明默认值
reef-browser.headless布尔浏览器是否无头模式(GUI 不可见)true
reef-browser.channel枚举浏览器通道;auto 自动探测系统 Edge/Chrome/Chromium,也可显式指定auto
reef-browser.executablePath字符串浏览器可执行文件绝对路径,优先级高于 channel""
reef-browser.userDataDir字符串用户数据目录,设置后登录态(Cookie/localStorage)跨 DSH 重启保留""
reef-browser.profiles对象多配置文件(命名浏览器会话),work/personal 等独立隔离{}
reef-browser.screenshotDir字符串截图保存目录.dsh-reef/screenshots
reef-browser.screenshotMaxAgeDays数字截图保留天数;0 = 不按时间清理7
reef-browser.screenshotMaxCount数字截图保留数量上限;0 = 不按数量清理200
reef-browser.downloadDir字符串下载文件保存目录.dsh-reef/downloads
reef-browser.maxTextChars数字页面文本快照截断上限20000
reef-browser.maxLinks数字链接列表返回数量上限50
reef-browser.timeoutMs数字浏览器操作超时(毫秒)30000
reef-browser.liveViewPath字符串浏览器实时画面 API 路径(重启生效)/reef/browser
reef-mcp.path字符串MCP 端点路径(重启生效)/reef/mcp
reef-mcp.authTokenEnv字符串静态 Bearer token 环境变量名;设置后所有请求要求 Authorization: Bearer""
reef-mcp.oauthEnabled布尔启用 OAuth 2.0 client_credentialsfalse
reef-mcp.oauthClientIdEnv字符串OAuth 客户端 ID 环境变量名MCP_CLIENT_ID
reef-mcp.oauthClientSecretEnv字符串OAuth 客户端密钥环境变量名MCP_CLIENT_SECRET
reef-mcp.oauthTokenTtlMs数字OAuth token 有效期(毫秒)3600000
reef-mcp.runAgentTimeoutMs数字run_agent 超时(毫秒)300000
reef-mcp.runAgentMaxOutputChars数字run_agent 输出字符上限120000
reef-mcp.listSessionsLimit数字list_sessions 默认返回上限50
reef-github.tokenEnv字符串GitHub Token 环境变量名GITHUB_TOKEN
reef-github.apiBase字符串GitHub API 地址(自建企业版改这里)https://api.github.com
reef-github.webhookPath字符串Webhook 路径(重启生效)/reef/github/webhook
reef-github.webhookSecretEnv字符串Webhook HMAC 密钥环境变量名GITHUB_WEBHOOK_SECRET
reef-github.reviewModel对象评审模型 { provider, model },空则用 DSH 默认模型{}
reef-github.reviewMaxDiffChars数字评审 prompt 中 diff 截断上限60000
reef-github.autoReviewEvents字符串数组触发自动评审的 PR action["opened","synchronize","reopened"]
reef-github.reviewDedupe布尔同一 PR 同一 head commit 是否只评一次true
reef-github.autoFixRepos对象仓库 → 本地路径映射,新 issue 触发自动修复闭环{}
reef-github.autoFixLabels字符串数组只处理带这些标签之一的 issue;空数组=全部处理[]
reef-github.autoFixTimeoutMs数字自动修复 agent 超时(毫秒)600000
reef-gitlab.tokenEnv字符串GitLab Token 环境变量名GITLAB_TOKEN
reef-gitlab.apiBase字符串GitLab API 地址(自建实例改这里)https://gitlab.com/api/v4
reef-gitlab.webhookPath字符串Webhook 路径(重启生效)/reef/gitlab/webhook
reef-gitlab.webhookSecretEnv字符串Webhook Secret Token 环境变量名GITLAB_WEBHOOK_SECRET
reef-gitlab.reviewMaxDiffChars数字评审 prompt 中 diff 截断上限60000
reef-gitlab.autoReviewEvents字符串数组触发自动评审的 MR action["open","update","reopen"]
reef-console.path字符串面板/embed 基路径(重启生效)/reef

上述配置可三处覆盖:插件内置默认(cordis.patch.yml)→ 用户 profile 的 cordis.patch.yml(启动时覆盖)→ 面板 ⚙ 设置区(运行时即时生效,仅标 ⟳ 的路径类需重启)。

常见问题

Q: 安装后必须重启 DSH 才能生效吗?

A: 是的,cordis.patch.yml 中注册的五个插件行(reef-browser/reef-mcp/reef-github/reef-gitlab/reef-console)需要重启 DSH 才会加载;面板 ⚙ 设置区的改动无需重启即可热生效(仅标 ⟳ 的路径类字段除外)。

Q: 浏览器工具是否需要下载 Chromium?

A: 默认不需要。配置项 channel='auto' 时会按平台优先探测系统已装的 Edge/Chrome/Chromium(Windows 顺序 msedge→chrome→chromium,macOS/Linux 顺序 chrome→msedge→chromium),都不存在才用 playwright 自带 Chromium 或提示 npx playwright install chromium。

Q: GitHub 只读工具需要 token 吗?

A: 公共仓库可选:未配置 GITHUB_TOKEN 时走匿名访问(每 IP 60 次/小时),命中限流会返回 403 并附带提示;配置后无此限制且可访问私有仓库。写操作(建 issue/PR、评论、合并)一律需要 token,由 agent 用 bash 调 gh CLI 完成。

Q: MCP Server 怎么鉴权?支持 OAuth 吗?

A: 三种方式可叠加或单独使用:面板 ⚙ → MCP 直接填静态 Bearer token(写入凭据库或插件自有 tokens.json);通过 authTokenEnv 指定环境变量;启用 oauthEnabled=true 并配置 MCP_CLIENT_ID/MCP_CLIENT_SECRET 后走 OAuth 2.0 client_credentials。

Q: GitHub webhook 自动评审会重复评同一个 PR 吗?

A: 默认不会。reviewDedupe=true 时同一 PR 同一 head commit 只评一次(src/github/review.ts:51 用 headSha 做 key 缓存);评审模型可在面板设置 reviewModelProvider/reviewModelModel,空则用 DSH 默认模型。

Q: 不想用某个模块怎么办?

A: 在 $DSH_HOME/profiles/web/cordis.patch.yml 中删除对应行,或者保留行但在 config 下加 enabled: false 即可关闭,重启生效。

上手难度

进阶 — 配置面广(五模块共 30+ 配置项)、依赖外部 token(可选)、对宿主页面 CSS 变量(--dsw-alias-*)有耦合,但默认开箱可用,基础安装无需任何额外配置。

已知问题与限制

  • Windows PowerShell 中文编码坑:用 Invoke-RestMethod / Invoke-WebRequest 发含中文的 JSON body 会按 ISO-8859-1 编码变乱码,必须用 [System.Text.Encoding]::UTF8.GetBytes() 传字节流,或改用 gh / glab CLI;发布中文内容后必须回读一次校验(src/github/index.ts:132、src/gitlab/index.ts:107、README.md:130-133)
  • GitHub 自动修复 agent 不能强制中止:源码注释承认 AbortSignal 无法直接中断 agent,autoFixTimeoutMs 超时后只能记录日志继续等待清理,实际等待时长可能超过配置(src/github/autofix.ts:74-76)
  • MCP Server 无状态实现:客户端 DELETE 断开会话时,服务端直接返回 200,不维护 session 映射;同时连接复用依赖 MCP 客户端自身实现(src/mcp/index.ts:98-103)
  • OAuth token 内存存储:src/mcp/oauth.ts:8 中 oauthTokens 是 Map,DSH 重启后所有未过期 token 全部失效,客户端需重新获取
  • 匿名 GitHub 速率限制:未配置 GITHUB_TOKEN 时公共仓库匿名访问 60 次/小时,触发限流后 403 错误信息附带提示,需配置 token 提升(CHANGELOG.md:80-81)

查看使用指南 →

该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/huey1in/reef)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录