lyaoliu/dsh-approval-core ↗★ 0

dsh-approval-core

提供例行放行与危险转人工的自动审批决策管道。 适合需要对AI执行的敏感或危险操作进行安全审计与自动过滤的场景。

包名
dsh-approval-core
兼容性
待验证
版本
0.2.0
许可证
MIT
最近更新
2026年9月25日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:lyaoliu/dsh-approval-core

配置(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 直发请求也被服务端拒绝