zames_pro 2.82.112 → 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 +12 -0
- package/dist/scheduler.js +8 -3
- package/dist/status-command.js +5 -1
- package/package.json +1 -1
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.114] - 2026-10-24
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **scheduler:** a multi-line job task cannot fake a /jobs line
|
|
15
|
+
|
|
16
|
+
## [2.82.113] - 2026-10-24
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- **status:** a multi-line goal cannot fake a /status line
|
|
21
|
+
|
|
10
22
|
## [2.82.112] - 2026-10-24
|
|
11
23
|
|
|
12
24
|
### 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] ' +
|
|
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 + '] ' +
|
|
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/dist/status-command.js
CHANGED
|
@@ -27,7 +27,11 @@ export function formatStatus(s, t = translate('en')) {
|
|
|
27
27
|
lines.push(t('status.undo', { v: onoff(s.undo) }));
|
|
28
28
|
lines.push(t('status.checkpoint', { v: onoff(s.checkpoint) }));
|
|
29
29
|
lines.push(t('status.transcript', { v: s.transcriptFile || t('common.off') }));
|
|
30
|
-
|
|
30
|
+
// The GOAL is operator text (`/goal <free text>`) and a newline in it would
|
|
31
|
+
// start a new terminal line, faking another status row (`FAKE: hacked`) —
|
|
32
|
+
// one status entry must stay on one line.
|
|
33
|
+
const oneLine = (v) => String(v ?? '').replace(/\s+/g, ' ');
|
|
34
|
+
lines.push(t('status.goal', { v: s.goal ? oneLine(s.goal) : none }));
|
|
31
35
|
lines.push(t('status.locale', { v: s.localeName }));
|
|
32
36
|
lines.push(t('status.mcp', { v: s.mcpToolCount === null ? none : s.mcpToolCount }));
|
|
33
37
|
// A NEGATIVE count is nonsense (a broken provider counter): show "unknown"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zames_pro",
|
|
3
|
-
"version": "2.82.
|
|
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": {
|