# dsh-e2e **Repository Path**: woshizhaoxi/dsh-e2e ## Basic Information - **Project Name**: dsh-e2e - **Description**: DeepSeek Harness 插件包:把 tester-army/e2e 的 MCP server 接入 DSH,让 Agent 直接开浏览器会话做端到端验收 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-10-15 - **Last Updated**: 2026-10-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # dsh-e2e 把 [tester-army/e2e](https://github.com/tester-army/e2e) 的 MCP server 接入 [DeepSeek Harness](https://www.deepseek.com/)(DSH)的插件包(bundle)。 装上之后,DSH 里的 Agent 会多出四个工具,可以自己开浏览器会话、观察界面、点击输入、截图,并把流程固化成回归测试: | 工具 | 作用 | | --- | --- | | `mcp__e2e__open_session` | 加载 e2e 配置、启动被测应用、拉起引擎(浏览器/模拟器)、打开页面,返回会话 id、工具目录与首次观察 | | `mcp__e2e__tools` | 列出该会话可用的工具;带 `tool` 参数则返回该工具的完整参数 schema | | `mcp__e2e__call` | 执行一个会话工具:`observe` / `tap` / `type` / `press` / `navigate` / `type_secret` / `locate` / `screenshot` 等 | | `mcp__e2e__close_session` | 保存录像、结束 attempt、释放引擎,并停掉它启动的应用进程 | ## 为什么需要这个包 `e2e` 自带 `e2e mcp`,是一个标准 stdio MCP 服务(`initialize` 返回 `protocolVersion 2025-06-18`),所以接入 DSH **不需要改 e2e 源码**,只需要让 DSH 连上它。而 DSH 不读取 Claude Code / Cursor 风格的 `.mcp.json`(`mcpServers`),必须在 profile 的组合层显式声明 `@deepseek-ai/dsh-mcp-client` 行 —— 本包就是这一行的可安装载体。 ## 依赖与前置 1. **DSH Desktop**(本项目实测于 `0.2.0-rc.2`,Windows)。 2. **Node.js** ≥ 24.8(或 22.22.3+)。 3. **一个已初始化的 e2e 项目**: ```bash cd <你的项目> npm i e2e @e2e-dev/web npx e2e init --yes . ``` 首次运行测试时,e2e 会把 Chromium 等浏览器下载到 `%LOCALAPPDATA%\ms-playwright`(或 `~/.cache/ms-playwright`),之后不必重下。 ## 安装 ### 方式一:从本地目录安装(推荐,desktop profile 唯一可行路径) DSH 的 `desktop` profile 由 Electron 独占,`dsh plugin --profile desktop add ...` 会被拒绝,提示: ``` error: profile "desktop" is managed exclusively by the Electron application ``` 因此在本机安装时,用 DSH 的插件管理器把本目录作为 bundle 装入: 1. 先按本机情况修改 `cordis.patch.yml` 里的三处路径(见文件顶部注释); 2. 在 DSH 会话中让 Agent 执行 `plugin_manager` 的 `install_bundle`,目标为本目录(`stage: enable` → `application: applied`); 3. 用实时工具目录确认四个 `mcp__e2e__*` 工具出现。 ### 方式二:git 规格安装(自定义 profile) 自建的非 Electron profile 可以直接从仓库安装: ```bash dsh plugin --profile <你的 profile> add git+https://gitee.com/woshizhaoxi/dsh-e2e.git ``` ### 方式三:手工落行 把 `cordis.patch.yml` 里的 `insert` 块合并进目标 profile 的补丁层,效果相同。 ## 配置 `cordis.patch.yml` 中需要按环境修改的项: | 字段 | 说明 | | --- | --- | | `args[0]` | e2e CLI 的绝对路径,`/node_modules/e2e/dist/cli/bin.js` | | `cwd` | e2e 项目根目录,框架从这里就近发现 `e2e.config.ts`;也可在 `open_session` 时用 `config` 参数指定相对路径 | | `serverName` | 工具名前缀(`mcp____*`)。同一台 DSH 接多个 e2e 项目时,每个实例用不同的名字 | | `toolCallTimeoutMs` | 默认 180000:浏览器冷启动较慢,超时过小会误判失败 | | `env.E2E_TELEMETRY_DISABLED` | 关闭 e2e 的匿名遥测 | | `env.ELECTRON_RUN_AS_NODE` | 让 Electron 以 Node 方式运行 CLI(桌面应用内必需,CLI 场景无副作用) | **改完 patch 必须 `remove_bundle` 再 `install_bundle`**:只改 `cordis.patch.yml` 不会热生效。 ## 使用 装好之后不需要记工具名,直接对 Agent 说需求即可,例如: > 开个 e2e 会话,打开首页,填「写周报」,断言清单里出现它,然后关掉会话。 Agent 内部的典型序列是 `open_session` → `tools` → `call {tool:"observe"}` → `call {tool:"tap", args:{target:"#n6"}}` → `close_session`。 几个必须知道的约束: - 观察结果里的节点 id(`#n5`)**只在最新一次 `observe` 内有效**,每次动作后要重新观察; - 一次最多 4 个并发会话(`e2e mcp --max-sessions`,1–16);同时开多个会话时每次调用都要带 `session` id; - 会话结束务必 `close_session`,否则它启动的应用进程不会释放; - 纯定位器与断言测试**不需要模型**;只有 `agent.act` / `agent.assert` 这类自然语言步骤才需要模型提供方。 命令行方式与 MCP 并存,适合回归与 CI: ```bash npx e2e run # 跑全部 npx e2e run <文件> --reporter list,junit # CI npx e2e list # 列测试 npx e2e guide # 离线文档 ``` ## 实测验证记录(2026-10-13 / 14,Windows 11 + DSH 0.2.0-rc.2) - 装入后 `application: applied`,DSH 实时工具目录出现 `mcp__e2e__open_session` / `mcp__e2e__tools` / `mcp__e2e__call` / `mcp__e2e__close_session`; - 按 `open_session → call observe → close_session` 实测:真实启动 Chromium 会话(target `web`,web 引擎 0.14.0),读回页面可访问性树(`#n5 textbox "任务名称"` 等),全链路 Agent → DSH → e2e MCP → Chromium 打通; - CLI 侧 `npx e2e run tests/demo.e2e.ts --reporter list` —— 3 个用例全部通过(首次运行自动补齐 headless shell、ffmpeg 等,随后单次约 5.4 秒)。 ## 已知边界 - e2e 官方建议 Windows 上在 WSL 内运行;本机原生 CLI 与 MCP 均实测可用。 - e2e 拒绝 `file://` 方案(安全策略),本地静态页面必须通过 HTTP 提供。 - 移动端需另装 `@e2e-dev/mobile` 与模拟器;iOS 模拟器仅 macOS。 - e2e 仍处于 1.0 之前(本包实测 0.20.0),minor 版本间配置与 API 可能变化。 - 本包只做接入,不含 e2e 本身;e2e 的许可为 Apache-2.0,与本包(MIT)相互独立。 ## 许可 MIT