zames_pro 2.82.5 → 2.82.8

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,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.82.8] - 2026-10-22
11
+
12
+ ### Fixed
13
+
14
+ - **mcp:** --isolated=false no longer counts as an isolated profile
15
+
16
+ ## [2.82.7] - 2026-10-22
17
+
18
+ ### Fixed
19
+
20
+ - **queue:** a truncated queued message keeps no lone surrogate
21
+
22
+ ## [2.82.6] - 2026-10-22
23
+
24
+ ### Fixed
25
+
26
+ - **config:** a numeric setting rejects a fractional value
27
+
10
28
  ## [2.82.5] - 2026-10-22
11
29
 
12
30
  ### Fixed
package/dist/commands.js CHANGED
@@ -894,7 +894,16 @@ export function formatQueueList(msgs) {
894
894
  const one = String(m.text || '')
895
895
  .replace(/\s+/g, ' ')
896
896
  .trim();
897
- const shown = one.length > 80 ? one.slice(0, 80) + ' …' : one;
897
+ // The cut is in UTF-16 units: a surrogate PAIR (an emoji / astral CJK
898
+ // char) straddling the boundary would leave a lone HIGH surrogate at the
899
+ // end of the line — a broken code point in the /queue listing and in the
900
+ // transcript. Step back one unit so the pair is dropped WHOLE (the same
901
+ // rule as truncateToolResult / capReport).
902
+ let cut = 80;
903
+ const last = one.charCodeAt(cut - 1);
904
+ if (last >= 0xd800 && last <= 0xdbff)
905
+ cut--;
906
+ const shown = one.length > 80 ? one.slice(0, cut) + ' …' : one;
898
907
  const att = m.attachments?.length ? ' [+' + m.attachments.length + ']' : '';
899
908
  return ' ' + (i + 1) + '. ' + shown + att;
900
909
  });
package/dist/config.js CHANGED
@@ -644,6 +644,15 @@ function parseConfigValue(field, raw) {
644
644
  const n = Number(raw);
645
645
  if (!Number.isFinite(n))
646
646
  throw new Error('number');
647
+ // Every numeric setting is a COUNT or a MILLISECOND amount, and the code
648
+ // that consumes it compares/loops it as an integer (`attempt <
649
+ // this.askRetries`, `used >= maxSubagents`, a setTimeout delay). A
650
+ // fraction was accepted and then behaved unpredictably: a budget of
651
+ // 0.4 subagents printed "0.4" while refusing nothing on the first run,
652
+ // and 5.7 retries meant "5 attempts plus half an attempt". `5.0` is a
653
+ // legitimate way to type 5, so only a REAL fraction is rejected.
654
+ if (!Number.isInteger(n))
655
+ throw new Error('number');
647
656
  if (field.min !== undefined && n < field.min)
648
657
  throw new Error('number');
649
658
  if (field.max !== undefined && n > field.max)
package/dist/mcp.js CHANGED
@@ -44,10 +44,19 @@ export function hardenPlaywrightArgs(command, args) {
44
44
  const hay = (String(command || '') + ' ' + args.join(' ')).toLowerCase();
45
45
  if (!hay.includes('playwright') || !hay.includes('mcp'))
46
46
  return args;
47
- if (args.some((a) => a.startsWith('--isolated') ||
48
- a.startsWith('--user-data-dir') ||
49
- a.startsWith('--extension') ||
50
- a.startsWith('--cdp-endpoint'))) {
47
+ if (args.some((a) =>
48
+ // A PREFIX match treated `--isolated=false` as the isolated flag, so
49
+ // the hardener added nothing and the MCP browser opened the agent's
50
+ // live profile anyway. Only a flag EXPLICITLY ON, or a value-taking
51
+ // profile flag, counts; `=false` does not.
52
+ a === '--isolated' ||
53
+ /^--isolated=(?!false$)/.test(a) ||
54
+ a === '--user-data-dir' ||
55
+ a.startsWith('--user-data-dir=') ||
56
+ a === '--extension' ||
57
+ a.startsWith('--extension=') ||
58
+ a === '--cdp-endpoint' ||
59
+ a.startsWith('--cdp-endpoint='))) {
51
60
  return args;
52
61
  }
53
62
  return [...args, '--isolated'];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zames_pro",
3
- "version": "2.82.5",
3
+ "version": "2.82.8",
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": {