hrhgit/dsh-test

dsh-test

仓库尚未提供可用的公开描述。

待分类deepseek-harness

@ruihuahe/dsh-test

English | 中文

dsh-test 是面向 DeepSeek Harness Web profile 与插件的 dev-only 黑盒验收控制器。它会在 run 独占的 DSH_HOME 中启动真实 DSH,通过真实浏览器驱动 UI,校验外部可观察事实,并保存可恢复的 JSON 状态与带哈希的证据。

它不是 Cordis 插件、MCP 服务或生产运行依赖;DSH 始终是被测系统。

0.2 的主要优化

  • 新增 --dsh-root 内置适配器:通过公开 DSH CLI 在 loopback 动态端口启动真实 Web profile。
  • 每个 run 独占 DSH_HOME;只复制所选 profile 定义,已安装依赖通过链接复用。
  • 后续 workflow、resume、stop 可从 run manifest 自动恢复适配器,无需重复 DSH 参数。
  • 从 DSH checkout 加载真实 Playwright,并自动尝试系统 Chrome 与 bundled Chromium。
  • 统一保存 ARIA、截图、规范化 console/network、断言、脱敏运行日志和 SHA-256;只有证据完整且断言全通过才获得 renderer-verified。
  • 浏览器 storage 与 ARIA ref 可跨 workflow CLI 进程恢复。
  • workflow 状态改为原子写入,增加定义哈希、失败重试次数;失败 workflow 会返回非零退出码。
  • 公开 manifest 只保存不含 token 的 base URL;DSH browser token 仅保存在权限 0600 的私有状态文件中,并从证据中脱敏。

兼容基线记录在 dsh.lock.json:当前真实验证目标为 DSH 0.1.5-rc.2 / c291e79。

接入 DSH

先构建:

pnpm install
pnpm build

启动真实 profile。下面以本机 Qualy 插件为例;它在 DSH 启动时读取 QUALY_ROOT:

export QUALY_ROOT=/absolute/path/to/qualy-ai

node lib/cli.js run start \
  --dsh-root /absolute/path/to/deepseek-harness \
  --dsh-profile qualy \
  --workspace "$QUALY_ROOT" \
  --runs-dir .dsh-test-runs \
  --retain \
  --json

复制返回的 runId,再运行仓库自带的 Qualy UI smoke。DSH 运行期间,后续命令会从 manifest 自动恢复适配器:

node lib/cli.js workflow run \
  --file scenarios/qualy-profile-smoke.workflow.json \
  --state-file .dsh-test-runs/qualy-smoke.state.json \
  --runs-dir .dsh-test-runs \
  --run <run-id> \
  --json

node lib/cli.js run stop \
  --runs-dir .dsh-test-runs \
  --run <run-id> \
  --retain \
  --json

Qualy smoke 会完成隔离环境的首次引导、跳过真实模型密钥配置、打开 Agent Presets、选择 Qualy 制造质量智能体,断言 console error 与失败网络请求均为 0,最后生成 renderer-verified 证据。scenarios/dsh-web-smoke.workflow.json 是不依赖具体 profile 的通用 smoke。

如果 DSH 进程已经退出,需要 run resume 重启,请再次提供该 profile 所需的环境变量,例如 QUALY_ROOT。环境值有意不写入公开 run manifest。

CLI 与适配器能力

dsh-test run start
dsh-test run status --run <id>
dsh-test run resume --run <id>
dsh-test run stop --run <id>

dsh-test workflow validate --file <workflow.json>
dsh-test workflow run --file <workflow.json> --run <id>
dsh-test workflow resume --file <workflow.json> --run <id>
dsh-test workflow inspect --file <workflow.json>

主要参数:

  • --dsh-root <path>:DSH checkout,并启用内置适配器。
  • --dsh-profile <name>:$DSH_HOME/profiles 下的源 profile,默认 web。
  • --dsh-home <path>:源 DSH home,默认 $DSH_HOME 或 ~/.dsh。
  • --dsh-patch <path>:额外 overlay,可重复。
  • --browser-channel <name>:指定 Playwright channel,也可用 DSH_TEST_BROWSER_CHANNEL。
  • --host-module <module>:高级外部 composition,与 --dsh-root 互斥。

内置适配器支持以下 workflow command:

  • dsh.status
  • browser.action,以及 browser.snapshot、browser.click、browser.screenshot 等别名
  • assertion.check / assertion.assert
  • evidence.capture

浏览器 click/fill 可使用 snapshot ref、CSS selector、无障碍 role + name 或可见 text。当前内置断言覆盖黑盒 ui、限制在 workspace 内的 file,以及 DSH service 事实。必须读取产品内部 session/RPC 的场景仍通过外部 host module 扩展。

evidence.capture 默认执行严格 renderer gate:ARIA、截图、console、network 和至少一个通过的断言缺一不可。验收失败时证据仍会保留,便于定位。

隔离、恢复与幂等

每个 run 独占:

  • manifest.json 与幂等 request 历史;
  • workspace 引用和隔离的 DSH persistence home;
  • 私有 browser/runtime 状态;
  • 带源定义哈希和逐步 attempt 的 workflow 状态;
  • 每次 capture 各自不可覆盖的 evidence 目录。

步骤失败时 cursor 不前移;workflow resume 会用新的 attempt identity 重试失败步骤。若进程在状态落盘前崩溃,同一个 request identity 会读取已记录响应,避免重复副作用。workflow 文件在执行中途被修改时会拒绝恢复,不会把旧状态套到新定义上。

外部 Host module

当插件验收需要内部 scaffold、fake model、fake service 或 Web 表面无法观察的 session/RPC 权威事实时,使用 --host-module。ESM 模块可导出 createComposition(context)、default.createComposition(context) 或 testHost.createComposition(context),并返回 TestComposition。

Host module 是测试扩展点,不会进入生产 profile。Host 只有在返回 run evidence 目录内的 evidence manifest 后才能声明 renderer-verified;控制器会复核必需 artifact、大小、哈希、run identity 和全部断言。

开发验证

pnpm test
pnpm build
pnpm pack:check

单元测试使用假的独立 DSH launcher;仓库自带的 Qualy workflow 还额外在本机真实 DSH Web 与系统 Chrome 上完成了黑盒验证。