zames_pro 2.82.32 → 2.82.34

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.82.34] - 2026-10-22
11
+
12
+ ### Fixed
13
+
14
+ - **undo:** report no backup when retention is zero
15
+
16
+ ## [2.82.33] - 2026-10-22
17
+
18
+ ### Fixed
19
+
20
+ - **sessions:** show a distant future timestamp as future, not now
21
+
10
22
  ## [2.82.32] - 2026-10-22
11
23
 
12
24
  ### Fixed
package/dist/commands.js CHANGED
@@ -182,7 +182,16 @@ export function formatRelativeTime(iso, t = translate('en'), now = Date.now()) {
182
182
  const then = Date.parse(iso);
183
183
  if (!Number.isFinite(then))
184
184
  return '';
185
- const diff = Math.max(0, now - then);
185
+ // A slightly future timestamp is CLOCK SKEW (a session file copied from a
186
+ // machine with a faster clock, a sub-second rounding) and reads "just now".
187
+ // A DISTANT future date (a corrupted `updatedAt`, a year-9999 value) must
188
+ // not pretend the session was updated now: say it is in the future.
189
+ const skew = now - then;
190
+ if (skew < -24 * 3600 * 1000) {
191
+ const ahead = Math.max(1, Math.floor(-skew / 86_400_000));
192
+ return t('time.in_future', { n: String(ahead) });
193
+ }
194
+ const diff = Math.max(0, skew);
186
195
  const min = Math.floor(diff / 60_000);
187
196
  if (min < 1)
188
197
  return t('time.now');
@@ -165,6 +165,7 @@ export const selfReviewMessages = {
165
165
  'time.min_ago': { ru: '{n} мин назад', en: '{n}m ago' },
166
166
  'time.hour_ago': { ru: '{n} ч назад', en: '{n}h ago' },
167
167
  'time.day_ago': { ru: '{n} дн назад', en: '{n}d ago' },
168
+ 'time.in_future': { ru: 'через {n} дн', en: 'in {n}d' },
168
169
  'sessions.dir': { ru: 'Папка сессий: {v}', en: 'Sessions dir: {v}' },
169
170
  'sessions.none': {
170
171
  ru: 'Сохранённых сессий нет. Они появятся после первой задачи/чата.',
package/dist/undo.js CHANGED
@@ -30,6 +30,12 @@ export class UndoStore {
30
30
  async backup(filePath) {
31
31
  if (!this.enabled)
32
32
  return null;
33
+ // A retention of ZERO means "keep nothing": the record would be pushed and
34
+ // immediately shifted out (with its .bak unlinked) while the caller was
35
+ // told the backup happened — /undo then had nothing to revert. Report
36
+ // honestly that no backup was taken.
37
+ if (this.maxBackups <= 0)
38
+ return null;
33
39
  await this._ensure();
34
40
  let content = null;
35
41
  let existed = false;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zames_pro",
3
- "version": "2.82.32",
3
+ "version": "2.82.34",
4
4
  "description": "Terminal coding agent that drives a real browser to chat with DeepSeek, Qwen and other web LLMs — 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": {