zames_pro 2.82.109 → 2.82.110

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,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.82.110] - 2026-10-24
11
+
12
+ ### Fixed
13
+
14
+ - **commands:** a dollar token inside a custom-command argument is not expanded twice
15
+
10
16
  ## [2.82.109] - 2026-10-24
11
17
 
12
18
  ### Fixed
package/dist/commands.js CHANGED
@@ -886,10 +886,32 @@ function replaceDollarTokens(s, parts, names) {
886
886
  // it is unit-tested.
887
887
  export function expandCommandArgs(body, rest, names = []) {
888
888
  const parts = splitCommandArgs(rest);
889
+ // Scan the BODY only: the operator's arguments are DATA and must not be
890
+ // re-scanned for `$1`/`$name`. Substituting them into the text FIRST and
891
+ // running the dollar pass over the result rewrote an argument that merely
892
+ // contained `$1` (`/cmd real $1` sent `real real`). A unique placeholder is
893
+ // parked for every `{{args}}`/`$ARGUMENTS` occurrence and restored after the
894
+ // positional pass.
895
+ const parked = [];
889
896
  let out = String(body ?? '');
890
- out = out.split('{{args}}').join(rest);
891
- out = out.split('$ARGUMENTS').join(rest);
897
+ const park = () => {
898
+ const key = String.fromCharCode(0x1f) +
899
+ 'a' +
900
+ parked.length +
901
+ String.fromCharCode(0x1f);
902
+ parked.push(rest);
903
+ return key;
904
+ };
905
+ out = out.split('{{args}}').join(park());
906
+ out = out.split('$ARGUMENTS').join(park());
892
907
  out = replaceDollarTokens(out, parts, names);
908
+ for (let i = 0; i < parked.length; i++) {
909
+ const key = String.fromCharCode(0x1f) + 'a' + i + String.fromCharCode(0x1f);
910
+ out = out.split(key).join(parked[i]);
911
+ }
912
+ // The placeholder uses a control character that cannot appear in a normal
913
+ // body; a body that DOES contain it (a binary snippet) is left untouched
914
+ // because its text is not a generated key.
893
915
  return out.trim();
894
916
  }
895
917
  // Names declared in `arguments:` but not supplied on the command line (by
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zames_pro",
3
- "version": "2.82.109",
3
+ "version": "2.82.110",
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": {