zames_pro 2.81.18 → 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 +12 -0
- package/dist/extraTools.js +8 -1
- package/dist/tools.js +7 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,18 @@ 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
|
+
|
|
16
|
+
## [2.81.19] - 2026-10-21
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- **tools:** Edit without new_string no longer deletes the text
|
|
21
|
+
|
|
10
22
|
## [2.81.18] - 2026-10-21
|
|
11
23
|
|
|
12
24
|
### Fixed
|
package/dist/extraTools.js
CHANGED
|
@@ -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
|
-
|
|
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/dist/tools.js
CHANGED
|
@@ -188,6 +188,13 @@ export function createTools(workdir, { undo, todos, readOnly = false, subagents
|
|
|
188
188
|
fn: async ({ path: p, old_string, new_string, old_base64, new_base64, }) => {
|
|
189
189
|
const file = safe(req(p, 'path'));
|
|
190
190
|
const oldStr = decodeContent(old_string, old_base64);
|
|
191
|
+
// A missing new_string (BOTH fields omitted) must not mean "delete":
|
|
192
|
+
// String(undefined) is '' and the tool silently erased the matched
|
|
193
|
+
// text while reporting success. An EXPLICIT empty string still deletes.
|
|
194
|
+
if (new_string === undefined && new_base64 === undefined) {
|
|
195
|
+
throw new Error('Missing required argument: new_string (or new_base64). Add the ' +
|
|
196
|
+
'replacement text (use an empty string to delete) and retry.');
|
|
197
|
+
}
|
|
191
198
|
const newStr = decodeContent(new_string, new_base64);
|
|
192
199
|
if (oldStr === '') {
|
|
193
200
|
throw new Error('old_string is empty — nothing to replace.');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zames_pro",
|
|
3
|
-
"version": "2.81.
|
|
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": {
|