cuddly-guacamole/dsh-auto-approval-llm ↗★ 7
@quill507/dsh-auto-approval-llm
LLM-assisted auto approval with timeout fallback for DeepSeek Harness
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:cuddly-guacamole/dsh-auto-approval-llm说明文档
阅读完整 README ↗配置项
| 键 | 默认 | 说明 |
|---|---|---|
enabled | true | 总开关 |
autoSwitchPolicyToAsk | false | 仅 Auto 预设且 override=never 时自动切 ask(bundle 覆盖为 true);设置卡可配(顶层开关,即时保存) |
timeoutAction | reject | 倒计时超时动作:reject 拒绝 / allow 全部通过 / low-risk-allow 仅低风险放行(锁定类别除外:删除/受保护/磁盘/未解锁提权恒拒,不受此键影响) |
llmReviewScope | low-or-above | LOW/MEDIUM/HIGH 哪些档送 LLM 复审 |
llmTakeoverScope | medium-or-below | 哪些档允许 LLM 结论直接接管(取值 low / medium-or-below / high-or-below;schema 接受 high-or-below 但行为与 medium-or-below 等同——HIGH 分支从不把控制权交给 LLM,高风险恒落人工,选它不会带来 HIGH 自动化) |
defaultReviewMode | smart | 每会话评审模式默认:人工 / 智能 / 无人值守 |
lowRiskSeconds / mediumRiskSeconds / highRiskSeconds | 5 / 8 / 10 | 三档倒计时(秒) |
breakerAntiHijackMs | 0 | 熔断弹窗按钮防误点禁用时长,0 不启用;仅 YAML 可配(设置卡无此控件) |
panelDelayMs | 3000 | 倒计时审批先只在会话标题栏控件上显示状态,推迟官方审批面板出现的时间(毫秒,0–10000,0 = 立即出现);窗口内评审给出结论则面板不出现;设置卡可配(计时器与熔断子卡) |
maxConsecutiveDenials | 3 | 连续 LLM 拒绝熔断阈值,0 关闭 |
maxTotalDenials | 20 | 累计拒绝熔断阈值,0 关闭 |
classifierSource | session | 快速判断通道模型来源:session(跟随会话模型)/ preset(DSH 已配置模型,配 classifierProvider+classifierModel)/ endpoint(自定义端点,配下方共享端点,不再维护) |
classifierProvider / classifierModel | ''/'' | 快速判断通道的 DSH 预设模型(classifierSource=preset 时成对必填) |
reviewerSource | session | 深度评审通道模型来源:session / preset(配 reviewerProvider+reviewerModel)/ endpoint(共享端点) |
reviewerProvider / reviewerModel | ''/'' | 深度评审通道的 DSH 预设模型(reviewerSource=preset 时成对必填) |
reviewerReasoning | '' | 深度评审通道的推理强度(host 路由模型):'' 跟随 adapter 默认;显式值(off/minimal/low/medium/high/xhigh/max)作为 dsh reasoningEffort 转发,模型不支持时 loud fail 不静默 |
reviewerMaxTokens | 2048 | 深度评审输出上限(token,钳入 256–16384) |
classifierReasoning | '' | 快速判断通道的推理强度(语义同 reviewerReasoning) |
endpointUrl / endpointModel / endpointProtocol | ''/''/openai | 共享自定义端点(两通道 endpoint 源共用):OpenAI/Anthropic 兼容 API 地址/模型/协议。本地 mock、自建服务等经此接入;未配密钥时评审 fail-closed 不静默回落 |
safetyPrompt | '' | 附加给评审模型的额外策略(保存即热生效) |
allowlist / denyList / humanOnlyList | [] | 工具名精确匹配 |
rulesText | '' | 声明式规则(优先于内置列表执行;支持 `[agent:main |
rulesDryRun | false | 规则干跑:只记命中不执法;仅 YAML 可配(设置卡无此控件) |
maxArgsChars | 4000 | 取回工具参数的最大长度 |
notifyUser | true | 「模型通过」通知进会话 |
showSessionPanel | auto | 会话标题栏按钮:关 / 仅Auto / 开;控件同时承载审批状态(空闲显示名称,有事显示倒计时/结果) |
workspaceRoot / dshHome / tempRoots | ''/''/[] | 路径根(DSH_HOME 默认保护) |
classifierTimeoutMs / classifierMaxOutputTokens | 8000 / 1024 | 分类器超时与输出上限 |
reviewMaxRetries | 1 | LLM 复审失败后的额外重试次数(0 单次 / 1 默认 / 2 上限;仅瞬时故障重试——限流·5xx·传输·空响应,LOW 同步含超时——重试窗口受审批倒计时剩余约束,认证/配置错误不重试);仅 YAML 可配(设置卡无此控件) |
autoModeNoticeEnabled | true | 自动审批模式进入/退出时向 agent 注入英文上下文声明(独立开关) |
onboardingMessageEnabled | true | 首次 Auto 会话向 agent 注入一次性英文引导消息(上下文声明,非用户横幅);关掉后不再注入 |
reviewWaitSeconds | 5 | 每次 LLM 评审尝试的等待时间(秒,1–10);官方通道 TTFB 慢时调大,建议不超过低风险倒计时 |
debug | false | 调试模式:写 approval-debug.jsonl 与 [debug] 日志 |
redactResults | false | 开启后把成功工具结果也过一遍脱敏器再喂回模型(post-execute 侧) |
reviewerContextFacts | false | 仅 YAML 可配(设置卡无此控件)。上下文增强复审:给 LLM 复审输入附加结构化工作区事实(目标存在性/类型/大小 + 本会话最近创建文件,最多 8 条);默认关(载荷与既往一致)。边界:工作区外只报存在性/类型不报大小;tempRoots 文件不入 recent_creates;探测失败整体省略 |
editDiffPreview | false | 编辑类工具(write/edit/str_replace_editor 非 view/apply_patch)进入人工审批时,面板展示目标文件行级红绿 diff。纯展示:不参与裁决、不进 LLM 复审输入;失败自动省略。边界:可读的工作区内非受保护目标对比现有内容;全量写类(write/create)目标不可读(外部/受保护/新文件)预览仅新内容全量新增(零读目标文件);对比类(edit/str_replace/insert/apply_patch)目标不可读整体省略;≤1MiB(lstat 不跟随 + 读后字节复核,防 junction 逃逸);LCS ≤1024 行/侧、单行 ≤200 字符省略、输出 ≤200 行且 ≤32KiB(截断带 …truncated);语义镜像官方(多匹配/已存在/越界 → 省略);diff 块内倒计时字面量剥离防伪造 |
rejectGuidance | true | 拒绝引导:工具调用被拒时向 agent 注入一句白名单式短说明(来源/类别枚举,不含工具名与自由文本),减少盲目重试与反复探索。默认开。触发面:规则/denyList/类别拒绝与官方「user rejected tool」形态(面板人工拒绝转译);限流(同调用去重 + 每 60s 至多 5 条);fail-closed,注入失败不影响审批路径 |
maintenanceDshPaths | [] | host-only 键:DSH_HOME 中供运维维护的子目录(绝对路径数组)。其内 guard 的 DSH_HOME 硬拒只对非运行态文件放宽(技能/配置/文档);插件运行态文件(history/audit/learning…)在其内仍恒拒,shell 写向量仍恒拒,fenced 子树(sessions/plugins/credentials*)不可指名。仅 patch/YAML 可配 |
categoryPolicy | {} | 11 类三态开关:{类别: auto|ask|deny},缺省 inherit = 保持既往行为;delete/protected/disk(及未开启相应解锁键时的 privilege/protected)LOCKED 仅可 ask(其余值 warn+丢弃);harnessInternal/unknown 无键不可配 |
privilegeAutoReview | false | 特权类别解锁开关(默认关=fail-closed):开启后 privilege 可设 auto/ask/deny 并走分类器 + LLM 评审 + 倒计时管线;delete/protected/disk 不受影响仍锁 ask |
protectedAutoReview | false | 受保护类别解锁开关(默认关=fail-closed):解除 protected 的锁定钳制。解除后未显式配置的受保护调用不再被恒拒倒计时钉死,而落常驻人工询问——类别询问在 pre-execute 即返回,评审器仍不会被问到,须人工作答;要自动放行需再把该类别显式设为 auto。两档的实际差别(易踩):关(默认)= LOCKED,落恒拒倒计时,highRiskSeconds(默认 10s)后自动拒绝、timeoutAction 任何配置都无法放行(无人盯守不会挂起);开且未显式配置 = status-less 询问,不发布倒计时状态、永不自动结算,无人盯守时会一直等下去(面板的 ⏸️ Awaiting human approval — no auto-countdown. 即这一档的标记)——这是拿「自动拒绝」换「等真人」,需无人值守可用时须配合 categoryPolicy.protected 显式配置。凭据物质不受本键影响:敏感文件名/目录与关键路径的读取(含 cp/tee/dd 这类写头的读源)被结构化判定为凭据读取并保持锁定,本键只解锁非凭据的工作区元数据(.git/.vscode 等);凭据树的写入本就硬拒且不受本键影响。地板按类别层视角生效:opaque 行(含 (/{/$(/heredoc)在类别层为 unknown,既不解锁也不进地板;shell 命令的 symlink 逃逸已有复检(见 docs/03 §3.4:只对凭据树 / DSH_HOME / 运行态文件的逃逸硬拒,普通外部落点保持原行为) |
categoryMode | standard | 信任目录模式:standard 常规位置=workspace ∪ trustedDirs;aggressive 取消位置白名单,任意位置视为常规(敏感名 fuse、运行态硬拒、symlink 复检等危险度门不动;切换时 UI 明示放开范围) |
trustedDirs | [] | host-only 键:额外信任目录根(绝对路径数组),作为 standard 档位置白名单成员与两档共用的 symlink 复检区成员;凭据段/home/dshHome/critical 路径排除;仅 patch/YAML 可配,设置卡保存不会抹掉 |
trustedDshSubpaths | [] | host-only 键:允许 Auto 会话写入的 DSH_HOME 子目录(绝对路径数组)。默认空 = DSH_HOME 整树恒拒(edit/write/apply_patch/str_replace_editor 四路一致);列出子树后该树获得与插件开发区同级放行,仅 patch/YAML 可配。清洗规则:非绝对路径、DSH_HOME 之外、等于 DSH_HOME 本身、覆盖 sessions/plugins/credentials*、归一化后落入 critical 树的条目全部 warn+丢弃。开口只服务结构化工具:shell 写向量(cp/tee/sed -i/dd/重定向/嵌套解释器写)对 DSH_HOME 一律恒拒、不随开口放开。开启前请知情:技能文件会作为指令注入 agent 上下文,放开 skills = 允许 agent 持久改写自身行为约束;插件运行态文件(history/audit/learning…)恒拒与本键正交,不受影响 |
directHumanEnabled | false | 直接人工通道:agent 可调用 dsa_request_user 把后续操作路由给人工而非 LLM 分类器;默认关 = 零行为差异。工具仅在开启时于启动注册(工具集不可热换——开启需重启),审批通道读取该开关是实时的,关掉立即停用已注册工具 |
slashCommandsEnabled | false | 命令面板注册 /approval-mode /approval-reset /approval-reset-all(评审模式查看/设置 + 熔断重置)。默认关 = 零命令表面积。命令集不可热换——仅在开启时于启动注册(开启需重启),每个 handler 读取该开关是实时的,运行中关掉立即停用已注册命令 |
learningEnabled | false | 确认制学习:同一操作被人工反复确认达阈值后自动放行(命中仍须过一次标准在线评审);默认关 = 零行为差异。高风险/锁定四类/敏感路径永不参与(unknown 自 0.0.15 起可学);每根会话学习放行上限 50 次 |
learningThreshold | 3 | 触发学习放行所需的人工确认次数(保存时钳入 2–10);同签名操作被人工拒绝即清零计数 |
顶层开关(启用 / 超时动作 / 评审·接管范围)改动即保存;「高级」子卡(默认模式 / never 自动转 ask / Auto 档进出提示 / 会话面板)同样即时保存。每张子卡有独立的 保存/放弃修改 按钮(安全规则列表另有 恢复默认)。host-only 键(workspaceRoot 等,以及未提供卡片的规则干跑
rulesDryRun/ 防劫持窗口breakerAntiHijackMs/ 评审重试reviewMaxRetries)用 patch/YAML 配置,设置卡保存不会抹掉它们。设置卡子卡分组(仅标签,不移动控件):计时器与熔断 / 安全规则列表 / 分类开关与信任模式 / 确认制学习 四卡带「安全底线」标签(倒计时秒数是决策窗口,属安全项);实用小功能 / 在线评审模型 / 最近审批记录不加标签。