본문으로 건너뛰기
P

dsh-score

perrylink/dsh-score

DeepSeek Harness 플러그인용 다차원 품질 점수화 도구로, 설치 성공, 유지보수 활동, 문서 완성도, 보안 검사, 프로토콜 준수 항목을 실제 CLI 증거로 repo 또는 npm 패키지에 대해 점수화하고, JSON 또는 Markdown 리더보드 보고서를 생성합니다.

설치

dsh plugin --profile web add github:perrylink/dsh-score

README

🏆 dsh-score

  • 1024 store channel: npm i -g dsh1024 once, then dsh1024 plugin --profile web add dsh-score (counts toward the deepseek1024.com install ranking). Gitee dshfind OpenSSF Scorecard

Multi-dimensional quality scoring for DeepSeek Harness plugins.

Five dimensions, real gh/npm evidence, one weighted risk card and leaderboard.

License DSH plugin dsh-doctor DSH Market Node CI Version npm version npm downloads

English · 简体中文 · Español · Português · हिन्दी


⭐ 如果它帮到了你

这个插件是 DSH 插件家族的一员(40+ 个,全部 Apache-2.0)。如果你在用,给个 star —— 它不会解锁任何功能,但会让下一个人在搜索里更容易找到它。

English: part of a 40+ plugin family for DeepSeek Harness. If it is useful, a star helps the next person find it — nothing is gated behind it.

Compatibility

ComponentVersion
DeepSeek Harnessdsh-v0.1.7-rc.2 (GitHub tag; the peer range admits the alpha.2 line: >=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0). Dev/test pins and the typecheck:ci ruler now measure the published 0.1.7-rc.2 line (the 0.1.6-alpha.2 face was verified 2026-09-18: type gates, unit/assembly suites, artifact build); the ctx.jobs seam was migrated to the alpha.2 SessionId contract.
Node.js^22.19.0 || >=24.0.0
Package managerpnpm@11.7.0
PlatformWindows / macOS / Linux (host-only plugin)
External toolsgh CLI on PATH (authenticated for API reads), npm CLI on PATH

What you get

  • score tool — one target through the five-dimension pipeline; returns the structured risk card, or { kind: 'background', jobId } with background: true.
  • /score command — batch scoring of a whitespace/comma-separated target list as a score-batch background job over ctx.jobs, producing a leaderboard snapshot (JSON + Markdown).
  • score_report tool — fetch any stored score card (sc_...), leaderboard (lb_...), or the latest leaderboard.
  • score_badge tool — an embeddable README badge (shields.io flat SVG + endpoint URL) and the five-dimension JSON for one scored target.
  • Five dimensions (weights configurable, defaults sum to 100): install success 25, maintenance 20, documentation 20, security 20, compliance 15.
  • Evidence discipline — every dimension records its audit links (source, sanitized detail, observedAt); a dimension without evidence reports no-evidence (score 0, excluded from the weighted total), never a fabricated number.
  • Structured results — every record carries schema: "dsh-score/v1" with first-class fields; this is the machine-readable contract downstream tooling consumes.

Quick start

Git channel

dsh plugin --profile web add github:PerryLink/dsh-score#<commit-sha>

The first add fails because pnpm blocks the package's prepare build; copy the exact key pnpm printed into the profile's pnpm-workspace.yaml and re-run:

allowBuilds:
  'dsh-score': true

npm channel

dsh plugin --profile web add dsh-score

Prebuilt packages need no build allowance. Restart the profile, then use score / /score from a session.

Install & uninstall

dsh plugin --profile web add dsh-score     # install (npm) — or the git form above
dsh plugin --profile web remove dsh-score  # uninstall

Configuration

All keys are optional (defaults shown); invalid values fail loudly at load.

KeyDefaultDescription
probeTimeoutMs60000Deadline for one gh/npm probe command.
outputTailBytes8000Cap on the sanitized output tail recorded per probe.
cacheMaxAgeMs86400000How long a cached score card is reused before re-scoring (0 disables the cache).
staleCommitWarnDays90Commit/publish age at which maintenance drops to warn.
staleCommitFailDays365Commit/publish age at which maintenance drops to fail.
staleIssueWarnDays30Oldest-open-issue age (response proxy) at which maintenance drops to warn.
staleIssueFailDays180Oldest-open-issue age at which maintenance drops to fail.
maxBatchTargets20/score batch cap.
batchConcurrency1Batch concurrency (serial avoids API-rate contention).
weights{install:25, maintenance:20, documentation:20, security:20, compliance:15}Per-dimension weights (each 0–100; at least one must be > 0).

Tools & surfaces

score

score(target: string, refresh?: boolean, background?: boolean)
  • target — a GitHub repo (github:owner/repo, owner/repo, a git/https URL) or an npm package name.
  • refresh: true bypasses the score cache and re-gathers evidence.
  • background: true starts a score-batch job and returns its id.

/score <targets...>

Starts one background batch job; progress streams through the job output, and the final line names the leaderboard id for score_report.

score_report(id?)

Returns a score card (sc_...), a leaderboard (lb_...), or — with no id — the latest leaderboard.

score_badge(target? | id?, refresh?)

Generates an embeddable README badge and the five-dimension JSON for one target:

  • target — score a GitHub repo or npm package (through the cache) and badge it; mutually exclusive with id.
  • id — badge a stored score card (sc_...) without re-scoring.
  • refresh: true — bypass the score cache (only applies to target).

Returns the badge (SVG + endpoint + Markdown embed) and the compact five-dimension JSON — see Badge & JSON API.

Structured result sample

{
  "schema": "dsh-score/v1",
  "scoreId": "sc_8f1c2e4a9b3d7f01",
  "target": { "kind": "repo", "spec": "github:owner/dsh-click#abc123" },
  "scoredAt": "2026-08-16T00:00:00.000Z",
  "durationMs": 3210,
  "pluginVersion": "0.2.11",
  "dimensions": {
    "install": { "dimension": "install", "status": "no-evidence", "score": 0, "weight": 25,
                 "summary": "no dsh-test-drive result recorded for this target (install success unmeasured)",
                 "evidence": [{ "source": "test-drive", "detail": "no test-drive record found in the test_drive domain", "observedAt": "2026-08-16T00:00:00.000Z" }] },
    "maintenance": { "dimension": "maintenance", "status": "pass", "score": 100, "weight": 20,
                     "summary": "active (2026-08-10T00:00:00Z; 0 open issues)",
                     "evidence": [{ "source": "gh-api", "detail": "last activity 2026-08-10T00:00:00Z", "observedAt": "2026-08-16T00:00:00.000Z" }] }
  },
  "total": 88,
  "grade": "B",
  "verdict": "healthy (weighted total 88/100)"
}

Scoring: the total is a weighted average over dimensions that gathered evidence (no-evidence dimensions are excluded and renormalized); A ≥ 90, B ≥ 75, C ≥ 60, D ≥ 40, else F, and N/A when nothing had evidence.

Badge & JSON API

score_badge generates an embeddable README badge and the five-dimension JSON for one scored target.

Badge

Three forms, all derived from the same settled score card:

  • Endpoint — a documented shields.io static URL, paste-ready for a README image (zero self-hosting).
  • SVG — a self-contained shields.io flat-style SVG (badge.svg field / renderScoreBadge) for offline or self-hosted READMEs.
  • Markdown — the embed snippet combining both.

Embed the total badge in any README:

![dsh-score: B · 84/100](https://img.shields.io/badge/dsh--score-B_%C2%B7_84%2F100-green)

Five-dimension JSON

The same call returns the compact JSON API envelope (schema: "dsh-score/badge/v1"):

{
  "schema": "dsh-score/badge/v1",
  "target": { "kind": "repo", "spec": "github:owner/dsh-click#abc123" },
  "scoredAt": "2026-08-16T00:00:00.000Z",
  "total": 84,
  "grade": "B",
  "dimensions": {
    "install":      { "label": "install", "status": "no-evidence", "score": 0,  "weight": 25, "summary": "no dsh-test-drive result recorded" },
    "maintenance":  { "label": "maintenance", "status": "pass", "score": 90, "weight": 20, "summary": "active (0 open issues)" },
    "documentation": { "label": "docs", "status": "pass", "score": 85, "weight": 20, "summary": "README + CHANGELOG + SECURITY" },
    "security":     { "label": "security", "status": "warn", "score": 60, "weight": 20, "summary": "permissive license" },
    "compliance":   { "label": "compliance", "status": "pass", "score": 100, "weight": 15, "summary": "dsh.bundle.patch + dsh-plugin topic" }
  }
}

A no-evidence dimension keeps its honest status and score 0 — the badge and JSON never fabricate a number.

Permissions & data

  • Only public services are consumed: ctx.subprocess, ctx.jobs, ctx.storageDomain, ctx.tools, ctx.commands.
  • Score cards and leaderboards are stored in the score storage-domain (tables scores, leaderboards; latest-leaderboard pointer). When the composition has no storageDomain (profiles that predate the base bundle's storage rows, such as the 0.1.1-rc.2-era headless profile), tools still work and score persistence is disabled with a logged reason. The published dsh-base bundle mounts storage-domain from 0.1.2-rc.1 on (verified against the 0.1.2-rc.1 and 0.1.5-alpha.1 tarballs), so persistence is active on the published line. 0.1.2-rc.1 (adapted 2026-09-04) and 0.1.5-rc.2: the session envelope keeps its ignorable field for stored-log read compatibility only - Session.append still cannot stamp it, so audit-gate behavior is unchanged.
  • Child processes inherit the provider's credential-scrubbed environment; gh reads its own credential store. No environment value is ever logged.
  • All report/log strings pass through pure sanitizers: token literals, URL credentials, and bearer headers are redacted, and tails are byte-capped.

Security boundaries

  • No code execution. The pipeline runs gh api and npm view only; it never installs, builds, or runs a target.
  • Argv-only subprocesses. Every CLI invocation is an argv array, never shell-interpreted; repo owner/repo segments are validated against a restricted character set before use in an endpoint.
  • Evidence discipline. No score is fabricated: a probe that fails or returns unparsable output yields no-evidence, never a number.
  • Detection vs redaction. Secret-leak and malicious-install-script detection share the same pure regexes as redaction; both are unit-tested against extreme inputs.

Known limitations

  • Repository probes require gh to be authenticated and network access to GitHub; npm probes require npm and registry access.
  • A target without a resolvable GitHub repository cannot be inspected for documentation, security, or compliance (those dimensions report no-evidence).
  • Install success depends on dsh-test-drive being mounted and having recorded the target; otherwise it is honestly no-evidence.
  • The maintenance "issue response" signal is a proxy (oldest open issue age), not a direct response-time measurement.
  • Score results are cached per target; use refresh: true (or wait past cacheMaxAgeMs) to force re-scoring.

Development

pnpm install
pnpm run typecheck && pnpm run typecheck:ci && pnpm test
pnpm run build && pnpm run verify:self-contained && pnpm run verify:artifacts && pnpm pack
  • typecheck resolves @deepseek-ai/* through the local harness checkout; typecheck:ci checks against the published 0.1.7-rc.2 types.
  • Tests use the real Context/Session/ToolRuntime/LocalJobRegistry/storage stack with a scripted subprocess provider.
  • Real-CLI scoring (requires gh/npm on PATH, gh authenticated): invoke score from a mounted profile.
  • Release: node scripts/release.mjs <x.y.z> (bumps, stamps CHANGELOG, re-runs the gate, commits + tags; never pushes).

Topics

dsh, dsh-plugin, deepseek-harness, deepseek, cordis, plugin-scoring, quality-score, leaderboard, supply-chain

Contributors

PerryLink — design and implementation.

This project is one of the 45 DeepSeek Harness plugins maintained by PerryLink. If this one helps you, the others likely will too:

PluginOne-liner
dsh-auto-reviewSecond-model auto-review on the approval chain, fail-closed by default
dsh-autotierAutomatic strong/cheap model-tier routing with deterministic risk guards and a /tier command
dsh-background-agentsDurable background child agents with a Web UI sidebar, messaging and interrupt
dsh-budgetCost governance for DeepSeek Harness: budgets, carbon, and latency in one panel.
dsh-catalogDSH Desktop Market standard catalog source for the PerryLink family
dsh-cert-mcpRead-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence
dsh-checkpoint-rewindClaude Code /rewind-equivalent: snapshots, session forks, one-shot restore
dsh-claude-moveMigrate Claude Code sessions, memory, skills and CLAUDE.md into DSH
dsh-clickCross-platform native desktop control for DeepSeek Harness — Windows first.
dsh-composer-historyTerminal-style input history for the web composer: arrows, Ctrl+R search
dsh-data-qualityDataset quality checks and citation cross-checks (the optional numeric bridge consumed here)
dsh-defendPrompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness.
dsh-doublecheckEngineering-discipline guard: requirements grill, test gates, adversary review
dsh-drawUnified static-image generation routing for DeepSeek Harness.
dsh-fastRead-only performance diagnostics for DeepSeek Harness.
dsh-fund-researchDeterministic research reports for Chinese public mutual funds
dsh-githubGitHub PR/issues integration for DSH, every write gated by approval
dsh-industry-researchIndustry research orchestration that seals its deliverables through this plugin's ctx.researchReport.assemble
dsh-layaLaya typed decisions (noul/choice/score) as a first-class Cordis service and model-visible tools
dsh-libraryLocal document knowledge base for DeepSeek Harness.
dsh-local-aiLocal-model (Ollama) integration for DeepSeek Harness.
dsh-lsp-actionsLSP diagnostics, formatting, completion, code actions and rename over language servers
dsh-maskPII masking middleware: anonymize at the model boundary, restore at the display layer
dsh-mcp-panelRead-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors
dsh-mementoApproval-gated cross-session memory: ctx.memory seam + SQLite + memory tool
dsh-observeOpenTelemetry and Langfuse observability exporter for DeepSeek Harness.
dsh-output-stylesClaude Code outputStyles-equivalent runtime style switching
dsh-permission-rulesClaude Code-style declarative allow/deny/ask permission rules with audit
dsh-plugin-certificationCommunity certification registry with repro-checkable grades and badges
dsh-plugin-doctorZero-dependency static + sandbox smoke detector for DSH plugins
dsh-plugin-guidePlugin-development knowledge base as an on-demand agent skill
dsh-plugin-kitShared zero-runtime-dependency toolkit for the PerryLink DSH plugins
dsh-plugin-upgradeOne-package, one-corridor-index plugin upgrade skill: routes a repository to the matching closed corridor card
dsh-plugin-upgrade-015Merged 0.1.3-alpha.1 → 0.1.5-rc.1 upgrade corridor card plus a zero-dependency seam scanner
dsh-reachMulti-channel approval/question bridge: WeChat/Telegram/Feishu, session console
dsh-research-reportVerifiable research-report engine: content-addressed evidence ledger and sealed versions
dsh-scoreMulti-dimensional quality scoring for DeepSeek Harness plugins.
dsh-session-pinPin sessions in the Web sidebar with durable ordering
dsh-session-syncCross-device session sync for DeepSeek Harness — a dedicated git mirror of your session store.
dsh-skill-pack-securitySecurity-audit skill pack: secret scan, dependency and supply-chain review
dsh-talkVoice-first session loop for DeepSeek Harness: talk to it, hear it answer.
dsh-team-roomsCross-session team rooms: shared message bus, task board and timeline
dsh-test-driveIsolated install-and-smoke test drives for DeepSeek Harness plugins.
dsh-ticktickTickTick/Dida365 task bridge: session-header panel + 11 tools
dsh-translateVendor parameter translation and deterministic JSON repair for DeepSeek Harness.

Install from the DSH Desktop Market

All PerryLink plugins are browsable in the built-in DSH Desktop Market: Market → Sources → add source → paste https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → select it. Installation still goes through the Market's npm-identity verification and your confirmation.

License

Apache-2.0

관련 플러그인