dsh-reprolab
by yuttfu
dsh-reprolab — 深度探索工具的确定性无bug执行器:冻结重放测试、RED/GREEN/回归门,及可重放证据。与dsh-doublecheck等会话级纪律插件相辅相成。
dsh-reprolab — a deterministic bug-proof executor for DeepSeek Harness: frozen repro tests, RED/GREEN/REGRESSION gates, and replayable evidence. Complements session-level discipline plugins such as dsh-doublecheck.
安装
dsh plugin --profile web add github:yuttfu/dsh-reprolabGitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗
安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。
README
DeepSeek Harness 的缺陷到证明工作流:冻结复现测试、RED/GREEN/REGRESSION 三道质量门与可重放证据。
dsh-reprolab(ReproLab)把 Issue、报错信息或复现步骤转化为可审计的修复证据:
基准代码 + 冻结复现测试 → 必须失败(RED)
候选修复 + 同一冻结测试 → 必须通过(GREEN)
回归检查 → 不得新增失败(REGRESSION)
证据报告 → 可重放、已脱敏(REPORT)
ReproLab 是确定性的 bug-proof 执行器,与 dsh-doublecheck 等会话级纪律类插件互补。你的 Harness 会话负责理解问题、编写测试与修复;ReproLab 负责隔离工作区、冻结输入、执行质量门并生成证据。
九个工具
| 工具 | 作用 | 关键结果 |
|---|---|---|
reprolab_start |
解析仓库、冻结基准、建立 control/candidate 双 worktree,可选记录基准回归失败集 | runId、worktree 路径、基准信息、baselineRegression |
reprolab_set_test |
冻结复现测试补丁与目标测试命令 | testPatch 哈希、命令哈希 |
reprolab_verify_red |
在 control 中运行冻结命令,证明测试真实失败 | verdict: valid_red、失败指纹 |
reprolab_set_fix |
从 candidate 冻结仅含生产代码的修复补丁 | fixPatch 哈希、变更文件 |
reprolab_verify_green |
在 candidate 中运行同一冻结命令,证明测试通过 | verdict: valid_green |
reprolab_verify_regression |
与基准失败集比较候选失败 | pass / pass_with_baseline_failures / regression / inconclusive |
reprolab_status |
结构化查询:状态、冻结哈希、报告 stale、下一合法动作 | nextActions——无需解析散文 |
reprolab_report |
从同一数据模型生成/刷新 report.json 与 report.md | 报告路径 + 可复算的 sha256 |
reprolab_abort |
中止运行并保留现场 | 保留的路径 |
单纯非零退出码永远不构成 RED:测试未发现、语法错误、导入缺失、超时、崩溃与取消全部被排除;RED 与 GREEN 必须使用完全相同的测试补丁与命令哈希。
安装
需要 DeepSeek Harness 0.1.0-rc.6、Node ^22.19.0 || >=24.0.0。
从打包产物安装(含构建好的 dist/):
pnpm pack # → dsh-reprolab-0.1.0.tgz
dsh plugin --profile <profile> add ./dsh-reprolab-0.1.0.tgz
dsh --profile <profile>
从源码目录安装(开发用):
dsh plugin --profile <profile> add ./dsh-reprolab
两种形式都依赖宿主内置的 tools 与 subprocess 服务(每个 profile 的 dsh-base 都提供)。
配置
所有字段可选,由 Schemastery schema 补默认值。bundle patch 按行整行替换配置,覆盖时须重述全部键。
| 键 | 类型 | 默认 | 含义 |
|---|---|---|---|
runDir |
string | .reprolab |
相对仓库根目录的运行产物目录(runs/worktrees/补丁/报告) |
graceMs |
number(≥50) | 5000 |
终止子进程树时 SIGTERM→SIGKILL 的宽限毫秒数 |
maxOutputBytes |
number(≥1024) | 1048576 |
单流内存输出上限;溢出保留尾部并将完整流转存 spill |
spillMaxBytes |
number(≥1 MiB) | 16777216 |
单流完整转存上限 |
lockStaleMs |
number(≥1000) | 300000 |
仓库写锁过期阈值(窃取仍须确认持有者已死亡) |
权限与外部副作用
ReproLab 只写入目标仓库内部:runDir/(默认 .reprolab/)下的运行状态、补丁、报告与 git worktree 目录。副作用清单:
- 文件系统:创建
runDir/runs/<run-id>/、runDir/worktrees/<run-id>-{control,candidate}/、baseline.patch、test.patch、fix.patch、report.json、report.md;读取仓库文件。 - 进程:以结构化 argv + 明确 cwd 执行 Git(无 shell)与你声明的测试命令(仅 argv 数组,永不 shell 字符串);取消/超时终止整个进程树。
- Git:只在
runDir/worktrees下创建/移除 worktree;绝不对当前分支执行 reset、checkout 覆盖、clean 或提交。清理是独立显式原语(非工具)。 - 网络 / 遥测 / API key:无。插件不发起网络调用、不上报遥测、不需要任何 API key。
- 凭据:子进程环境从宿主脱敏基线开始(剥离
KEY/PASSWORD/SECRET/TOKEN与DSH_*);输出在写入记录与报告前脱敏(Token、Authorization、Cookie、密码、高熵字符串)。
快速演示(node:test)
> reprolab_start { repoPath: "/path/to/repo", baselineCommand: { argv: ["node","--test"], framework: "node:test" } }
→ runId run_…,状态 baseline_checked,control 与 candidate 路径
# 你在 candidate worktree 中编写复现测试
> reprolab_set_test { runId, declaredTestFiles: ["bug.test.mjs"], command: { argv: ["node","--test","bug.test.mjs"], framework: "node:test" } }
→ 状态 test_frozen,testPatch 哈希
> reprolab_verify_red { runId }
→ verdict valid_red,失败指纹,状态 red_verified
# 你在 candidate 中修复生产代码
> reprolab_set_fix { runId } → 状态 fix_frozen
> reprolab_verify_green { runId } → verdict valid_green
> reprolab_verify_regression { runId, command: { argv: ["node","--test"], framework: "node:test" } }
→ verdict pass(或 pass_with_baseline_failures),状态 regression_verified
> reprolab_report { runId } → reportPath、reportHash(report.json 的 sha256)
> reprolab_status { runId } → 状态 reported,nextActions []
报告 stale:报告生成后任何证据输入变化(例如重新冻结测试),reprolab_status 会返回 report.stale: true。
兼容范围
| 组件 | 版本 |
|---|---|
| DeepSeek Harness | 0.1.0-rc.6 |
| @deepseek-ai/cordis | ^4.0.1(peer) |
| @deepseek-ai/dsh-subprocess / dsh-tools / dsh-brand | 0.1.0-rc.6 |
| @deepseek-ai/schemastery | ^3.18.1 |
全部宿主契约均对照已安装官方包与官方文档快照第一手核验。
已知限制
- 同一仓库同一时间只允许一个活动(非终态)运行;写锁快速失败(
RUN_ALREADY_ACTIVE),不排队等待。 pytest与jest分类依据其文档化输出格式(本机未安装对应框架);vitest与node:test格式取自真实运行输出。Python 项目使用unittest+generic分类器。- 测试运行器缓存产物(
__pycache__、.pyc、.pytest_cache、.coverage、htmlcov、.vite、node_modules/.cache)被变更检测忽略——这是白名单策略,不是全量忽略。 - 仓库至少需要一个提交(worktree 需要基准提交)。
dsh-windtunnel的脚本适配器当前与 DSH0.1.0-rc.6不兼容(第三方问题)。真实宿主生命周期(安装/启用/禁用/卸载/重装)已通过真实dshCLI 在干净 headless profile 上验证。
卸载
dsh plugin --profile <profile> remove dsh-reprolab
卸载只移除 bundle 行与包。运行产物(runDir/ 与 worktree)不会被卸载删除——检查后显式执行 git worktree remove。插件卸载时宿主 subprocess 服务会终止仍在运行的子进程。
故障排查
每个错误码的恢复建议、worktree 清理、过期锁与失效运行的处置:docs/troubleshooting.md。安全模型:docs/security.md。架构:docs/architecture.md。
开发
pnpm install
pnpm run check # lint + typecheck + build + verify:manifest
pnpm pack # → dsh-reprolab-0.1.0.tgz(dist/、cordis.patch.yml、README、LICENSE)
MIT License。
原始 README: https://github.com/yuttfu/dsh-reprolab/blob/main/README.zh-CN.md ↗
同类插件
查看全部 →
archify
Agent 技能:生成美观、可校验的架构图、工作流图、时序图、数据流图与生命周期图——自包含 HTML、带动画与清晰导出

dsh-turn-rewind
对话回退:基于持久 Change Ledger 回滚会话与工作区状态。

dsh-plugin-cc
把 DeepSeek Harness 接入 Claude Code:评审、批评、委派与会话导入

dsh-interconnect
跨实例互联:经 interconnect 服务在多个 DSH 实例间转发消息与事件。

dsh-chat-import
把 13 家 coding agent(Claude Code、Codex、ChatGPT、Cursor、Gemini、opencode 等)的完整对话历史导入为可续聊的 DeepSeek Harness 会话,并支持反向导出回 Claude Code。

dsh-crew
DSH 插件:从 Claude Code / Codex 向 DSH agent 派活——原生 subagent 进度、宿主内 worker 会话(分级预设),以及为纯文本宿主补上视觉与图像生成的多模态桥