dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
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.
One model-facing tool, repo_radar, returning a 0-100 score with the evidence attached:
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.
dsh plugin --profile <name> add github:he-yufeng/dsh-tool-radar
or from npm (once published):
dsh plugin --profile <name> add dsh-tool-radar
| 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.
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
MIT