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

交付回执 dingchenhui0618-arch/dsh-ship-receipt

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

生成可分享的交付回执,按证据强度分区呈现结果

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]—
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
数据截至 2026/10/16·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 24 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 20 处,展示前 11 条)
  • 执行外部命令来自配置/变量
    lib/index.js:106
    exec(command, { cwd: cwd, timeout: timeoutMs, maxBuffer: 8 * 1024 * 1024, windowsHide: true }, function (error, stdout, stderr) {
  • 读取本地文件
    lib/index.js:166
    } while (existsSync(join(runsDir, id)))
  • 读取本地文件
    lib/index.js:177
    const info = statSync(path)
  • 读取本地文件
    lib/index.js:181
    return new Uint8Array(readFileSync(path))
  • 读取本地文件
    lib/index.js:191
    entries = readdirSync(current, { withFileTypes: true })
  • 读取本地文件
    lib/index.js:254
    info = statSync(full)
  • 读取本地文件
    lib/index.js:262
    text = readFileSync(full, 'utf8')
  • 写入本地文件
    lib/index.js:531
    mkdirSync(dirOut, { recursive: true })
  • 写入本地文件
    lib/index.js:534
    writeFileSync(pagePath, renderReceipt(receipt), 'utf8')
  • 写入本地文件
    lib/index.js:535
    writeFileSync(jsonPath, JSON.stringify(receipt, null, 2), 'utf8')
  • 发起网络请求
    lib/client.js:45
    fetch(API, { headers: { accept: 'application/json' } })
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

给 DeepSeek Harness 的可分享交付回执:分支与提交、产物哈希、三项推送前检查和你测试/构建结果,硬拆成已验证 / 仅本地 / 未验证三块,留空槽位而非写说明。

README

由 DeepSeek 最新模型翻译生成
dsh-ship-receipt 项目收尾时生成一张可公开的「交付回执」:分支与 commit、关键产物的尺寸与 sha256、推送前三步检查的结论、你指定的测试与构建结果——并且把它们硬性分成已验证 / 仅本地 / 未验证三区。 一份可分享的交付回执,给 DeepSeek Harness 用。它能测的就测,你告诉它的就记,没东西可展示的地方就留一个空槽。 它解决什么 每次收尾都要手写一段汇报:分支、commit、测试过了、构建过了、截图尺寸、密钥扫过了。这段话有两个方向都会出错,而且两种错在文字里长得一模一样: - 写少了漏证据——「测试通过」没有命令、没有退出码,读者只能信你。 - 写多了越界——「生产已完整验证」其实只是本地跑通了。
展开完整文档(README 剩余 1 节)
dsh-ship-receipt

项目收尾时生成一张可公开的「交付回执」:分支与 commit、关键产物的尺寸与 sha256、推送前三步检查的结论、你指定的测试与构建结果——并且把它们硬性分成已验证 / 仅本地 / 未验证三区。

一份可分享的交付回执,给 DeepSeek Harness 用。它能测的就测,你告诉它的就记,没东西可展示的地方就留一个空槽。

它解决什么

每次收尾都要手写一段汇报:分支、commit、测试过了、构建过了、截图尺寸、密钥扫过了。这段话有两个方向都会出错,而且两种错在文字里长得一模一样:

- 写少了漏证据——「测试通过」没有命令、没有退出码,读者只能信你。
- 写多了越界——「生产已完整验证」其实只是本地跑通了。

所以这个插件不生成模板,它测量:

| | 来源 | 落在哪一区 |
| 分支 / commit / 工作区 / 上游对比 | 插件本进程跑只读 git 命令 | 已验证 |
| 关键产物的字节数、sha256、PNG 宽高 | 插件自己读文件算 | 已验证 |
| 推送前三步检查(密钥扫描 / .gitignore 核对 / 无关文件清理) | 插件自己跑 | 已验证 |
| 测试与构建 | checks 里的命令默认由插件真的执行,记录退出码与输出 | 已验证 |
| 你报告但没有自己跑的结果 | run: false,附命令与报告值 | 仅本地 |
| 没有任何证据的声明 | claims | 未验证 |

那条硬规则

未验证的条目只留标签,正文不显示。

这不是排版选择。一份措辞自信、背后什么都没有的声明,正是回执要防的东西——而把它染成灰色再照原样印出来,读者照样会把它读成结论。所以 freezeSection 会把无证据条目的 detail 直接丢掉,只留下标签和一个显式的空槽:

未验证(1)生产验证 ┌────────────────────┐ │ (没有证据,留空) │ └────────────────────┘

这条规则在开发中抓到了我自己三处错误——见下面「它抓到过什么」。

装

npm 版 CLI 管理的 profile
dsh plugin --profile <name> add <插件目录>

桌面版:desktop profile 由 Electron app 独占,npm 版 CLI 会被拒绝—— error: profile "desktop" is managed exclusively by the Electron application 用它自带的那个 CLI 才行(在 app 的 resources/runtime/cli/bin/dsh 下): "<app>/resources/runtime/cli/bin/dsh" plugin --profile desktop add <插件目录>

装完重启一次 app(host 半区必须重启进程才会加载)。重启后对话视图里会出现「交付回执」Tab,agent 也多了一个 ship_receipt 工具。

用

ship_receipt(
dir: "D:\\Projects\\my-thing",
checks: [
{ label: "测试", command: "node --test" }, { label: "构建", command: "node scripts/build.mjs" }, { label: "远端 CI", command: "npm test", run: false, exitCode: 0, output: "all green" } ],
artifacts: ["docs/screenshot-1.png"],
claims: [{ label: "生产验证", statement: "生产环境已完整验证。" }]
)

参数

| 参数 | 必填 | 说明 |
| dir | ✅ | 要出回执的项目目录 |
| checks | | {label, command, run?}。run 默认 true,插件真的执行它并记录退出码、输出、超时。run: false 表示只记录你给的 exitCode / output(那一项就落在仅本地) |
| artifacts | | 要测量字节数与 sha256 的文件;PNG 会额外读出宽高。声明了但找不到的文件会单独成一条发现,不是脚注 |
| claims | | 没有证据可引的声明。它们落在未验证区,且正文不会被显示。不要用它塞结论 |

它测量什么,接受什么

插件自己测的(因此是已验证):
- 分支、commit、提交信息、工作区是否干净、origin、与上游的领先/落后
- 每个产物的字节数、sha256 前 16 位、PNG 尺寸(读 IHDR)
- 密钥扫描:OpenAI 风格 key、GitHub token、AWS access key、私钥文件头、连接串内嵌凭据——只扫 git 跟踪的文件,跳过二进制与超过 2MB 的文件
- .gitignore 是否存在与规则条数,以及受管文件里有没有看着像凭据的路径(.env / .pem / .key / id_rsa / credentials)
- 受管文件里有没有临时文件(.tmp / .bak / .orig / .log / ~ / scratch / draft)或超过 5MB 的大文件

只读 git 命令 + 你给的命令,不联网、不上传。

插件只能接受报告的(因此最多是仅本地):任何它没有自己执行的东西——别的机器上跑的结果、CI 的状态、生产环境的观察。

一个刻意的安全取舍

checks 里的命令默认会被真的执行,用你当前用户的权限。理由:这正是这个插件的价值所在——「测试通过」只有附上插件自己跑出来的退出码才进得了已验证区。

逐项可以用 run: false 关掉。 工具描述里也写明了默认行为,模型看得到。它执行的命令和 agent 自己本来就能执行的命令是同一批,区别只在于回执记的是原始结果而不是转述。
不联网、不上传、不写项目目录(产物写在 $DSH_HOME/ship-receipt/)。

它抓到过什么

那条「无证据就丢正文」的规则,在开发过程中抓到了我自己写下的三处错误:

1. push 那一节写成了「还有 N 个 commit 没有推送」却没带证据——规则把正文剥掉了,读者只会看到一个空槽。但这件事本来就是 git rev-list 量出来的,所以正确的修法是把测量结果附上去(现在它是已验证,带上游名和未推送数量),而不是绕过规则。
2. 「这个目录不是 git 仓库」同样没带证据。它其实是 git rev-parse 非零退出的测量结果,现在带着那条失败的命令进已验证区。
3. 「声明了检查但没给命令」的 explanation 原本放在 detail(会被剥掉),现在放在 missing——因为空槽渲染的是 missing。

三个都不是测试写错,是插件按规则拒绝了它渲染不出来的东西。

和现有实现的关系

没有参考任何现有实现的代码。 这条设想的证据来源是 2008924/dsh-progress-viz,另外两条候选里还有 133563825as-ai/dsh-api-dashboard。我读了它们的 README 来确认缺口是否真实存在:

- dsh-progress-viz(MIT,0 star):独立 Python 看板,解压本地 session.jsonl.zstd 事件流,实时显示阶段进度、ETA 与活动流。给自己看的。
- dsh-api-dashboard(MIT,16 star):在输入框下方和看板里显示自己的 API 余额与用量。也是给自己看的。

两个都是面向自己的实时面板;「拿出去给人看、且自带证据分区」的交付回执在生态里确实没有。它们的实现我一行都没看——本插件是独立写的,没有 fork 任何人。

HTTP 面

GET /dsh-ship-receipt 统计、最近一次回执、历史 GET /dsh-ship-receipt/view/<id> 自包含回执页 GET /dsh-ship-receipt/receipt/<id> 回执 JSON

数据落在哪

| 路径 | 内容 |
| $DSH_HOME/ship-receipt/runs/<id>/index.html | 自包含回执页,可归档、可转发 |
| $DSH_HOME/ship-receipt/runs/<id>/receipt.json | 回执 JSON |

页面是自包含的(无外部资源、无相对路径),因为它生来就是要发给别人的:不该依赖某个服务器还在、某个资产目录还在。

容错姿态

- webServer.register 失败只是没有页面和 Tab,ship_receipt 工具照常工作。
- git 不可用或目录不是仓库不是错误:它被记成一条测量结果,回执照样出。
- ctx.fs 存在时优先走它读文件;只有宿主根本没有 fs 服务时才退回 node:fs,并且两条路都有大小上限。
- 读不到某个产物只影响那一条,进「声明了但找不到的产物」。
- 命令超时(默认 180 秒)记为超时被杀并保留已捕获的输出。
- 同一仓库并发出回执会被串行化(isConcurrencySafe 返回 false),因为它们会抢同一次测试运行和同一个产物目录。
- 每次注册都可撤销(ctx.effect)。

配置

apply(ctx, config) 的 config 全部可覆盖:

| key | 默认 | 说明 |
| dataDir | $DSH_HOME/ship-receipt | 回执产物落在哪 |
| timeoutMs | 180000 | 单条 checks 命令的超时 |
| maxFileBytes | 8MB | 读单个产物文件的上限 |

开发

node --test # 41 个测试
node scripts/build.mjs

test/receipt.test.mjs 里的核心断言是「被丢掉的那句话在页面和摘要里都不出现」——因为把句子留在灰色徽章旁边,读者照样会把它当结论读。分区规则由证据决定,不由措辞的自信程度决定,这条规则值得一个会大声失败的测试。

test/host.test.mjs 在真实的临时 git 仓库上跑工具:真的 commit、真的植入一个密钥看扫描是否能抓到、真的跑一条退出码非零的命令、真的验证未推送的 commit 会被单独点出来。

License

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

生成可分享的交付回执,按证据强度分区呈现结果

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部