@yemi33/minions 0.1.390 → 0.1.392

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
@@ -1,11 +1,15 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.390 (2026-04-06)
3
+ ## 0.1.392 (2026-04-06)
4
4
 
5
5
  ### Features
6
+ - track dashboard version — detect stale dashboard code separately
6
7
  - Replace magic strings in pipeline.js with STAGE_TYPE/PIPELINE_STATUS/MEETING_STATUS constants (#244)
7
8
  - Fix spawn-agent.js direct proc.kill() — use cross-platform helpers (#243)
8
9
 
10
+ ### Fixes
11
+ - show 'minions update' as primary upgrade command in version banner
12
+
9
13
  ## 0.1.388 (2026-04-06)
10
14
 
11
15
  ### Fixes
@@ -215,21 +215,27 @@ function renderVersionBanner(version) {
215
215
  if (!el) return;
216
216
  if (!version) { el.style.display = 'none'; return; }
217
217
 
218
- const v = version.running || version.disk || '?';
219
- const commitLabel = version.runningCommit ? ' (' + version.runningCommit + ')' : '';
220
-
221
- if (version.stale) {
222
- // Engine running old code — needs restart
223
- el.style.cssText = 'font-size:9px;padding:2px 8px;background:rgba(210,153,34,0.15);border:1px solid rgba(210,153,34,0.3);border-radius:4px;color:var(--yellow);cursor:help';
224
- el.textContent = '\u26A0 Engine running v' + (version.running || '?') + ' — disk has v' + (version.disk || '?') + '. Restart to apply.';
225
- el.title = 'The engine process is running older code than what is on disk. Run: minions restart';
218
+ const v = version.dashboardRunning || version.running || version.disk || '?';
219
+ const commitLabel = version.dashboardRunningCommit ? ' (' + version.dashboardRunningCommit + ')' : '';
220
+ const warnStyle = 'font-size:9px;padding:2px 8px;background:rgba(210,153,34,0.15);border:1px solid rgba(210,153,34,0.3);border-radius:4px;color:var(--yellow);cursor:help';
221
+
222
+ if (version.engineStale && version.dashboardStale) {
223
+ el.style.cssText = warnStyle;
224
+ el.textContent = '\u26A0 Engine + Dashboard running old code. Run: minions restart';
225
+ el.title = 'Both processes are running v' + (version.running || '?') + ' but disk has v' + (version.disk || '?');
226
+ } else if (version.engineStale) {
227
+ el.style.cssText = warnStyle;
228
+ el.textContent = '\u26A0 Engine running v' + (version.running || '?') + ' — disk has v' + (version.disk || '?') + '. Restart engine.';
229
+ el.title = 'The engine process is running older code. Run: minions restart';
230
+ } else if (version.dashboardStale) {
231
+ el.style.cssText = warnStyle;
232
+ el.textContent = '\u26A0 Dashboard running v' + (version.dashboardRunning || '?') + ' — disk has v' + (version.disk || '?') + '. Run: minions restart';
233
+ el.title = 'The dashboard process is running older code. Run: minions restart';
226
234
  } else if (version.updateAvailable) {
227
- // New version on npm
228
235
  el.style.cssText = 'font-size:9px;padding:2px 8px;background:rgba(63,185,80,0.1);border:1px solid rgba(63,185,80,0.3);border-radius:4px;color:var(--green);cursor:help';
229
- el.textContent = 'v' + v + commitLabel + ' — v' + version.latest + ' available. Run: npm update -g @yemi33/minions';
230
- el.title = 'A newer version is available on npm';
236
+ el.textContent = 'v' + v + commitLabel + ' — v' + version.latest + ' available. Run: minions update or npm update -g @yemi33/minions';
237
+ el.title = 'A newer version is available on npm. Run minions update to upgrade and restart.';
231
238
  } else {
232
- // Up to date
233
239
  el.style.cssText = 'font-size:9px;color:var(--muted)';
234
240
  el.textContent = 'v' + v + commitLabel;
235
241
  el.title = 'Minions v' + v + (version.latest ? ' (latest)' : '');
package/dashboard.js CHANGED
@@ -10,6 +10,14 @@ const zlib = require('zlib');
10
10
  const fs = require('fs');
11
11
  const path = require('path');
12
12
  const llm = require('./engine/llm');
13
+
14
+ // Dashboard version stamp — captured at module load so it reflects the code actually running
15
+ const _dashboardVersion = {
16
+ codeVersion: (() => { try { return require('./package.json').version; } catch { return null; } })(),
17
+ codeCommit: (() => { try { return require('child_process').execSync('git rev-parse --short HEAD', { cwd: __dirname, encoding: 'utf8', timeout: 5000, windowsHide: true }).trim(); } catch { return null; } })(),
18
+ startedAt: new Date().toISOString(),
19
+ pid: process.pid,
20
+ };
13
21
  const shared = require('./engine/shared');
14
22
  const queries = require('./engine/queries');
15
23
  const os = require('os');
@@ -313,13 +321,20 @@ function getStatus() {
313
321
  version: (() => {
314
322
  const engine = getEngineState();
315
323
  const { diskVersion, diskCommit } = getDiskVersion();
324
+ const engineStale = !!(engine.codeVersion && diskVersion && engine.codeVersion !== diskVersion) ||
325
+ !!(engine.codeCommit && diskCommit && engine.codeCommit !== diskCommit);
326
+ const dashboardStale = !!(diskVersion && _dashboardVersion.codeVersion && diskVersion !== _dashboardVersion.codeVersion) ||
327
+ !!(diskCommit && _dashboardVersion.codeCommit && diskCommit !== _dashboardVersion.codeCommit);
316
328
  return {
317
329
  running: engine.codeVersion || null,
318
330
  runningCommit: engine.codeCommit || null,
331
+ dashboardRunning: _dashboardVersion.codeVersion,
332
+ dashboardRunningCommit: _dashboardVersion.codeCommit,
319
333
  disk: diskVersion,
320
334
  diskCommit,
321
- stale: !!(engine.codeVersion && diskVersion && engine.codeVersion !== diskVersion) ||
322
- !!(engine.codeCommit && diskCommit && engine.codeCommit !== diskCommit),
335
+ engineStale,
336
+ dashboardStale,
337
+ stale: engineStale || dashboardStale,
323
338
  latest: _npmVersionCache?.latest || null,
324
339
  updateAvailable: !!(diskVersion && _npmVersionCache?.latest && _npmVersionCache.latest !== diskVersion && _compareVersions(_npmVersionCache.latest, diskVersion) > 0),
325
340
  };
@@ -3435,15 +3450,22 @@ What would you like to discuss or change? When you're happy, say "approve" and I
3435
3450
  const npm = await checkNpmVersion();
3436
3451
  const { diskVersion, diskCommit } = getDiskVersion();
3437
3452
  const engine = getEngineState();
3453
+ const engineStale = !!(engine.codeVersion && diskVersion && engine.codeVersion !== diskVersion) ||
3454
+ !!(engine.codeCommit && diskCommit && engine.codeCommit !== diskCommit);
3455
+ const dashboardStale = !!(diskVersion && _dashboardVersion.codeVersion && diskVersion !== _dashboardVersion.codeVersion) ||
3456
+ !!(diskCommit && _dashboardVersion.codeCommit && diskCommit !== _dashboardVersion.codeCommit);
3438
3457
  return jsonReply(res, 200, {
3439
3458
  current: diskVersion,
3440
3459
  currentCommit: diskCommit,
3441
- running: engine.codeVersion || null,
3442
- runningCommit: engine.codeCommit || null,
3460
+ engineRunning: engine.codeVersion || null,
3461
+ engineRunningCommit: engine.codeCommit || null,
3462
+ dashboardRunning: _dashboardVersion.codeVersion,
3463
+ dashboardRunningCommit: _dashboardVersion.codeCommit,
3443
3464
  latest: npm.latest,
3444
3465
  updateAvailable: !!(diskVersion && npm.latest && _compareVersions(npm.latest, diskVersion) > 0),
3445
- stale: !!(engine.codeVersion && diskVersion && engine.codeVersion !== diskVersion) ||
3446
- !!(engine.codeCommit && diskCommit && engine.codeCommit !== diskCommit),
3466
+ engineStale,
3467
+ dashboardStale,
3468
+ stale: engineStale || dashboardStale,
3447
3469
  checkedAt: npm.checkedAt,
3448
3470
  });
3449
3471
  }},
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.390",
3
+ "version": "0.1.392",
4
4
  "description": "Multi-agent AI dev team that runs from ~/.minions/ — five autonomous agents share a single engine, dashboard, and knowledge base",
5
5
  "bin": {
6
6
  "minions": "bin/minions.js"