zames_pro 2.81.19 → 2.81.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.81.20] - 2026-10-22
11
+
12
+ ### Fixed
13
+
14
+ - **extra-tools:** MultiEdit without new_string no longer deletes text
15
+
10
16
  ## [2.81.19] - 2026-10-21
11
17
 
12
18
  ### Fixed
@@ -299,7 +299,14 @@ export function createExtraTools(workdir, { undo, todos } = {}) {
299
299
  for (let i = 0; i < list.length; i++) {
300
300
  const e = list[i];
301
301
  const oldStr = String(e.old_string ?? '');
302
- const newStr = String(e.new_string ?? '');
302
+ // A missing new_string must not mean "delete": String(undefined) is
303
+ // '' and the edit silently ERASED the matched text (the same data
304
+ // loss fixed in the single-file Edit). An EXPLICIT '' still deletes.
305
+ if (e.new_string === undefined || e.new_string === null) {
306
+ throw new Error(`edits[${i}]: new_string is missing. Add the replacement text ` +
307
+ '(use an empty string to delete) and retry.');
308
+ }
309
+ const newStr = String(e.new_string);
303
310
  if (oldStr === '') {
304
311
  throw new Error(`edits[${i}]: old_string is empty.`);
305
312
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zames_pro",
3
- "version": "2.81.19",
3
+ "version": "2.81.20",
4
4
  "description": "Terminal coding agent that drives a real browser to chat with DeepSeek, Qwen and other web LLMs — no API key required. Reads and edits files, runs commands, commits to git, like Claude Code / Codex CLI.",
5
5
  "type": "module",
6
6
  "bin": {