DeepSeek Harness Plugin

he-yufeng/dsh-tool-radar

Stars ★ 0 Category Git & Code Review Added 2026-09-15

Score a GitHub repo's contribution-friendliness from live merge and maintainer evidence.

Install

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:he-yufeng/dsh-tool-radar

Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).

README

English | 中文

A repo_radar tool plugin for DeepSeek Harness (dsh). Before the agent burns a session on an unfamiliar GitHub repo, score its contribution-friendliness from live evidence, not vibes.

What it does

One model-facing tool, repo_radar, returning a 0-100 score with the evidence attached:

  • Merge history — recently merged PR count and median days from open to merge.
  • Queue health — open PR count, stale (>90d) ratio, and queue-vs-merge-volume imbalance.
  • Maintainer responsiveness — median days to the first maintainer comment on recently merged PRs.
  • External-contributor friendliness — how often outside contributors (NONE/CONTRIBUTOR/FIRST_TIMER) actually get merged.
  • Verdict with reasoning — every scoring rule leaves a plain-language note, plus machine-readable risk flags (no_recent_merges, stale_pr_backlog, slow_maintainer_response, mostly_internal_merges, queue_overload).

Verdict bands: Contribute (70+), Consider (45-69), Avoid (<45). The scoring rules are ported from GitSense's radar, which runs this exact formula daily.

API cost stays bounded: one repo call, one closed-PR sample, one open-PR sample, and maintainer-response probes on at most five merged PRs. Unauthenticated by default; GITHUB_TOKEN (or GH_TOKEN) raises the rate limit and is used only in the Authorization header — never logged, never in output.

Install

dsh plugin --profile <name> add github:he-yufeng/dsh-tool-radar

or from npm (once published):

dsh plugin --profile <name> add dsh-tool-radar

Tool reference

Parameter Type Required Meaning
repo string yes Repository as owner/name or a full GitHub URL.
skills array no Skill keywords matched against the repo's languages (e.g. ["python", "llm"]).

Result shape (one canonical JSON value):

{
  "repo": "HKUDS/Vibe-Trading",
  "stars": 33428,
  "primaryLanguage": "Python",
  "score": 100,
  "recommendation": "Contribute",
  "breakdown": {
    "mergedPrs": 22,
    "openPrs": 5,
    "staleRatio": 0,
    "medianMergeDays": 0.8,
    "medianMaintainerResponseDays": 0.6,
    "externalMergedRatio": 0.95,
    "skillMatches": [],
    "stars": 33428
  },
  "notes": [
    "some recent merges",
    "fast median merge time",
    "stale PR ratio looks manageable",
    "maintainers respond quickly",
    "outside contributors are getting merged"
  ],
  "riskFlags": []
}

Errors are honest: a missing or private repo, a rate-limit hit, or a malformed owner/repo input raises a typed GitHubError instead of returning a misleading score.

Development

npm install
npm run build     # tsc -> lib/
npm test          # vitest (network fully stubbed)

Layout:

src/
  index.ts    # plugin entry: name / inject / apply
  tool.ts     # repo_radar tool definition
  collect.ts  # bounded GitHub sampling -> radar inputs
  score.ts    # the scoring rules (ported from GitSense radar.py)
  github.ts   # minimal API client; token hygiene lives here
test/
  radar.test.ts

License

MIT

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.