@yemi33/minions 0.1.688 → 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.688 (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
@@ -12,6 +13,7 @@
12
13
  - link work item artifacts to KB entries, not raw archive copies
13
14
 
14
15
  ### Other
16
+ - simplify: deduplicate backFn — reuse artBackFn for note pills
15
17
  - refactor: remove dead stageFlow code from pipeline card rendering
16
18
 
17
19
  ## 0.1.683 (2026-04-09)
@@ -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>' +
@@ -458,22 +458,20 @@ function openWorkItemDetail(id) {
458
458
  if (arts.prd) artPills += '<span onclick="' + artBackFn + 'planView(\'' + escHtml(arts.prd) + '\')" style="' + pillStyle + '">📄 PRD</span> ';
459
459
  if (arts.sourcePlan) artPills += '<span onclick="' + artBackFn + 'planView(\'' + escHtml(arts.sourcePlan) + '\')" style="' + pillStyle + '">📋 Source Plan</span> ';
460
460
  if (arts.notes && arts.notes.length > 0) {
461
- var wiId = escHtml(item.id);
462
461
  arts.notes.forEach(function(n) {
463
462
  var noteFile = (n && typeof n === 'object') ? (n.file || n) : String(n || '');
464
- var backFn = "pushModalBack(function(){openWorkItemDetail('" + wiId + "')});";
465
463
  if (noteFile.startsWith('kb:')) {
466
464
  var kbParts = noteFile.slice(3).split('/');
467
465
  var kbCat = kbParts[0];
468
466
  var kbFile = kbParts.slice(1).join('/');
469
467
  var kbLabel = kbFile.replace(/\.md$/, '').slice(0, 30);
470
- artPills += '<span onclick="' + backFn + 'kbOpenItem(\'' + escHtml(kbCat) + '\',\'' + escHtml(kbFile) + '\')" style="' + pillStyle + '">📚 ' + escHtml(kbLabel) + '</span> ';
468
+ artPills += '<span onclick="' + artBackFn + 'kbOpenItem(\'' + escHtml(kbCat) + '\',\'' + escHtml(kbFile) + '\')" style="' + pillStyle + '">📚 ' + escHtml(kbLabel) + '</span> ';
471
469
  } else if (noteFile.startsWith('archive:')) {
472
470
  var archLabel = noteFile.slice(8).replace(/\.md$/, '').replace(/^\d{4}-\d{2}-\d{2}-/, '').slice(0, 30);
473
- artPills += '<span onclick="' + backFn + 'openInboxNote(\'' + escHtml(noteFile.slice(8)) + '\')" style="' + pillStyle + ';opacity:0.7">📄 ' + escHtml(archLabel) + ' <span style="font-size:8px">(archived)</span></span> ';
471
+ artPills += '<span onclick="' + artBackFn + 'openInboxNote(\'' + escHtml(noteFile.slice(8)) + '\')" style="' + pillStyle + ';opacity:0.7">📄 ' + escHtml(archLabel) + ' <span style="font-size:8px">(archived)</span></span> ';
474
472
  } else {
475
473
  var noteLabel = noteFile.replace(/\.md$/, '').slice(0, 30);
476
- artPills += '<span onclick="' + backFn + 'openInboxNote(\'' + escHtml(noteFile) + '\')" style="' + pillStyle + '">📝 ' + escHtml(noteLabel) + '</span> ';
474
+ artPills += '<span onclick="' + artBackFn + 'openInboxNote(\'' + escHtml(noteFile) + '\')" style="' + pillStyle + '">📝 ' + escHtml(noteLabel) + '</span> ';
477
475
  }
478
476
  });
479
477
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.688",
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"