dsh-approve-for-me

by shifan3

0 模型与账号接入github 检测到 manifest package.json#dsh收录于 08-17

DeepSeek Harness 的替我批准模式:审批请求经 LLM 安全自动批准;高风险破坏性命令仍询问用户

Approve-for-me mode for DeepSeek Harness: LLM safety auto-approval for approval requests; high-risk destructive commands still ask the user.

安装

dsh plugin --profile web add github:shifan3/dsh-approve-for-me

GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试

安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗

安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。

README

目录

一个 DeepSeek Harness(DSH)宿主插件,为 DSH 增加 approve-for-me 审批模式。

启用后,每个到达 DSH answerer 链的审批请求都会先交给一个 LLM 安全评审模型,结合此前的对话摘要判断是否放行,模型只回答 ALLOW 或 REJECT。破坏性高危命令——rm -r、rm -rf、drop table、drop database 等——会跳过模型,直接走正常的交互式用户审批弹窗。

插件不会新增 approve-for-me 这个审批策略枚举(它硬编码在宿主包 dsh-user-approval 里)。它工作在现有 ask 审批策略之内:插件启用即代表模式开启,禁用即回到“每次都问用户”。DSH 的审批审计事件(approval/asked + approval/decided)仍然正常记录。

行为

  • 以 prepend: true 监听 approval/request,因此会抢在交互式(用户弹窗)answerer 之前运行。
  • 提取本次请求的具体动作文本:
    • bash 工具调用参数里的 command,
    • 其他工具的调用参数 JSON,
    • 或退回到请求的 reason。
  • 如果动作(或请求 reason)命中高危模式 → next(),即正常弹窗问用户。
  • 否则把以下内容发给大模型:
    • 对话摘要(最近约 12k 字符的用户消息、助手工具活动、工具调用),
    • 本次请求动作(工具名、reason、命令/参数)。
  • 模型必须只回答一个词:ALLOW 或 REJECT。
    • ALLOW → allowed-once
    • REJECT → rejected
    • 无法解析 / 超时 / 模型错误 / 无模型服务 → next()(回退为询问用户;绝不静默放行,也绝不静默拒绝)

高危模式

以下模式会对提取出的动作文本做精确匹配(不区分大小写的正则,无 g 标志):

  • rm -r、rm -rf、rm -fr、rm -R、rm -rfv 等(任何带 r 标志的 rm)
  • rm ... /(递归/强制删除根目录)
  • drop table、drop database、drop schema
  • truncate table ...
  • delete from ...
  • mkfs、mkfs.ext4 等
  • dd if=
  • shred、wipefs
  • git push -f / git push --force
  • git reset --hard
  • chmod -R 777、chown -R
  • fork bomb :(){ :|:& };:

安装(静态,重启后仍生效)

方式 A:dsh plugin add(推荐)

本包声明了 dsh.bundle.patch,因此 dsh plugin add 会安装它,并自动把它加入该 profile 的 dsh.profile.bundles——不需要手动改补丁。

克隆仓库,然后在仓库所在目录的上层执行:

git clone https://github.com/shifan3/dsh-approve-for-me.git
dsh plugin --profile web add ./dsh-approve-for-me

或用绝对路径:

dsh plugin --profile web add /path/to/dsh-approve-for-me

发布到 npm 后也可以:

dsh plugin --profile web add dsh-approve-for-me

然后重启 dsh web。该命令会在 ~/.dsh/profiles/web/ 内执行 pnpm add,然后根据已安装的包对账 dsh.profile.bundles。激活插件的行就在本仓库的 cordis.patch.yml 里。

方式 B:手动 home 补丁层

如果不想用 dsh plugin,可以克隆仓库到 DSH home,并手动往 ~/.dsh/cordis.patch.yml 插入一行(对所有 profile 生效):

mkdir -p ~/.dsh/plugins
git clone https://github.com/shifan3/dsh-approve-for-me.git ~/.dsh/plugins/approve-for-me

然后创建或扩展 ~/.dsh/cordis.patch.yml:

- insert:
    - id: approve-for-me
      name: '../../plugins/approve-for-me/lib/index.js'
      config:
        enabled: true
        provider: deepseek-official
        model: deepseek-v4-flash
        maxTokens: 512
        summaryMaxChars: 12000
        timeoutMs: 60000

然后重启 dsh web。相对路径 name 会相对于每个 profile 目录(~/.dsh/profiles/<name>/)解析,所以 ../../plugins/... 恰好指向 ~/.dsh/plugins/...,对自带的 web、tui、cc-tui profile 都成立。

如果你之前用方式 B 装过,之后想换成方式 A,请先删掉 ~/.dsh/cordis.patch.yml 里的 approve-for-me insert,避免同一 id 出现两次。

启用 / 禁用 / 配置

  • 禁用:把行配置里的 enabled 改为 false,然后重启。
    • 方式 A:在 profile 补丁(~/.dsh/profiles/web/cordis.patch.yml)里加一个按 id 覆盖的配置:
      - id: approve-for-me
        config:
          enabled: false
      
    • 方式 B:编辑 ~/.dsh/cordis.patch.yml 里的 insert 块。
  • 卸载:
    • 方式 A:dsh plugin --profile web remove dsh-approve-for-me,然后重启。
    • 方式 B:删除该 insert 块(或整个补丁文件),然后重启。
  • 配置项(都可选):
    • enabled(默认 true)
    • provider(默认 deepseek-official)
    • model(默认 deepseek-v4-flash)
    • maxTokens(默认 512)
    • summaryMaxChars(默认 12000)
    • timeoutMs(默认 60000)
    • reasoningEffort(默认 off;保持 off,避免推理消耗 token 导致裁决词没输出)

安装(动态,单次运行)

如果不想写 ~/.dsh,可以把 host-code.js 作为动态 Cordis Host 包加载(重启后失效):

  • Web UI:打开 Cordis 面板 → 新建 Plugin(id 前缀如 afm)→ 把 host-code.js 粘贴为 Host 代码 → 运行。
  • 使用 cordis_define / cordis_run:读取 host-code.js,作为 code.host 传入。

文件

  • lib/index.js — 静态宿主插件(ESM,无运行时依赖)。
  • host-code.js — 动态 Cordis Host 包变体(相同逻辑,沙箱安全子集)。
  • cordis.patch.yml — bundle 补丁(通过 dsh.bundle.patch 声明),用于激活插件行。

限制

  • 动态版运行在 DSH 动态宿主 vm 沙箱里:没有 setTimeout / AbortController,其超时依赖 LLM adapter 自身的 streamIdleTimeoutMs(默认 300s)。静态版使用真实的 AbortSignal.timeout。
  • 会话的审批策略仍显示为 ask;插件是一个前置 answerer,不是新的策略枚举。
  • 只应启用一个 approve-for-me answerer:如果同时加载静态版和动态版,后加载(后 prepend)的那个生效。

License

MIT

原始 README: https://github.com/shifan3/dsh-approve-for-me/blob/main/README.zh.md ↗

同类插件

查看全部 →
模型与账号接入Anionex

agent-vision-toolkit

为纯文本模型"看图“设计更好的视觉工具箱和技能,支持多图理解,图片问答,前端UI还原、GUI 自动化等,并可选无缝接入多个主流agent,直接识别粘贴图片| A vision toolkit and skill designed for text-only llms — image Q&A, long-screenshot OCR, frontend UI restoration, and GUI automation, with optional seamless integration for Codex, Claude Code, Pi, Oh My Pi, and OpenCode

查看详情
928github+08-16
模型与账号接入toby-bridges

api-relay-audit

从 DeepSeek Harness 对 AI API 中转站和 LLM 代理运行本地安全审计,生成 Markdown 报告,覆盖提示词注入、模型替换信号、工具调用改写、错误泄漏、流完整性和按 profile 启用的 Web3 风险。

查看详情
791github+08-21
模型与账号接入ZJU-LLMs

OpenStory

✨ OpenStory 现已支持 DeepSeek Harness 插件! 现在可以通过 dsh-openstory 将 OpenStory 多智能体推演接入 DeepSeek Harness,让 agent 直接启动模拟、查看角色、下达指令并逐回合推进故事。查看 DSH 插件配置与使用指南。

查看详情
377github+08-17
模型与账号接入pulseaiclub

phi

pi的编码代理 ∞ 提供者、子代理、hashline编辑和权限门

查看详情
89github+08-16
模型与账号接入anysearch-team

anysearch-dsh

DeepSeek Harness(DSH)的 AnySearch 网络搜索提供方与高级搜索工具。

查看详情
79github+08-17
模型与账号接入kuangre123

codex-switch

Codex Switch 是一个 macOS 工具,一键配置 Codex 的自定义 API,同时保留官方 OpenAI 登录。保存后 Codex 的模型选择器里只会出现你选的那个 provider 的模型。也支持 Claude Code 的官方 / 自定义 API 切换。Codex Switch is a lightweight helper for configuring multiple coding-agent API routes. For Codex, it keeps Official OpenAI and a custom API provider configured in parallel, registers the custom model in Codex's mod

查看详情
67github+08-16