At a glance
What it does
Source framework for evaluating dsh plugin behavior through headless session traces and scripted mock-LLM cases.
Before you choose it
dsh-eval is a dsh-native evaluation layer for plugin authors. It tests the assembled plugin, profile, patch, and tool-registry graph in a real dsh headless run, using session-trace matchers rather than metric scores. It also includes a separate comprehension-review experiment layer for checking whether a fresh model can understand a plugin's output and next step.
Best for
Plugin authors who maintain a built deepseek-harness checkout and want repeatable evidence for tool selection, trace behavior, mock write round-trips, or output comprehension.
Common tasks
- Write mock behavior cases that assert a requested tool was called.
- Run real intent cases against a selected dsh profile when credentials are available.
- Dry-run comprehension-review experiments without a model.
- Emit JSON reports or configure profile, repository path, mode, skip handling, and disabled rows through dsh-eval.config.mjs.
Permissions and data
Runs evaluations through dsh headless workflows and creates temporary evaluation artifacts.
Permissions- Access to a built deepseek-harness checkout.
- A dsh profile with the plugin under test installed.
- Real runs may require credentials resolved by dsh.
- Behavior runs inspect session traces and may write reports or run artifacts.
- The README states temporary directories and links are cleaned up and the real profile store is not polluted.
- Real behavior runs use a real model through dsh when credentials are available.
- Credentials are needed for real cases; mock cases and review dry runs need none.
Limitations
- This is not a general agent-evaluation platform, dashboard, dataset host, metric catalog, benchmark-ranking tool, DeepEval replacement, or OpenAI Evals replacement.
- A compatible @deepseek-ai/dsh-llm peer must be manually wired; npm auto-install may select an incompatible version.
- The supplied evidence does not declare a supported deepseek-harness version range.
What DSHub checked
- The source is pinned to commit 4218d4c396870851c60a338a1472e7c22b3d3ebf.
- The repository documents behavior and review CLIs, mock cases, real cases, config discovery, and MIT licensing.
- The README states real cases auto-skip without credentials and that mock/review dry runs need no credentials.
What DSHub did not check
- npm package publication, installation, and runtime execution were not verified.
- Compatibility with a particular dsh or deepseek-harness version was not verified.
- The documented cleanup guarantees and trace assertions were not independently executed.
Pinned install
Primary action
This resource does not have a DSH Plugin install action. Use its source documentation for the delivery method.
Maintainer source
Project README
@catheadowl/dsh-eval
English | 中文
A dsh-native agent evaluation layer for plugin authors: behavior cases run against real headless dsh traces, while review experiments test whether fresh models understand plugin outputs.
It evaluates the assembled agent harness (the graph a plugin + profile + patch + tool registry form inside a real dsh headless run), not isolated functions; verdicts come from dsh-native session-trace projections and matchers (contract assertions), not metric scores. It is not a general agent-eval platform (no dashboard / dataset hosting / metric catalog, no benchmark ranking) and not a DeepEval / OpenAI Evals replacement — those projects proved the problem space; this package picks the dsh-native vertical solution.
Documentation is Chinese-first; deep contracts live in docs/ (matchers / boundary contracts / review / report structure / host wiring / known issues).
Why it exists
| Layer | Question | Verdict | Execution |
|---|---|---|---|
| unit / shape test | are deterministic fields and values correct | automatic | the plugin's own node:test |
| behavior real | does natural-language intent pick the right tool | trace matcher | dsh + real model |
| behavior mock | is the tool pipeline and write round-trip stable | trace matcher + workspace inspect | dsh + scripted mock LLM |
| comprehension review | can a fresh model understand the output and the next step | manual rubric, converged over runs | abstract review experiment + replaceable executor |
A dsh plugin is correct when the assembled graph really wires tools, steers, prompts, and gates together — plugin unit tests cover only part of that, and "is the output understandable" is not a string regression at all. This package turns both layers into replayable evidence instead of manual trial runs.
plugin-owned experiment shared framework
fixtures + prompt + rubric + observe ──► experiment/review.mjs
│ task
▼
adapters/dsh/review.mjs ──► dsh headless
behavior *.eval.mjs ───────────────────► dsh behavior runner (trace + mock)
src/experiment/is the model- and runtime-agnostic experiment layer: blind review, live observation, byte-identical evidence across reviewers. It does not import dsh.src/adapters/dsh/is the landing layer: hands the abstract task to an isolated dsh headless run.- Your
eval/keeps only domain fixtures, projections/observe, prompts, rubrics, and cases — no runner duplication.
Install
npm i -D @catheadowl/dsh-eval
Requirements (wiring details and failure self-diagnostics in docs/host-wiring.md):
- a built deepseek-harness checkout (
apps/cli/lib/bin.js); - the plugin under test installed into a dsh profile;
- the peer dependency
@deepseek-ai/dsh-llmmust be wired manually (npm auto-installs an incompatible antique version; replace it with a link pointing at the host checkout).
Quickstart
<plugin>/eval/behavior/mock/smoke.eval.mjs:
import { firstTool, toolCalled, toolCallStep, textStep } from '@catheadowl/dsh-eval'
export default {
id: 'my-first-case',
mode: 'mock',
task: 'rename guide.md to intro.md',
async prepare(workspace) { /* seed fixture files */ },
script: { steps: [toolCallStep('md_rename', { oldPath: 'guide.md', newPath: 'intro.md' }), textStep('done')] },
expect: [toolCalled('md_rename')],
}
dsh-eval run --mode mock eval/behavior/mock
dsh-review --dry-run eval/comprehension # model-free dry run of the review layer
The command needs to know which dsh profile to use: pass --profile <name> explicitly, or drop a dsh-eval.config.mjs at the package root (see "Unified config" below).
Real runs use dsh-eval run --profile <p> --repo <harness checkout> <case path>; all flags (--mode/--keep-artifacts/--fail-on-skip/--format/--report) are documented in docs/report.md. Real cases auto-skip without credentials (dsh resolves credentials itself); mock and dry runs need no credentials.
Canonical layout
<plugin>/eval/
.gitignore # .runs/ (no path prefix)
README.md
behavior/ # optional
real/*.eval.mjs
mock/*.eval.mjs
_fixtures/
comprehension/ # optional
<name>.review.mjs
fixtures.json
prompt.md
rubric.md
Unified config dsh-eval.config.mjs
Drop one at the consumer package root; both CLIs walk upward from the working directory, and flags always override config:
export default {
profile: 'headless', // dsh profile
repo: '../../deepseek-harness', // relative, anchored at the config file's directory
mode: 'mock', // behavior CLI's --mode default (review has none)
failOnSkip: false, // behavior CI gate default
report: 'eval-report.json', // --report default (anchored at the config dir)
disableRows: ['gates'], // plugin rows disabled by default; case-level declarations win
// (explicit [] = all enabled, for gate-interaction cases)
}
Unknown keys fail loudly (typos never degrade silently). The disableRows semantics and the turn-close gate boundary contract are in docs/disablerows.md.
Docs
| Doc | Topic |
|---|---|
| host-wiring | peer wiring (incl. the npm antique-peer trap), building the CLI, profiles, credentials, spawn requirements |
| review | comprehension review: experiment definition, blank-environment reviewers, artifacts, the six review rules |
| matchers | the full trace-matcher and mock-helper set (tool face / text face / model-visible face) |
| disablerows | disableRows and the turn-close gate boundary contract |
| rowconfig | the rowConfig per-row config override contract (whole-segment replacement, restate needed keys) |
| cross-turn | the followups cross-turn async driving contract (driver-row swap, subagent settle wait, single-cursor mock orchestration, bounded-redispatch assertions) |
| experiments | behavior experiments: arms as case-field overrides × repeats × guards × aggregation (defineBehaviorExperiment, arm deep-merge, INVALID discipline, preregistered decision rule) |
| intent-cases | real intent-case spec: when to write one, assertion face, guards, CI semantics |
| report | machine-readable report structure (--format json / --report) |
| known-issues | known issues and workarounds (e.g. REQUEST_EXTENSION in staged homes) |
| runner-api | programmatic runner API: runEvalCase options contract, EvalRunResult fields, crossing tiers for cliPath |
| experimental | experimental subpath symbol list (escape hatch, no compatibility promise) |
Runtime guarantees
The runner uses try/finally so temp directories and links are cleaned up on every path (prepare throwing, mock validation failure, spawn errors) — the real profile store is never polluted. The behavior and review CLIs share directory scanning (skipping .runs and node_modules); the behavior CLI validates case shapes and detects cross-file duplicate ids at load time, failing as early as possible.
License: MIT. The framework's own tests and release self-checks are carried by the repository CI and do not ship with the package.
Operate deliberately
Install and manage
Prerequisites and target Profile
Target: Dsh Profile
Delivery: Documentation Only — https://github.com/CatheadOwl/dsh-eval/tree/4218d4c396870851c60a338a1472e7c22b3d3ebf。
Compatibility and access
Requires a built deepseek Harness checkout and a dsh profile: Not declared in supplied evidence。
Review compatibility evidence ↗
Risk facts
Real evaluation runs may use credentials resolved by dsh; mock and review dry runs do not require them.
Evidence ↗The peer dependency must be manually linked to the host checkout because npm may install an incompatible version.
Evidence ↗Evidence and editorial reviewManifest, Bundle patch, distribution and freshness
Immutable evidence
Review status and source activity
Curated as a source resource because the supplied snapshot contains no package manifest or DSH skill definition, despite documenting an npm installation command.
AI reviewed Sep 14, 2026, 2:25 PM UTC。GitHub facts last checked Sep 14, 2026, 2:25 PM UTC。
No material source change has been recorded since this evidence baseline.