@deepseek-ai/dsh-ego-browser
ego-browser (ego-lite Windows preview) agent tools for DeepSeek Harness: execute one JavaScript script per browser task in the ego-browser nodejs runtime (page / page.locator / browser / taskSpaces / fetch / cdp facades, console.log output channel), plus an API guide tool and a host status tool. Host-only cordis plugin, mounted via cordis.patch.yml + a profile node_modules link; no dsh source changes.
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Da1dr1em/dsh-ego-browser说明文档
阅读完整 README ↗dsh-ego-browser
把 ego-browser skill(ego-lite Windows 预览版浏览器自动化)改写为 DeepSeek Harness 原生插件:
agent 通过 ego_browser_run 在 ego-browser nodejs 运行时中执行一段 JavaScript 完成整个浏览器任务,
通过 ego_browser_help 随时查阅 API 指南,通过 ego_browser_status 体检浏览器宿主。
功能特性
- 真实浏览器:驱动本机已装的 Edge / Chrome(CDP 连接),不是无头抓取器; 相比 Playwright MCP / webfetch 更泛用——任何网页交互、搜索、截图、表单、登录态会话都能做。
- 登录态复用:浏览器宿主使用独立 profile,登录一次(经
taskSpaces.handOff人工确认)后 跨任务、跨会话保持。 - 一次脚本一任务:
ego_browser_run一段 JavaScript 内完成导航、交互、等待、抽取、验证与 分支,符合 ego-lite 的运行时设计;任务空间(taskSpaces)与登录态跨调用持久。 - 内置 API 指南:
ego_browser_help按 topic 返回完整指南(guide / runtime / rules / taskspaces / handoff / caveats / install),agent 无需记忆 API。 - 宿主体检:
ego_browser_status运行--doctor,报告浏览器路径、CDP 端点(9522)、 状态目录、任务空间,定位启动失败。 - 零源码侵入:host-only cordis 插件,经
cordis.patch.yml+ profile 挂载,不改 DSH 源码。
工具
| 工具 | 说明 |
|---|---|
ego_browser_run | 在 ego-browser nodejs 运行时执行一段 JavaScript(page / page.locator / browser / taskSpaces / fetch / cdp facade,console.log 为输出通道)。一次浏览器任务写一段脚本、调用一次;运行时内自行等待、抽取、验证与分支。首个调用自动启动常驻浏览器宿主(端口 9522)。 |
ego_browser_help | 返回 API 指南。topic: guide(完整 SKILL.md,默认)/ runtime / rules / taskspaces / handoff / caveats / install。 |
ego_browser_status | 运行 CLI --doctor,报告浏览器路径、CDP 端点、状态目录、任务空间。 |
示例脚本(与 skill 的 heredoc 完全一致):
const task = await taskSpaces.useOrCreate('inspect example page')
await browser.openOrReuseTab('https://example.com', { wait: true, timeout: 20000 })
const heading = await page.getByRole('heading').first().innerText()
const info = await page.info()
console.log(JSON.stringify({ taskSpaceId: task.id, heading, url: info.url }))