zames_pro 2.82.113 → 2.82.114

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,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.82.114] - 2026-10-24
11
+
12
+ ### Fixed
13
+
14
+ - **scheduler:** a multi-line job task cannot fake a /jobs line
15
+
10
16
  ## [2.82.113] - 2026-10-24
11
17
 
12
18
  ### Fixed
package/dist/scheduler.js CHANGED
@@ -175,18 +175,23 @@ export function nextCronTime(expr, fromMs) {
175
175
  // One listing line for a job: "#3 [every 10m, next ~5m] run the tests". Pure,
176
176
  // so the /jobs formatting is unit-tested without a live scheduler.
177
177
  export function formatJobLine(job, now) {
178
+ // The TASK and the CRON expression are operator text and must stay on ONE
179
+ // line: a newline would start a new /jobs row and could fake another
180
+ // report's line. Collapse whitespace in both.
181
+ const oneLine = (v) => String(v ?? '').replace(/\s+/g, ' ');
178
182
  const when = job.kind === 'loop'
179
183
  ? 'every ' + formatInterval(job.intervalMs || 0)
180
- : job.cron || '';
184
+ : oneLine(job.cron || '');
185
+ const task = oneLine(job.task);
181
186
  // A cron job whose next fire could not be computed stores Infinity (see
182
187
  // due()). "next ~-" (formatInterval maps a non-finite value to '-') read
183
188
  // like a normal schedule, so the job looked healthy while it could never
184
189
  // fire again.
185
190
  if (!Number.isFinite(job.nextAt)) {
186
- return ' #' + job.id + ' [' + when + ', NEVER fires again] ' + job.task;
191
+ return ' #' + job.id + ' [' + when + ', NEVER fires again] ' + task;
187
192
  }
188
193
  const nextIn = formatInterval(Math.max(0, job.nextAt - now));
189
- return ' #' + job.id + ' [' + when + ', next ~' + nextIn + '] ' + job.task;
194
+ return ' #' + job.id + ' [' + when + ', next ~' + nextIn + '] ' + task;
190
195
  }
191
196
  // Holds the scheduled jobs. Pure: no timers here. index.ts drives it with a
192
197
  // 1-second tick and enqueues the tasks that `due()` returns.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zames_pro",
3
- "version": "2.82.113",
3
+ "version": "2.82.114",
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": {