@yemi33/minions 0.1.825 → 0.1.827

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,13 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.825 (2026-04-11)
3
+ ## 0.1.827 (2026-04-11)
4
4
 
5
5
  ### Features
6
6
  - stale PRD shows Regenerate PRD + Resume as-is buttons
7
7
 
8
8
  ### Fixes
9
+ - hide plan card action buttons when stale banner is showing
10
+ - hide conflicting action buttons when stale PRD banner is showing
9
11
  - diff-aware plan-to-prd triggered by Resume, not auto-dispatch
10
12
 
11
13
  ## 0.1.823 (2026-04-11)
@@ -210,8 +210,10 @@ function renderPlans(plans) {
210
210
  const isDraft = p.format === 'draft' && !isCompleted;
211
211
  // For .md drafts: show Execute only if no PRD exists yet (not already executed)
212
212
 
213
+ const isStale = p.planStale && !isArchived;
214
+
213
215
  let actions = '';
214
- if (needsAction) {
216
+ if (needsAction && !isStale) {
215
217
  const actionTarget = prdFile || p.file;
216
218
  // For awaiting-approval: show Execute (re-generate PRD from updated plan) + Approve (use current PRD as-is)
217
219
  if (effectiveStatus === 'awaiting-approval' && isDraft && prdFile) {
@@ -30,8 +30,9 @@ function renderPrd(prd, prog) {
30
30
  const prdStatus = existing[0]?.status || '';
31
31
  const effectiveStatus = allDone && !hasActive ? 'completed' : hasActive ? 'dispatched' : prdStatus || 'active';
32
32
 
33
+ const headerStale = existing[0]?.planStale || prdItems.some(i => i.planStale);
33
34
  let actions = '';
34
- if (prdFile) {
35
+ if (prdFile && !headerStale) {
35
36
  if (effectiveStatus === 'awaiting-approval') {
36
37
  actions = ' <button class="pr-pager-btn" style="font-size:9px;padding:1px 6px;color:var(--green);border-color:var(--green);margin-left:4px" onclick="planApprove(\'' + escHtml(prdFile) + '\',this)">Approve</button>';
37
38
  } else if (effectiveStatus === 'completed') {
@@ -275,14 +276,16 @@ function renderPrdProgress(prog) {
275
276
  '</div>'
276
277
  : '';
277
278
  const isCompleted = done > 0 && done === g.items.length;
278
- const pauseResumeBtn = isAwaitingApproval
279
+ // Hide regular action buttons when stale banner is showing — stale banner has its own actions
280
+ const isStale = !isBlocked && g.planStale;
281
+ const pauseResumeBtn = isStale ? '' : isAwaitingApproval
279
282
  ? '<span onclick="event.stopPropagation();planApprove(\'' + escHtml(g.file) + '\',this)" style="color:var(--green);cursor:pointer;font-size:9px;padding:1px 6px;background:rgba(63,185,80,0.1);border:1px solid rgba(63,185,80,0.3);border-radius:3px">Approve</span>'
280
283
  : isPaused
281
284
  ? '<span onclick="event.stopPropagation();planApprove(\'' + escHtml(g.file) + '\',this)" style="color:var(--green);cursor:pointer;font-size:9px;padding:1px 6px;background:rgba(63,185,80,0.1);border:1px solid rgba(63,185,80,0.3);border-radius:3px">Resume</span>'
282
285
  : isCompleted && !(window._lastWorkItems || []).some(w => w.itemType === 'verify' && w.sourcePlan === g.file)
283
286
  ? '<span onclick="event.stopPropagation();triggerVerify(\'' + escHtml(g.file) + '\',this)" style="color:var(--green);cursor:pointer;font-size:9px;padding:1px 6px;background:rgba(63,185,80,0.1);border:1px solid rgba(63,185,80,0.3);border-radius:3px">Verify</span>'
284
287
  : isCompleted ? '' : '<span onclick="event.stopPropagation();planPause(\'' + escHtml(g.file) + '\',this)" style="color:var(--yellow);cursor:pointer;font-size:9px;padding:1px 6px;background:rgba(210,153,34,0.1);border:1px solid rgba(210,153,34,0.3);border-radius:3px">Pause</span>';
285
- const archiveBtn = (isCompleted || isPaused) ? '<span onclick="event.stopPropagation();planArchive(\'' + escHtml(g.file) + '\',this)" style="color:var(--muted);cursor:pointer;font-size:9px;padding:1px 6px;background:rgba(139,148,158,0.1);border:1px solid rgba(139,148,158,0.3);border-radius:3px">Archive</span>' : '';
288
+ const archiveBtn = (!isStale && (isCompleted || isPaused)) ? '<span onclick="event.stopPropagation();planArchive(\'' + escHtml(g.file) + '\',this)" style="color:var(--muted);cursor:pointer;font-size:9px;padding:1px 6px;background:rgba(139,148,158,0.1);border:1px solid rgba(139,148,158,0.3);border-radius:3px">Archive</span>' : '';
286
289
  const deleteBtn = '<span onclick="event.stopPropagation();planDelete(\'' + escHtml(g.file) + '\')" style="color:var(--red);cursor:pointer;font-size:9px;padding:1px 6px;background:rgba(248,81,73,0.1);border:1px solid rgba(248,81,73,0.3);border-radius:3px">Delete</span>';
287
290
  const sourcePlanLink = g.sourcePlan
288
291
  ? '<span onclick="event.stopPropagation();planView(\'' + escHtml(g.sourcePlan) + '\')" style="color:var(--blue);cursor:pointer;font-size:9px;padding:1px 6px;background:rgba(56,139,253,0.1);border:1px solid rgba(56,139,253,0.3);border-radius:3px" title="View source plan">&#x1F4C4; Plan</span>'
package/dashboard.js CHANGED
@@ -2074,6 +2074,7 @@ If nothing to do: { "duplicates": [], "reclassify": [], "remove": [] }`;
2074
2074
  sourcePlan: plan.source_plan || null,
2075
2075
  archiveReady: plan._archiveReady || false,
2076
2076
  archiveReadyAt: plan._archiveReadyAt || null,
2077
+ planStale: plan.planStale || false,
2077
2078
  });
2078
2079
  } catch { /* JSON parse fallback */ }
2079
2080
  } else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.825",
3
+ "version": "0.1.827",
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"