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 UTCGitHub 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