zames_pro 2.82.115 → 2.82.117

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.117] - 2026-10-24
11
+
12
+ ### Fixed
13
+
14
+ - **commands:** operator text cannot spoof a queued-message boundary
15
+
16
+ ## [2.82.116] - 2026-10-24
17
+
18
+ ### Fixed
19
+
20
+ - **attachments:** wait for the upload chip by exact file name
21
+
10
22
  ## [2.82.115] - 2026-10-24
11
23
 
12
24
  ### Fixed
@@ -41,8 +41,12 @@ export async function awaitUploadPreview(page, names, timeoutMs) {
41
41
  // rejected promise, not a synchronous throw — without the try/catch the
42
42
  // error escaped into `_attachFiles` and the whole attach failed. A
43
43
  // lookup error means "not visible yet", exactly like a failed count.
44
+ //
45
+ // `exact: true`: a SUBSTRING match found a short/common name (`a`,
46
+ // `image`) in unrelated page text and returned instantly, before the
47
+ // upload started. The chip carries the FULL name.
44
48
  const n = await Promise.resolve()
45
- .then(() => page.getByText(name, { exact: false }).count())
49
+ .then(() => page.getByText(name, { exact: true }).count())
46
50
  .catch(() => 0);
47
51
  if (n > 0)
48
52
  return;
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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zames_pro",
3
- "version": "2.82.115",
3
+ "version": "2.82.117",
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": {