zames_pro 2.82.116 → 2.82.118

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.82.118] - 2026-10-24
11
+
12
+ ### Fixed
13
+
14
+ - **subagent:** an empty report is not passed on as a successful result
15
+
16
+ ## [2.82.117] - 2026-10-24
17
+
18
+ ### Fixed
19
+
20
+ - **commands:** operator text cannot spoof a queued-message boundary
21
+
10
22
  ## [2.82.116] - 2026-10-24
11
23
 
12
24
  ### Fixed
package/dist/commands.js CHANGED
@@ -1030,7 +1030,27 @@ export function mergeMessages(msgs) {
1030
1030
  list.length +
1031
1031
  ' messages while you were working. They are listed below in order — ' +
1032
1032
  'treat them as one instruction.';
1033
- const text = header + NL + NL + parts.join(NL + NL + '---' + NL + NL);
1033
+ // The parts are OPERATOR text: a line that reads `---` (a Markdown rule, a
1034
+ // pasted diff) would spoof a message boundary and the model would see an
1035
+ // extra message. Neutralize such a line inside a part; the separator below
1036
+ // stays the only one.
1037
+ // The message text is OPERATOR input: a line that reads `---` (a Markdown
1038
+ // rule, a pasted diff) or repeats the header sentence spoofs a message
1039
+ // BOUNDARY / count — the model then sees an extra message that never
1040
+ // existed. Neutralize both inside a part; the real header and separator
1041
+ // below stay the only ones.
1042
+ const headerLine = /^\s*The operator sent \d+ messages? while you were working/i;
1043
+ const safeParts = parts.map((p) => p
1044
+ .split(NL)
1045
+ .map((line) => headerLine.test(line) ? line.replace(/^\s*/, '> ') : line)
1046
+ .map((line) => /^\s*-{3,}\s*$/.test(line)
1047
+ ? line.replace(/-/g, String.fromCharCode(92) + '-')
1048
+ : line)
1049
+ .map((line) => /^\s*-{3,}\s*$/.test(line)
1050
+ ? line.replace(/-/g, String.fromCharCode(92) + '-')
1051
+ : line)
1052
+ .join(NL));
1053
+ const text = header + NL + NL + safeParts.join(NL + NL + '---' + NL + NL);
1034
1054
  // Keep the FIRST scheduled job id in the batch so the ticker still knows a
1035
1055
  // copy of that job is in flight (see MergedMessage.jobId).
1036
1056
  const jobId = list.find((m) => m.jobId !== undefined)?.jobId;
package/dist/subagent.js CHANGED
@@ -195,7 +195,16 @@ export function createSubagentRunner(opts) {
195
195
  }
196
196
  return {
197
197
  ok: true,
198
- text: capReport(hookOut ? report + '\n\n' + hookOut : report),
198
+ // An EMPTY report (the model stopped without a final answer, or answered
199
+ // with whitespace) must not reach the parent as a successful tool result
200
+ // with no text: the parent would read it as "the sub-task produced
201
+ // nothing" and continue silently. Say so explicitly.
202
+ text: capReport(hookOut
203
+ ? (report.trim() ||
204
+ '(the subagent finished without a final report)') +
205
+ '\n\n' +
206
+ hookOut
207
+ : report.trim() || '(the subagent finished without a final report)'),
199
208
  };
200
209
  };
201
210
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zames_pro",
3
- "version": "2.82.116",
3
+ "version": "2.82.118",
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": {