zames_pro 2.90.2 → 2.90.4

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.90.4] - 2026-10-28
11
+
12
+ ### Fixed
13
+
14
+ - **ui:** safeJson(undefined) returns a string, not the value undefined
15
+
16
+ ## [2.90.3] - 2026-10-28
17
+
18
+ ### Fixed
19
+
20
+ - **ui:** keep a tool detail on a negative clip budget instead of a lone ellipsis
21
+
10
22
  ## [2.90.2] - 2026-10-28
11
23
 
12
24
  ### Fixed
@@ -141,7 +141,11 @@ export function expandPastes(pastes, text, deletedIndex) {
141
141
  }
142
142
  function safeJson(v) {
143
143
  try {
144
- return JSON.stringify(v);
144
+ // `JSON.stringify(undefined)` returns the VALUE `undefined`, not a string:
145
+ // the typed-as-string result then broke `truncateToWidth` and the
146
+ // `detail ? …` branches (a REPL/args-less tool printed nothing useful).
147
+ const s = JSON.stringify(v);
148
+ return s === undefined ? String(v) : s;
145
149
  }
146
150
  catch {
147
151
  return String(v);
@@ -314,7 +318,14 @@ export function wrapToWidth(s, maxCols) {
314
318
  return out.join(NL);
315
319
  }
316
320
  export function truncateToWidth(s, maxCols) {
317
- const width = Math.max(1, Math.floor(maxCols));
321
+ // The callers derive the budget from the row width MINUS the tool name
322
+ // (`contentWidth() - name.length - 6`), so a long name (an MCP tool id) on a
323
+ // narrow pane produced a NEGATIVE budget and the whole detail collapsed to a
324
+ // lone `…` — the operator saw no argument at all. A budget below 1 (the
325
+ // ellipsis itself) is lifted to 2, so the head keeps ONE character next to
326
+ // the marker instead of disappearing entirely.
327
+ const requested = Number.isFinite(maxCols) ? Math.floor(maxCols) : 1;
328
+ const width = requested < 1 ? 2 : requested;
318
329
  const text = String(s ?? '');
319
330
  if (visLen(text) <= width)
320
331
  return text;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zames_pro",
3
- "version": "2.90.2",
3
+ "version": "2.90.4",
4
4
  "description": "Terminal coding agent that drives a real browser to chat with DeepSeek, Qwen or GLM — 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": {