dsh-dashcam: dashcam for recording a verifiable audit ledger for DSH plugins

前言

在 DeepSeek Harness(DSH)里给智能体挂载插件时,文件读取、外连、子进程、工具调用往往混在一起发生。出问题时你只能事后猜「是哪个插件、干了什么」;平时也看不到每一次调用是否落在声明过的能力契约里。社区插件目录 SkillHub 把 dsh-dashcam 归在 admin-security,定位不是替你判决「能不能做」,而是像行车记录仪一样把观测到的行为逐条写入可离线校验的账本。下面介绍它是什么、默认会改变什么、如何安装,以及在什么前提下才适合装。

这是什么

dsh-dashcam 由维护者 odysseykernelt 发布,简介概括为:面向 DSH 的 dashcam 插件——能力清单(capability manifests)、运行时守卫(runtime guards)、防篡改审计账本(tamper-evident audit ledger)。README 用一句话收紧产品边界:它记录插件实际做了什么,不负责替你决定它们可以做什么。

运行环境要求 Node.js >= 20(CommonJS);npm 包名为 dsh-dashcam,package.json 中当前版本为 2.0.3,许可证 MIT。项目自 1.11.0 起由 dsh-covenant 改名为 dsh-dashcam,能力模型语义仍以仓库内 docs/SPEC.md 为准。

安装后默认发生什么

零配置、默认挂载、空 config 时,插件进入 dashcam 模式:不拦截任何一次工具调用,只观测并记账。

维度 安装前 安装后(默认)
插件活动 不可见,常在故障后才察觉 每次观测到的工具调用单独落账
归因 靠猜 账本每行带 plugin / pluginVersion
是否在契约下 不可知 每行带 profiled、manifestHash
防篡改 无 SHA-256 哈希链;可离线逐行复算校验
拦截 — 无;dashcam 模式不拒绝调用

账本默认路径为 ~/.dsh/dsh-dashcam/ledger.jsonl(JSONL,一行一条记录)。README 中的示例字段包括:读文件 fs.read、执行 proc.spawn(如 git),decision 为 allow,ruleId 为 unprofiled,profiled: false 表示处于零契约观测。

若之后在 config 中配置 requests(插件声明可做之事)与 grants(宿主授予),同一哈希链可走 Two-Key(声明与授予的交集)做裁决;默认仍是 advisory,也可在 enforce: true 下真正拒绝。记录与裁决共用一条账链,升级路径不会分叉审计轨迹。

核心能力(已核实部分)

观测面

账本覆盖 README 明确列举的观测类型:读文件、访问主机、运行命令、调用工具。未映射的工具会以观测记录写入,并带输入预览;挂载记录会说明当前链处于何种模式,避免把未覆盖能力说成已全覆盖。

诚实记账规则

  • 默认 fail-open:记账失败不会因此拒绝调用;会告警并尽力写入 ledger_fail 标记。若需要「记账失败则拒绝运行」,可设 policy.ledger.failMode: 'closed'。
  • decision: deny 只在确有拒绝时写入;intercepted: true 表示未声明的调用被实际拦截,而非假设场景。
  • 可选 HMAC 封存:设置 ledgerMacKey 可增强防篡改(README 建议若在意账本完整性应配置)。

安装期闸门(附录能力)

README 附录说明:结构 / 安全 / 签名等 install-time gates 在 dashcam 产品定位下仍以证据与标签形式运行;dashcam 模式 above the fold 的主线是录制。附录演示可用 CLI 对示例恶意插件跑闸门,例如:

node bin/dsh-dashcam.js gates examples/negative-plugin --skip-signature

输出中会标明结构门阻断(如 patch 路径越界、安装脚本不在白名单等),失败信息可指向具体 manifest 字段。

底层能力面(附录 B)包括 fs.*、net.outbound、net.listen、proc.spawn 等;详细 scope 语义见仓库 docs/SPEC.md。这部分主要为「在录制之上加裁决」或企业通道场景服务,普通零契约用户可先只关心账本文件。

安装与启用

官方 TL;DR 为一条命令安装完整插件包,然后重启 DeepSeek Harness:

dsh plugin --profile web add dsh-dashcam

桌面配置将 --profile web 换为 --profile desktop 即可,README 写明两种方式等价。安装后默认仅观测、不阻断。

社区目录页:https://www.skillhub.cn/plugins/odysseykernelt/dsh-dashcam。源码与说明:https://github.com/odysseykernelt/dsh-dashcam。

典型用法与后续升级路径

第一步:零契约跑通。 保持默认空 config,正常使用 DSH 与插件;工作中打开 ~/.dsh/dsh-dashcam/ledger.jsonl,按行查看 capability、action、scope、plugin、profiled 等字段,对照当时操作是否一致。

第二步(可选):在录制之上加契约。 当需要「声明 + 授予」双重对齐时,在配置中补充 config.requests 与 config.grants;同一账本继续追加,哈希链不断裂。需要强制拒绝时再配合 enforce: true 等企业向选项(细节见 README 附录与 SPEC)。

第三步(可选):完整性。 若账本含敏感路径与时间线,按 README 建议设置 ledgerMacKey,并自行决定账本是否进入不可信备份介质。

适用场景与安装前注意

适合谁: 需要在本地或团队环境留存 可离线复验 的插件行为轨迹;想区分「在契约内 / 契约外(profiled)」调用;或计划在观测稳定后再叠加 Two-Key 裁决的 DSH 使用者。

必须接受的代价: README 把话说得很直白——若你不愿有组件旁观插件活动,就不要安装。宿主适配器跑在 agent 主进程内;「只记录、不拦截」恰恰意味着能看见几乎全部调用。账本本身是高价值目标(记录哪些文件何时被触碰)。安装前应自行审查源码与 MIT 许可,核对 CI 与发布渠道;不要将账本自动同步到你不信任的备份。插件以当前 DSH 进程权限运行,权限边界与 DSH 本身一致。

生态上,DSH 强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,本文不构成官方应用商店推荐。

结尾

dsh-dashcam 把 DSH 插件活动从「事后猜」变成「默认就有一条带归因与契约标记的 JSONL 账本」,并用哈希链(及可选 HMAC)支撑离线校验。默认零配置、不阻断,适合先看清再决定是否加 requests / grants。进一步了解请阅 SkillHub 目录页与 GitHub 仓库 README(含中文 README.zh-CN.md)。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye