zames_pro 2.82.76 → 2.82.78

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.78] - 2026-10-24
11
+
12
+ ### Fixed
13
+
14
+ - **qwen:** keep a duplicated chat id once in the chat list
15
+
16
+ ## [2.82.77] - 2026-10-24
17
+
18
+ ### Fixed
19
+
20
+ - **scheduler:** a zero-interval loop no longer fires on every tick
21
+
10
22
  ## [2.82.76] - 2026-10-24
11
23
 
12
24
  ### Fixed
@@ -138,6 +138,10 @@ export function parseQwenChatList(json) {
138
138
  ? arr.map((c) => ['', c])
139
139
  : keyed;
140
140
  const out = [];
141
+ // A payload may list the SAME chat twice (a merged page, an optimistic
142
+ // entry). /chats would then show it twice and resuming the second row opens
143
+ // the same chat — keep the first occurrence only.
144
+ const seenIds = new Set();
141
145
  for (const [key, c] of entries) {
142
146
  if (!c || typeof c !== 'object')
143
147
  continue;
@@ -150,8 +154,9 @@ export function parseQwenChatList(json) {
150
154
  : typeof raw === 'number' && Number.isFinite(raw)
151
155
  ? String(raw)
152
156
  : key;
153
- if (!id)
157
+ if (!id || seenIds.has(id))
154
158
  continue;
159
+ seenIds.add(id);
155
160
  const title = (typeof m.title === 'string' && m.title) ||
156
161
  (typeof m.name === 'string' && m.name) ||
157
162
  '';
package/dist/scheduler.js CHANGED
@@ -258,6 +258,13 @@ export class Scheduler {
258
258
  const missed = Math.floor((now - job.nextAt) / job.intervalMs);
259
259
  job.nextAt = job.nextAt + (missed + 1) * job.intervalMs;
260
260
  }
261
+ else if (job.kind === 'loop') {
262
+ // A loop with a ZERO/missing interval (a hand-edited or restored job)
263
+ // matched neither branch, so `nextAt` was never advanced and the job
264
+ // fired on EVERY 1-second tick. Never fire it again rather than
265
+ // busy-loop the scheduler.
266
+ job.nextAt = Number.POSITIVE_INFINITY;
267
+ }
261
268
  else if (job.cron) {
262
269
  const nxt = nextCronTime(job.cron, now);
263
270
  job.nextAt = nxt === null ? Number.POSITIVE_INFINITY : nxt;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zames_pro",
3
- "version": "2.82.76",
3
+ "version": "2.82.78",
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": {