把仓库的 README.md 与 docs/*.png 变成一张可发布的市场卡片:中英双语标题与一句话、安装命令、截图墙、能力,以及一段必须显式写出的限制声明——输出自包含 HTML、2400px 的 2x PNG、可直接粘贴的 card.md,以及带 provenance 的 card.json。它不编造文案:缺英文就进缺失字段列表,--strict 退出码 2,普通运行会盖 DRAFT 章。PNG 用本机 Chrome / Edge 无头渲染;没有浏览器时仍写 HTML,CLI 退出码 3。48 个 node --test 测试,零运行时依赖。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:dingchenhui0618-arch/dsh-market-card
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README

把仓库现状变成一张可以直接贴出去的市场卡片。
一个 DSH 插件,也是一个独立 CLI:读仓库里的 README.md、package.json 和 docs/*.png,生成 1200px 宽的中英双语卡片——标题、一句话、安装命令、截图墙、能力、限制——同时输出静态 HTML、2x PNG,以及一段可以直接粘进上架 PR 的 Markdown。
上架流程里,PR 描述和截图现在多半是手工拼的,限制声明也常常漏写。这个工具只做一件事:把仓库里已经存在的事实排版成卡片;缺什么就写「缺」,不翻译、不补写、不编造。

能力
- 从 README 提取中文标题(首个加粗短语)、英文标题(H1)、中英一句话与安装命令
- 从 README 图片和
docs/**/*.png拼截图墙,最多 4 张,太小的图(图标)自动跳过 - 生成自包含 HTML:截图以 data URI 内嵌,离线可开,也可以直接贴进 PR 预览
- 调用本机 Chrome / Edge 渲染 2x PNG,默认 2400px 实际像素,同时校验浏览器真的写出了一个尺寸正确的文件
- 输出
card.md:标题、安装命令、能力/限制、截图,一段可直接粘贴的上架 PR 片段 - 输出
card.json:每个字段来自哪个文件的哪一行、缺失哪些字段,都记在 provenance 里 --strict在字段不全时退出码 2 且不写文件;不加 strict 时卡片会盖DRAFT章并列出待补字段- 插件面板:填仓库路径 → 生成 → 直接预览 PNG、打开 HTML、复制安装命令,不用切终端
快速开始
作为 DSH 插件
dsh plugin --profile <你的 profile> add dsh-market-card
重启 Web GUI 后,对话视图顶部会多出「市场卡片」标签页。把仓库根目录(含 README.md)填进去即可。插件只在你点「生成卡片」时读本地文件,不联网。
作为 CLI
node bin/market-card.mjs ../my-plugin --out dist
node bin/market-card.mjs ../my-plugin --strict --json
需要 Node ≥ 20(开发与测试用 24.x),零运行时依赖。
用 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,它生成的卡片是 docs/example-card.png:

工具不做机器翻译。英文缺失就进 missing 列表;--strict 会因此拒绝出卡片。这是刻意的:上架卡片里的英文应该由作者确认,而不是由工具猜。
输出
| 文件 | 内容 |
|---|---|
card.html |
自包含 HTML,图片内嵌,可直接浏览器打开或贴进 PR |
card.png |
2x 截图,默认 2400px 宽(--scale 1 可降到 1200px) |
card.md |
可直接粘贴的 Markdown 片段 |
card.json |
结构化 provenance:来源文件、行号、缺失字段、图片尺寸 |
卡片字段
| 字段 | 来源 | 是否必需 |
|---|---|---|
| 中文标题 | market-card.json 或 README 首个加粗短语 |
是 |
| 英文标题 | market-card.json 或 README H1 |
是 |
| 中文一句话 | market-card.json 或首个中文段落 |
是 |
| 英文一句话 | market-card.json、英文段落或 package.json description |
是 |
| 安装命令 | README 里第一条 sh / bash 代码块 |
是 |
| 截图 | market-card.json,或 README 图片 + docs/**/*.png |
至少 1 张 |
| 能力 | market-card.json 或 ## 能力 小节 |
中英各至少 1 条 |
| 限制 | market-card.json 或 ## 限制 小节 |
中英各至少 1 条 |
| 版本 / 许可 / DSH 范围 / 分类 | package.json、market-card.json |
否,有就显示 |
限制
- 必须装有 Chromium 系浏览器(Chrome / Edge)。找不到时仍然写 HTML,PNG 报
browser-missing,CLI 退出码 3;可用DSH_MARKET_CARD_BROWSER指定可执行文件 - 卡片固定 1200 CSS 宽,不响应式;比 16000px 还高时拒绝出图,避免生成一张没人能贴的图
- 提取是启发式的:标题取首个加粗短语、安装命令取第一个代码块。README 结构特别怪时,请用
market-card.json覆盖 - 不做机器翻译、不生成事实、不读 git 历史以外的外部数据;截图只来自仓库里已有的图片
- 不推断市场分类:
market-card.json没写category就不显示,不会猜 - 只读本地文件,不上传、不联网、无遥测;生成过程不修改被读取的仓库
设计
纸色 #f4f1ea、墨色 #16140f、深绿 #0f5c4a、砖红 #a63d2f;62px 中文标题、等宽英文副题、深色安装条、截图墙、左右双栏的能力/限制、底部四格事实带。所有文案在一张 1200px 的「纸」上,按阅读顺序排;不用圆点装饰、不用渐变、不堆图标。
PNG 由无头 Chromium 两遍渲染:先读页面测量出的高度,再以该高度截图;PNG 的 IHDR 会被重新读一遍,尺寸不符就报错,而不是交一张裁掉的图。
参考与区别
- 骨架:零依赖构建、
cordis.patch.yml、host/client 双半区、README 与测试结构照抄了用户指定的相邻项目dsh-warden。没有复制它的业务代码。 - 相邻项目:同作者的
dsh-launch-card也把 README 变成卡片。它的 README 明确写「不合成 PNG」「截图原样引用,不做二次加工」,并用源码行号做可见引用。本项目的区别是:真实 PNG 输出、docs/*.png截图墙、把中英限制声明做成必需字段并用--strict拦截、额外产出card.md与机器可读的card.json。没有复制它的代码或 lint 规则。 - 不同产物:
dsh-readme-reel做的是截图 → 视频,本项目做的是静态卡片。
开发
node scripts/build.mjs # src/ -> lib/,并把客户端样式内联进 lib/client.js
node --test # 48 个测试,全部使用假浏览器,不需要真的装 Chrome
lib/ 是构建产物,需要提交;CI 会重新构建并检查 lib/ 没有差异。
License
MIT
链接
同类插件
tt-a1i/archify#integrations/deepseek-harness★ 92724
从仓库或系统描述生成经过校验的自包含交互式架构图、流程图、时序图、数据流图和生命周期图。
dream-num/dsh-univer-office★ 657
为 DeepSeek Harness 打造一个真正的办公环境。Univer Office 插件将电子表格、文档、幻灯片、画布、多维表格等汇聚到同一个运行时——数据互联、修改经过校验、变更按版本管理,并以隔离工作树支持多 Agent 协作。
ECNU/EduWork#dsh-knowledge-studio★ 275
基于工作区资料的 Studio,复用 DSH 模型与共享成果服务,制作报告、演示文稿、表格、思维导图、测验、闪卡及音视频。Office 生成需 Python 3.12+ 及相关依赖,并配置 DSH_OFFICE_PYTHON;媒体渲染需 Chromium;本地语音转写另需 whisper.cpp 和模型。
PerryLink/dsh-industry-research★ 215
面向 DeepSeek Harness 的确定性行业研究报告:公司与行业研究流程基于分阶段证据产出结构化、可核验的报告。
HuanLinOTO/dsh-plugin-mineru★ 51
向模型暴露 MineRU 文档解析工具。
PolinniZhong/dsh-knit★ 48
把会话工作区里已有的 Markdown 文档、源码、图片与视频列进 DSH 侧边栏,按与当前对话的相关性排序。默认的词法模式用最近几条消息在本地与标题、摘要、正文做带 IDF 加权的匹配(BM25)—— 不调用模型、没有网络出口,内容不出本机。列表来自工作区扫描,而不是「最近打开记录」,所以重启 DSH 或新开会话都不会变空。排序结果组织成主要 / 辅助 / 相关三层的阅读顺序,每一条都写明可核验的理由(命中了哪个字段、被哪一篇引用),点一行即可就地预览:Markdown 按渲染后的样子显示、相对路径图片真实渲染、源码走宿主自带的语法高亮、视频走 HTTP Range 流式播放。同一份 Context Pack 也作为 knit_docs 工具交给 agent。后续版本陆续补上读取证据与生命周期(归因在读那一刻冻结)、固定 / 排除(排除先于检索生效,且可恢复)、关系证据(引用 / 导入 / 测试,带行号)与增量索引(重启后复用)。v0.23 起还多一条可选的混合检索:默认关闭,只有你自己配好 Ollama 或 OpenAI 兼容的 embedding 服务才会生效。它生效时,发出去的是你这句查询原话加上每篇候选文件的标题与摘要 —— Markdown 的摘要取自正文首段(不超过 60 字),代码的摘要是它所在的工作区相对目录,图片 / 视频贡献的是文件名;完整正文与绝对路径都不发送,指向本机服务(loopback)时内容不出这台机器。v0.24 起还能做变更关联:用一条只读的 git status(固定 argv、不走 shell、子进程环境白名单),配合同一套引用 / 导入 / 测试 / 提及证据,指出这次改动大概率该一起看哪些文件 —— 默认关闭。语义检索的收益仍待真 provider 实测,因此不承诺召回提升。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。