编者按

Raphaelutumn/dsh-change-budget

为受支持的文件修改设置可配置的逐回合额度,在工具执行前限制不同文件数、修改调用数与 UTF-8 载荷字节数。

这是一个 DeepSeek Harness(DSH)插件。本站汇总其 GitHub README、安装信息、维护状态与公开安全信号。

修改额度边界正在保护结构化文件修改

dsh-change-budget

在文件修改进入工具主体之前,阻止失控的批量编辑。

版本 许可证 TypeScript DeepSeek Harness GitHub Stars

English

dsh-change-budget 为每个 DeepSeek Harness Agent 回合提供可配置的结构化文件修改额度。插件会在受支持的工具执行前统计不同文件数、修改调用数和新文本的 UTF-8 字节数,并拒绝第一个将要超过上限的调用。

机器可读的项目事实:llms.txt

一条命令查看第三个文件被拦截:运行时演示 · 终端证据

重要

这是独立的社区插件,不是 DeepSeek 官方项目。

为什么需要修改额度?

编码 Agent 很擅长快速推进工作,但模糊需求、意外循环或多个并行工具调用,也可能在人工察觉前把一次小修改扩大成大范围重写。

dsh-change-budget 在工具管线中加入确定性的硬边界。它不会猜测一项修改是否“安全”,而是严格执行你设置的数字上限。

每个 Agent 独立并行调用安全完全可配置
每个 Agent 在每个回合拥有独立额度。待执行调用会同步预留额度,因此并行写入不能一起穿透上限。文件数、调用数和文本字节数都可设置为任意正整数。

适用场景

  • 让小任务保持小范围。 模糊指令可能让 AI 编程 Agent 一次修改太多文件;maxFilesPerTurn 会阻止首个将越过边界的受支持修改。
  • 截断重复修改循环。 maxMutationsPerTurn 限制单个 Agent 回合内放行的结构化写入和编辑调用数。
  • 约束并行提交。 同步预留让并发结构化写入共享同一组文件数、调用数和 UTF-8 字节额度,不能一起穿透上限。

工作原理

flowchart LR
    A["受支持的修改调用"] --> B["规范化路径并统计 UTF-8 字节"]
    B --> C{"能否在本回合额度内预留?"}
    C -- "不能" --> D["在工具主体执行前拒绝"]
    C -- "可以" --> E["执行工具主体"]
    E --> F{"工具主体是否成功?"}
    F -- "成功" --> G["确认消耗预留额度"]
    F -- "失败" --> H["释放预留额度"]

快速开始

安装 Release 包

下载并安装经过校验的 tarball:

Invoke-WebRequest `
  -Uri 'https://github.com/Raphaelutumn/dsh-change-budget/releases/download/v0.1.0/dsh-change-budget-0.1.0.tgz' `
  -OutFile '.\dsh-change-budget-0.1.0.tgz'

dsh plugin --profile web add .\dsh-change-budget-0.1.0.tgz

如果从 DeepSeek Harness 源码 checkout 运行,请显式调用该仓库的 CLI:

$env:DSH_HOME='D:\Deepseek harness\.dsh'
corepack pnpm --dir 'D:\Deepseek harness' dsh plugin --profile web add .\dsh-change-budget-0.1.0.tgz

从源码构建

git clone https://github.com/Raphaelutumn/dsh-change-budget.git
Set-Location .\dsh-change-budget
corepack pnpm install
corepack pnpm pack --pack-destination .
dsh plugin --profile web add .\dsh-change-budget-0.1.0.tgz

卸载

dsh plugin --profile web remove dsh-change-budget

配置

字段默认值含义
maxFilesPerTurn12单个 Agent 回合最多触及的不同规范化路径数
maxMutationsPerTurn24单个 Agent 回合最多放行的结构化修改调用数
maxPayloadBytesPerTurn262144单个 Agent 回合最多提交的新文本 UTF-8 字节数

在 profile 的 cordis.patch.yml 中覆盖插件配置:

- id: change-budget
  config:
    maxFilesPerTurn: 20
    maxMutationsPerTurn: 40
    maxPayloadBytesPerTurn: 524288

所有配置都必须是正整数。非法配置会直接导致插件加载失败,而不是静默削弱保护。

计入额度的修改

工具操作路径字段计入的文本载荷
write写入/创建file_pathcontent 的 UTF-8 字节数
edit替换file_pathnew_string 的 UTF-8 字节数
str_replace_editorcreatepathfile_text 的 UTF-8 字节数
str_replace_editorstr_replacepathnew_str 的 UTF-8 字节数
str_replace_editorinsertpathnew_str 的 UTF-8 字节数

只读调用和参数格式错误的调用不会计数。str_replace 缺少 new_str 时会按空字符串处理,但仍计为一次修改。

模型看到的提示

第一个将要超过任一额度维度的调用会在工具主体执行前被拒绝:

Change budget exceeded for this turn: files would reach 13/12. Blocked path: "src/generated/client.ts". Raise the plugin limit or continue in a new user turn.

如果多个维度将同时超限,提示会一次列出全部超限项。

常见问题

如何防止 DeepSeek Harness Agent 一次修改太多文件?

安装 dsh-change-budget 并设置 maxFilesPerTurn。首个将超过上限的受支持结构化修改会在工具主体运行前被拒绝。

它是通用的 AI 编程 Agent 安全插件吗?

它解决的是通用的编程 Agent 文件安全问题,但当前软件包只集成 DeepSeek Harness。Shell、PowerShell 和任意文件系统写入不在覆盖范围内。

除了文件数量,还能限制什么?

maxMutationsPerTurn 限制单轮放行的结构化修改调用次数,maxPayloadBytesPerTurn 限制单轮提交的新文本 UTF-8 字节数。

行为细节

  • 计数器按 Agent 隔离,并在新的 turn/start 出现时重置。
  • 对同一规范化路径的重复编辑会继续消耗修改次数和字节额度,但只计为一个不同文件。
  • Windows 路径比较不区分大小写,展示路径保留规范化后的大小写。
  • 相对路径以 Session 工作目录为基准。
  • 工具主体失败会释放预留额度。
  • 工具主体成功后,即使后续展示策略阻止返回结果,该修改仍会消耗额度。

限制

  • Bash、Shell、PowerShell 和其他命令工具可能在没有结构化路径参数的情况下修改文件;这些修改不计数。
  • 符号链接、junction 和其他别名不会合并为同一个物理文件。
  • 计数器只保存在内存中,插件重载或 Harness 重启后不会保留。
  • 插件不提供仪表盘、数据库、自动提高额度或基于意图的风险判断。

参与贡献

欢迎提交 Issue 和边界清晰的 Pull Request。本地验证命令:

corepack pnpm install
corepack pnpm test
corepack pnpm typecheck
corepack pnpm build

请确保行为描述有测试支撑,并明确记录任何新增的修改工具。

许可证

MIT

REPOSITORY SIGNALS

安全与安装证据

该分数只基于公开仓库元数据与本站登记的安装证据,不等同于代码安全审计。

来源可追溯

来自公开插件目录,并链接到公开 GitHub 仓库。

许可证

仓库声明 MIT 许可证。

维护活跃度

最近 180 天内有代码更新。

安装证据

尚未登记可复验的精确安装元数据,请按仓库说明手动检查。

安装生命周期脚本

检测到 prepare,安装前请审阅脚本。

需要留意lifecycle-scripts