# dsh-publisher-radar · 插件雷达(Publisher Radar) **给 DSH 插件开发者的市场空白情报台——先看清楚哪个方向还没人做,再动手写代码。** 它回答的就一个问题:**市场里哪些方向还是空的?** 6,000+ 个插件按大类 → 小类(方向)三级拆开,每档标出空位 / 稀少 / 有竞争 / 红海,直接告诉你下一个插件该做什么。市场全量浏览和安装命令只是顺带的能力。 [English](README.md) · MIT · [发布说明](PUBLISHING.md) ## 为什么 DSH 插件市场在 2026 年突破 **6,000 个插件**,还在增长——面板里的数字是实时读目录算出来的,不会写死在文案里。 市场越大,"我该做什么"越难答。真正卡住开发者的不是写不写得出来,而是写完之后发现有人已经做过了。而这个判断今天基本靠翻列表、凭印象: 1. *这个方向是不是已经被占了?*——重名严重(五个作者都在发 `dsh-plugin-doctor`),而真正的竞品用完全不同的词描述自己,按名字搜根本搜不到。 2. *热门大类里还有没有缝?*——`ui`、`dev` 这种大类下面藏着几十个细分方向,有的挤了几十个插件,有的只有 1–3 个。 插件雷达把目录按方向切开,让"哪里空"变成一眼能看见的东西。 ## 你会看到什么 一个侧栏入口、五个模型工具——全部来自同一份目录。**核心是「方向」视图**,其余是配套。 | 入口 | 用途 | |---|---| | `radar_gaps` | **最常用**:哪些主题只有 0–3 个插件?按空位多少排序,直接给出可做的方向 | | 面板「方向」 | 上面这个视图的界面版:大类 → 小类(方向)→ 插件,三级下钻;空位/稀少/有竞争/红海四档,可正倒序 | | `radar_plugin` | 这个主题/名字/作者,已经被谁占了?查重、找竞品 | | `radar_market` | 市场多大、头部是谁?各分类的分布如何 | | `radar_mine` | 我的下载量、Star、是否被收录、同类排名 | | `radar_checkup` | 这个目录能不能过市场安装? | | **插件雷达面板**(侧栏) | 全量浏览整个市场:搜索、大类下拉、翻页、按下载/星数/收录时间排序;点开看详情并复制安装命令 | | 面板「设置」 | 填要跟踪的 npm 包名、可选的 GitHub token(不填也能用) | ## 安装一个插件 点开任意插件 → 底部就是填好 profile 的命令,例如: ```sh dsh plugin --profile desktop add dsh-wsl-tool ``` 一键复制,粘到终端执行,重启 DSH。**面板不替你执行安装**:从只读面板里跑包管理器,失败一次就可能起不来,而定向 profile 的信息在宿主侧才可靠。 ## 零配置是怎么做到的 下面这些都不需要你做,也没有任何"初始化"步骤: - **目录**——官方站、unpkg、jsDelivr、npm 国内镜像(`dsh-plugin-catalog` 的 tarball)**并行竞速**,谁先答应用谁,结果缓存 6 小时。实网测量:官方站被墙时 6.7 秒、走国内镜像 0.7 秒、命中缓存 50 毫秒。 - **Star**——默认用目录里的数;实时 GitHub 数是可选项,失败时静默回退。 - **你自己的插件**——工作区就是插件目录时自动识别(目录里的 `package.json` 声明了 `dsh.bundle`)。 ## 安装 ```sh dsh plugin --profile web add dsh-publisher-radar ``` 重启 profile,侧栏就多出**插件雷达**。 ## 我的插件 不需要 token。两种方式二选一: - 把工作区切到你的插件目录(目录里的 `package.json` 声明了 `dsh.bundle`),自动识别; - 或在面板「设置」里填 npm 包名(逗号分隔)。 GitHub token 只在你想看**实时 star** 时才需要;不填就用目录快照里的 star,功能不受影响。token 保存在 `~/.dsh/publisher-radar/config.json`(仅本机,明文),面板只读回「是否已设置」,从不回显。 ## 可选配置 面板「设置」已经覆盖常用项;也可以用 profile patch: ```yaml - id: publisher-radar config: myPlugins: ["your-package"] # 同「设置」里的包名 githubToken: "" # 同「设置」;也可用环境变量 GITHUB_TOKEN cacheMinutes: 360 # 目录缓存时效 ``` ## 诚实的说明 - 覆盖数是「名称 + 描述」的**词面匹配**,会偏高(`ats` 命中 `formats`)。所以:**报 0 可信**,数字很大只能说明「不是明显的无人区」。 - 80 个方向**没有覆盖全部插件**(约一半插件不命中任何方向)。浏览是全量的,方向是选题用的,两者别混。 - `checkup` 判断的是打包与供应链形状,不是代码质量或安全性。 ## 隐私 - 只读公开数据,从不上传。 - **写入:只有两样**——目录缓存(`catalog.json`,8.7 MB,6 小时过期)和你自己保存的设置(`config.json`)。不写历史、不写会话、不写你的代码。 - `radar_checkup` 只读你指定的目录,任何地方都不写。 - 面板由你本机的 DSH Web 服务同源提供,`no-store`。 ## 开发与验证 ```sh npm test # 单测 + 宿主接线 + 浏览器半区(离线) node test/smoke.mjs --catalog ../market/plugins.json # 对真实目录快照跑 npm run test:install # 打包 → 装进空目录 → 启动它 node scripts/sync.mjs # 复制进 desktop profile ``` `test:install` 是发布前最该跑的那条:它拿用户会下载的那个 tarball,`npm install` 进一个空目录,再把安装后的那份代码导入启动,断言它注册了 5 个工具和 2 条路由。源码树里能过、打包后却坏的错误(漏文件、patch 里写了绝对路径)都会在这里现形。 没有构建步骤、没有运行时依赖。`lib/` 就是发布的源码;浏览器半区是手写的纯 JS(无 JSX、无打包器),与 DSH 自带面板同一形状。 ## 局限 - 目录是精选列表,不是 npm 全量;没被收录的插件在这里看不见。 - `added` 来自目录,太新的插件可能还没有日期。 ## License MIT