zames_pro 2.81.7 → 2.81.9

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,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.9] - 2026-10-21
11
+
12
+ ### Fixed
13
+
14
+ - **commands:** a failed attachment only rewrites its own whole path
15
+
16
+ ## [2.81.8] - 2026-10-21
17
+
18
+ ### Fixed
19
+
20
+ - **net-capture:** a lone closing bracket is not a finished answer
21
+
10
22
  ## [2.81.7] - 2026-10-21
11
23
 
12
24
  ### Changed
package/dist/commands.js CHANGED
@@ -707,7 +707,12 @@ export function rewriteFailedAttachments(text, failed) {
707
707
  for (const f of failed || []) {
708
708
  if (!f || !f.path)
709
709
  continue;
710
- out = out.split(f.path).join('[attach-failed: ' + f.name + ']');
710
+ // Replace only a WHOLE path: a bare split/join also matched a failed path
711
+ // INSIDE a longer, healthy one (`/p/a.ts` in `/p/a.tsx`), and the model
712
+ // was told a file it actually has is missing. A path character must not
713
+ // border the match on either side.
714
+ const esc = f.path.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
715
+ out = out.replace(new RegExp('(?<![\\w./-])' + esc + '(?![\\w./-])', 'g'), '[attach-failed: ' + f.name + ']');
711
716
  }
712
717
  return out;
713
718
  }
@@ -173,8 +173,13 @@ export function extractAnswer(body) {
173
173
  // truncated RESPONSE head (an empty string or a bare `{`), which the measure
174
174
  // below excludes explicitly.
175
175
  const MIN_REAL_ANSWER_CHARS = 1;
176
- /** A bare truncated head (whitespace or braces only) is not a real answer. */
177
- const TRUNCATED_HEAD_RE = /^[\s{[]*$/;
176
+ /**
177
+ * A bare truncated head is not a real answer: whitespace, or nothing but
178
+ * BRACKETS of either kind (an opening `{` / `[` from a cut-off JSON answer AND
179
+ * a closing `}` / `]` / `)` left by a truncation that began mid-structure).
180
+ * Listing only the opening brackets let a lone `}` count as a COMPLETE answer.
181
+ */
182
+ const TRUNCATED_HEAD_RE = /^[\s{}[\]()]*$/;
178
183
  // How many chars of RESPONSE text the body carries, or -1 when there is NO
179
184
  // RESPONSE fragment at all. The fragment is SSE/JSON-encoded, so the content
180
185
  // may contain `\"` escapes AND raw `"` inside the JSON (the capture is the RAW
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zames_pro",
3
- "version": "2.81.7",
3
+ "version": "2.81.9",
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": {