zames_pro 2.1.1 → 2.1.3

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/dist/index.js CHANGED
@@ -51,15 +51,15 @@ const chatIdArg = getArg('--chat', null);
51
51
  // переотправляется (он уже есть в начале чата). Флаг --resend-prompt
52
52
  // заставляет дослать его заново — например, если промпт обновился.
53
53
  const resendPrompt = hasFlag('--resend-prompt');
54
- // --new-chat: намеренно начать с чистого чата, игнорируя сохранённую сессию.
55
- // --resume-last: оставлен для совместимости (восстановление и так по умолчанию).
56
- // По умолчанию последняя сессия для рабочей директории восстанавливается.
54
+ // По умолчанию при старте начинается НОВЫЙ чат (контекст не тянется).
55
+ // --resume-last: вернуться в последнюю сессию для рабочей директории.
56
+ // --new-chat: оставлен для совместимости — это и так поведение по умолчанию.
57
57
  const newChatFlag = hasFlag('--new-chat');
58
58
  const resumeLastFlag = hasFlag('--resume-last');
59
59
  // ---------- session persistence ----------
60
60
  // Сессии (чаты DeepSeek) храним в ~/.zames/.sessions, чтобы они переживали
61
- // перезапуск процесса. При старте из той же рабочей директории последняя
62
- // сессия восстанавливается автоматически (если не передан --new-chat).
61
+ // перезапуск и были доступны для явного восстановления (--resume-last,
62
+ // --chat <id>, /resume <n>). Автоматически при старте они НЕ поднимаются.
63
63
  // Раньше здесь был один файл last-chat.json, который терялся при смене
64
64
  // проекта и не давал списка сессий для восстановления.
65
65
  function saveLastChat(id, workdir = '', title = '') {
@@ -168,8 +168,8 @@ ${theme.bold('Опции CLI:')}
168
168
  --dir <path> рабочая директория агента
169
169
  --task <text> задача одной строкой
170
170
  --chat <id> продолжить существующий чат по id
171
- --resume-last вернуться в последний сохранённый чат (по умолчанию)
172
- --new-chat начать новый чат, не восстанавливать сессию
171
+ --resume-last вернуться в последний сохранённый чат
172
+ --new-chat начать новый чат (поведение по умолчанию)
173
173
  --resend-prompt дослать system-prompt в существующий чат
174
174
  --max-iter <n> лимит итераций (по умолчанию ${config.maxIterations})
175
175
  --headless браузер без UI
@@ -724,10 +724,10 @@ async function main() {
724
724
  const tools = mod.createTools(currentWorkdir, { undo });
725
725
  let freshChat = true;
726
726
  let sendSystemPrompt = true;
727
- // По умолчанию восстанавливаем последнюю сессию для этой директории.
728
- // Начать с чистого листа — --new-chat.
727
+ // По умолчанию начинаем новый чат. Продолжить прошлую сессию —
728
+ // явно: --chat <id> или --resume-last.
729
729
  let resumeId = chatIdArg;
730
- if (!resumeId && !newChatFlag) {
730
+ if (!resumeId && resumeLastFlag && !newChatFlag) {
731
731
  const last = loadLastSession(currentWorkdir);
732
732
  if (last && last.id) {
733
733
  resumeId = last.id;
@@ -786,14 +786,13 @@ async function main() {
786
786
  console.log(theme.system('\nВыход.'));
787
787
  process.exit(0);
788
788
  });
789
- // Восстановление сессии при старте. По умолчанию возвращаемся в последний
790
- // чат для этой рабочей директории (сессии лежат в ~/.zames/.sessions),
791
- // чтобы контекст не терялся после перезапуска. Явно начать с чистого листа
792
- // можно флагом --new-chat.
789
+ // По умолчанию при старте начинаем НОВЫЙ чат: контекст прошлой сессии
790
+ // не тянется автоматически. Продолжить прошлую сессию можно явно:
793
791
  // --chat <id> открыть конкретный чат
794
- // --new-chat не восстанавливать, начать новый чат
792
+ // --resume-last вернуться в последний чат для этой рабочей директории
793
+ // --new-chat оставлен для совместимости (это и так поведение по умолчанию)
795
794
  let resumeId = chatIdArg;
796
- if (!resumeId && !newChatFlag) {
795
+ if (!resumeId && resumeLastFlag && !newChatFlag) {
797
796
  const last = loadLastSession(currentWorkdir);
798
797
  if (last && last.id) {
799
798
  resumeId = last.id;
package/dist/input.js CHANGED
@@ -18,7 +18,10 @@ const CR = String.fromCharCode(13);
18
18
  const ESC = String.fromCharCode(27);
19
19
  const PASTE_START = ESC + '[200~';
20
20
  const PASTE_END = ESC + '[201~';
21
- const DOTS = ['.', '..', '...'];
21
+ // Анимация точек: старт с пустой строки (0 точек), затем рост.
22
+ // Ширину выравниваем по максимуму (3), чтобы подсказка не смещалась.
23
+ const DOTS = ['', '.', '..', '...'];
24
+ const DOTS_PAD = ' ';
22
25
  const HINT = theme.dim(' · Enter — отправить, Ctrl+J — новая строка, Esc — стоп');
23
26
  function safeJson(v) {
24
27
  try {
@@ -216,6 +219,11 @@ export class LineEditor {
216
219
  this._dotTimer = null;
217
220
  }
218
221
  }
222
+ _dots(n) {
223
+ // Точки того же цвета, что и база, и фиксированной ширины — иначе
224
+ // подсказка справа «прыгает» при смене фазы анимации.
225
+ return theme.brown(DOTS[n] + DOTS_PAD.slice(DOTS[n].length));
226
+ }
219
227
  _startThinking() {
220
228
  if (this.pendingText) {
221
229
  this.setStatus(theme.prompt('✎ ') + this.pendingText + HINT);
@@ -223,11 +231,11 @@ export class LineEditor {
223
231
  }
224
232
  this._thinkBase = theme.brown(stripEllipsis(randomThinkingPhrase()));
225
233
  this._dotPhase = 0;
226
- this.setStatus(this._thinkBase + DOTS[0] + HINT);
234
+ this.setStatus(this._thinkBase + this._dots(0) + HINT);
227
235
  this._stopDots();
228
236
  this._dotTimer = setInterval(() => {
229
237
  this._dotPhase = (this._dotPhase + 1) % DOTS.length;
230
- this.setStatus(this._thinkBase + DOTS[this._dotPhase] + HINT);
238
+ this.setStatus(this._thinkBase + this._dots(this._dotPhase) + HINT);
231
239
  }, 400);
232
240
  if (this._dotTimer.unref)
233
241
  this._dotTimer.unref();
package/dist/spinner.js CHANGED
@@ -46,7 +46,10 @@ export function createSpinner() {
46
46
  let dotTimer = null;
47
47
  let dotPhase = 0;
48
48
  let pending = null;
49
- const DOTS = ['.', '..', '...'];
49
+ // Анимация точек: старт с пустой строки (0 точек), затем рост.
50
+ // Ширину выравниваем по максимуму (3), чтобы подсказка не смещалась.
51
+ const DOTS = ['', '.', '..', '...'];
52
+ const DOTS_PAD = ' ';
50
53
  const start = (text) => {
51
54
  if (!spinner)
52
55
  spinner = ora(text).start();
@@ -67,7 +70,10 @@ export function createSpinner() {
67
70
  // Запуск анимированного статуса: коричневый текст + «бегущие» точки.
68
71
  const startThinking = () => {
69
72
  const base = theme.brown(stripEllipsis(randomThinkingPhrase()));
70
- start(base + DOTS[0] + HINT);
73
+ // Точки того же цвета, что и база, и фиксированной ширины — иначе
74
+ // подсказка справа «прыгает» при смене фазы анимации.
75
+ const dots = (n) => theme.brown(DOTS[n] + DOTS_PAD.slice(DOTS[n].length));
76
+ start(base + dots(0) + HINT);
71
77
  dotPhase = 0;
72
78
  if (dotTimer)
73
79
  clearInterval(dotTimer);
@@ -75,7 +81,7 @@ export function createSpinner() {
75
81
  if (!spinner)
76
82
  return;
77
83
  dotPhase = (dotPhase + 1) % DOTS.length;
78
- spinner.text = base + DOTS[dotPhase] + HINT;
84
+ spinner.text = base + dots(dotPhase) + HINT;
79
85
  }, 400);
80
86
  if (dotTimer.unref)
81
87
  dotTimer.unref();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zames_pro",
3
- "version": "2.1.1",
3
+ "version": "2.1.3",
4
4
  "description": "Terminal coding agent over chat.deepseek.com via Playwright",
5
5
  "type": "module",
6
6
  "bin": {