zames_pro 2.85.0 → 2.86.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,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.86.1] - 2026-10-27
11
+
12
+ ### Fixed
13
+
14
+ - **ui:** the operator bar on every row, screenshots for all themes
15
+
16
+ ## [2.86.0] - 2026-10-27
17
+
18
+ ### Added
19
+
20
+ - **ui:** 10 more palettes, no sample dump after picking, picker smoke
21
+
10
22
  ## [2.85.0] - 2026-10-27
11
23
 
12
24
  ### Added
package/README.md CHANGED
@@ -631,8 +631,9 @@ The switch is instant, no restart. `zames` is the default; the bundled palettes
631
631
  are ports of well-known editor schemes:
632
632
 
633
633
  `zames` (default), `one-dark`, `dracula`, `gruvbox`, `nord`, `monokai`,
634
- `solarized-dark`, `tokyo-night`, `catppuccin`, `github-dark`, `ayu`,
635
- `rose-pine`, `everforest`, `kanagawa`.
634
+ `solarized-dark`, `tokyo-night`, `tokyo-storm`, `catppuccin`, `github-dark`,
635
+ `ayu`, `rose-pine`, `everforest`, `kanagawa`, `night-owl`, `material`,
636
+ `palenight`, `zenburn`, `selenized`, `iceberg`, `sonokai`, `aurora`, `cobalt2`.
636
637
 
637
638
  A theme repaints EVERYTHING: the interface, the agent's answers, the code
638
639
  highlighting inside them, the status row and the input frame. The terminal's
@@ -642,10 +643,12 @@ Terminal and others; where it is not supported nothing happens). Opt out with
642
643
  `ZAMES_NO_BG=1` or `NO_COLOR`.
643
644
  To make the choice
644
645
  concrete, a SAMPLE SESSION in that palette is shown before you pick (in `/theme`
645
- below the list, in `/config` press `p` on the theme row); after
646
- `/theme <id>` the sample is printed too. The frame itself is a separate
646
+ below the list, in `/config` press `p` on the theme row); it is not dumped into
647
+ the chat after a pick. Every one of the 24 themes has a screenshot in
648
+ `docs/shots/`. The frame itself is a separate
647
649
  setting: `/config set ui.inputBorder <round|single|double|bold|none>`
648
- (default `round`; `none` removes it).
650
+ (default `round`; `none` removes it). A multi-line operator message keeps its
651
+ `▌` bar on every row.
649
652
 
650
653
  Agent data is stored in `~/.zames`: browser profile, logs, undo history, sessions.
651
654
 
@@ -1368,8 +1371,9 @@ enum переключаются на месте; числа и строки от
1368
1371
  редакторов:
1369
1372
 
1370
1373
  `zames` (по умолчанию), `one-dark`, `dracula`, `gruvbox`, `nord`, `monokai`,
1371
- `solarized-dark`, `tokyo-night`, `catppuccin`, `github-dark`, `ayu`,
1372
- `rose-pine`, `everforest`, `kanagawa`.
1374
+ `solarized-dark`, `tokyo-night`, `tokyo-storm`, `catppuccin`, `github-dark`,
1375
+ `ayu`, `rose-pine`, `everforest`, `kanagawa`, `night-owl`, `material`,
1376
+ `palenight`, `zenburn`, `selenized`, `iceberg`, `sonokai`, `aurora`, `cobalt2`.
1373
1377
 
1374
1378
  Тема перекрашивает ВСЁ: интерфейс, ответы агента, подсветку кода в ответах,
1375
1379
  строку статуса и рамку ввода. ФОН окна терминала тоже перекрашивается: тема
@@ -1378,10 +1382,11 @@ kitty, WezTerm, Alacritty, GNOME Terminal и др.; где не поддержи
1378
1382
  ничего не происходит). Отключить фон: `ZAMES_NO_BG=1` или `NO_COLOR`.
1379
1383
  Чтобы было видно, ЧТО меняется, перед выбором
1380
1384
  показывается образец сессии в этой палитре (в `/theme` — под списком, в
1381
- `/config` — клавиша `p` на строке темы). После применения `/theme <id>`
1382
- образец печатается в терминал. Саму рамку можно менять отдельно:
1385
+ `/config` — клавиша `p` на строке темы); он не печатается в чат после выбора.
1386
+ Все 24 темы есть на скриншотах в `docs/shots/`. Саму рамку можно менять отдельно:
1383
1387
  `/config set ui.inputBorder <round|single|double|bold|none>` (по умолчанию
1384
- `round`, `none` — без рамки).
1388
+ `round`, `none` — без рамки). Рамку (маркер `▌`) у многострочного сообщения
1389
+ пользователя видно на каждой строке.
1385
1390
 
1386
1391
  Данные агента хранятся в `~/.zames`: профиль браузера, логи, история undo,
1387
1392
  сессии.
package/dist/index.js CHANGED
@@ -5,7 +5,6 @@ import fs from 'fs/promises';
5
5
  import { readFileSync, statSync } from 'fs';
6
6
  import { fileURLToPath } from 'url';
7
7
  import { theme, applyTheme, themeColors, themeNames, currentThemeName, isThemeName, } from './theme.js';
8
- import { themePreviewAnsi } from './tui/theme-preview.js';
9
8
  import { setInputBorder } from './tui/ui-colors.js';
10
9
  import { DeepSeekBrowser, headlessUACacheReady } from './browser.js';
11
10
  import { QwenBrowser } from './qwen-browser.js';
@@ -2251,11 +2250,6 @@ async function main() {
2251
2250
  return;
2252
2251
  }
2253
2252
  emit(theme.assistant(t('theme.set', { v: applyThemeById(arg) })));
2254
- // A terminal can only show colors it can paint, and the operator asked
2255
- // "what exactly changes?" — print a sample of every role in the new
2256
- // palette right below the confirmation.
2257
- emit('');
2258
- emit(themePreviewAnsi(arg));
2259
2253
  return;
2260
2254
  }
2261
2255
  // No argument: a pick list in the TUI, the id list otherwise. The cursor
@@ -2285,8 +2279,6 @@ async function main() {
2285
2279
  }
2286
2280
  if (picked) {
2287
2281
  emit(theme.assistant(t('theme.set', { v: applyThemeById(picked) })));
2288
- emit('');
2289
- emit(themePreviewAnsi(picked));
2290
2282
  }
2291
2283
  else {
2292
2284
  // Cancelled: the previews must not stick. Restore WITHOUT persisting.
package/dist/input.js CHANGED
@@ -1192,9 +1192,14 @@ export class LineEditor {
1192
1192
  // to the browser layer to be attached to the chat.
1193
1193
  const attached = this.attachments.items.slice();
1194
1194
  // A turn separator + a BAR-marked operator message (same look as the TUI).
1195
+ // The bar goes on EVERY visual row: a long message wrapped to N lines used
1196
+ // to mark only the first one, and the continuation rows looked shifted.
1195
1197
  this.printAbove(theme.turnRule('─'.repeat(contentWidth())));
1196
- this.printAbove(theme.userBar('▌ ') +
1197
- theme.user(wrapToWidth(display, contentWidth() - 2)));
1198
+ const wrapped = wrapToWidth(display, contentWidth() - 2);
1199
+ this.printAbove(wrapped
1200
+ .split(String.fromCharCode(10))
1201
+ .map((line) => theme.userBar('▌ ') + theme.user(line))
1202
+ .join(String.fromCharCode(10)));
1198
1203
  this.pastes = [];
1199
1204
  this.attachments.reset();
1200
1205
  if (this.onSubmit)
package/dist/theme.js CHANGED
@@ -287,6 +287,216 @@ export const PALETTES = {
287
287
  brown: '#e69875',
288
288
  toggleOn: '#83c092',
289
289
  },
290
+ // Tokyo Night Storm — the slightly bluer variant of Tokyo Night.
291
+ 'tokyo-storm': {
292
+ bg: '#24283b',
293
+ user: '#7dcfff',
294
+ userBar: '#3d7fa6',
295
+ turnRule: '#2f3549',
296
+ turnLabel: '#565f89',
297
+ prompt: '#e0af68',
298
+ dir: '#7dcfff',
299
+ assistant: '#c0caf5',
300
+ tool: '#ff9e64',
301
+ toolResult: '#9aa5ce',
302
+ system: '#7d84a8',
303
+ dim: '#565f89',
304
+ taskSummary: '#7aa2f7',
305
+ warn: '#e0af68',
306
+ error: '#f7768e',
307
+ success: '#9ece6a',
308
+ brown: '#ff9e64',
309
+ toggleOn: '#73daca',
310
+ },
311
+ // Night Owl — Sarah Drasner's dark blue scheme from VS Code.
312
+ 'night-owl': {
313
+ bg: '#011627',
314
+ user: '#82aaff',
315
+ userBar: '#4b6a9b',
316
+ turnRule: '#122d42',
317
+ turnLabel: '#637777',
318
+ prompt: '#ecc48d',
319
+ dir: '#7fdbca',
320
+ assistant: '#d6deeb',
321
+ tool: '#f78c6c',
322
+ toolResult: '#8badc1',
323
+ system: '#7d8fa9',
324
+ dim: '#637777',
325
+ taskSummary: '#c792ea',
326
+ warn: '#ecc48d',
327
+ error: '#ef5350',
328
+ success: '#addb67',
329
+ brown: '#f78c6c',
330
+ toggleOn: '#21c7a8',
331
+ },
332
+ // Material — the Material Theme Ocean (dark) palette.
333
+ material: {
334
+ bg: '#0f111a',
335
+ user: '#82aaff',
336
+ userBar: '#46608f',
337
+ turnRule: '#1a1f35',
338
+ turnLabel: '#4b526d',
339
+ prompt: '#ffcb6b',
340
+ dir: '#89ddff',
341
+ assistant: '#a6accd',
342
+ tool: '#f78c6c',
343
+ toolResult: '#8b93b5',
344
+ system: '#717cb4',
345
+ dim: '#4b526d',
346
+ taskSummary: '#c792ea',
347
+ warn: '#ffcb6b',
348
+ error: '#ff5370',
349
+ success: '#c3e88d',
350
+ brown: '#f78c6c',
351
+ toggleOn: '#89ddff',
352
+ },
353
+ // Palenight — Material's softer indigo variant.
354
+ palenight: {
355
+ bg: '#292d3e',
356
+ user: '#82aaff',
357
+ userBar: '#4b5f8f',
358
+ turnRule: '#353a52',
359
+ turnLabel: '#676e95',
360
+ prompt: '#ffcb6b',
361
+ dir: '#89ddff',
362
+ assistant: '#a6accd',
363
+ tool: '#f78c6c',
364
+ toolResult: '#8f97bd',
365
+ system: '#7e87b3',
366
+ dim: '#676e95',
367
+ taskSummary: '#c792ea',
368
+ warn: '#ffcb6b',
369
+ error: '#ff5370',
370
+ success: '#c3e88d',
371
+ brown: '#f78c6c',
372
+ toggleOn: '#89ddff',
373
+ },
374
+ // Zenburn — the low-contrast classic from Vim.
375
+ zenburn: {
376
+ bg: '#3f3f3f',
377
+ user: '#8cd0d3',
378
+ userBar: '#5d8d8f',
379
+ turnRule: '#4a4a4a',
380
+ turnLabel: '#7f9f7f',
381
+ prompt: '#e3ceab',
382
+ dir: '#8cd0d3',
383
+ assistant: '#dcdccc',
384
+ tool: '#dfaf8f',
385
+ toolResult: '#a8a8a0',
386
+ system: '#909090',
387
+ dim: '#7f9f7f',
388
+ taskSummary: '#93e0e3',
389
+ warn: '#e3ceab',
390
+ error: '#cc9393',
391
+ success: '#7f9f7f',
392
+ brown: '#dfaf8f',
393
+ toggleOn: '#93e0e3',
394
+ },
395
+ // Selenized Dark — a modern, contrast-checked Solarized rework.
396
+ selenized: {
397
+ bg: '#103c48',
398
+ user: '#4695f7',
399
+ userBar: '#2e6aa8',
400
+ turnRule: '#184956',
401
+ turnLabel: '#72898f',
402
+ prompt: '#dbb32d',
403
+ dir: '#41c7b9',
404
+ assistant: '#adbcbc',
405
+ tool: '#ed8649',
406
+ toolResult: '#8a9ea3',
407
+ system: '#8a9ea3',
408
+ dim: '#72898f',
409
+ taskSummary: '#41c7b9',
410
+ warn: '#dbb32d',
411
+ error: '#fa5750',
412
+ success: '#75b938',
413
+ brown: '#ed8649',
414
+ toggleOn: '#41c7b9',
415
+ },
416
+ // Iceberg — a calm blue "ice" scheme for Neovim/VS Code.
417
+ iceberg: {
418
+ bg: '#161821',
419
+ user: '#84a0c6',
420
+ userBar: '#4f6a8f',
421
+ turnRule: '#1e2132',
422
+ turnLabel: '#6b7089',
423
+ prompt: '#e2a478',
424
+ dir: '#89b8c2',
425
+ assistant: '#c6c8d1',
426
+ tool: '#e2a478',
427
+ toolResult: '#9aa3bd',
428
+ system: '#8389a3',
429
+ dim: '#6b7089',
430
+ taskSummary: '#a093c7',
431
+ warn: '#e2a478',
432
+ error: '#e27878',
433
+ success: '#b4be82',
434
+ brown: '#e2a478',
435
+ toggleOn: '#89b8c2',
436
+ },
437
+ // Sonokai — a vivid, modern take on Monokai.
438
+ sonokai: {
439
+ bg: '#2c2e34',
440
+ user: '#76cce0',
441
+ userBar: '#42808f',
442
+ turnRule: '#3b3e48',
443
+ turnLabel: '#7f8490',
444
+ prompt: '#e7c664',
445
+ dir: '#76cce0',
446
+ assistant: '#e2e2e3',
447
+ tool: '#f39660',
448
+ toolResult: '#a6a7ad',
449
+ system: '#9da0a7',
450
+ dim: '#7f8490',
451
+ taskSummary: '#9ed072',
452
+ warn: '#e7c664',
453
+ error: '#fc5d7c',
454
+ success: '#9ed072',
455
+ brown: '#f39660',
456
+ toggleOn: '#76cce0',
457
+ },
458
+ // Aurora — a northern-lights violet scheme.
459
+ aurora: {
460
+ bg: '#191c27',
461
+ user: '#88c0d0',
462
+ userBar: '#4b7180',
463
+ turnRule: '#242836',
464
+ turnLabel: '#6a6f8c',
465
+ prompt: '#ebcb8b',
466
+ dir: '#88c0d0',
467
+ assistant: '#d8dee9',
468
+ tool: '#d08770',
469
+ toolResult: '#9aa3b8',
470
+ system: '#8891a8',
471
+ dim: '#6a6f8c',
472
+ taskSummary: '#b48ead',
473
+ warn: '#ebcb8b',
474
+ error: '#bf616a',
475
+ success: '#a3be8c',
476
+ brown: '#d08770',
477
+ toggleOn: '#8fbcbb',
478
+ },
479
+ // Cobalt2 — Wes Bos's saturated blue VS Code theme.
480
+ cobalt2: {
481
+ bg: '#193549',
482
+ user: '#9effff',
483
+ userBar: '#4d8f9e',
484
+ turnRule: '#1f4662',
485
+ turnLabel: '#7a8f9e',
486
+ prompt: '#ffc600',
487
+ dir: '#9effff',
488
+ assistant: '#e1efff',
489
+ tool: '#ff9d00',
490
+ toolResult: '#a6b8c8',
491
+ system: '#8ba0b3',
492
+ dim: '#7a8f9e',
493
+ taskSummary: '#0088ff',
494
+ warn: '#ffc600',
495
+ error: '#ff628c',
496
+ success: '#3ad900',
497
+ brown: '#ff9d00',
498
+ toggleOn: '#80ffbb',
499
+ },
290
500
  // Kanagawa — Hokusai-inspired muted indigo (the "wave" theme).
291
501
  kanagawa: {
292
502
  bg: '#1f1f28',
@@ -9,6 +9,12 @@ function LogRow({ entry }) {
9
9
  // embedded ANSI escape sequences through to the terminal.
10
10
  return _jsx(Text, { children: entry.text });
11
11
  }
12
+ if (entry.bar) {
13
+ // An operator turn: `▌` on EVERY visual row. Applying the bar to the whole
14
+ // (already wrapped) block keeps the indent equal on continuation lines —
15
+ // prefixing only the first line made a multi-line message look ragged.
16
+ return _jsx(Text, { children: theme.userBar('▌ ') + theme.user(entry.text) });
17
+ }
12
18
  switch (entry.kind) {
13
19
  case 'user':
14
20
  return _jsx(Text, { children: theme.user('❯ ') + entry.text });
@@ -258,8 +258,9 @@ export class TuiEditor {
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
  this.printAbove(theme.turnRule('─'.repeat(contentWidth())));
261
- this.printAbove(theme.userBar('▌ ') +
262
- theme.user(wrapToWidth(display, contentWidth() - 2)));
261
+ // The BAR is a per-row marker, drawn by LogView (entry.bar), so every
262
+ // visual row of a long message starts with `▌` instead of only the first.
263
+ this.store.pushLog('user', wrapToWidth(display, contentWidth() - 2), false, { bar: true });
263
264
  this.store.set({ pastes: [] });
264
265
  // Sending a message pins the log back to the newest content: the operator
265
266
  // expects their message (and the answer) at the BOTTOM, so a viewport left
package/dist/tui/store.js CHANGED
@@ -83,8 +83,14 @@ export class TuiStore {
83
83
  this.set(fn(this.state));
84
84
  }
85
85
  /** Append one permanent log entry (an Ink `<Static>` item). */
86
- pushLog(kind, text, raw = false) {
87
- const entry = { id: this.nextLogId++, kind, text, raw };
86
+ pushLog(kind, text, raw = false, extra) {
87
+ const entry = {
88
+ id: this.nextLogId++,
89
+ kind,
90
+ text,
91
+ raw,
92
+ ...extra,
93
+ };
88
94
  this.state = { ...this.state, log: [...this.state.log, entry] };
89
95
  this.emit();
90
96
  }
package/llms-full.txt CHANGED
@@ -616,8 +616,9 @@ The switch is instant, no restart. `zames` is the default; the bundled palettes
616
616
  are ports of well-known editor schemes:
617
617
 
618
618
  `zames` (default), `one-dark`, `dracula`, `gruvbox`, `nord`, `monokai`,
619
- `solarized-dark`, `tokyo-night`, `catppuccin`, `github-dark`, `ayu`,
620
- `rose-pine`, `everforest`, `kanagawa`.
619
+ `solarized-dark`, `tokyo-night`, `tokyo-storm`, `catppuccin`, `github-dark`,
620
+ `ayu`, `rose-pine`, `everforest`, `kanagawa`, `night-owl`, `material`,
621
+ `palenight`, `zenburn`, `selenized`, `iceberg`, `sonokai`, `aurora`, `cobalt2`.
621
622
 
622
623
  A theme repaints EVERYTHING: the interface, the agent's answers, the code
623
624
  highlighting inside them, the status row and the input frame. The terminal's
@@ -627,10 +628,12 @@ Terminal and others; where it is not supported nothing happens). Opt out with
627
628
  `ZAMES_NO_BG=1` or `NO_COLOR`.
628
629
  To make the choice
629
630
  concrete, a SAMPLE SESSION in that palette is shown before you pick (in `/theme`
630
- below the list, in `/config` press `p` on the theme row); after
631
- `/theme <id>` the sample is printed too. The frame itself is a separate
631
+ below the list, in `/config` press `p` on the theme row); it is not dumped into
632
+ the chat after a pick. Every one of the 24 themes has a screenshot in
633
+ `docs/shots/`. The frame itself is a separate
632
634
  setting: `/config set ui.inputBorder <round|single|double|bold|none>`
633
- (default `round`; `none` removes it).
635
+ (default `round`; `none` removes it). A multi-line operator message keeps its
636
+ `▌` bar on every row.
634
637
 
635
638
  Agent data is stored in `~/.zames`: browser profile, logs, undo history, sessions.
636
639
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zames_pro",
3
- "version": "2.85.0",
3
+ "version": "2.86.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": {