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

发布卡片生成器 dingchenhui0618-arch/dsh-launch-card

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

从仓库真实产物生成发布图与双语文案

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

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

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

状态速览

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

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

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

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 41 处,展示前 33 条)
  • 读取本地文件
    lib/index.js:97
    if (!existsSync(path)) return undefined
  • 读取本地文件
    lib/index.js:98
    return readFileSync(path, 'utf8')
  • 读取本地文件
    lib/index.js:147
    if (!existsSync(repo)) {
  • 读取本地文件
    lib/launch-card.js:58
    return readFileSync(path, 'utf8').replace(/^ FEFF/, '')
  • 读取本地文件
    lib/launch-card.js:215
    if (!existsSync(path)) return undefined
  • 读取本地文件
    lib/launch-card.js:217
    if (!statSync(path).isFile()) return undefined
  • 读取本地文件
    lib/launch-card.js:218
    return sha256(readFileSync(path))
  • 写入本地文件
    lib/launch-card.js:393
    mkdirSync(out, { recursive: true })
  • 读取本地文件
    lib/launch-card.js:395
    if (existsSync(licensePath) && statSync(licensePath).isFile()) {
  • 读取本地文件
    lib/launch-card.js:395
    if (existsSync(licensePath) && statSync(licensePath).isFile()) {
  • 写入本地文件
    lib/launch-card.js:400
    mkdirSync(dirname(target), { recursive: true })
  • 写入本地文件
    lib/launch-card.js:401
    writeFileSync(target, files.get(path), 'utf8')
  • 读取本地文件
    lib/lint.js:361
    if (!existsSync(path)) continue
  • 读取本地文件
    lib/lint.js:364
    text = readFileSync(path, 'utf8')
  • 发起网络请求
    lib/client.js:39
    fetch(API + '/state', { headers: { accept: 'application/json' } })
  • 发起网络请求
    lib/client.js:52
    return fetch(API + '/generate', {
  • 读取本地文件
    scripts/launch-card.mjs:77
    if (!existsSync(repo) || !statSync(repo).isDirectory()) {
  • 读取本地文件
    scripts/launch-card.mjs:77
    if (!existsSync(repo) || !statSync(repo).isDirectory()) {
  • 读取本地文件
    scripts/launch-card.mjs:86
    const modulePath = existsSync(entry) ? entry : fallback
  • 读取本地文件
    lib/facts.js:75
    return readFileSync(path, 'utf8').replace(/^ FEFF/, '')
  • 读取本地文件
    lib/facts.js:224
    if (!existsSync(path)) return undefined
  • 读取本地文件
    lib/facts.js:267
    if (!existsSync(path)) return undefined
  • 读取本地文件
    lib/facts.js:312
    if (existsSync(summaryPath)) {
  • 读取本地文件
    lib/facts.js:399
    if (!existsSync(dir)) return undefined
  • 读取本地文件
    lib/facts.js:404
    entries = readdirSync(current, { withFileTypes: true })
  • 读取本地文件
    scripts/build.mjs:20
    const pkg = JSON.parse(await readFile(join(root, 'package.json'), 'utf8'))
  • 删除本地文件递归
    scripts/build.mjs:24
    await rm(out, { recursive: true, force: true })
  • 写入本地文件
    scripts/build.mjs:25
    await mkdir(out, { recursive: true })
  • 写入本地文件
    scripts/build.mjs:28
    await copyFile(join(root, 'src', 'host.js'), join(out, 'index.js'))
  • 写入本地文件
    scripts/build.mjs:30
    await copyFile(join(root, 'src', file), join(out, file))
  • 读取本地文件
    scripts/build.mjs:33
    const css = await readFile(join(root, 'src', 'client-css.cjs'), 'utf8')
  • 读取本地文件
    scripts/build.mjs:38
    const clientSource = await readFile(join(root, 'src', 'client.cjs'), 'utf8')
  • 写入本地文件
    scripts/build.mjs:53
    await writeFile(join(out, 'client.js'), bundle)
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

发布卡片:从本地仓库真实产物生成 hero 图、特性网格与双语文案,导出前 lint 掉无法证实的说法

README

由 DeepSeek 最新模型翻译生成
dsh-launch-card 从一个本地仓库的真实产物(README.md、package.json、可选截图)生成发布用的 hero 图、特性网格和中英双语文案,并在写出之前把无法证实的说法 lint 掉。 它同时是一个 DSH 插件:CLI 负责生成,Web GUI 里多一个「发布卡片」面板,可以直接在会话里重新生成并看判定。 特性 - 零运行时依赖:只用 Node 内置模块,package.json 的 dependencies 是空对象,不引入任何图片库——图像产物是 SVG 与 HTML 纯文本,可 diff、可复现。 - 事实优先:项目名、版本、license、一句话简介、特性列表、安装片段全部来自 README.md 与 package.json,缺失的字段直接不渲染,不补占位文案。 - 可追溯:每条特性后面都带 来源: README.md#L42 这样的行号标注,card.html 里还有一张逐条来源表。 - 断言 lint:无法从本仓库产物证实的说法在写出之前就被拦掉,命中整行不写入产物,判定理由留在 lint-report.json。 - 双语同源:copy.zh.md 与 copy.en.md 由同一份结构化模型渲染,条目数一致,骨架文案各写一份,事实文本从仓库原样引用——不做机翻。
展开完整文档(README 剩余 1 节)
dsh-launch-card

从一个本地仓库的真实产物(README.md、package.json、可选截图)生成发布用的 hero 图、特性网格和中英双语文案,并在写出之前把无法证实的说法 lint 掉。

它同时是一个 DSH 插件:CLI 负责生成,Web GUI 里多一个「发布卡片」面板,可以直接在会话里重新生成并看判定。

特性

- 零运行时依赖:只用 Node 内置模块,package.json 的 dependencies 是空对象,不引入任何图片库——图像产物是 SVG 与 HTML 纯文本,可 diff、可复现。
- 事实优先:项目名、版本、license、一句话简介、特性列表、安装片段全部来自 README.md 与 package.json,缺失的字段直接不渲染,不补占位文案。
- 可追溯:每条特性后面都带 来源: README.md#L42 这样的行号标注,card.html 里还有一张逐条来源表。
- 断言 lint:无法从本仓库产物证实的说法在写出之前就被拦掉,命中整行不写入产物,判定理由留在 lint-report.json。
- 双语同源:copy.zh.md 与 copy.en.md 由同一份结构化模型渲染,条目数一致,骨架文案各写一份,事实文本从仓库原样引用——不做机翻。
- 输出可复现:manifest.json 记录每个输入产物与每个输出文件的 sha256,--now 或 SOURCE_DATE_EPOCH 可让整次输出字节一致。
- DSH 插件双半区:host 半区挂 /dsh-launch-card 路由,client 半区在对话视图里注册「发布卡片」Tab。

安装

CLI 不需要安装,克隆后直接跑即可(本仓库没有发布到 npm):

node scripts/launch-card.mjs . --out examples

作为 DSH 插件使用时,把仓库目录加进 profile:

dsh plugin --profile <你的 profile> add <本仓库路径或 github:dingchenhui0618-arch/dsh-launch-card>

用法

node scripts/launch-card.mjs <仓库目录> --out <输出目录> [--lang zh,en] [--theme dark,light] [--now <ISO>]

产物:

| 文件 | 内容 |
| hero.dark.svg / hero.light.svg | 项目名 + 版本 + 一句话简介 + license |
| features.dark.svg / features.light.svg | 特性网格,逐条带来源行号 |
| copy.zh.md / copy.en.md | 一句话卖点、特性、安装片段、行动号召、来源标注 |
| card.html | 自包含预览页:hero、特性网格、事实表、安装片段、输入截图、来源表、双语文案 |
| lint-report.json | 每条命中的 {rule, severity, file, line, text, why},以及被删条目 |
| manifest.json | 每个输入产物与输出文件的 sha256、生成时间、工具版本 |
| summary.json | 结构化事实与统计,供脚本消费 |

断言 lint

规则表在 src/lint.js。每条规则都带一句 why,写进 lint-report.json,措辞统一为「无法从本仓库产物证实」:

| rule | 拦什么 | 一句话理由 |
| stars | 星标 / 收藏量 | 本仓库里没有任何星标数据,这类数字只能来自平台侧 |
| popularity | 用户量 / 下载量 / 客户数 / MAU | 本仓库没有用户或下载统计,规模数字都是编的 |
| sla | SLA / uptime / 可用性百分比 | 只有存在 SLA.md、docs/SLA.md 或 docs/uptime.md 时才放行 |
| performance-claim | Nx faster、比 X 快 N 倍、speedup | 性能对比必须来自本仓库的 benchmark 产物 |
| performance-numbers | 带数字的毫秒 / 秒 | 同上,没有 benchmark 文件就是命中 |
| latency-claim | 延迟 / 吞吐 / RPS 表述 | 同上 |
| ranking | #1、leading、第一、最强 | 仓库里没有排名或横评依据 |
| endorsement | 奖项 / 背书 / 媒体报道 | 仓库里没有外部认可记录 |
| business-claim | 融资、营收、定价承诺 | 仓库里没有融资或定价信息 |
| readiness-claim | production-ready、battle-tested、企业级 | 只有仓库里存在 CI 配置 + 测试目录,或 Dockerfile/docker-compose.yml/Makefile 时才放行 |

反面同样重要:MIT、Apache-2.0、版本号、dependencies 为 0、test/.test.mjs 里数得出来的测试条数,都能在本仓库里找到依据,不会被拦。test/lint.test.mjs 里「该拦」与「不该拦」的用例是成对写的。

可追溯

summary.json 里每条特性都是 {text, source:{file,line}};copy..md 里每条特性后面跟「来源: README.md#L42」;card.html 里有一张来源表。没有来源的句子不会被渲染——渲染器读不到文件系统,它只拿得到带着来源的结构化模型。

参考

骨架(零依赖、host 半区 ESM + apply(ctx, config)、client 半区 CJS 包在 window.__ModuleLoader__.load() 里、cordis.patch.yml 的 insert 行、package.json 的 dsh 段、测试写法)照的是本地已有的 dsh-warden 插件。参考了什么、不同在哪:
- 相同:文件布局(src/ 手写 + lib/ 构建产物 + test/ + scripts/)、scripts/build.mjs 的「拷贝即构建」思路、scripts/wrap-client.mjs 的包装形式、README 的章节结构、client 半区对 ctx.effect / ctx.slots 的守卫写法。
- 不同:warden 的实质逻辑是一个审查门(LLM 判定 + 钩子拦截),这里没有 LLM、没有 tools/pre-execute 钩子,实质逻辑是一个纯函数生成器加一张 lint 规则表;warden 的构建把 CSS 用正则从源码里抠出来内联,这里改成 CSS 模块导出字符串 + 一个显式的 __LAUNCH_CARD_CSS__ 占位符替换;这里多了 CLI、manifest.json 的哈希链和确定性输出。
- 代码是独立写的,没有从 dsh-warden 或任何其他仓库整段搬运。

设计动机(未核实):我们没有确认过「生态里不存在同类产出环节」这件事,所以不写成已核实的结论;这里只是这个插件存在的理由——发布素材通常靠手工攒,而手工攒的东西没人检查里面有没有编造的断言。

开发

node scripts/build.mjs # 零依赖构建,产出 lib/
node --test # 94 个用例,node --test 全绿
node scripts/launch-card.mjs . --out examples --now 2026-01-01T00:00:00.000Z

用例分布:test/lint.test.mjs 27 条(每条规则「该拦」+ 成对的「不该拦」)、test/facts.test.mjs 14 条(README / package.json 解析与来源行号)、test/generate.test.mjs 21 条(产物集合、确定性、哈希、双语一致、被删条目)、test/host.test.mjs 12 条(路由与卸载)、test/client.test.mjs 8 条(半区加载与插槽注册)、test/cli.test.mjs 12 条(真实子进程、退出码、只写 --out)。

lib/ 是构建产物,改 src/ 之后必须重新 build;examples/ 是对本仓库自己跑一次 CLI 的真实产物,不是手写的。

它不做什么

- 不合成 PNG。 图像产物只有 SVG 与 HTML;README 或 screenshots.json 里提到的截图原样引用进 card.html,不做二次加工。
- 不追求漂亮的字体渲染。 SVG 里的换行用的是一个字符宽度估算函数(CJK 记 1 em,其余 0.55 em),不加载任何字体度量库。跨浏览器、跨字体的实际换行效果没有实测过。
- 不做机翻。 英文文件不是中文的翻译:两者都由同一份结构化模型渲染——小节标题、行动号召、表头这些框架文案各写一份,事实与特性文本从仓库原样引用。所以英文文件里的正文仍然是仓库原文的语言(本仓库是中文),只有骨架是英文。这是明确的产出边界:把中文句子逐词替换成英文只会在语法上产出胡话,所以本工具不做;英文正文要地道,得由人在 docs/ 里提供译文,这件事没有做。
- 不替你核实外部事实。 它只保证产物里不出现无法从本仓库证实的断言,不保证产物内容符合事实以外的判断。
- lint 有两个已知盲区,都写在测试里当作固定行为:标题行本身点名某条规则时(例如 # 已有 1200 stars 的项目)整行跳过,因为规则表自己的标题也在这一行;以及元语句标记(这类说法会被拦掉)后的行跳过。这两处是放宽而非漏判,凡是要写进产物的话都不走这两条路径——生成器自己的文案走的是逐行重渲染 + 定点循环。

License

MIT
预览分享卡片长什么样 ↓dingchenhui0618-arch/dsh-launch-card
分享 · DeepSeek Harness Hub
dingchenhui0618-arch/dsh-launch-card

从仓库真实产物生成发布图与双语文案

回到顶部