zames_pro 2.90.0 → 2.90.2
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 +15 -3
- package/dist/tui/TuiEditor.js +21 -4
- package/dist/web.js +14 -0
- package/package.json +1 -1
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.2] - 2026-10-28
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **web:** treat the IPv4-translated ::ffff:0:a.b.c.d literal as private
|
|
15
|
+
|
|
16
|
+
## [2.90.1] - 2026-10-28
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- **tui:** fit the turn rule and agent answers to the pane width, not the terminal
|
|
21
|
+
|
|
10
22
|
## [2.90.0] - 2026-10-28
|
|
11
23
|
|
|
12
24
|
### Added
|
|
@@ -431,7 +443,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
431
443
|
|
|
432
444
|
### Fixed
|
|
433
445
|
|
|
434
|
-
- **mcp:** a schema property named
|
|
446
|
+
- **mcp:** a schema property named **proto** becomes a real parameter
|
|
435
447
|
|
|
436
448
|
## [2.82.123] - 2026-10-24
|
|
437
449
|
|
|
@@ -1480,7 +1492,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
1480
1492
|
|
|
1481
1493
|
### Fixed
|
|
1482
1494
|
|
|
1483
|
-
- **commands:** keep an unsupplied
|
|
1495
|
+
- **commands:** keep an unsupplied position as written in a custom command
|
|
1484
1496
|
- **subagent:** count a subagent run only once it actually starts
|
|
1485
1497
|
- **attach:** do not cut an inlined @file inside a surrogate pair
|
|
1486
1498
|
- **checkpoint:** a bare out-of-range rewind index no longer matches a stamp prefix
|
|
@@ -1600,7 +1612,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
1600
1612
|
- **changelog:** keep drafted group headings on their own line
|
|
1601
1613
|
- **tui:** decode modified and release wheel reports correctly
|
|
1602
1614
|
- **shell:** normalize an invalid Bash timeout instead of crashing the tool
|
|
1603
|
-
- **cost:** keep per-tool stats safe for
|
|
1615
|
+
- **cost:** keep per-tool stats safe for **proto**/constructor tool names
|
|
1604
1616
|
- **tui:** mark blocked/aborted tool calls as errors in the result icon
|
|
1605
1617
|
- **mcp:** do not split a surrogate pair when truncating an MCP result
|
|
1606
1618
|
- **context:** discover skills at the documented 3 levels deep
|
package/dist/tui/TuiEditor.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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/dist/web.js
CHANGED
|
@@ -263,6 +263,20 @@ export function isPrivateIp(ip) {
|
|
|
263
263
|
'.' +
|
|
264
264
|
(v6[7] & 0xff));
|
|
265
265
|
}
|
|
266
|
+
// IPv4-TRANSLATED ::ffff:0:a.b.c.d (RFC 2765): the embedded IPv4 sits in
|
|
267
|
+
// the LAST two groups with one extra zero group between `ffff` and it.
|
|
268
|
+
// Only the mapped form above was judged, so `::ffff:0:7f00:1` (= 127.0.0.1)
|
|
269
|
+
// stayed "public" and WebFetch could reach localhost/metadata through it.
|
|
270
|
+
const translatedV4 = v6.slice(0, 4).every((g) => g === 0) && v6[4] === 0xffff && v6[5] === 0;
|
|
271
|
+
if (translatedV4) {
|
|
272
|
+
return isPrivateIp((v6[6] >> 8) +
|
|
273
|
+
'.' +
|
|
274
|
+
(v6[6] & 0xff) +
|
|
275
|
+
'.' +
|
|
276
|
+
(v6[7] >> 8) +
|
|
277
|
+
'.' +
|
|
278
|
+
(v6[7] & 0xff));
|
|
279
|
+
}
|
|
266
280
|
}
|
|
267
281
|
if (low === '::1' || low === '::')
|
|
268
282
|
return true;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zames_pro",
|
|
3
|
-
"version": "2.90.
|
|
3
|
+
"version": "2.90.2",
|
|
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": {
|