前言¶
在 DeepSeek Harness (DSH) 的插件生态中,Cordis 框架允许所有监听器共享同一个 args 数组。由于 internal/get / internal/set 拦截点公开,任何插件都可以静默地重写数据流。当数百个插件同时运行时,很难回答“是哪个插件修改了我的数据”这个问题。
dsh-audit-log 旨在解决这个问题。它是一个运行时数据流审计日志插件,能够记录谁在何时修改了什么,并精确到具体的插件和 Fiber 层面。
插件简介¶
dsh-audit-log 是一个只读观察者插件,它不会阻塞、重写或存储 Payload 的具体值,仅记录结构指纹。
- 类别:admin-security
- 维护者:ssdyg4444-sys
- 许可证:MIT
核心功能¶
- Dispatch-level diff:在监听器运行前后对参数形状进行快照,记录中间发生的修改。
- Per-listener window attribution:每个监听器在注册时被包裹,修改被精确归因到执行该修改的具体插件和 Fiber(置信度为 “window”)。
- Read-only observer:始终处于观察模式,绝不干扰数据流。
- Shape-only fingerprints:仅存储结构指纹(类型、键、长度),不记录 Payload 值,确保敏感信息不会进入日志。
安装与启用¶
进入你的 Web 配置目录:
cd ~/.dsh/profiles/web
pnpm add dsh-audit-log
然后在 package.json 的 dsh.profile.bundles 中添加 dsh-audit-log,或者使用 dsh plugin --profile web add dsh-audit-log。安装后重启 DSH 实例即可。默认情况下插件无需配置即可开始记录。
典型用法¶
在任意插件中,可以通过 ctx.auditLog 查询审计日志。
查询特定事件的修改记录:
const records = await ctx.auditLog.query({
events: ['message/send'],
mutationsOnly: true, // 仅返回发生修改的 Dispatch
fromSeq: 100,
limit: 50
});
// 获取具体的责任人
const culprit = records[0].mutations[0].attribution?.package
// 获取每个监听器的窗口记录
const windows = ctx.auditLog.queryWindows({ event: 'message/send' })
适用场景与注意¶
- 适用场景:当你需要排查数据流被意外修改、追踪插件间数据依赖、或进行安全审计时使用。
- 注意:插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证。
- 隐私保护:日志中永远不会出现 Secret 等敏感值,仅存储结构指纹。
局限性¶
- 指纹限制:Shape-only 指纹无法检测等长字符串交换(如
'by-c'变为'by-d')或原地数字编辑。 - 时间精度:同步路径的时间记录是精确的;但在
serial/parallel/waterfall模式下,异步监听器的同步路径时间粒度较粗(由 Dispatch-level diff 覆盖)。
dsh-audit-log 与生态中其他上下文层级的观测工具互补,前者关注运行时数据流修改,后者关注模型 Prompt 的输入来源。