dsh-market-card:把仓库 README 排成可上架的双语市场卡片

前言

在 DSH 生态里给插件写上架 PR 时,描述、安装命令、截图和「能力 / 限制」往往要手工拼在一起;限制写漏了,审核和读者都容易误解插件边界。DeepSeek Harness 支持用插件扩展客户端能力;社区插件目录是独立站点,与 DeepSeek / 幻方无官方从属关系。下面介绍的 dsh-market-card(维护者 dingchenhui0618-arch,分类:客户端)只做一件事:读取仓库里已经存在的 README.md、package.json 和 docs/*.png,排版成 1200px 宽的中英双语市场卡片,并输出自包含 HTML、真实 2x PNG,以及可直接粘贴的 Markdown 片段。缺字段就标「缺」,不做机器翻译、不补写事实。

这是什么

dsh-market-card 既是 DSH 插件,也是独立 CLI(dsh-market-card / bin/market-card.mjs)。它把「仓库现状」变成一张可以直接贴出去的市场卡片:标题、一句话、安装命令、截图墙、能力、限制,以及可选的版本 / 许可等信息。与同作者 dsh-launch-card 相比,本项目会合成真实 PNG、支持 docs/*.png 截图墙、把中英限制声明当作必需字段并用 --strict 拦截,额外产出 card.md 与 card.json;与 dsh-readme-reel(截图转视频)产物不同,这里是静态卡片。

  • 目录页:https://www.skillhub.cn/plugins/dingchenhui0618-arch/dsh-market-card
  • 源码:https://github.com/dingchenhui0618-arch/dsh-market-card
  • 许可证:MIT(README 与 package.json 一致)
  • 当前 package 版本:0.1.0

核心功能

从 README 与仓库文件提取字段

  • 中文标题:首个加粗短语,或由根目录 market-card.json 覆盖
  • 英文标题:README H1,或 market-card.json
  • 中英各一句 tagline、安装命令(README 里第一条 sh / bash 代码块)
  • 截图:market-card.json 指定,或 README 图片 + docs/**/*.png 拼墙,最多 4 张,过小图标自动跳过
  • 能力 / 限制:market-card.json,或 README 的 ## 能力 / ## 限制 小节;中英各至少 1 条(严格模式下不全则失败)

输出物

文件 内容
card.html 自包含 HTML,截图以 data URI 内嵌,离线可开或贴进 PR 预览
card.png 本机 Chrome / Edge 无头渲染,默认 2x(约 2400px 宽;--scale 1 可降到 1200px)
card.md 标题、安装命令、能力/限制、截图,一段可直接粘贴的上架 PR 片段
card.json 结构化 provenance:字段来源文件与行号、缺失项

--strict 在字段不全时退出码 2 且不写文件;不加 strict 时卡片会盖 DRAFT 章并列出待补字段。英文缺失会进 missing 列表——工具不做机器翻译,英文应由作者确认。

DSH 客户端面板

重启 Web GUI 后,对话视图顶部会出现「市场卡片」标签页:填写含 README.md 的仓库根路径,点「生成卡片」即可预览 PNG、打开 HTML、复制安装命令。插件只在点击生成时读本地文件,不联网。

安装与启用

作为 DSH 插件安装时,使用 README 中的命令(将 <你的 profile> 换成实际 profile):

dsh plugin --profile <你的 profile> add dsh-market-card

安装后重启 Web GUI,在「市场卡片」面板中使用。插件以当前 DSH 进程权限运行;安装前应自行查看源码与 MIT 许可证,确认符合你的环境策略。

运行 CLI 需要 Node ≥ 20(开发与测试使用 24.x),零 npm 运行时依赖。package.json 中 DSH 引擎范围为 >=0.2.1-rc.2 <0.3.0。

典型用法

在 DSH 里生成

  1. 执行上面的 dsh plugin add 并重启 Web GUI。
  2. 打开「市场卡片」,填入插件仓库根目录。
  3. 点击「生成卡片」,预览 PNG 或复制安装命令。

命令行

在插件仓库或任意机器上,对目标插件目录执行:

node bin/market-card.mjs ../my-plugin --out dist
node bin/market-card.mjs ../my-plugin --strict --json

第一条写出 dist 下的 HTML/PNG/Markdown/JSON;第二条在字段不全时以退出码 2 失败,并输出 JSON 诊断。

用 market-card.json 覆盖启发式提取

自动提取是启发式的,英文尤其需要人工撰写。可在被介绍插件仓库根放置 market-card.json,例如:

{
  "category": "tools",
  "title": { "zh": "示例插件", "en": "Demo Plugin" },
  "tagline": { "zh": "一句话中文。", "en": "One English sentence." },
  "capabilities": { "zh": ["..."], "en": ["..."] },
  "limitations": { "zh": ["..."], "en": ["..."] },
  "screenshots": [
    { "path": "docs/panel.png", "caption": { "zh": "面板", "en": "The panel" } }
  ]
}

完整示例见上游仓库 examples/dsh-warden.market-card.json。未写 category 时卡片不显示分类,工具不会猜测市场分类。

适用场景与注意

适合谁: 正在给 DSH 插件市场准备上架 PR 的维护者,希望安装命令、截图墙、能力/限制与仓库 README 保持一致,并需要一张可分享的 PNG 或自包含 HTML。

环境依赖: 生成 PNG 需要本机已安装 Chromium 系浏览器(Chrome / Edge)。找不到浏览器时仍会写 HTML,PNG 状态为 browser-missing,CLI 退出码 3;可通过环境变量 DSH_MARKET_CARD_BROWSER 指定可执行文件。

行为边界(插件自述限制):

  • 卡片固定 1200 CSS 宽,非响应式;页面过高(超过约 16000px)会拒绝出图。
  • 标题、安装命令等提取规则固定(如首个加粗、第一个 shell 代码块);README 结构特殊时请用 market-card.json。
  • 不读 git 历史以外的外部数据,不上传、无遥测,生成过程不修改被读取的仓库。

结尾

dsh-market-card 把「仓库里已有的事实」排版成双语市场卡片,减少上架 PR 手工拼文案和漏写限制的情况;需要严格字段时可依赖 --strict 与 card.json 的 provenance 核对来源。

  • 插件目录:https://www.skillhub.cn/plugins/dingchenhui0618-arch/dsh-market-card
  • GitHub:https://github.com/dingchenhui0618-arch/dsh-market-card
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜