@yemi33/minions 0.1.1153 → 0.1.1155

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,5 +1,56 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.1155 (2026-04-18)
4
+
5
+ ### Features
6
+ - redact ADO tokens and JWTs from engine/log.json writes (#1297)
7
+ - SEC-02 — replace curl shell-out in ado.js with adoFetch (#1296)
8
+ - validate project name and path on POST /api/projects/add (SEC-04, SEC-05) (#1298)
9
+ - seed realActivityMap at spawn time, stamp pid in live-output (#1200)
10
+
11
+ ### Fixes
12
+ - prevent archived plans from re-triggering via orphaned .backup restore
13
+ - pinned context optimistic save (closes #1295) (#1316)
14
+ - re-check throttle state per-PR iteration to avoid stale fixThrottled
15
+ - preserve buildErrorLog through transient states, persist poll time (#1273)
16
+ - auto-fetch PR title on link-pr (closes #1283) (#1299)
17
+ - scheduler double-fire within same cron minute (#1277)
18
+ - gate auto-fix dispatch on throttle state to prevent stale-data spurious fixes
19
+ - preserve buildErrorLog through transient build states (#1232) (#1274)
20
+ - annotate fast-exit empty-output failures with diagnostic hint (#1276)
21
+ - invalidate PRD cache on pr-links.json change + guard aggregate PRs (#1220) (#1272)
22
+ - pass --add-dir for minions + ~/.claude to agents (#1271)
23
+ - preserve VERDICT marker by tail-slicing agent output (#1234) (#1270)
24
+ - PRD info cache staleness and aggregate PR bleed-through (#1222)
25
+ - avoid no-op work item writes
26
+ - resilient claude binary resolution + surface spawn errors
27
+ - resolve native claude.exe from npm wrapper on Windows
28
+ - cap temp-agent creation at maxConcurrent per tick (#1219)
29
+ - reassign pending items from unspawned temp agents to idle named agents (#1204) (#1212)
30
+ - guard undefined agent in pending dispatch loop (closes #1206) (#1210)
31
+ - improve fallback meeting conclusion
32
+
33
+ ### Other
34
+ - refactor: hoist fixThrottled before PR loop and drop underscore prefix
35
+ - docs(skill): add substitute-scheduler-template-vars (#1278)
36
+ - Clarify PR poll labels
37
+ - Prevent modal opens on text selection
38
+ - refactor: clarify settings page section structure and PR polling dependencies
39
+ - refactor: extract _probeClaudePackage helper, use shared.log for spawn errors
40
+ - Make work item descriptions scrollable
41
+ - Use PAT for publish merges
42
+ - test(queries): add unit tests for invalidateDispatchCache/getInbox/getAgentCharter (#1214)
43
+ - test(shared): add unit tests for truncateTextBytes/tailTextBytes/execSilent/trackReviewMetric/parseCanonicalPrId (#1215)
44
+ - Fix publish workflow merge
45
+ - chore: raise default meeting round timeout
46
+ - Harden prompt context handling
47
+ - Harden loop watch conversion
48
+ - Add watches sidebar activity badge
49
+ - test(cli): add unit tests for handleCommand, start, stop, kill, spawn (#1191)
50
+ - chore: untrack pipeline files — local config only
51
+ - restore: recover daily-arch-improvement and weekly-dead-code-cleanup pipelines
52
+ - Harden CC stream resilience
53
+
3
54
  ## 0.1.1153 (2026-04-18)
4
55
 
5
56
  ### Features
@@ -355,8 +355,12 @@ function archivePlan(planFile, plan, projects, config) {
355
355
  // Remove .backup sidecar — if left behind, safeJson() would restore the pre-completion
356
356
  // snapshot (status: approved, no _completionNotified) on engine restart, re-triggering
357
357
  // plan completion and spawning duplicate verify tasks for already-archived plans.
358
+ // On Windows, the unlink can fail due to file locking; overwrite with archived status
359
+ // as a fallback so a restored backup is inert even if deletion fails.
358
360
  const backupPath = planPath + '.backup';
359
- if (fs.existsSync(backupPath)) fs.unlinkSync(backupPath);
361
+ try { fs.unlinkSync(backupPath); } catch {
362
+ try { fs.writeFileSync(backupPath, JSON.stringify({ status: 'archived' })); } catch { }
363
+ }
360
364
  } catch (err) {
361
365
  log('warn', `Failed to archive PRD ${planFile}: ${err.message}`);
362
366
  }
package/engine.js CHANGED
@@ -3130,6 +3130,13 @@ async function discoverWork(config) {
3130
3130
  if (fs.existsSync(prdDir)) {
3131
3131
  for (const f of fs.readdirSync(prdDir).filter(f => f.endsWith('.json'))) {
3132
3132
  if (completedPlanCache.has(f)) continue;
3133
+ if (fs.existsSync(path.join(prdDir, 'archive', f))) {
3134
+ // Orphaned backup restore — plan is already archived. Purge the ghost copy.
3135
+ try { fs.unlinkSync(path.join(prdDir, f)); } catch { }
3136
+ try { fs.unlinkSync(path.join(prdDir, f + '.backup')); } catch { }
3137
+ completedPlanCache.add(f);
3138
+ continue;
3139
+ }
3133
3140
  const plan = safeJson(path.join(prdDir, f));
3134
3141
  if (!plan?.missing_features || plan.status === 'completed') {
3135
3142
  if (plan?.status === 'completed') completedPlanCache.add(f);
@@ -3309,6 +3316,13 @@ async function tickInner() {
3309
3316
  const prdFiles = safeReadDir(PRD_DIR).filter(f => f.endsWith('.json'));
3310
3317
  for (const file of prdFiles) {
3311
3318
  if (completedPlanCache.has(file)) continue;
3319
+ if (fs.existsSync(path.join(PRD_DIR, 'archive', file))) {
3320
+ // Orphaned backup restore — plan is already archived. Purge the ghost copy.
3321
+ try { fs.unlinkSync(path.join(PRD_DIR, file)); } catch { }
3322
+ try { fs.unlinkSync(path.join(PRD_DIR, file + '.backup')); } catch { }
3323
+ completedPlanCache.add(file);
3324
+ continue;
3325
+ }
3312
3326
  const plan = safeJson(path.join(PRD_DIR, file));
3313
3327
  if (plan && plan.missing_features && plan.status !== 'completed') {
3314
3328
  const completed = checkPlanCompletion({ item: { sourcePlan: file } }, config);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.1153",
3
+ "version": "0.1.1155",
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"