changer-changer/dsh-blind-arena
A blind, fair, local DSH Web arena: same task, isolated worktrees, shared verification, judge before reveal.
项目介绍Project Overview
DSH Arena 是运行在 DSH Web 内的本地盲测 Agent 竞技场插件:同一任务、同一提交、隔离 git worktree,2–4 个模型并行执行,身份在 reveal 前对评审端隐藏,并用统一 verify 命令共享验证。适合需要无标签偏差地比较模型表现、查看 diff/成本后再裁决的场景。注意:需本地 DSH Web 与 Node 22.19+,数据存于 ~/.dsh/arena/。
DSH Arena is a local blind agent-arena plugin for DSH Web. It runs 2–4 models on the same task and commit in isolated git worktrees, hides lane identities until reveal, and applies one shared verify command for fair comparison. Use it to judge agents by behavior, diffs, tests, and cost without label bias. Caveat: it requires a local DSH Web runtime and Node 22.19+; data stays under ~/.dsh/arena/.
请帮我了解并安装插件:【dsh-blind-arena】【https://github.com/changer-changer/dsh-blind-arena】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add github:changer-changer/dsh-blind-arena
把 changer-changer/dsh-blind-arena 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
DSH Arena
Blind, fair, local Agent arena inside DSH Web.
Same task. Same commit. Isolated worktrees. Shared verification. Judge before you reveal.
DSH Arena turns your DeepSeek Harness (DSH) Web into a model-vs-model fight club: pick a task, pick 2–4 contestants (any provider/model DSH supports), and let them race on the exact same repository state. Lane identities are kept secret until you decide — no label bias, no prompt leaks, no cherry-picked baselines.
Why this exists
Benchmarks lie. Leaderboards are curated. When you evaluate an agent, the simple act of knowing which model you're looking at biases everything downstream: your prompts, your patience, your verdict.
DSH Arena removes that bias structurally:
- One repository state — every lane starts from the same commit, in its own git worktree. No drift, no stale forks.
- Random lane assignment — participants are shuffled onto lanes A/B/C/D at creation. The host knows; the wire doesn't.
- Identity-free protocol — the public experiment record contains no participant identity. Identities live in a server-side
secrets.jsonand merge into the view only after you callreveal. - Shared verification — the same user-defined
verifycommand runs against every lane, in the same environment. - Blind verdict — pick the winner from behavior alone (tests, diff, final answer, token/time cost). Then reveal and see who actually won.
Features
- 🏟 2–4 lane races with live progress feed (tool calls, turns, tokens) per lane
- 🔒 Anonymity contract enforced at the type level: the wire type
ArenaExperimenthas no identity field;redactExperimentstrips everything before serve - ✅ Shared verification — user-defined commands, per-lane exit code / timeout / duration, visible in the race view
- 🏁 Blind verdict → reveal flow with per-lane diffs and final answers
- 📤 Offline export — self-contained HTML report + raw JSON + per-lane unified patch, no network
- 🌿 Winner branch — promote the winning lane's worktree to
arena/<id>/<label>(real lanes only) - 🎬 Zero-cost demo mode — deterministic scripted lanes (focused / verbose / broken / timeout) that exercise the entire pipeline with no API key, no spend: worktree → change → verify → diff → review → reveal
- 🧹 Cleanup — prune stale worktrees and experiment state from the UI
- 🖥 Full client UI injected into DSH Web: create / list / live race / review / reveal
Quick start
- Install the plugin into your DSH Web profile (Cordis bundle — see
cordis.patch.yml):npm install dsh-blind-arena - Open DSH Web → the Arena plugin row appears.
- Create an experiment: point at a local repo, write a task, add verify commands, pick contestants.
- Watch the race live. Judge blind. Reveal. Export the report.
No credentials? Run the demo mode first — it walks the full product loop with scripted lanes so you can evaluate the flow before spending a single token.
Architecture
DSH Web client (React, injected) Host plugin (Cordis service `arena`)
┌───────────────────────────┐ ┌──────────────────────────────────────┐
│ CreateView / ListView │ /api RPC │ ArenaService (Typert remotes) │
│ RaceView / ReviewView │◄───────────►│ preflight · create · cancel · │
│ RevealView │ (redacted │ verdict · reveal · diff · export · │
└───────────────────────────┘ until │ createWinnerBranch · cleanup │
reveal) │ │ │
│ ▼ │
│ ArenaEngine │
│ preflight → worktrees → lanes → │
│ verify → diff → persisted record │
└──────────────────────────────────────┘
src/engine.ts— orchestration: preflight → worktrees → lanes → verification → diff → persistence; implements the anonymity contractsrc/runner.ts— one lane's agent lifecycle on top of@deepseek-ai/dsh-agent(session, model selection, consumed-work folding)src/verify.ts— shared verification runnersrc/git.ts— worktree / diff / branch primitivessrc/store.ts— durable store under~/.dsh/arena/<id>/: publicexperiment.json+ server-onlysecrets.jsonsrc/export.ts— offline HTML report + JSON + winner branchsrc/demo.ts— deterministic demo lanes (no API cost)src/client/— React UI injected into DSH Web
Storage: ~/.dsh/arena/. Everything is local; nothing leaves your machine except your own browser.
Requirements
- Node
^22.19.0 || >=24.0.0 - DSH (DeepSeek Harness) with Web client runtime
@deepseek-ai/dsh-agent,@deepseek-ai/dsh-llm,@deepseek-ai/dsh-session(0.1.0-rc.7)
License
MIT
nexu-io/open-design
freestylefly/awesome-gpt-image-2
anywhere-labs/dsh-desktop
walkinglabs/learn-harness-engineering
awesome-dsh-plugin/awesome-dsh-plugin
MemTensor/MemOS