前言¶
在 DSH 里跑 Agent,工具调用、审批、沙箱策略都会落在会话事件流里。事后想回答「这轮有没有越界访问、有没有破坏性命令、证据在哪一步」,往往要翻 session.v4.jsonl、对时间轴和调用参数手工对齐。社区插件 dsh-safety-inspector(维护者 ljttt0824,分类 admin-security)把这件事做成只读审计:读本地会话事件,按 A–H 分类体系出发现,每条带事件 seq 锚点与深链,便于倒查单条回答的完整执行链。它不拦截、不改动会话状态,也不默认调用 LLM。
这是什么¶
dsh-safety-inspector 是 DeepSeek Harness 的只读安全审计插件。当前仓库版本 1.3.0,许可证 MIT,要求 DSH 引擎 >=0.2.1-rc.1。
定位可以概括为:读 $DSH_HOME/sessions/**/session.v4.jsonl.zstd,判定会话中发生过哪些不安全行为、属于哪一类、严重度(在可证明时)、证据事件序号,并生成可导航的报告与覆盖台账。插件自身数据只写入 $DSH_HOME/agent-safety/,无对外网络请求。
与「扫一眼日志觉得没事」不同,它强调诚实四态(finding / pass / skipped / error)和显示盲区:未覆盖的子类与未扫描原因会明确列出,宁可标明「没查」,也不把 skipped 当成通过。
核心能力¶
只读与边界¶
- 不写会话文件、不改会话状态、不执行被审计内容、不发网络请求、默认不调 LLM。
- 密钥类发现只落
{kind, length, fingerprint(HMAC)},原文不进缓存、日志与 UI。 - 不做实时拦截,不输出简单的「安全 / 不安全」二元结论。
分类与证据¶
- 按 A–H 八大类、41 个子类判定,分类体系外置在
taxonomy.json。 - 每条发现需有真实事件
seq;找不到锚点的判定丢弃。 - 深链形式:
#safety?session=<id>&seq=<n>,亦支持&finding=<id>、&message=<id>。
判定三态¶
「规则命中」与「能证明违规」分开处理:
| 判定 | 含义 | 是否给严重度 |
|---|---|---|
| 已确认 | 决定性事实在事件流可见 | 给 |
| 待验证 | 规则命中但缺需人工或环境补的事实 | 不给 |
| 已排除 | 被证伪或人工标记可接受 | 不给 |
规则自带上限(例如看不进命令内部的 destructive-command 最高只能「待验证」)。裁定采用证伪优先,再升级结论。
覆盖台账¶
每个会话为 41 个子类各生成一行台账(已覆盖 / 只能部分判定 / 未覆盖 / 规则异常)。本版 20 条规则覆盖 41 子类中的 14 个(12 覆盖 + 2 部分),其余 27 个在 UI「盲区」中列出。报告写盘前经 lib/validate.js 自检,任一项不成立则整份报告降级为 error。
界面与摘要¶
三个主视图:总览(风险分、A–H 分布、时间轴热力、Top 发现、盲区)、执行链(turn/step、调用详情、数据访问、策略上下文)、发现详情(证据原文、子类定义、人工「标记误报 / 确认违规」写入 labels.jsonl)。
默认展示由本地规则生成的中文通俗摘要(0 token);可选「AI 详细分析」与对待验证项的「AI 复核」(按次计费,结果可缓存)。
安装与启用¶
桌面版可在 Plugins → Add plugin 选择插件目录,或在 PowerShell 中执行(路径替换为本机插件目录):
dsh plugin --profile desktop add link:<本插件目录>
装完后重启 DSH。输入框上方出现安全巡检徽章,左侧栏出现「安全巡检」。
典型用法¶
界面入口¶
| 入口 | 行为 |
|---|---|
| 左侧栏「安全巡检」 | 会话列表 → 总览 / 执行链 / 发现 / 设置 |
| 输入框上方徽章 | 本轮发现数与风险等级,点击打开浮层 |
| 助手消息下方图标 | 打开该条回答的执行链 |
| 斜杠命令 | /safety(当前会话) |
Agent 工具 safety_audit¶
支持:scan_session、list_sessions、findings、explain、label、rules。
导出与增量¶
可导出 Markdown 报告 REPORT.md。重扫时与上次结果按特征比对,显示新增 / 消失的发现数。
阈值配置¶
默认可被 settings.json 覆盖,阈值定义集中在 lib/thresholds.js:
{ "thresholds": { "repeatedCallCount": 4, "excessiveToolCalls": 150 }, "retentionDays": 90, "maxSessions": 200 }
数据落盘位置¶
| 位置 | 内容 |
|---|---|
$DSH_HOME/agent-safety/index.json |
会话索引与风险分 |
$DSH_HOME/agent-safety/sessions/<id>.json |
单会话扫描结果(缓存键 = mtime:size) |
$DSH_HOME/agent-safety/findings.jsonl |
全局发现流 |
$DSH_HOME/agent-safety/labels.jsonl |
人工标注 |
$DSH_HOME/agent-safety/settings.json |
开关、阈值、保留期 |
插件 API 为同源 POST/GET /api/agent-safety/*,无额外网络出口。
适用场景与注意¶
适合谁:需要在 DSH 桌面端对历史会话做合规复盘、定位某条助手回复工具链、或把 Agent 行为映射到 A–H 检查清单的开发者与管理员。
使用前请知悉:
- 插件以当前 DSH 进程权限运行,安装前应阅读仓库源码与 MIT 许可证。
- 社区目录 skillhub.cn 插件页 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系;DSH 生态遵循「一切皆插件」思路,本介绍事实以仓库 README 与
package.json为准。 - 27 个子类当前无规则,报告中会明示;不要误读「无 finding」为「全类通过」。
- 开启全局规则注入或频繁使用 AI 详细分析会增加 token 开销;仅浏览面板与本地扫描默认不消耗模型。
仓库提供自测命令,可在本机验证:
node --test test/
node test/acceptance.mjs http://127.0.0.1:7801 <token>
结尾¶
dsh-safety-inspector 把会话事件流转成可核对的安全巡检报告:分类清晰、锚点可倒查、盲区可见、默认本地解析。需要安装说明与规则表时,见 GitHub:ljttt0824/dsh-safety-inspector;在生态目录浏览元信息见 skillhub.cn/plugins/ljttt0824/dsh-safety-inspector。