zames_pro 2.90.0 → 2.90.1

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.90.1] - 2026-10-28
11
+
12
+ ### Fixed
13
+
14
+ - **tui:** fit the turn rule and agent answers to the pane width, not the terminal
15
+
10
16
  ## [2.90.0] - 2026-10-28
11
17
 
12
18
  ### Added
@@ -21,8 +21,8 @@ import { TuiApp } from './TuiApp.js';
21
21
  import { FullScreenApp } from './FullScreenApp.js';
22
22
  import { AttachmentStore } from '../attachments.js';
23
23
  import { translate } from '../i18n.js';
24
- import { expandPastes, formatTokenStatus, tokenStatusLevel, wrapToWidth, truncateToWidth, } from '../input/layout.js';
25
- import { contentWidth } from '../width.js';
24
+ import { expandPastes, formatTokenStatus, tokenStatusLevel, wrapToWidth, truncateToWidth, screenInnerCols, } from '../input/layout.js';
25
+ import { contentWidth, setContentWidth } from '../width.js';
26
26
  import { theme } from '../theme.js';
27
27
  import { renderMarkdown } from '../markdown.js';
28
28
  import { summarizeToolCall, looksLikeToolError } from '../tool-summary.js';
@@ -257,7 +257,11 @@ export class TuiEditor {
257
257
  this.attachments.reset();
258
258
  // A turn separator + a BAR-marked, clearly-colored operator message, so an
259
259
  // operator turn never blends with the model's answer (operator request).
260
- this.printAbove(theme.turnRule('─'.repeat(contentWidth())));
260
+ // The turn rule must fit the PANE, not the terminal: the root keeps a
261
+ // gutter on both sides (screenGutter) and Ink wraps a longer line onto a
262
+ // second row, which looked like a stray line above the message.
263
+ // `screenInnerCols` ALREADY subtracts the gutter on both sides.
264
+ this.printAbove(theme.turnRule('─'.repeat(screenInnerCols(process.stdout.columns || 80))));
261
265
  // The BAR is a per-row marker, drawn by LogView (entry.bar), so every
262
266
  // visual row of a long message starts with `▌` instead of only the first.
263
267
  this.store.pushLog('user', wrapToWidth(display, contentWidth() - 2), false, { bar: true });
@@ -484,7 +488,20 @@ export class TuiEditor {
484
488
  }
485
489
  assistant(msg) {
486
490
  this.stop();
487
- const rendered = renderMarkdown(msg);
491
+ // renderMarkdown wraps to width.ts's CONTENT width, which defaults to the
492
+ // terminal width. Inside the TUI the pane is narrower (the root pads by
493
+ // the gutter), so an answer wrapped to the terminal width overflowed the
494
+ // gutter and wrapped again. Point width.ts at the pane for this render.
495
+ const pane = screenInnerCols(process.stdout.columns || 80);
496
+ const prev = contentWidth();
497
+ setContentWidth(pane);
498
+ let rendered;
499
+ try {
500
+ rendered = renderMarkdown(msg);
501
+ }
502
+ finally {
503
+ setContentWidth(prev);
504
+ }
488
505
  this.printAbove('\n' + theme.assistant(translate(this.locale)('editor.answer')));
489
506
  this.printAbove(rendered);
490
507
  this.printAbove('\n');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zames_pro",
3
- "version": "2.90.0",
3
+ "version": "2.90.1",
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": {