toby-bridges/api-relay-audit
toby-bridges/api-relay-audit从 DeepSeek Harness 对 AI API 中转站和 LLM 代理运行本地安全审计,生成 Markdown 报告,覆盖提示词注入、模型替换信号、工具调用改写、错误泄漏、流完整性和按 profile 启用的 Web3 风险。
对 agent 工具调用输入参数做字符串匹配,命中危险行为则拦截(deny)或放行但注入警告(warn),附规则管理面板。
工具调用规范守卫:对 agent 工具调用输入参数做字符串匹配,命中危险行为则拦截(deny)并注入原因给模型,或放行但注入警告(warn)。附规则管理面板(配置/启停/增删/试跑/审计全部可在 UI 完成)。
tools/pre-execute(waterfall):deny → 工具不执行 + 原因注入模型可见错误;warn → 放行 + tools/post-execute 注入独立警告消息~/.dsh/guardrail-rules.json,面板编辑即热加载guardrail 标签页):规则列表/启停/增删/动作切换、测试匹配器、添加规则、审计视图/guardrail/api/*(rules 增删改查、test 试跑、audit、config)--dsw-alias-* / --ds-*),无自定义硬编码颜色;随亮/暗主题自动切换,与整站统一注意:仓库
.gitignore排除lib/(构建产物不提交)。克隆或下载后必须构建才能被 DSH 装配。
git clone <repo-url> dsh-guardrail
cd dsh-guardrail
bash scripts/build.sh # 链接 DSH 安装依赖 + tsc(host) + tsdown(client)
构建产物:lib/index.js(host)、lib/client.js(browser bundle)、lib/types/index.d.ts。
本地做以下两步即装配(免重启可用注入器,重启后仍生效):
package.json 加 dsh.bundle.patch(已内置 cordis.patch.yml)。dsh.profile.bundles 数组追加 dsh-guardrail(并建 node_modules 的 link: 指向本仓库)。或使用 dsh-super-injector 的 dev_inject_plugin / dev_install_package 热装配。启动后浏览器进入任一会话,右上标签页出现 guardrail 即加载成功。
打开 DSH 网页(如 http://127.0.0.1:3080),进入任意会话,在顶部标签栏点击 guardrail(位于「对话 / 轨迹」右侧)。
~/.dsh/guardrail-rules.json每条规则一行,含:
builtins.overrides 保存,用户规则直接改记录所有修改即时持久化到 ~/.dsh/guardrail-config.json 与 ~/.dsh/guardrail-rules.json。
bash)+「参数 JSON」(如 {"command":"rm -rf /"}),点 试跑,下方显示命中的规则与片段:
✅ 命中 rm-root · 片段: rm -rf / → 该输入会被对应规则拦截/警告未命中 → 匹配不到任何启用规则id(必填)、正则 pattern(必填)、动作 deny/warn、reason(可用 {tool} / {pattern} 占位)、tools(逗号分隔,空=全部)、field(可选参数路径,如 command),点 添加规则 即热加载。面板底部「审计(最近 30 条)」实时展示:[时间] action tool → ruleId reason。为拦截/警告行为留痕。
id · tools?(目标工具,空=全部)· pattern(正则)· field?(可选参数路径,如 command)· action(deny|warn)· reason(支持 {tool}/{pattern})· enabled
内置规则 builtin: true:不可删除、不可改 pattern,可经 builtins.overrides 启停/覆盖动作。
例:pip 必须用 uv pip、python 必须走 uv run:
(?:^|[;&|]\s*|"command":")(?:[^\s"]*/)?pip3?\b —— 禁止直接 pip 执行(?:^|[;&|]\s*|"command":")(?:[^\s"]*/)?python3?\b —— 禁止直接 python 执行pattern 锚定命令起点:字符串开头(或 JSON 参数 "command":" 前缀)、;/&&/| 之后,且允许路径前缀(如 /usr/bin/python)。这样只拦「真正执行的命令」,不会误伤 echo python、grep -rn python src/、cd python 这类只是提到这个词的命令。
⚠️ 语义说明:
(?<!uv[\s-])\bpip3?\b这类裸\b词边界版本,会命中任意出现的pip/python(含echo python、grep pip),误报严重;且它只豁免紧跟uv的uv pip,不会豁免uv run pip(run隔在中间)。如果你确实想拦截上述误报空窗,请用上面的命令锚定版。
- id: guardrail
disabled: false
config:
rulesFile: ~/.dsh/guardrail-rules.json
builtins:
enabled: true
overrides:
- id: git-reset-hard
action: deny # 示例:把内置 warn 规则升级为 deny
audit:
maxEntries: 500
logFile: ~/.dsh/guardrail-audit.log
GET /guardrail/api/rules · POST /guardrail/api/rules · PUT /guardrail/api/rules/:id · DELETE /guardrail/api/rules/:id · POST /guardrail/api/test · GET /guardrail/api/audit(可 ?action=warn|deny|error) · GET /guardrail/api/config · PUT /guardrail/api/config
错误码:400(非法输入/JSON)。内置规则不可删除(403)、未知路由 404。
POST /rules只要求id/pattern/action(服务端校验),reason/enabled走默认值,tools/field可选透传。
bash scripts/build.sh # 链接 DSH 安装依赖 + tsc(host) + tsdown(client)
注:源文件相对 import 使用
.js扩展(NodeNext ESM 规范),测试文件使用.ts(vitest 转译,且被排除出 hosttsc)。测试运行用本地node_modules/.bin/vitest。