kovey/dsh-engineering-suite--packages-dsh-audit-trail ↗★ 0
dsh-audit-trail
记录工具调用日志并支持按轮次快照回滚 适合需要审计工具调用历史或需要回滚工作区状态的开发者。
同名套件的其他儲存庫
安裝
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:kovey/dsh-engineering-suite#4a618ac4376c4a075c99c92b69895163bb21b0ce&path:packages/dsh-audit-trail說明文件
閱讀完整 README ↗配置
| 键 | 默认 | 说明 |
|---|---|---|
enabled | true | 关掉则完全不装配 |
logFile | ~/.dsh/audit-trail.log | 插件日志(绝不写 stdout) |
layout.rootDir / auditDir / stateDir | .dsh / /audit / /state | 也接受扁平键 rootDir/auditDir/stateDir |
trackTools | [] | 要记录的工具;空 = 全部 |
ignoreTools | [] | 永不记录的工具 |
writeTools | ['write','edit'] | 需要写前快照的工具 |
maxArgsSummary | 200 | 参数摘要上限(字符) |
maxResultTail | 600 | 结果尾巴上限(字符,tail 语义) |
redactArgs | true | 见下 |
snapshot.enabled | true | 写前快照开关(关掉后 audit_rewind 无内容可回滚) |
snapshot.maxFileBytes | 1048576 | 超过则跳过(reason:"oversize") |
snapshot.maxFilesPerTurn | 50 | 每会话+轮次快照上限(超出 reason:"quota") |
prompt.enabled / prompt.order | false / 670 | 可选的系统提示词小节 eng:audit-trail |
项目级配置
一个 dsh profile 同时服务多个仓库,所以"快照多大算大""哪个工具不值得记录"这类设置不可能对每个工作区都合适。 每个工作区可以用自己的一份文件细化本仓库的审计行为:
/.dsh/audit-trail.json
{
"snapshot": { "enabled": true, "maxFileBytes": 262144, "maxFilesPerTurn": 20 },
"ignoreTools": ["read", "grep"],
"writeTools": ["write", "edit", "bash"],
"maxResultTail": 200,
"redactArgs": true
}
profile 是上限:项目文件只能细化行为,不能把审计轨迹搬走,也不能把自己关掉。未命中的键一律忽略并记录问题(插件日志里逐键给出原因)。
可覆盖键(与 profile 同名键浅合并,未写的键继续用 profile 的值):
| 键 | 类型 | 作用 |
|---|---|---|
snapshot.enabled | bool | 本工作区的写前快照开关(关掉后本仓库 audit_rewind 无内容可回滚) |
snapshot.maxFileBytes | 正整数 | 本工作区的单文件快照上限(超出记 reason:"oversize") |
snapshot.maxFilesPerTurn | 正整数 | 本工作区每会话+轮次的快照条数上限(超出记 reason:"quota") |
writeTools | string[] | 本工作区哪些工具需要写前快照 |
trackTools | string[] | 本工作区记录哪些工具(空数组 = 全部) |
ignoreTools | string[] | 本工作区永不记录的工具 |
maxArgsSummary | 正整数 | 参数摘要上限(字符) |
maxResultTail | 正整数 | 结果尾巴上限(字符) |
redactArgs | bool | 本工作区是否脱敏文件正文 |
只能由 profile 决定(写了也会被拒绝,并逐条记录原因;理由见下):
| 键 | 拒绝理由 |
|---|---|
enabled | 插件开关是部署决定:项目不能关掉对自己工作区的审计 |
logFile | 插件日志落点是部署决定:审计证据不能被项目改写或丢弃 |
rootDir / auditDir / stateDir / layout | 审计工件位置是部署决定:审计轨迹不能自己搬家 |
prompt | 系统提示词小节由 profile 决定 |
信任根:.dsh/** 被 dsh-spec-gate 的 guard 对写工具关闭,所以模型无法用 write / edit 改写自己的审计设置——
能改这个文件的只有人。注意:这个保护覆盖的是写类工具;用 bash(echo >、sed -i 等)改它只在
dsh-spec-gate 的 shellPolicy: strict 下才被拦下。
失败绝不放行:文件不存在 / 不是合法 JSON / 顶层不是对象 / 某个值类型不对时,回退到 profile 配置并记录问题 (逐键回退,不做类型强转),审计照常记录——坏掉的项目配置永远不会变成"没有审计"。
生效范围:配置按调用方会话的 header.cwd 逐次调用解析(读者按 mtime+size 缓存,热路径每次调用只多一次 stat);
未声明 header.cwd 的会话直接用 profile 配置(绝不从没人指定的 process.cwd() 里读配置)。
audit_report / audit_rewind 都会打印 配置来源:项目级 或 配置来源:profile,以及本工作区实际生效的快照策略。