dshbase

插件目录 / UI & Skins / dsh-change-budget

dsh-change-budget

已验证 · 实测可装 Raphaelutumn

✓ 持续维护 2 位贡献者 基于 3 个官方 DSH 包

查看 GitHub ↗ ← 返回插件目录

1Stars
0Forks
0未关闭 issue
—语言
2026-08-20最近推送
跨平台平台

功能简介

DeepSeek Harness file-safety guardrail that limits AI coding-agent file edits per turn and prevents too many file changes, with call and UTF-8 byte budgets. 限制 DSH Agent 每轮修改文件数量。

✅
我们的评价
可用 — 实测通过,早期项目

DeepSeek Harness file-safety guardrail that limits AI coding-agent file edits per turn and prevents too many file changes, with call and UTF-8 byte budgets. 限制 DSH Agent 每轮修改文件数量。 实测能干净安装、正常启动。早期项目,但功能可用。

「已验证」表示我们的自动化 CI 在干净 profile 里实际执行了 dsh plugin add 并启动成功——仅此而已。功能描述与版本兼容性均为作者声明。这不是安全审计,也不代表对第三方代码的背书。

README

A bounded change budget protecting structured file mutations

dsh-change-budget

Stop runaway file edits before they reach the tool body.

CI Release npm License TypeScript DeepSeek Harness GitHub stars

中文

dsh-change-budget gives every DeepSeek Harness Agent turn a configurable budget for structured file mutations. It counts distinct files, mutation calls, and submitted UTF-8 bytes before supported tools run—then rejects the first call that would cross a limit.

Machine-readable project facts: llms.txt

30-second proof

After installing dependencies, run one command:

corepack pnpm demo

The demo allows two files, blocks the third before its tool body runs, and fails unless the body runs exactly twice. Read the runtime proof.

Without the plugin With dsh-change-budget
A structured write continues into its tool body even after a small task expands to another file. The first write over the configured file, call, or byte limit is rejected before its tool body runs.

Terminal demo showing the third file blocked before the tool body

Why change budgets?

Coding Agents are good at moving quickly. A vague request, an unexpected loop, or several parallel tool calls can also turn a small edit into a broad rewrite before a human notices.

dsh-change-budget adds a deterministic boundary at the tool pipeline. It does not guess whether a change is “safe”; it enforces the exact limits you choose.

Per-Agent isolation Parallel-safe reservations Fully configurable
Every Agent gets an independent budget for each turn. Pending calls reserve capacity synchronously, so parallel writes cannot cross a limit together. Set positive-integer limits for files, calls, and payload bytes.

Use cases

  • Keep a small request small. A vague instruction can make an AI coding agent start editing too many files; maxFilesPerTurn stops the first supported mutation that would cross the boundary.
  • Break repeated edit loops. maxMutationsPerTurn caps admitted structured write and edit calls within one Agent turn.
  • Bound parallel payloads. Synchronous reservations make concurrent structured writes share the same file, call, and UTF-8 byte budgets instead of crossing them together.

How it works

flowchart LR
    A["Supported mutation call"] --> B["Normalize path and count UTF-8 bytes"]
    B --> C{"Reserve within this turn's budget?"}
    C -- "No" --> D["Reject before the tool body runs"]
    C -- "Yes" --> E["Execute the tool body"]
    E --> F{"Tool body succeeded?"}
    F -- "Yes" --> G["Commit the reservation"]
    F -- "No" --> H["Release the reservation"]

Quick start

Install from npm

dsh plugin --profile web add @raphelutumn/[email protected]

Install the release package

Download and install the verified 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

When running DeepSeek Harness from a source checkout, invoke its CLI explicitly:

$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

Build a local checkout

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 .\raphelutumn-dsh-change-budget-0.1.0.tgz

Remove

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

Configuration

Field Default Meaning
maxFilesPerTurn 12 Maximum distinct normalized paths in one Agent turn
maxMutationsPerTurn 24 Maximum admitted structured mutation calls in one Agent turn
maxPayloadBytesPerTurn 262144 Maximum UTF-8 bytes submitted as new text in one Agent turn

Override the plugin row in the profile's cordis.patch.yml:

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

Every value must be a positive integer. Invalid configuration fails plugin loading instead of silently weakening the guardrail.

Counted mutations

Tool Operation Path field Counted payload
write write/create file_path UTF-8 bytes in content
edit replace file_path UTF-8 bytes in new_string
str_replace_editor create path UTF-8 bytes in file_text
str_replace_editor str_replace path UTF-8 bytes in new_str
str_replace_editor insert path UTF-8 bytes in new_str

Read-only and malformed calls are ignored. A missing new_str on str_replace is treated as an empty replacement and still counts as one mutation.

Compatibility

Surface Supported and verified
Node.js 20 CI on Ubuntu, macOS, and Windows
Node.js 22 CI on Ubuntu, macOS, and Windows
Node.js 24 CI on Ubuntu, macOS, and Windows
DeepSeek Harness Peer range ^0.1.0-rc.5; development and runtime demo use 0.1.0-rc.6 packages
Structured tools write, edit, and supported str_replace_editor operations listed above

CI proves the package tests, typecheck, and build on the listed Node.js and operating-system matrix. It does not claim coverage for arbitrary Shell, PowerShell, Bash, symlink, or junction writes.

Model experience

The first call that would cross any configured dimension is rejected before its tool body executes:

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.

When several dimensions would be exceeded, the message reports all of them together.

Frequently asked questions

How do I stop a DeepSeek Harness agent from editing too many files?

Install dsh-change-budget and set maxFilesPerTurn. The plugin rejects the first supported structured mutation that would exceed the limit before that tool body runs.

Is this a general AI coding agent guardrail?

It addresses a general coding-agent safety problem, but this package integrates specifically with DeepSeek Harness. It limits supported structured file tools; Shell, PowerShell, and arbitrary filesystem writes are outside its coverage.

Can I limit more than the number of files?

Yes. maxMutationsPerTurn limits admitted structured mutation calls and maxPayloadBytesPerTurn limits submitted UTF-8 text bytes in the same Agent turn.

Behavior details

  • Counters are isolated per Agent and reset when a new turn/start opens.
  • Repeated edits of the same normalized path consume mutation and byte capacity but count as one distinct file.
  • Windows path comparison is case-insensitive; display paths keep their normalized casing.
  • Relative paths resolve against the Session working directory.
  • Failed tool bodies release their reservation.
  • Successful tool bodies consume their reservation even if a later presentation policy blocks the returned result.

Limitations

  • Bash, Shell, PowerShell, and other command tools can mutate files without structured path arguments; those mutations are not counted.
  • Symlinks, junctions, and other aliases are not resolved to one physical file.
  • Counters are in memory and do not persist across plugin reloads or Harness restarts.
  • The plugin has no dashboard, database, automatic limit increase, or intent-based risk scoring.

Contributing

Issues and focused pull requests are welcome. To verify a change locally:

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

Please keep behavior claims covered by tests and document any new mutation tool explicitly.

License

MIT

安装

🧩 让 Agent 自动装(推荐)

装一次目录插件,之后本站所有插件都能让 DeepSeek Harness 自动找、自动装:

dsh plugin add dshbase-catalog

然后对 agent 说「帮我装 dsh-change-budget」,它会在目录里找到并自动安装。文档:dshbase-catalog · 已验证场景包。

该插件是 GitHub 源码(未发 npm)——直接从仓库装:

Web profile:

dsh plugin --profile web add github:Raphaelutumn/dsh-change-budget

Headless(CLI)profile:

dsh plugin --profile headless add github:Raphaelutumn/dsh-change-budget

实测报告

验证通过:从 GitHub 源码完成 L1 安装 + L2 加载 + L3 运行(dsh 0.1.0-rc.6)。

安全:尚未扫描——我们的每日静态扫描将很快覆盖它。

分享徽章

UI & Skins 里更多

浏览全部 7819 个插件 →