@yemi33/minions 0.1.689 → 0.1.690

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,8 +1,9 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.689 (2026-04-09)
3
+ ## 0.1.690 (2026-04-09)
4
4
 
5
5
  ### Features
6
+ - Re-execute button for plans with existing awaiting-approval PRD
6
7
  - PR review/fix cycle pipeline, fix node rendering for never-run pipelines
7
8
  - modal back button for artifact navigation
8
9
  - collapsible doc-chat thread in modal
@@ -208,11 +208,20 @@ function renderPlans(plans) {
208
208
  let actions = '';
209
209
  if (needsAction) {
210
210
  const actionTarget = prdFile || p.file;
211
- const actionLabel = effectiveStatus === 'paused' ? 'Resume' : 'Approve';
212
- actions = '<div class="plan-card-actions" onclick="event.stopPropagation()">' +
213
- '<button class="plan-btn approve" onclick="planApprove(\'' + escHtml(actionTarget) + '\')">' + actionLabel + '</button>' +
214
- '<button class="plan-btn reject" onclick="planReject(\'' + escHtml(actionTarget) + '\')">Reject</button>' +
215
- '</div>';
211
+ // For awaiting-approval: show Execute (re-generate PRD from updated plan) + Approve (use current PRD as-is)
212
+ if (effectiveStatus === 'awaiting-approval' && isDraft && prdFile) {
213
+ actions = '<div class="plan-card-actions" onclick="event.stopPropagation()">' +
214
+ '<button class="plan-btn approve" onclick="planExecute(\'' + escHtml(p.file) + '\',\'' + escHtml(p.project || '') + '\',this)">Re-execute</button>' +
215
+ '<button class="plan-btn approve" style="opacity:0.7" onclick="planApprove(\'' + escHtml(actionTarget) + '\')">Approve as-is</button>' +
216
+ '<button class="plan-btn reject" onclick="planReject(\'' + escHtml(actionTarget) + '\')">Reject</button>' +
217
+ '</div>';
218
+ } else {
219
+ const actionLabel = effectiveStatus === 'paused' ? 'Resume' : 'Approve';
220
+ actions = '<div class="plan-card-actions" onclick="event.stopPropagation()">' +
221
+ '<button class="plan-btn approve" onclick="planApprove(\'' + escHtml(actionTarget) + '\')">' + actionLabel + '</button>' +
222
+ '<button class="plan-btn reject" onclick="planReject(\'' + escHtml(actionTarget) + '\')">Reject</button>' +
223
+ '</div>';
224
+ }
216
225
  } else if (isRevision) {
217
226
  actions = '<div class="plan-card-meta" style="margin-top:6px;color:var(--purple,#a855f7)">Revision in progress: ' + escHtml((p.revisionFeedback || '').slice(0, 100)) + '</div>';
218
227
  }
@@ -441,8 +450,11 @@ function _renderPlanModal(normalizedFile, raw, lastMod) {
441
450
  const prdCompleted = prdConversion && linkedPrd && linkedPrd.status === 'completed';
442
451
  const linkedPrdAwaiting = linkedPrd && (linkedPrd.status === 'awaiting-approval' || linkedPrd.status === 'paused');
443
452
  const modalShowResume = isPaused || linkedPrdAwaiting;
444
- const modalExecuteBtn = isMdPlan && !modalShowResume && !hasActiveWork && !prdCompleted && !hasPrd ? '<button class="pr-pager-btn" style="font-size:10px;padding:2px 10px;color:var(--green);font-weight:600" ' +
453
+ const canExecute = isMdPlan && !hasActiveWork && !prdCompleted;
454
+ const modalExecuteBtn = canExecute && !hasPrd ? '<button class="pr-pager-btn" style="font-size:10px;padding:2px 10px;color:var(--green);font-weight:600" ' +
445
455
  'onclick="planExecute(\'' + escHtml(normalizedFile) + '\',\'\',this)">Execute</button>' : '';
456
+ const modalReExecuteBtn = canExecute && linkedPrdAwaiting ? '<button class="pr-pager-btn" style="font-size:10px;padding:2px 10px;color:var(--green);font-weight:600" ' +
457
+ 'onclick="planExecute(\'' + escHtml(normalizedFile) + '\',\'\',this)">Re-execute</button>' : '';
446
458
  const modalCompletedLabel = prdCompleted && !hasActiveWork ? '<span style="font-size:10px;color:var(--green);font-weight:600">Completed</span>' : '';
447
459
  const modalAwaitingLabel = linkedPrdAwaiting && !hasActiveWork && !prdCompleted ? '<span style="font-size:10px;color:var(--yellow);font-weight:600">Awaiting Approval</span>' : '';
448
460
  const modalInProgressLabel = hasActiveWork ? '<span style="font-size:10px;color:var(--blue)">In Progress</span>' : '';
@@ -465,7 +477,7 @@ function _renderPlanModal(normalizedFile, raw, lastMod) {
465
477
  'onclick="planArchive(\'' + escHtml(normalizedFile) + '\')">Archive</button>';
466
478
  const lastModLabel = lastMod ? '<div style="font-size:10px;color:var(--muted);font-weight:400;margin-top:2px">Last updated: ' + new Date(lastMod).toLocaleString() + '</div>' : '';
467
479
  const actionBtns = '<div style="display:flex;gap:4px;flex-wrap:wrap;margin-top:4px">' +
468
- (modalCompletedLabel || '') + (modalAwaitingLabel || '') + (modalInProgressLabel || '') + (modalExecuteBtn || '') + (modalPauseBtn || '') + (modalResumeBtn || '') + (modalVerifyBtn || '') + (modalVerifyInfo || '') +
480
+ (modalCompletedLabel || '') + (modalAwaitingLabel || '') + (modalInProgressLabel || '') + (modalReExecuteBtn || '') + (modalExecuteBtn || '') + (modalPauseBtn || '') + (modalResumeBtn || '') + (modalVerifyBtn || '') + (modalVerifyInfo || '') +
469
481
  ' ' + modalArchiveBtn +
470
482
  ' <button class="pr-pager-btn" style="font-size:10px;padding:2px 10px;color:var(--red)" ' +
471
483
  'onclick="planDelete(\'' + escHtml(normalizedFile) + '\')">Delete</button>' +
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.689",
3
+ "version": "0.1.690",
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"