🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

插件雷达 songrui111/dsh-publisher-radar

DeepSeek Harness
songrui1116 天前有提交已提供中文文档扫描:含敏感能力

浏览插件市场,查空位与竞品,看自家数据

30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add songrui111/dsh-publisher-radar
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · market
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 6 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件写入剪贴板(不计风险)读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 38 处,展示前 32 条)
  • 读取本地文件
    index.js:330
    const names = readdirSync(join(home, 'profiles'), { withFileTypes: true })
  • 发起网络请求
    client/client.js:206
    fetch(url, { headers: { accept: 'application/json' }, cache: 'no-store' })
  • 写入剪贴板
    client/client.js:321
    try { navigator.clipboard.writeText(text); setNote('已复制') } catch { setNote(text) }
  • 发起网络请求
    client/client.js:350
    fetch('/radar/config', {
  • 读取本地文件
    lib/radar.mjs:23
    const pkg = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8'));
  • 读取本地文件
    lib/radar.mjs:69
    for (const entry of readdirSync(join(home, 'profiles'), { withFileTypes: true })) {
  • 读取本地文件
    lib/radar.mjs:74
    if (!existsSync(file)) continue;
  • 读取本地文件
    lib/radar.mjs:76
    const pkg = JSON.parse(readFileSync(file, 'utf8'));
  • 读取本地文件
    lib/github.mjs:29
    const parsed = JSON.parse(readFileSync(join(cacheDir, CACHE_FILE), 'utf8'));
  • 写入本地文件
    lib/github.mjs:38
    mkdirSync(cacheDir, { recursive: true });
  • 写入本地文件
    lib/github.mjs:39
    writeFileSync(join(cacheDir, CACHE_FILE), JSON.stringify(cache, null, 2), 'utf8');
  • 读取密钥环境变量
    lib/github.mjs:53
    const token = options.token ?? process.env.GITHUB_TOKEN ?? '';
  • 读取本地文件
    lib/catalog.mjs:207
    const text = readFileSync(options.catalogPath, 'utf8');
  • 读取本地文件
    lib/catalog.mjs:210
    fetchedAt: statSync(options.catalogPath).mtime.toISOString(),
  • 读取本地文件
    lib/catalog.mjs:218
    if (!options.force && existsSync(cacheFile) && meta.fetchedAt) {
  • 读取本地文件
    lib/catalog.mjs:222
    const text = readFileSync(cacheFile, 'utf8');
  • 写入本地文件
    lib/catalog.mjs:241
    mkdirSync(cacheDir, { recursive: true });
  • 写入本地文件
    lib/catalog.mjs:242
    writeFileSync(cacheFile, text, 'utf8');
  • 写入本地文件
    lib/catalog.mjs:243
    writeFileSync(metaFile, JSON.stringify({ fetchedAt, bytes, entries: catalog.entries.length, sourceUrl: source.label }, null, 2), 'utf8');
  • 读取本地文件
    lib/catalog.mjs:249
    if (existsSync(cacheFile) && meta.fetchedAt) {
  • 读取本地文件
    lib/catalog.mjs:251
    const text = readFileSync(cacheFile, 'utf8');
  • 读取本地文件
    lib/prefs.mjs:24
    if (!existsSync(file)) return { myPlugins: [], githubToken: '' };
  • 读取本地文件
    lib/prefs.mjs:26
    const raw = JSON.parse(readFileSync(file, 'utf8'));
  • 写入本地文件
    lib/prefs.mjs:54
    mkdirSync(cacheDir, { recursive: true });
  • 写入本地文件
    lib/prefs.mjs:55
    writeFileSync(configPath(cacheDir), JSON.stringify(next, null, 2), 'utf8');
  • 写入本地文件
    lib/prefs.mjs:56
    try { chmodSync(configPath(cacheDir), 0o600); } catch { }
  • 读取本地文件
    lib/checkup.mjs:19
    return JSON.parse(readFileSync(file, 'utf8'));
  • 读取本地文件
    lib/checkup.mjs:37
    if (!existsSync(dir) || !statSync(dir).isDirectory()) {
  • 读取本地文件
    lib/checkup.mjs:37
    if (!existsSync(dir) || !statSync(dir).isDirectory()) {
  • 读取本地文件
    lib/checkup.mjs:90
    if (!existsSync(patchFile)) {
  • 读取本地文件
    lib/checkup.mjs:94
    const text = stripYamlComments(readFileSync(patchFile, 'utf8'));
  • 读取本地文件
    lib/checkup.mjs:110
    } else if (!existsSync(clientPath)) {
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
展开完整介绍(161 字)↓

插件雷达:DSH 插件市场浏览器 + 作者情报台。6,000+ 个插件可搜可翻可筛,点开即得安装命令;另有空位榜、竞品查询,以及你自己插件的下载与 Star。数字在面板里是实时的。DSH 插件市场全景浏览器——6,000+ 个插件,可搜索、可翻页,每个都带一条可直接复制的安装命令——外加空位与竞品分析,专为插件作者准备。

README

由 DeepSeek 最新模型翻译生成
dsh-publisher-radar · 插件雷达(Publisher Radar) DSH 插件市场浏览器 + 作者情报台——装上就能用。 侧栏的插件雷达里,整个市场(6,000+ 个插件,且还在涨——面板显示实时数字)都能搜、能按大类/方向下钻、能翻页排序、点开就能复制安装命令;同时它告诉你哪些方向还是空的。 English · MIT · 发布说明 为什么 DSH 插件市场在 2026 年突破 6,000 个插件,还在增长——面板里的数字是实时读目录算出来的,不会写死在文案里。决定一个插件值不值得做,就两个问题,而今天两个都没有答案: 1. 这个是不是已经有人做了?——重名严重(五个作者都在发 dsh-plugin-doctor),而真正的竞品用完全不同的词描述自己。 2. 我这个包能不能过市场的安装路径?——缺 dsh.bundle.patch、带 install 生命周期脚本,都会让列表页上的插件静默装不上。 你会看到什么 一个侧栏入口、五个模型工具——全部来自同一份目录。
展开完整文档(README 剩余 1 节)
dsh-publisher-radar · 插件雷达(Publisher Radar)

DSH 插件市场浏览器 + 作者情报台——装上就能用。

侧栏的插件雷达里,整个市场(6,000+ 个插件,且还在涨——面板显示实时数字)都能搜、能按大类/方向下钻、能翻页排序、点开就能复制安装命令;同时它告诉你哪些方向还是空的。

English · MIT · 发布说明

为什么

DSH 插件市场在 2026 年突破 6,000 个插件,还在增长——面板里的数字是实时读目录算出来的,不会写死在文案里。决定一个插件值不值得做,就两个问题,而今天两个都没有答案:

1. 这个是不是已经有人做了?——重名严重(五个作者都在发 dsh-plugin-doctor),而真正的竞品用完全不同的词描述自己。
2. 我这个包能不能过市场的安装路径?——缺 dsh.bundle.patch、带 install 生命周期脚本,都会让列表页上的插件静默装不上。

你会看到什么

一个侧栏入口、五个模型工具——全部来自同一份目录。

| 入口 | 用途 |
| 插件雷达面板(侧栏) | 全量浏览整个市场:搜索、大类下拉、翻页、按下载/星数/收录时间排序;点开看详情并复制安装命令 |
| 面板「方向」 | 大类 → 小类(方向)→ 插件,三级下钻;空位/稀少/有竞争/红海四档,可正倒序 |
| 面板「设置」 | 填要跟踪的 npm 包名、可选的 GitHub token(不填也能用) |
| radar_gaps | 哪些主题只有 0–3 个插件? |
| radar_market | 市场多大、头部是谁? |
| radar_plugin | 这个主题/名字/作者,已经被谁占了? |
| radar_checkup | 这个目录能不能过市场安装? |
| radar_mine | 我的下载量、Star、是否被收录、同类排名 |

安装一个插件

点开任意插件 → 底部就是填好 profile 的命令,例如:

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)。

安装

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:

- 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。

开发与验证

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
预览分享卡片长什么样 ↓songrui111/dsh-publisher-radar
分享 · DeepSeek Harness Hub
songrui111/dsh-publisher-radar

浏览插件市场,查空位与竞品,看自家数据

回到顶部