dsh-omv
bx33661/dsh-omv
Evidence-first vulnerability research workbench for DeepSeek Harness: native audit views, 29 OMV tools, Evidence.v1 findings, reproducible runs, Campaign workflows, and isolated PoC evidence.
Instalar
dsh plugin --profile web add github:bx33661/dsh-omvREADME
OMV Audit Desk (dsh-omv)
An evidence-first vulnerability audit workbench for DeepSeek Harness, powered by the public oh-my-vul API.
中文文档 · Architecture · DSH integration guide
OMV Audit Desk is the product name; dsh-omv remains the package id for upgrade compatibility. It is a dual-face, native DSH bundle:
- a Node plugin joins DSH web-server, tool, command, system-prompt, and workspace-registry services;
- a browser client contributes a conversation view, session status, composer context, command rows, settings section, and workspace launcher;
cordis.patch.ymlinstalls both faces into a DSH Web profile.
Features
- Evidence-maturity dashboard with five contextual dimensions instead of a single completion percentage
- Candidate, confirmed, blocked, and archived finding ledger
source → sink → guardevidence-chain inspection- Derived Audit Loop stages, persistent Finding-to-Session links, workflow history, and Evidence diffs
- One-click Agent workflows for audit, reproduction, deduplication, adversarial review, reporting, and disclosure
- Doctor issues, review verdicts, open questions, and exact next actions without circular score deductions
- Durable Campaign Runner with bounded concurrency, one native DSH forked session per lane, pause/resume/cancel/retry, and restart recovery
- Provenance-aware Evidence Graph, stage-aware report conditions, and structured reproduction runs
- Closed-loop PoC laboratory: editable drafts, explicit approval, Docker isolation,
/output/result.json, artifact hashes, provenance, and manual Evidence adoption - Dedicated quality center, reproduction lab, dedup intelligence, report-readiness signals, and Campaign Graph
- DSH-native visual system that uses the host background layers, borders, typography, and alias colors directly, with calm hierarchy, sticky workbench chrome, and responsive mobile breakpoints
- Campaign outcomes distinguish completed work from blocked lanes that still need attention
- Campaign compatibility diagnostics isolate malformed YAML, normalize common registry aliases, and repair derived metadata from the workbench
- Workspace-wide search, recent activity feed, and native DSH Job status with contextual repair-and-retry
- SSE workspace synchronization with polling fallback
- Recent workspace activity surfaced on the overview page
- Candidate creation, validation, reproduction scaffolding, promotion, and restore actions
- 29 model tools covering workspace quality, DSH lifecycle diagnostics, Finding, workflow, Campaign Runtime, evidence provenance, reproduction, PoC isolation, dedup, and search
- 19 durable
/omv*commands, includingomv-dedupand the Campaign Runtime set - Automatic binding to the current DSH session workspace
- Native tool presentation, including an OMV-keyed
tool.call.toolviewcard with expandable arguments/results and trajectory inspection, plus an evidence-first Agent system-prompt section - Central cooperative cancellation guards on every native OMV tool invocation
- Native
omvCordis service for other plugins, lifecycle diagnostics viaomv_runtime_status, and typeddsh-omv/tool-resultevents - User preference persistence: uses the native
dsh-omvsettings namespace when the Host exposes it, with a browser-local fallback on DSH rc.6; deployment knobs remain in Cordis Config - Protocol v2 payloads, additive
?protocol=1compatibility, and complete workspace export
Install
There are two separate installation steps: npm install prepares this checkout's dependencies and build output; dsh plugin --profile web add ... installs the plugin into the DSH Web profile. Choose one of the following modes.
Source development (recommended for UI work)
Use a local link when you need hot reload. The link points the profile at this checkout, while npm run dev watches src/ and lets DSH client-HMR refresh the open page.
cd /path/to/dsh-omv
npm install
dsh plugin --profile web add link:.
npm run dev
dsh --profile web
Keep npm run dev running while editing. React component state may reset according to DSH HMR behavior; this is not full page-state persistence. If the profile previously used a regular local install, switch it explicitly:
dsh plugin --profile web remove dsh-omv
dsh plugin --profile web add link:.
Stable local install
Use this mode when you want to run a fixed checkout without hot reload. After source changes, rebuild and add the local package again.
cd /path/to/dsh-omv
npm install
npm run build
dsh plugin --profile web add .
dsh --profile web
Packed install
Use a tarball to transfer or install a specific build on another machine. npm pack prints a versioned filename; use the actual filename it prints. A tarball does not provide source hot reload.
cd /path/to/dsh-omv
npm install
npm pack --silent
dsh plugin --profile web add ./dsh-omv-<version>.tgz
dsh --profile web
Local checkouts and already-built tarballs do not need an extra pnpm allowBuilds entry. Update an installed package with dsh plugin --profile web update dsh-omv, or remove it with dsh plugin --profile web remove dsh-omv.
The Vulnerability audit entry opens or reuses the configured DSH Workspace. Every session then exposes a Vulnerability audit tab beside Chat and Trajectory. Verify the profile after installation with:
dsh --profile web --dump-config
The output should include the dsh-omv configuration layer. If source changes do not appear, confirm that the profile uses link:. and that npm run dev is still running.
Configure
Override the row in $DSH_HOME/profiles/web/cordis.patch.yml:
- id: dsh-omv
config:
projectRoot: '/absolute/path/to/repository'
apiPrefix: '/api/dsh-omv'
allowMutations: true
allowRemoteAccess: false
activityLimit: 60
refreshIntervalMs: 15000
campaignConcurrency: 3
watchDebounceMs: 90
eventHeartbeatMs: 20000
httpBodyLimitBytes: 262144
Relative projectRoot values resolve from the directory where DSH starts. A patch replaces the complete config value, so retain every field you still need.
Security model
- By default the API is loopback-only: the client address must be
127.0.0.1/::1and theHostheader must belocalhost/127.0.0.1/[::1]. The Host check blocks browser DNS-rebinding pages from reading/exportor forging/actionmutations. allowRemoteAccess: truedisables both guards, and the whole API (including every mutation action) has no authentication. Only enable it on a trusted network, behind your own auth proxy or network isolation.- Local access through a non-loopback hostname (for example a custom hosts domain) also requires
allowRemoteAccess: trueto pass the Host check.
Other plugins can consume the host capability without depending on the HTTP bridge:
import type { Context } from '@deepseek-ai/cordis'
export const inject = ['omv']
export function apply(ctx: Context) {
ctx.on('dsh-omv/tool-result', event => {
console.log(event.name, event.ok ? 'ok' : 'failed')
})
void ctx.omv.workbench.health()
}
See README.zh-CN.md for architecture, API, packaging, and configuration details. The implementation-to-guide checklist and follow-up iterations live in docs/dsh-integration.md.
License
MIT
Project structure
The source is split across the DSH host entry, client pages, UI primitives, runtime adapters, and shared contracts; all tests live under tests/. See docs/architecture.md. The repository keeps one curated workbench preview at docs/assets/workbench-overview.png; build archives, local .omv data, and test captures are ignored.