zames_pro 2.82.64 → 2.82.66

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.66] - 2026-10-24
11
+
12
+ ### Fixed
13
+
14
+ - **tui:** append a space when Tab completion lands on a full command name
15
+
16
+ ## [2.82.65] - 2026-10-24
17
+
18
+ ### Fixed
19
+
20
+ - **attachments:** show gigabytes and never a non-finite size
21
+
10
22
  ## [2.82.64] - 2026-10-23
11
23
 
12
24
  ### Fixed
@@ -75,17 +75,27 @@ export function extForMime(mime) {
75
75
  return '';
76
76
  }
77
77
  export function formatSize(bytes) {
78
- const n = Number(bytes) || 0;
78
+ // A non-finite count (a size derived from a broken Content-Length or a
79
+ // failed stat) used to render as `Infinity MB`.
80
+ const raw = Number(bytes);
81
+ const n = Number.isFinite(raw) ? raw : 0;
79
82
  if (n < 1024)
80
83
  return n + ' B';
81
- if (n < 1024 * 1024) {
82
- const kb = (n / 1024).toFixed(1);
83
- // toFixed ROUNDS: just under a megabyte the quotient is 1023.999 KB and
84
- // the operator saw "1024.0 KB" — a size that should be "1.0 MB".
85
- if (kb !== '1024.0')
86
- return kb + ' KB';
84
+ const units = ['KB', 'MB', 'GB', 'TB'];
85
+ let value = n / 1024;
86
+ let unit = 0;
87
+ // Promote while the ROUNDED value would read as a full next unit: 1023.999
88
+ // KB rounds to "1024.0 KB", which should be "1.0 MB" (the same for GB/TB).
89
+ while (value >= 1024 && unit < units.length - 1) {
90
+ value /= 1024;
91
+ unit++;
87
92
  }
88
- return (n / (1024 * 1024)).toFixed(1) + ' MB';
93
+ // Only a ROUNDED 1024.0 needs one more promotion step (1023.999 KB).
94
+ if (value.toFixed(1) === '1024.0' && unit < units.length - 1) {
95
+ value /= 1024;
96
+ unit++;
97
+ }
98
+ return value.toFixed(1) + ' ' + units[unit];
89
99
  }
90
100
  export function isImageName(name) {
91
101
  return IMAGE_EXTS.includes(path.extname(String(name || '')).toLowerCase());
@@ -118,5 +118,12 @@ export function completeSlashCommand(buf, sugg, selected) {
118
118
  return null;
119
119
  if (!prefix.toLowerCase().startsWith(typed))
120
120
  return null;
121
- return prefix.length > buf.length ? prefix : null;
121
+ if (prefix.length <= buf.length)
122
+ return null;
123
+ // The shared prefix may be a COMPLETE command name (`/config` between
124
+ // `/config` and `/configure`): appending the space makes it ready for its
125
+ // argument, exactly like a single-match completion. A prefix that only
126
+ // extends the typed text stays bare.
127
+ const complete = sugg.some((c) => c.name.toLowerCase() === prefix.toLowerCase());
128
+ return complete ? prefix + ' ' : prefix;
122
129
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zames_pro",
3
- "version": "2.82.64",
3
+ "version": "2.82.66",
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": {