Evidence snapshot reviewed Sep 16, 2026GitHub checked Aug 21, 2026
Source-reviewedResourceAutomation & AgentsDsh Profile

dsh-eval

Source framework for evaluating dsh plugin behavior through headless session traces and scripted mock-LLM cases.

At a glance

What it does

Source framework for evaluating dsh plugin behavior through headless session traces and scripted mock-LLM cases.

Capabilities
Automation & AgentsAgentsTestingWorkflow Automation

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.
Data handling
  • 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.
External services
  • Real behavior runs use a real model through dsh when credentials are available.
Credentials
  • 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.

Visit the source project ↗

Maintainer source

Project README

View at commit 4218d4c ↗
Maintainer-authored contentCaptured from README.md on Sep 14, 2026. The text and repository-relative media are fixed to commit 4218d4c39687 with content hash 4599dc4b329b; provider-hosted badges may update independently. README commands are upstream documentation; use the type-correct primary action above and verify it against this pinned source.

@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-llm must 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

Credentials

Real evaluation runs may use credentials resolved by dsh; mock and review dry runs do not require them.

Evidence ↗
Host Wiring

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

AI reviewed

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.

Next step

Compare ecosystem artifact types →

Subscribe to material changes for dsh-eval →