cuddly-guacamole/dsh-auto-approval-llm7

@quill507/dsh-auto-approval-llm

LLM-assisted auto approval with timeout fallback for DeepSeek Harness

包名
@quill507/dsh-auto-approval-llm
版本
0.0.26
许可证
BSD-3-Clause
最近更新
2026年9月12日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:cuddly-guacamole/dsh-auto-approval-llm

配置项

默认说明
enabledtrue总开关
autoSwitchPolicyToAskfalse仅 Auto 预设且 override=never 时自动切 ask(bundle 覆盖为 true);设置卡可配(顶层开关,即时保存)
timeoutActionreject倒计时超时动作:reject 拒绝 / allow 全部通过 / low-risk-allow 仅低风险放行(锁定类别除外:删除/受保护/磁盘/未解锁提权恒拒,不受此键影响)
llmReviewScopelow-or-aboveLOW/MEDIUM/HIGH 哪些档送 LLM 复审
llmTakeoverScopemedium-or-below哪些档允许 LLM 结论直接接管(取值 low / medium-or-below / high-or-below;schema 接受 high-or-below 但行为与 medium-or-below 等同——HIGH 分支从不把控制权交给 LLM,高风险恒落人工,选它不会带来 HIGH 自动化)
defaultReviewModesmart每会话评审模式默认:人工 / 智能 / 无人值守
lowRiskSeconds / mediumRiskSeconds / highRiskSeconds5 / 8 / 10三档倒计时(秒)
breakerAntiHijackMs0熔断弹窗按钮防误点禁用时长,0 不启用;仅 YAML 可配(设置卡无此控件)
panelDelayMs3000倒计时审批先只在会话标题栏控件上显示状态,推迟官方审批面板出现的时间(毫秒,0–10000,0 = 立即出现);窗口内评审给出结论则面板不出现;设置卡可配(计时器与熔断子卡)
maxConsecutiveDenials3连续 LLM 拒绝熔断阈值,0 关闭
maxTotalDenials20累计拒绝熔断阈值,0 关闭
classifierSourcesession快速判断通道模型来源:session(跟随会话模型)/ preset(DSH 已配置模型,配 classifierProvider+classifierModel)/ endpoint(自定义端点,配下方共享端点,不再维护)
classifierProvider / classifierModel''/''快速判断通道的 DSH 预设模型(classifierSource=preset 时成对必填)
reviewerSourcesession深度评审通道模型来源:session / preset(配 reviewerProvider+reviewerModel)/ endpoint(共享端点)
reviewerProvider / reviewerModel''/''深度评审通道的 DSH 预设模型(reviewerSource=preset 时成对必填)
reviewerReasoning''深度评审通道的推理强度(host 路由模型):'' 跟随 adapter 默认;显式值(off/minimal/low/medium/high/xhigh/max)作为 dsh reasoningEffort 转发,模型不支持时 loud fail 不静默
reviewerMaxTokens2048深度评审输出上限(token,钳入 256–16384)
classifierReasoning''快速判断通道的推理强度(语义同 reviewerReasoning
endpointUrl / endpointModel / endpointProtocol''/''/openai共享自定义端点(两通道 endpoint 源共用):OpenAI/Anthropic 兼容 API 地址/模型/协议。本地 mock、自建服务等经此接入;未配密钥时评审 fail-closed 不静默回落
safetyPrompt''附加给评审模型的额外策略(保存即热生效)
allowlist / denyList / humanOnlyList[]工具名精确匹配
rulesText''声明式规则(优先于内置列表执行;支持 `[agent:main
rulesDryRunfalse规则干跑:只记命中不执法;仅 YAML 可配(设置卡无此控件)
maxArgsChars4000取回工具参数的最大长度
notifyUsertrue「模型通过」通知进会话
showSessionPanelauto会话标题栏按钮:关 / 仅Auto / 开;控件同时承载审批状态(空闲显示名称,有事显示倒计时/结果)
workspaceRoot / dshHome / tempRoots''/''/[]路径根(DSH_HOME 默认保护)
classifierTimeoutMs / classifierMaxOutputTokens8000 / 1024分类器超时与输出上限
reviewMaxRetries1LLM 复审失败后的额外重试次数(0 单次 / 1 默认 / 2 上限;仅瞬时故障重试——限流·5xx·传输·空响应,LOW 同步含超时——重试窗口受审批倒计时剩余约束,认证/配置错误不重试);仅 YAML 可配(设置卡无此控件)
autoModeNoticeEnabledtrue自动审批模式进入/退出时向 agent 注入英文上下文声明(独立开关)
onboardingMessageEnabledtrue首次 Auto 会话向 agent 注入一次性英文引导消息(上下文声明,非用户横幅);关掉后不再注入
reviewWaitSeconds5每次 LLM 评审尝试的等待时间(秒,1–10);官方通道 TTFB 慢时调大,建议不超过低风险倒计时
debugfalse调试模式:写 approval-debug.jsonl[debug] 日志
redactResultsfalse开启后把成功工具结果也过一遍脱敏器再喂回模型(post-execute 侧)
reviewerContextFactsfalse仅 YAML 可配(设置卡无此控件)。上下文增强复审:给 LLM 复审输入附加结构化工作区事实(目标存在性/类型/大小 + 本会话最近创建文件,最多 8 条);默认关(载荷与既往一致)。边界:工作区外只报存在性/类型不报大小;tempRoots 文件不入 recent_creates;探测失败整体省略
editDiffPreviewfalse编辑类工具(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 块内倒计时字面量剥离防伪造
rejectGuidancetrue拒绝引导:工具调用被拒时向 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 无键不可配
privilegeAutoReviewfalse特权类别解锁开关(默认关=fail-closed):开启后 privilege 可设 auto/ask/deny 并走分类器 + LLM 评审 + 倒计时管线;delete/protected/disk 不受影响仍锁 ask
protectedAutoReviewfalse受保护类别解锁开关(默认关=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 / 运行态文件的逃逸硬拒,普通外部落点保持原行为)
categoryModestandard信任目录模式:standard 常规位置=workspace ∪ trustedDirsaggressive 取消位置白名单,任意位置视为常规(敏感名 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…)恒拒与本键正交,不受影响
directHumanEnabledfalse直接人工通道:agent 可调用 dsa_request_user 把后续操作路由给人工而非 LLM 分类器;默认关 = 零行为差异。工具仅在开启时于启动注册(工具集不可热换——开启需重启),审批通道读取该开关是实时的,关掉立即停用已注册工具
slashCommandsEnabledfalse命令面板注册 /approval-mode /approval-reset /approval-reset-all(评审模式查看/设置 + 熔断重置)。默认关 = 零命令表面积。命令集不可热换——仅在开启时于启动注册(开启需重启),每个 handler 读取该开关是实时的,运行中关掉立即停用已注册命令
learningEnabledfalse确认制学习:同一操作被人工反复确认达阈值后自动放行(命中仍须过一次标准在线评审);默认关 = 零行为差异。高风险/锁定四类/敏感路径永不参与(unknown 自 0.0.15 起可学);每根会话学习放行上限 50 次
learningThreshold3触发学习放行所需的人工确认次数(保存时钳入 2–10);同签名操作被人工拒绝即清零计数

顶层开关(启用 / 超时动作 / 评审·接管范围)改动即保存;「高级」子卡(默认模式 / never 自动转 ask / Auto 档进出提示 / 会话面板)同样即时保存。每张子卡有独立的 保存/放弃修改 按钮(安全规则列表另有 恢复默认)。host-only 键(workspaceRoot 等,以及未提供卡片的规则干跑 rulesDryRun / 防劫持窗口 breakerAntiHijackMs / 评审重试 reviewMaxRetries)用 patch/YAML 配置,设置卡保存不会抹掉它们。

设置卡子卡分组(仅标签,不移动控件):计时器与熔断 / 安全规则列表 / 分类开关与信任模式 / 确认制学习 四卡带「安全底线」标签(倒计时秒数是决策窗口,属安全项);实用小功能 / 在线评审模型 / 最近审批记录不加标签。