Skip to content

dsh-eval-guard

Verified

dsh-eval-guard · v0.7.2 · MIT · Web UI

Evaluation guard for DSH: workspace-only filesystem, no network/subagents, wall-clock limits, and task installation for the meow-ai-arena tank task.

Install

dsh plugin add dsh-eval-guard

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Tags

Readme

dsh-eval-guard · 评测守护

在 DSH 中启用后,约束所有用户主对话:

  • 只能读写会话工作区;工作区外(包括 /tmp)不可访问。
  • 禁止联网、子代理、Agent Team/跨 agent 通信、读取其它工作区。
  • 工具黑名单可配置;未知工具默认放行,但 DSH 内置与 dsh-ops 的工具会做参数路径审计。

时间限制

  • 每条用户消息发送时,用当时的 timeLimitEnabled 和 timeLimitMinutes 为本会话创建或清除 deadline。
  • 开启限时时:deadline = 当前时刻 + 当时的分钟数;之后修改分钟数、选择任务、关闭或重新打开限时,都不会改动已存在的 deadline。
  • 关闭限时后再次给已有 deadline 的会话发送消息,会清空该会话自己的 deadline;其它会话不受影响。
  • 重新打开限时后,已有会话不会自动恢复 deadline;下一次用户消息才会重新计时。
  • 每个会话独立计时;可以同时运行多个不同时长、有的开启限时有的不开启的会话。
  • deadline 到点只终止对应会话及其子代理/后台任务,不影响其它会话。
  • 关闭「评测守护」总开关会清空全部 deadline 并停止约束;总开关与单轮限时开关是两套状态。

设置页选择任务时会自动把「最长时长 + 限时开关」写成该任务默认值并立即显示,用户可以随后手动修改:

任务类型 默认限时
原 5 个 meow-ai-arena 任务 90 分钟,默认打开
Commit0 单库 480 分钟,默认关闭
SWE-Bench Pro 单任务 1440 分钟,默认关闭
FeatureBench 单 feature 1440 分钟,默认关闭
Neural-CPP 纯 C++ 张量后端 1440 分钟,默认关闭
Neural-FP32 纯 C++ 运算与性能 1440 分钟,默认关闭
Neural-CIFAR 从零训练图像分类 1440 分钟,默认关闭

任务与安装

设置页可安装十一个任务包:

  • 原 5 个比赛任务:坦克大战、仓储调度、圈地、炸弹人、夺旗。
  • 3 个长时单任务:Commit0 单库实现、SWE-Bench Pro 单任务、FeatureBench 单 feature。
  • 3 个纯 C++ 项目:Neural-CPP 张量后端、Neural-FP32 运算与性能、Neural-CIFAR 图像分类训练。

Neural-CPP 安装时自动把 workspace.zip 解压到工作区根目录,并在完成后移除 setup.sh;agent 从根目录的 CMakeLists.txt 开始。工作区只包含 TASK.md、CMakeLists.txt 和 include/nn/nn.hpp;实现在 src/ 中从零完成,纯 C++17,无 Python/OpenCL/第三方库。

评测器同时兼容旧安装留下的嵌套布局:若根目录没有 CMakeLists.txt,会自动改用 workspace/CMakeLists.txt,避免已经产出的工作区无法评测。

Neural-FP32 是独立的新任务:固定 fp32,不做完整训练;agent 从零实现 build/nn_task CLI,覆盖逐元素、matmul、linear、relu、softmax、layernorm、mse、conv2d、对应反向传播、AdamW 和 SGD momentum。评测侧用 PyTorch 在相同数据和参数上计算参考值,逐操作输出可执行性、是否通过误差阈值、加权平均相对误差、速度,并在最前面给出是否所有操作可执行、最大加权平均相对误差和速度几何平均;不提供统一 score,速度不受误差门控影响。

Neural-CIFAR 在 Neural-FP32 的基础上要求 agent 用同一套 C++ 训练框架构造并训练 CIFAR-10 图像分类网络。任务不限时,agent 定位为神经网络全栈设计与优化大师,提交前应尽可能优化;速度和未知验证集准确率都是重要指标,会参与世界顶尖水平比拼。安装时下载并准备 50k train split;隐藏 10k test split 由独立评测目录 dsh-eval-guard/neural-cifar-eval/fetch_cifar.py 获取并放在该目录的 hidden/,不作为工作区文件。评测保留全部原算子指标,并额外用 4 线程和全部逻辑 CPU 分别跑推理,输出验证准确率、FPS、平均单图耗时;4 线程 0.02s/image 只报告,不门控。

CIFAR-10 下载缓存固定在用户 home 下:~/.dsh/eval-guard/cache/cifar10/,保存 train/val 的 images/labels。下载使用 ~/.dsh/eval-guard/cache/cifar10/.download.lock 独占锁,并实时打印进度;锁存在时认为其他 DSH 实例正在下载,任务安装/评测会提示等待或手动删除锁文件。缓存完整且无锁时直接复用。设置页新增「CIFAR download mirror」和「CIFAR download proxy」输入框:mirror 可选 Toronto 官方、Toronto Cave 或自定义 tar.gz URL,proxy 只用于 CIFAR 下载。按任务安装和评测时分别传给 setup/fetch 脚本。

所有任务的后台安装被取消或失败时,会删除本次安装已搬入工作区的文件,并清空工作区。清理只会在安装开始前工作区确实为空时执行,原工作区有内容时绝不触发。Neural-CIFAR 还会删除本次安装拥有的 CIFAR 下载锁,但不会删除其他 DSH 实例的锁。

评测时在临时目录独立构建,然后从 assets/neural-cpp/hidden/ 注入 C++ 测试源码;测试数据由固定种子在进程内生成,不依赖或复制外部数据文件。

结果返回 coreAccuracy(核心 C++ 测试通过率)、matrixAccuracy、逐类型 metrics(f32/int128/MXFP4 的矩阵与反向准确率、平均绝对误差、fwd/bwd 毫秒、fwd/bwd GFLOP/s)、speedGflops,以及按矩阵吞吐计算的 speedGeomeanGflops 和 matrixSizes(f32/i128/MXFP4 均为 256×256×256)。确定性项目使用 4 组独立输入取平均;MXFP4 RNE 和随机舍入分开统计,随机舍入使用 2 组输入×每组 1024 次采样,逐元素比较参考均值/标准差和候选均值/标准差,按 3σ 和 0.1–10× 标准差规则统计正确率。参考值由测试侧独立标量实现先算完,再调用候选实现,参考计算不计入候选耗时。隐藏测试不在工作区,agent 无法读取。开发要求线程数最多 4,评测阶段使用全部逻辑 CPU。

原 5 个任务直接放入打包好的 workspace.zip。后 3 个任务在安装时由 host 侧 setup 脚本按固定 commit clone 仓库、创建 .venv 并安装依赖;安装完成后会清理 .git、setup.sh、remove.patch、spec.pdf.bz2 等安装产物,工作区只保留任务本身素材。Commit0 的 pytest.ini 会去掉 coverage 参数,保证默认测试命令在沙箱内可运行。agent 运行时仍然禁网,使用工作区内的 .venv 跑测试;agent 可以自行 git init 或写自己的脚本。

安装是后台任务:

  • 可分别选择 clone 远端、pip 镜像、Git 代理和 pip 代理。
  • 进度和日志持久化在 $DSH_HOME/eval-guard/jobs//。
  • 离开设置页不会停止;重新进入继续显示;可以取消。
  • 安装成功后显示提示词,可点「填入新会话」。

已验证的 Git 远端

只有验证过包含任务固定 commit 的远端才会显示在对应任务下:

  • Commit0 · tinydb:GitHub。
  • SWE-Bench Pro · ansible:GitHub、Gitee。
  • FeatureBench · seaborn:GitHub、Gitee、GitCode。

Gitee/GitCode 都使用 git fetch --depth 1 origin <任务 commit> 验证。GitLab 和 ghfast 未通过验证,已移除。另保留「自定义 URL」。

pip 镜像

提供 PyPI、清华 TUNA、阿里云、腾讯云、北外、上海交大,并保留自定义地址。

两个独立代理

  • Git 代理:只用于 git clone/fetch。
  • pip 代理:只用于 pip install。

地址可以写成 127.0.0.1:7897,会自动补 http:// 前缀。留空会清掉继承来的同名代理变量,不误用宿主机代理。

单工作区评测

设置页安装/评测共用一组任务和工作区选择;「评测当前工作区」只评测一个结果,不生成排行。

插件 eval/ 目录内置全部 11 个任务的单结果评测脚本:

  • Commit0:单元测试通过率。
  • SWE-Bench Pro / FeatureBench:隐藏 F2P/P2P 测试;全部通过才 resolved,同时返回 passRate。
  • Neural-CPP:独立编译隐藏 C++ 测试,返回 accuracy 与 matmul speedGflops;数据在测试进程内按固定种子生成。
  • Neural-FP32:调用候选 build/nn_task,用 PyTorch 参考值统计每个操作的 MRE 和速度;汇总项在最前面,不输出统一 score。
  • Neural-CIFAR:保留 Neural-FP32 的算子评测,加载训练好的模型,在隐藏验证集上分别用 4 线程和全部线程测准确率/FPS;独立脚本在 dsh-eval-guard/neural-cifar-eval/。
  • Tank / Warehouse / Land / Bomberman / CTF:运行官方引擎/裁判,只返回当前工作区候选者结果,不生成排名。

评测也是后台任务,日志和结果实时显示,持久化在 jobs 目录。

任务来源

原 5 个任务来自 meow-ai-arena(MIT License,commit 6bd738b,2026-10-16):

仓库:https://github.com/chen-006/meow-ai-arena

长时单任务来源:

远端验证记录

  • msiemens/tinydb @ ed761a72:GitHub 通过;Gitee mirrors/tinydb、GitCode gh_mirrors/ti/tinydb、GitLab 均无法 fetch 该 commit,未加入。
  • ansible/ansible @ f7234968:GitHub、Gitee mirrors/ansible 通过;GitCode、GitLab 未通过,未加入。
  • mwaskom/seaborn @ 7001ebe7:GitHub、Gitee mirrors/seaborn、GitCode gh_mirrors/se/seaborn 通过;GitLab 未通过,未加入。

打包适配

本插件打包的 Linux 版 workspace.zip 在原素材基础上做了适配:把 baseline.cpp 编译为 Linux ELF 可执行文件并移出源码,文件名改为 baseline(不带 .exe);把 clock.py 改为单次 90 分钟版本;README.md 中对应的 baseline 示例同步改名。规则、引擎、本地裁判、模板等其余文件保持原样。安装任务时只把 workspace.zip 放入工作区,不再散装解压。

仓储调度任务包同样只放 workspace.zip;包内 TASK.md 已改写成单人单次 90 分钟版本,保留了原 baseline/、src/、workloads/ 和 tools/。

构建

node_modules/.bin/tsdown
node scripts/build-native.mjs

安装到当前 DSH profile

scripts/install.sh web
# 如果脚本找不到 dsh 命令:
DSH_CHECKOUT=/path/to/deepseek-harness scripts/install.sh web
# 然后重启 dsh web

依赖

  • Linux + unprivileged user namespaces
  • bubblewrap (bwrap)
  • gcc(构建 native supervisor 时)
  • unzip(安装任务素材时)
  • Python 3(长任务 setup 与评测)

已知边界

  • 只支持 Linux。
  • seccomp 用户通知的路径检查与 open 之间存在极小的 TOCTOU 窗口;bwrap 只读/无网络挂载是第二层内核边界。
  • 进程审计只覆盖被拦截的文件/网络 syscall;正常 syscall 不记录。
  • 设置页使用内联样式,不依赖额外 CSS 构建链。