dsh-plugin-mesh

别名:插件生态图、生态扇区图、生态图、plugin ecosystem map

把带 dsh 系列 GitHub 标签的仓库按功能铺成一张可交互的生态扇区图:圆心是官方仓库,19 个功能扇区、61 条细枝规则、三类连线。它是独立静态站点 + Python 采集器,不是 DSH 插件;与本站是「自动全景 × 人工核实」的互补关系。

它是什么

按功能组织的 DSH 生态全景图:把打了 dsh 系列话题的 GitHub 仓库抓下来,铺成一张以 deepseek-ai/deepseek-harness 为圆心的扇区图。

它在 README 里自己声明:「这不是 DSH 插件,不依赖 DSH 运行时;它是一个独立的静态前端 + Python 采集后端。」 ——所以本站把它收在资源源里(sourceKind: tool),不收进插件分区。

项值
仓库WTStarMark/dsh-plugin-mesh
代码构成静态前端(原生 JS,零依赖)+ Python 采集后端
许可MIT
版本README 徽章自称 v0.4.0
在线地址<http://104.129.51.126/>(裸 IP + HTTP,可能变动)
仓库创建2026-10-02(GitHub API 实读)

它抓什么、按什么分类

  • 采集面(README 列举):dsh · dsh-desktop · dsh-plugin · dsh-plugin-desktop · dsh-plugin-market · dsh-plugins;
  • 圆心固定为官方仓库 deepseek-ai/deepseek-harness;
  • 19 个功能扇区 + 61 条细枝规则(每个扇区下 2~5 条细枝),按功能而不是按标签分组;
  • 三类连线:同作者(默认开)、同扇区近邻、主题共现。度数上限只裁主题边,owner 边豁免 (否则同一作者的项目会「断线」);
  • 节点位置由可播种 PRNG 决定,同一 seed 逐点可复现;
  • 点扇区可放大:该扇区铺满整圆、圆内按细枝重新分扇。

几个值得学的产品细节

写在正文里,因为它们是这个项目最有价值的部分(不是数据,是做法):

  1. README 里的预览图由真实数据生成(node tools/snapshot-svg.mjs 复用前端的布局与配色代码), README 里那句原话是「不会出现『README 里的图还是三个版本前』的情况」——本站的预览截图目前全是手工的;
  2. 筛选只「淡化」不移除、位置不变——图上这比隐藏更友好(本站在分区页做的是隐藏);
  3. 访问统计拿不到接口时整栏隐藏,不留一个空壳组件。

与本站的关系

互补,不是竞争:

  • 它回答「生态里有什么、彼此像不像」——自动、立刻更新、覆盖所有打了话题的仓库;
  • 本站回答「这是什么、凭什么这么说、谁在维护」——人工核实、逐条出处、可认领。

两边的口径差异要说清:它的扇区划分是机器规则推断,不能当作事实引用;本站在词条里引用它时, 只把它当外部来源。反过来,没打话题的仓库不会出现在它的图里(启动器、整合包、规范这类 项目往往不打插件话题),那正是本站人工分区的价值所在。

我核实到的

项实测值核实方式(2026-10-02)
仓库存在、话题、许可、创建时间topics = dsh / dsh-plugin / dsh-plugin-desktop / dsh-plugins;MIT;created 2026-10-02T04:53:38ZGitHub API 实读
README 全文(本节所有自称数字与功能)已读原文GitHub API 取 README 并解码
在线站点可达http://104.129.51.126/ → HTTP 200curl
站点资源/styles.css 200(3.5KB)、/src/app.js 200(2.1KB,ES module)curl
它自己的预览图快照docs/preview-light.svg(313KB,1400×1400,2625 个 <circle> + 19 个 <path>);但所有 circle 的 cx/cy 都是 700,即全部塌在圆心取原文解码后本地渲染,只渲染出圆心那一个圆;再用它自己的 tools/snapshot-svg.mjs 现跑一遍,2625 个 circle 的 cx 仍然只有 1 个不同值——不是提交陈旧,是渲染器本身的问题
预览图 bug 的根因tools/snapshot-svg.mjs 画圆与连线时取 layout.x[i] / layout.y[i],那是动画中的当前位置,静态渲染时还全在圆心;目标位置在 layout.tx / layout.ty。把 6 处改成 tx / ty 后重跑:不同 cx 值 1 → 2160,布局正常展开本地克隆里改一行验证(没有动他们的仓库)。讽刺的是,他们自己的 src/links.js 注释就写着这个坑:「必须用目标位置:入场动画没跑完时 x/y 还全叠在圆心」
仓库结构61 个文件;顶层 backend / data / docs / src / tests / tools + index.html + styles.cssGitHub API 文件树
数据集本体data/mesh.json(3.1MB):meta.generatedAt=2026-10-01T17:00:42Z、kind=hourly-crawl、2625 个节点 / 3968 条边克隆仓库后本地解析
边的类型只有两类:topic=3204、owner=764(第三类 neighbor 是前端按布局现算的)同上,按 type 计数
节点字段id / name / owner / stars / forks / language / license / archived / topics / matchedTags / category / subcategory / degree…没有依赖或兼容字段遍历节点字段
采集器读什么只读 GitHub Search API 的仓库元数据;在整个 Python 后端里搜 package.json/dependencies/manifest/requires 零命中源码检索

它连的是什么关系(这一节是回答「是不是插件关系图」)

是关系图,但连的是「关联」,不是「依赖」。 三类边各有来源(src/links.js 的注释与实现):

边类型条数依据它回答的问题
topic 主题共现3204稀有话题共享(超级话题已按 hubThreshold 排除)「这两条像不像」
owner 同作者764owner 相同(ownerStarEdges 55 条为星标归并)「这是谁家的」
neighbor 同扇区近邻前端现算布局距离(源码原话:「位置相近 ⇒ 功能相近」)纯视觉,不是语义

每条边还带一个 via 字段说明理由,例如 {source: "imsai-sh/awesome-deepseek-harness-plugins", target: "imsai-sh/dsh-1024store", type: "topic", weight: 7, via: ["plugin-directory","registry","catalog","plugin-hub"]} ——这是它设计上最值得学的一处:边是可解释的。

它里面没有的东西(也就是这类图最容易被误以为有的东西):没有任何一条「A 依赖 B / A 是 B 的前置 / A 与 B 不兼容 / A 替代 B」。 节点里没有依赖字段,采集器也不读任何清单文件(见上表实测)。所以它是 「生态相似度 + 归属」网络图,不是模组依赖图那样的有向语义关系图。

未核实 / 未声明

  • 实体浏览器里的最终渲染:无头浏览器里页面能加载并显示「正在载入抽样数据…/运行正常 初始化…缩放 1.00」, 但我没有拿到 canvas 的最终绘制结果,所以「图很漂亮」这句我不替它背书——请自己在浏览器里看。
  • README 预览快照坏了,根因已定位:tools/snapshot-svg.mjs 用了 layout.x/y(动画中的当前位置) 而不是 layout.tx/ty(目标位置)。在本地克隆里把 6 处改成 tx/ty 后重跑, 不同 cx 值从 1 变成 2160,布局正常展开——所以这是他们仓库里一个可复现的小 bug, 不是数据问题(复现命令:node tools/snapshot-svg.mjs --size 1400 --theme dark)。 修正后生成的图我也拿到了(暗色/亮色各一张,供本页事实核对用)。
  • 它到底收录了多少仓库:线上站点停在载入状态,无头浏览器里没拿到数字; 但仓库里就有数据集本体(data/mesh.json 3.1MB,2625 个节点、3968 条边,hourly-crawl 快照) 与一份字段级契约(docs/data-contract.md,含 meta / tags / hubs / clusters / nodes / edges)。 所以「无从对接」这句是我先前写错了:数据是开放的,只是没挂在线上站点上 (线上 /data/repos.json 仍返回 403)。本站暂时没有为它写 adapter——因为它的边是相似度, 不是我们要的那些语义关系(见上一节)。
  • 扇区与细枝规则是否准确:61 条规则的具体内容未逐条核实;机器分类必然有误判,引用需谨慎。
  • 访问统计 API:README 说「同端口最小 API:访问数 / 同时在线,拿不到接口时整栏隐藏」, 接口路径与隐私口径未核实。
  • 许可只核到仓库根:MIT(GitHub API 报的 SPDX)——前端与后端是否有例外条款未逐文件核对。

对本站的两个后续启示(不是承诺)

  1. 关系数据:本站 relations 目前是空的,做「关系图」会是一张空图;先按可核实的关系把 前置 / 推荐 / 替代 / 联动填起来,比先做图更重要。
  2. 对外数据契约:本站已经在公网发布机读数据(/data/registry.json、/data/reverse/plugins.json、 /data/entries/<kind>-<n>.json、/data/zones/<id>.json,实测均 200),但没有写成契约文档; 要谈「谁接谁的数据」之前,先把这份契约写出来。

信息表

category
ecosystem.source
howto
读者:直接开在线地址看全景 <http://104.129.51.126/>(作者自己的地址,http + 裸 IP,随时可能变;本站另有一份原样托管的副本,见插件分区的「全量插件生态图」);点任一扇区会放大成整圆、扇区内的细枝重新分扇。 仓库作者:它按 GitHub **话题**采集,所以把自己的仓库打上 `dsh` / `dsh-plugin` / `dsh-plugins` / `dsh-desktop` / `dsh-plugin-desktop` / `dsh-plugin-market` 里的任一个,下一轮采集就会出现在图上——不需要向任何人申请。 想自己跑:`git clone` 后 `npm run serve:lan`(零依赖,只要 Node ≥ 20);采集需要 `GITHUB_TOKEN`,`python3 backend/collect.py --loop --interval 3600` 常驻。
license
MIT
linkOut
http://104.129.51.126/
provides
repo、topics、language、archived、owner、sector、branch、edges
relation
complementary
sourceKind
tool
updatedAt
2026-10-02
url
https://github.com/WTStarMark/dsh-plugin-mesh
zones
plugins

标签:可视化、生态图、外部源