lyaoliu/dsh-approval-core ↗★ 0
dsh-approval-core
自动审批决策管道:例行放行、危险转人工(fail-safe),学习受约束。fork dsh-approval-gate 加固版 适合需要对AI执行的敏感或危险操作进行安全审计与自动过滤的场景。
インストール
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:lyaoliu/dsh-approval-coreドキュメント
README 全文を読む ↗配置(v0.2.0 恢复受限规则 API)
规则、阈值与学习开关既可以编辑配置文件,也可以通过受限的 HTTP 接口修改:
$DSH_HOME/auto-approve/allowlist.json:denyKeywords / allowRules / denyRules / hardCategories / riskyThreshold / judgeTimeoutMs / learning / dataDir / classifierModel。保存后自动生效(每次审批前热读盘,无需重启;其中 dataDir 变更需重启);其中 denyKeywords 的正则危险清单在插件加载时编译,变更需重启 dsh web。- 权限预设:直接在 profile 的 cordis.patch.yml 中添加 auto-approve 权限预设(预设表在配置构造时冻结,无法自动扩展)。
HTTP 接口:
GET /api/auto-approve/rules— 只读展示(配置 + 学习状态 + 预置清单 + 各 kind 的 permission 级别,供 UI 渲染)。POST /api/auto-approve/rules— 受限写接口,服务端两级校验:classifyOp(四级权限矩阵:free/confirm/forbidden)→validateValue(结构与范围)。forbidden 返回 403,校验失败返回 400。hardCategories永远 forbidden;删除预置项 forbidden;danger-full-access不可加入白名单。- 其余只读查询(GET events / GET diff / GET snapshots-stats)与两种非规则操作(POST revert、POST snapshots-clear)。
dataDir(可选,绝对路径):把 learning.json / audit.log / events.jsonl / snapshots 迁到自定义目录(如 D:\data\dsh-approval)。仅接受绝对路径,相对路径视为配置错误回退默认(fail-safe)。迁移方式:手动把旧文件拷到新目录;allowlist.json 本身始终留在默认目录(它声明了 dataDir)。修改 dataDir 需重启 DSH Desktop 生效(路径在插件加载时解析;allowlist.json 的其它字段热读,无需重启)。
配置 UI 权限分级
设置页按四级权限渲染每个配置项;安全边界在服务端 classifyOp + validateValue,UI 确认框只是体验层:
| 级别 | 配置项 | 交互 |
|---|---|---|
| 🟢 只读 | 管道总览、学习进度、数据目录、分类模型 | 仅展示,无写控件 |
| 🟡 自由改 | riskyThreshold(1-20)、judgeTimeoutMs(5s-120s) | 直接改,服务端范围校验(400) |
| 🟠 确认改 | 加黑名单词 / 加白名单规则 / 删除自定义项 | 弹确认框后提交 |
| 🔴 UI 禁改 + 服务端 403 | 硬风险类别、删除预置项、danger-full-access 加白 | UI 无控件;绕过 UI 直发请求也被服务端拒绝 |
分类模型
allowlist.json 加 "classifierModel": {"provider": "...", "model": "..."} 指定 flash 分类器模型,优先于会话默认模型(优先级:显式配置 > 会话默认模型 > 内置回退)。改文件即生效,POST /rules 不开放修改(避免 UI 误配烧 token);配置不合法时自然回落会话默认模型。
配置 UI 权限分级
设置页按四级权限渲染每个配置项;安全边界在服务端 classifyOp + validateValue,UI 确认框只是体验层:
| 级别 | 配置项 | 交互 |
|---|---|---|
| 🟢 只读 | 管道总览、学习进度、数据目录、分类模型 | 仅展示,无写控件 |
| 🟡 自由改 | riskyThreshold(1-20)、judgeTimeoutMs(5s-120s) | 直接改,服务端范围校验(400) |
| 🟠 确认改 | 加黑名单词 / 加白名单规则 / 删除自定义项 | 弹确认框后提交 |
| 🔴 UI 禁改 + 服务端 403 | 硬风险类别、删除预置项、danger-full-access 加白 | UI 无控件;绕过 UI 直发请求也被服务端拒绝 |