Skip to content

Latest commit

 

History

124 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

Hi, I'm PerryLink 👋

GitHub stars GitHub followers GitHub repos OpenSSF Scorecard Glama npm packages npm downloads 30d
MCP Registry awesome-dsh-plugin Listed on DSH Directory DSH Market Gitee mirror
dshfind dshfind downloads across the family DSH Desktop Market source Certified dsh-auto-review plugins

Building the DeepSeek Harness plugin ecosystem: 42 open-source plugins in a 48-repo family, 47 of them PerryLink-owned — security, workflows, research, messaging bridges, developer experience — plus the DSH Desktop Market catalog, a plugin-certification registry and the dsh-plugin-doctor CI checker. All 42 ship CI and a Gitee mirror, five-language docs held to the same section count, install command and configuration keys by a gate in each repo's own CI, and the dsh.bundle contract; 134,856 npm downloads over the trailing 30 days. I also contribute upstream to Cordis — the plugin-core framework DeepSeek Harness is built on — and to deepseek-ai projects, including a merged FlashMLA fix.

DeepSeek Harness turned "everything is a plugin" into an ecosystem. I build the plugins I wish existed — engineering-discipline guardrails, runtime panels, cross-session memory, and verifiable research engines — and publish them the way production software deserves.

Outside the family: 36 external repositories carry a merged pull request of mine together with a commit attributed to this account, and 17 of them are above a thousand stars — Tencent's teamai-cli, DeepSeek's FlashMLA, cordiverse's Cordis, the ACP repositories Zed and JetBrains jointly govern, and the DSH catalogs — part of the 312 merged pull requests this account has outside PerryLink/*. The measurements behind the family's own judgment layer are published as a paper with a DOI: When a Judgment Layer's Self-Reported Fields Lie, a three-layer measurement (Laya, TypeSafe Jev, DeepSeek-V4.1-Flash) run on laya-mcp and jevcore, with a Chinese translation and the artifact archived separately.


📣 Latest — 2026-09-24

  • The whole family moved onto the 0.1.7-rc.1 host line in one day: 39 releases across 36 of the 42 plugin repos, 373 commits across 44 of them. The pins moved from 0.1.7-alpha.2 to 0.1.7-rc.1 and every plugin re-verified against that host; 23 of the 39 release notes name the new line explicitly. The declared peer ranges and engines.dsh were deliberately left unchanged — the existing four-clause union already admits the RC — so this is a re-verification, not a version bump dressed up as one. dsh-plugin-doctor is the busiest of the day on its own: 32 commits and four releases (0.3.0 → 0.4.4), including a stretch that took it from 0.1.7 to 0.1.7-rc.1 compatibility while the rest of the family followed.

  • perrylink on npm, measured today: 56 names, 917 versions, 49 active, 42 of them carrying a provenance attestation — six of the names are scoped @perrylink/*, and seven are deprecated on purpose: the three dsh-plugin-upgrade corridor legs folded into 2.0.0, the author-withdrawn dsh-personal-directive, the old scoped @perrylink/dsh-cert-mcp, and the three archived layacore names. Over the trailing 30 days (npm window 08-23..09-21) the account served 134,856 downloads; that series returns plain zeros for 09-03, 09-07, 09-08, 09-15 and 09-17, so the figure is a floor rather than an exact count.

2026-09-23 round

  • The research this family rests on became a paper with a DOI — a measurement, in large part, of two projects on this page. When a Judgment Layer's Self-Reported Fields Lie: Cost, Latency and the Failure Boundary of Three Judgment Layers on the Same Items measures Laya, TypeSafe Jev and DeepSeek-V4.1-Flash on one item set: four claims, three hold and one the data refutes. The judges' self-reported access-layer fields are not trustworthy — a truncation flag reporting passed while dropping input, a probability field that inverts an item's conclusion, two verdict words unreachable under real input — and the shape behind them is that the judge is near-perfect (0.9909, n=220) where the answer is explicit and collapses (0.3091, n=220) where it must notice an absence, with self-reported confidence high in both cases. A dissimilar judge supplies no incremental coverage in any of the three regimes. Links, and the rule for citing the English text and its Chinese translation as one work rather than two, are in the intro above; the artifact is a third record.

  • Nine of my pull requests landed in laya that day, eight of them inside 84 seconds (13:22:52Z–13:24:16Z) — the project's first Windows CI lane (#212), a suite for the load-time and budget errors nothing reached (#237), three assertions that could not fail (#231), inference moved off the event loop (#230), an ECE that binned differently from its own siblings (#232), non-ASCII characters surviving non-string instructions (#228) and a disclaimer heuristic that read the word "confidential" as one (#227), with #211, #210 and #169 joining them; #222, #234, #249 and #299 followed before the next round — 16 merged in total, not one closed unmerged. The maintainer's note on #210 is the one worth keeping: "it is better for having been written by someone outside the project."

  • And one elsewhere: a process that could not start at all now starts. claude-agent-acp #1146 fixes issue #1124src/index.ts awaited resolveSettings at module scope with nothing around it, so a transient EINTR/EMFILE/EAGAIN while reading the managed-policy tier rejected a top-level await in an ESM entry point and exited the process before it served a single ACP message; the client saw exit 1 and silence. The fix extracts the read into src/managed-policy.ts — for one reason, that an ESM entry point with top-level side effects cannot be imported by a test — and adds four regression tests, the decisive one asserting the promise resolves with the target env untouched. tests went from 17 failed | 1366 passed to 17 failed | 1370 passed; the 17 pre-existing failures are recorded as untouched and explicitly not claimed either way.

🚀 Flagship picks (start here)

The six most-starred family plugins (★ measured 2026-09-24); every other family repo is listed in full further down, and the research four-piece set is under Research.

Plugin What it gives you Install
dsh-auto-review Second-model auto-review on the approval chain, fail-closed by default (198★) dsh plugin --profile web add dsh-auto-review
dsh-research-report Verifiable research reports: content-addressed evidence ledger, manifest seal hash, byte-level citation checks, drift detection, disproof ledger (158★) dsh plugin --profile web add dsh-research-report
dsh-industry-research Industry/company research: chain-map SVG with bottleneck detection, timeline, company cards, adversarial review (157★) dsh plugin --profile web add dsh-industry-research
dsh-permission-rules Claude Code-style declarative allow/deny/ask rules plus a process-level network policy (114★) dsh plugin --profile web add dsh-permission-rules
dsh-memento Approval-gated cross-session memory (ctx.memory + SQLite) (117★) dsh plugin --profile web add dsh-memento
dsh-mcp-panel MCP management console: /mcp + Settings tab + trial calls (66★) dsh plugin --profile web add dsh-mcp-panel

One-command starter pack: dsh-kit — installs the core family in one command.

📦 The full family — 42 plugins + 5 support repos

Counting note: "42 plugins" is the figure the family's own READMEs and this page's heading both carry, because it counts every repo that declares dsh.bundle.patch. Measured against all 48 repos this page names: 39 of the 41 plugin rows declare the contract, and 3 of the 5 support repos dodsh-plugin-kit (a review-rule meta package), dsh-cert-mcp (a certification MCP server) and dsh-plugin-doctor (the CI health checker); dsh-catalog and dsh-kit ship none. 39 + 3 = the family's 42, measured one repo at a time from each repo's own package.json. The two plugin rows outside that arithmetic are the sibling project line jevcore (no dsh.bundle; only its jevcore-dsh workspace member is a plugin) and the third-party pan17/dsh-wechat. Both counts therefore describe the same 47 PerryLink-owned repos: the 41 plugin rows plus the five support repos plus laya-mcp, which is named on this page but is not one of the 42.

🔒 Security (4)

Plugin One-liner npm
dsh-defend Injection/jailbreak/secret detection + destructive-delete gate npm
dsh-permission-rules Declarative allow/deny/ask rules + a local HTTP/CONNECT network policy npm
dsh-mask PII masking/sanitization npm
dsh-skill-pack-security Security-audit skill pack + supply-chain gate npm

🔁 Workflows (8)

Plugin One-liner npm
dsh-background-agents Durable background child agents with a Web UI sidebar, messaging and interrupt npm
dsh-team-rooms Cross-session team rooms: shared message bus, task board, approval-gated handoffs and a timeline that survive restarts npm
dsh-checkpoint-rewind Snapshots, forks, one-shot restore npm
dsh-github GitHub PR/issue integration + Action, writes approval-gated npm
dsh-claude-move Migrate Claude Code/Codex/OpenCode/Hermes into DSH npm
dsh-click Desktop control tools (Windows/macOS) npm
dsh-session-sync Git-backed session synchronization npm
dsh-test-drive Install→smoke→uninstall test driver for plugins npm

✨ Experience & UX (4)

Plugin One-liner npm
dsh-composer-history Terminal-style input history for the web composer npm
dsh-output-styles Runtime-switchable model output styles npm
dsh-session-pin Pin sessions in the Web sidebar npm
dsh-memento Approval-gated cross-session memory protocol npm

🧪 Evaluation (3)

Plugin One-liner npm
dsh-auto-review Second-model auto-review on the approval chain npm
dsh-doublecheck Engineering-discipline guard: grill, gates, adversary review npm
dsh-score Plugin quality scoring across git/gh/npm npm

📊 Observability & cost (4)

Plugin One-liner npm
dsh-autotier Automatic strong/cheap model-tier routing with deterministic risk guards npm
dsh-budget Token/cost metering, budget caps, carbon estimate, latency benchmarks npm
dsh-observe OTel/Langfuse telemetry export npm
dsh-fast Performance diagnostics npm

🎨 Content & knowledge (5)

Plugin One-liner npm
dsh-draw Image-generation routing npm
dsh-translate Translation + JSON repair npm
dsh-talk Speech recognition and voice I/O npm
dsh-library Local knowledge-base RAG npm
dsh-local-ai Ollama LLM provider and routing npm

🛠️ Developer experience (6)

Plugin One-liner npm
dsh-lsp-actions LSP diagnostics/formatting/completion/actions npm
dsh-mcp-panel MCP management console npm
dsh-plugin-guide Plugin-dev knowledge base + CLI toolchain + release-engineering guide npm
dsh-plugin-upgrade Plugin-author upgrade skill: one package, one corridor index that detects the caller's peer band and routes to the matching closed card (0.1.3-alpha.1 → 0.1.5-rc.1, 0.1.5-rc.2 → 0.1.6-alpha.2), plus a zero-dependency seam scanner (bundle skill + npx CLI) npm
jevcore TypeSafe Jev as typed decisions instead of prose (noul/choice/score with calibrated probabilities): offline by default, every transmission named before it happens, disabled gates register nothing (the DSH adapter jevcore-dsh, plus jevcore core and jevcore-mcp for non-DSH MCP hosts) npm
dsh-laya Laya typed decisions (noul/choice/score) as a first-class Cordis service (ctx.laya) plus laya_ask/laya_plan tools; a client of a laya-mcp serve sidecar, so it installs and downloads nothing, and reports whether state stays on this machine as a fact rather than a policy npm

Support repos: dsh-plugin-kit (review-rule meta package) · dsh-catalog (DSH Desktop Market catalog source) · dsh-cert-mcp (certification MCP server) · dsh-kit (one-command installer) · dsh-plugin-doctor (plugin health checker). Five repos publish under a @perrylink/ npm name rather than their repo name — the support repos @perrylink/dsh-plugin-kit and @perrylink/dsh-plugin-doctor, and the plugins @perrylink/dsh-github, @perrylink/dsh-ticktick and @perrylink/dsh-skill-pack-security-provider — and a sixth name, @perrylink/dsh-cert-mcp, is the deprecated scoped predecessor of dsh-cert-mcp; the perrylink account therefore holds 56 names while the family has 42 plugin repos.

📱 Messaging & bridges (3)

Plugin One-liner npm
dsh-wechat WeChat ↔ DSH bridge (Tencent iLink bot): text/image/file/voice, approvals in chat — developed with pan17, who now hosts the repo and publishes the npm package npm
dsh-ticktick TickTick/Dida365 task bridge: session-header panel + 11 tools npm
dsh-reach Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console npm

🔬 Research (4)

Plugin One-liner npm
dsh-data-quality Data profiling/cleaning/verification npm
dsh-fund-research Mutual-fund research, sealed traceable snapshots npm
dsh-industry-research Industry/company research domain pack npm
dsh-research-report Verifiable research-report engine npm

🔧 Upstream & community contributions

Every repo below is external to PerryLink/*; every number is measured, merged work only, and open proposals are deliberately not listed. The third column names the project's owner — the account alone does not say whether that is a company, a standards body or one person.

★ 1,000+ — named individually, as the rule requires, each carrying the party that owns the project. Seventeen external repos above a thousand stars carry merged work (★ measured 2026-09-24). Five of those rows belong to a major company or a well-known organization — Tencent, DeepSeek, cordiverse, and the ACP project that Zed and JetBrains jointly govern, which accounts for two of the seventeen; the other twelve are catalog repos, small community orgs and one-person projects, and the column says so rather than letting the account name imply a company:

Repository 项目归属方
reactive-resume 43,391 reactive-resume org — independent open-source project (rxresu.me)
laya 22,425 NandhaKishorM — individual maintainer; the repo was created 2026-09-18
awesome-dsh-plugin 16,812 awesome-dsh-plugin org — community catalog, no company behind it
FlashMLA 12,953 DeepSeek — the official deepseek-ai org
Cordis 8,794 cordiverse org; its maintainer Shigma is now at DeepSeek, and Cordis is the kernel DeepSeek Harness vendors as @deepseek-ai/cordis
dsh-web 7,989 zhu1090093659 — individual maintainer
ouroboros 6,088 Q00 — individual maintainer (@zep-us)
teamai-cli 4,990 腾讯 Tencent — the official Tencent org, opensource.tencent.com
dsh-market 4,496 dsh-market org — the community plugin market behind dshmarket.com, not a DeepSeek repo
agent-client-protocol 4,319 agentclientprotocol org — governed jointly by Zed Industries and JetBrains
deepseek-harness-desktop 2,592 dsh-tauri community org — self-described non-official and non-commercial, not a DeepSeek repo
claude-agent-acp 2,572 agentclientprotocol org — the same jointly-governed org as the row above, a separate repository
awesome-jev 1,593 yibie — individual maintainer, community catalog for Jev
dsh-plugin-radar 1,465 AdamPlatin123 — individual maintainer, catalog is a generated artifact
Agents-Anywhere 1,181 anywhere-labs community org — 3 public repos, created 2026-05, dshdesktop.cn; not a company
awesome-deepseek-harness 1,102 0xsline — individual maintainer, community catalog
awesome-vibecoded-saas 1,022 Anil Chandra Naidu Matcha — individual maintainer, community catalog

Cordis is the upstream plugin-core framework that powers DeepSeek Harness — vendored into that repo and renamed @deepseek-ai/cordis; FlashMLA #224 is the only merged pull request in the whole deepseek-ai org.

The rest of the contributor set is the community catalog layer rather than upstream projects: 19 further repositories, DSH plugin directories and small community projects (dsh-handbook among them) — the catalogs ingest the family and carry no company owner, so they are named here only in aggregate. 36 external repositories carry at least one merged pull request of ours together with a commit attributed to this account, and 280 merges were counted inside them — re-derived 2026-09-24 from this account's own merged pull requests, so 280 is exact rather than a floor over a probed subset. One further repository took 32 more of our merged pull requests without crediting a commit to this account on its default branch — SihanTeng's list, which is the case the rule at the top of this section was written about — so it does not size the contributor set. 280 + 32 = the 312 merged pull requests this account has outside PerryLink/*, concentrated in 37 repositories; a further 117 of our pull requests are open and are deliberately not counted here.

layaNandhaKishorM/laya16 merged pull requests, every one this account opened there, and the most of any outside contributor — second only to the maintainer, who commits to main directly rather than through pull requests. The next outside contributor has 5. Four areas rather than one:

  • Multilingual routing and evaluation — a caller-supplied language hint (#211), a reproducible per-language harness (#210), a re-run of the 51-language sweep in both temperature regimes (#222).
  • HTTP serving and containers — inference moved off the event loop (#230), and the Compose laya-serve service (#234), later given loopback binding and a healthcheck (#262).
  • Email disclaimers and language detection — the request kept when a disclaimer footer shares its paragraph (#94), letters counted for the scripts no range claims (#169), and "confidential" no longer read as a disclaimer (#227).
  • Correctness and test repairs — three assertions that could not fail (#231), the load-time and budget errors no suite reached (#237), the test suite run on Windows as well as Linux (#212), an ECE that binned differently from its siblings (#232), non-ASCII characters kept in non-string instructions (#228), a README link pointing at a heading that does not exist (#236), #249, where a noul criteria dict that cannot be read raises instead of silently falling back to defaults — the line the project's 0.3.11 release note calls "stricter noul criteria" — and #299, two parity cells in the benchmark table that did not match the JSON they cite.

Security — published advisory GHSA-j922-p6h6-p255 for dsh-permission-rules (medium, patched in 0.6.16).

Official harness repo — it does not accept external pull requests, so that line runs through issues, Discussions (the Show Your Plugins! post #6104) and the plugin ecosystem instead — while the wider deepseek-ai org is open to fixes (FlashMLA #224 merged).

🌍 Where the plugins live

  • GitHub (this profile), Gitee and npm — source, CI and releases here; 46 family repos mirrored to Gitee by a daily job (default branch + all tags), plus this profile repo; the perrylink account holds 56 npm names and 917 versions, 49 of them active and 42 carrying a provenance attestation (measured 2026-09-24 against each name's latest manifest)
  • npm downloads134,856 over the trailing 30 days (npm window 08-23..09-21, the last day its daily series covers; that series returns zeros for 09-03, 09-07, 09-08, 09-15 and 09-17, so this is a floor); dshfind independently tracks 21k+ across the 6 family plugins it currently has a download figure for — dshfind reports rounded tiers, so that is a floor rather than a total
  • DSH Desktop Market — add the catalog source https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json under Market → Sources to browse the family in-app; MCP Registry — three servers, all published from their release workflows over GitHub OIDC: dsh-cert-mcp, jevcore-mcp and laya-mcp
  • GitHub Actionsdsh-github and dsh-test-drive also ship composite actions, so they install as uses: PerryLink/dsh-test-drive@vX

Published to a dozen-plus third-party DSH directories and curated lists — awesome-dsh-plugin, DSH Directory, Awesome DeepSeek Harness, walkinglabs' list, Zhiyuan-Fan's list, the AdamPlatin123 radar, dsh-suite, dshfind.com, deepseek1024.com and Glama among them — and scored on OpenSSF Scorecard; the GitHub dsh-plugin topic is what most of them ingest from.

中文介绍

在 DeepSeek Harness 上构建插件生态:42 个开源插件,来自一个 48 仓的家族(其中 47 个由 PerryLink 自己维护)—— 安全、工作流、研究、消息桥接、开发者体验,外加 DSH Desktop Market 目录、插件认证注册表与 dsh-plugin-doctor 这个 CI 检查器。42 个插件全部带 CI 与 Gitee 镜像,五语文档由每个仓自己的 CI 闸门守着一致(段落数、安装命令、配置键),并声明 dsh.bundle 契约;近 30 天 npm 下载 134,856(窗口 08-23..09-21)。perrylink 这个 npm 账号下共有 56 个名称、917 个版本:其中 49 个在用(42 个非 scoped + 6 个 @perrylink/ scoped + pan17 的 dsh-wechat)、7 个已弃用(dsh-plugin-upgrade 折进 2.0.0 的三条走廊腿、作者撤回的 dsh-personal-directive、改名前的 scoped @perrylink/dsh-cert-mcp,以及三个已归档的 layacore 名字)、42 个当前 latest 版本带 provenance 证明(均按 2026-09-24 实测)。我也向上游 Cordis(DeepSeek Harness 所基于的插件内核框架)与 deepseek-ai 项目贡献,包括已合并的 FlashMLA 修复(#224,该组织下唯一一条已合并的外部 PR);家族之外共 36 个外部仓带着本账号已合并的 PR 与一条归属提交,其中 17 个在千星以上。

这一家子所依赖的那项研究,现在是一篇有 DOI 的论文 —— 而且它测的很大一部分,正是这份主页上的两个项目:laya-mcpjevcore当判定层的自报字段说谎时:三类判断层的成本、延迟与失效边界实测》在一套相同条目上实测三类判定层(Laya、TypeSafe Jev、DeepSeek-V4.1-Flash),四条主张三条成立、一条被自己的数据否定;判定器的接入层自报字段不可信(截断标志报「通过」却静默丢输入、概率字段把结论反号、两个判定词在真实输入下不可达),失效集中在一处 —— 答案被明确陈述时近乎完美(0.9909,n=220),必须注意到「缺席」时塌缩(0.3091,n=220);异种判定器在三个区制上都没有增量覆盖。引其一即可,不要当两篇引(英文原文 · 中文译本 · 制品);两者有出入以英文为准。

2026-09-24 轮:全家一天之内搬到 0.1.7-rc.1 宿主线 —— 42 个插件仓里有 36 个发了 39 个 Release,其中 23 个发布说明直接点名这条新线,同一天 44 个仓共 373 次提交(pin 从 0.1.7-alpha.2 移到 0.1.7-rc.1 并逐仓复验;声明的 peer 区间与 engines.dsh 故意不动 —— 原有四段并集本来就容得下这条 RC,所以这是一次复验,不是化妆成复验的版本号变动)。dsh-plugin-doctor 是当天最忙的一个:32 次提交、四个 Release(0.3.0 → 0.4.4)。

laya(NandhaKishorM/laya)是这个账号投入最深的外部项目:16 条已合并的 PR —— 我在那里提的 PR 全部进了主干,没有一条被关闭未合并;外部贡献者里最多,仅次于直接向 main 提交(而非走 PR)的维护者。其中 9 条是 2026-09-23 合的,8 条集中在 84 秒之内(13:22:52Z–13:24:16Z);#222#234#249#299 随后进主干。方向不是一个,而是四个:多语言路由与评测、HTTP 服务与容器、邮件免责声明与语种判定,以及代码与测试修正 —— 包括项目的第一条 Windows CI 车道(#212),Linux 的 16 个 suite 里 15 个现在在 windows-latest 上跑。

还有一条在别处:一个根本起不来的进程现在能起来了。 claude-agent-acp #1146src/index.ts 里那处没有保护的顶层 await 不再因一次瞬时错误就中断模块求值、在发出任何一条 ACP 消息之前退出。

待业中。近期考虑给自己安排一次体检。因此最近将减少熬夜,后续的更新迭代节奏会适当放缓。当然,问题和缺陷修复不会停,只是发布频率会降低一些,还请大家谅解。

About

Building the DeepSeek Harness plugin ecosystem: 42 open-source plugins in a 46-repo family, 45 PerryLink-owned - security, workflows, research, messaging bridges, developer experience - plus the DSH Desktop Market catalog, a certification registry and the dsh-plugin-doctor CI checker. Cordis + deepseek-ai contributor, plus 15 merged PRs to laya.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors