前言¶
在 DeepSeek Harness(DSH)里用智能体做完一轮开发,收尾时往往还要手写一段汇报:当前分支与 commit、测试和构建是否通过、关键截图的尺寸与校验值、推送前有没有扫过密钥。这类文字有两个方向都会出错,而且两种错在表述上很难区分——写少了没有命令和退出码,读者只能信你;写多了把「本地跑通」说成「生产已完整验证」。社区里已有面向自己的实时面板(例如解压本地 session 看进度、或在界面里看 API 用量),但「拿出去给人看、且按证据硬性分区」的交付回执在生态里并不常见。dsh-ship-receipt 由维护者 dingchenhui0618-arch 发布,分类为工作流,目标是在项目收尾时生成一张可公开的交付回执:能测量的由插件自己测,只能口头报告的单独归类,没有证据的声明只留标签、正文留空。
这是什么¶
dsh-ship-receipt 是 DSH 插件,在收尾阶段汇总分支与 commit、关键产物的尺寸与 sha256、推送前三步检查的结论,以及你指定的测试与构建结果,并硬性分成已验证、仅本地、未验证三个区域。它不生成填空模板,而是尽量用只读 git、读文件和本地命令执行来留下可核对的事实;未验证条目只显示标签和显式空槽,不把自信措辞印成结论。
- 插件目录页:https://www.skillhub.cn/plugins/dingchenhui0618-arch/dsh-ship-receipt
- 源码与文档:https://github.com/dingchenhui0618-arch/dsh-ship-receipt
- 许可证:MIT(README)
- 引擎要求:
dsh>=0.2.1-rc.2 <0.3.0(package.json)
核心功能:证据落在哪一区¶
下面按「谁提供证据」说明各块内容落在哪个分区(与 README 表格一致)。
| 内容 | 来源 | 分区 |
|---|---|---|
| 分支 / commit / 工作区 / 与上游对比 | 插件本进程执行只读 git | 已验证 |
| 关键产物字节数、sha256、PNG 宽高 | 插件读文件计算 | 已验证 |
推送前三步检查(密钥扫描、.gitignore 核对、无关文件清理) |
插件自己跑 | 已验证 |
checks 中的命令(默认 run: true) |
插件执行并记录退出码与输出 | 已验证 |
run: false 时你提供的 exitCode / output |
仅报告、未由插件执行 | 仅本地 |
claims 中的声明 |
无插件可引用的证据 | 未验证 |
硬规则: 未验证条目的 detail 会被丢弃,页面只保留标签和空槽(例如「(没有证据,留空)」)。这是刻意设计,避免灰色徽章旁仍印着像结论的句子。
插件自己测量或检查的内容包括:分支、commit、提交信息、工作区是否干净、origin、与上游领先/落后;产物字节数、sha256 前 16 位、PNG 的 IHDR 尺寸;对 git 跟踪文件 的密钥扫描(跳过二进制与超过 2MB 的文件);.gitignore 是否存在及规则条数、受管文件中疑似凭据路径;受管文件中的临时文件或超过 5MB 的大文件。流程不联网、不上传;回执写在 $DSH_HOME/ship-receipt/,不写项目目录。
安装与启用¶
安装方式以 README 为准:通过 dsh plugin add 指向插件目录(不是凭仓库名拼接的安装串)。
# 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,智能体侧会增加 ship_receipt 工具。若 webServer.register 失败,可能没有页面和 Tab,但 ship_receipt 工具仍可工作。
典型用法¶
在对话中由智能体调用 ship_receipt,传入项目目录、可选的检查命令、产物路径和无证据声明。README 中的示例如下。
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,插件会真实执行并记录退出码、输出与超时 |
artifacts |
否 | 要测量字节数与 sha256 的文件;声明了但找不到的会单独列为发现 |
claims |
否 | 无证据声明,落在未验证区且正文不显示 |
生成结果可通过 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 |
自包含 HTML,可归档、转发 |
$DSH_HOME/ship-receipt/runs/<id>/receipt.json |
回执 JSON |
apply(ctx, config) 可覆盖:dataDir(默认 $DSH_HOME/ship-receipt)、timeoutMs(默认 180000)、maxFileBytes(默认 8MB)。
适用场景与注意¶
适合需要在 DSH 会话收尾时,把「能证明的」和「只能口述的」分开,并生成可转发的一页回执的团队或个人。同一仓库并发生成回执会被串行化(isConcurrencySafe 为 false),避免抢同一次测试运行和产物目录。
安全与权限: checks 里的命令默认会被真实执行,权限与当前 DSH 进程用户相同;这正是「测试通过」能进入已验证区的依据。每一项都可以用 run: false 关闭执行,仅记录你提供的退出码与输出(落入仅本地)。安装前应自行阅读源码与 MIT 许可证,确认命令与扫描范围符合你的环境策略。插件只读 git、本地读文件与本地执行你声明的检查,不上传数据。
git 不可用或目录不是仓库不会整单失败,会作为测量结果写入回执;命令默认超时 180 秒,超时记为被杀并保留已捕获输出。
结尾¶
dsh-ship-receipt 把收尾汇报从一段容易越界或缺证据的文字,改成按来源分区的交付回执:能测的由插件记下原始结果,不能测的明确标成仅本地或未验证空槽。社区目录(SkillHub)与 GitHub 仓库相互独立,目录站并非 DeepSeek / 幻方官方应用商店;安装与细节以仓库 README 为准。