@yemi33/minions 0.1.689 → 0.1.691
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 +3 -1
- package/dashboard/js/render-plans.js +30 -12
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.691 (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
|
|
9
10
|
|
|
10
11
|
### Fixes
|
|
12
|
+
- show E2E PR + testing guide in verify badge, improve PR matching
|
|
11
13
|
- add archive fallback for artifact notes when KB entry was swept
|
|
12
14
|
- link work item artifacts to KB entries, not raw archive copies
|
|
13
15
|
|
|
@@ -208,11 +208,20 @@ function renderPlans(plans) {
|
|
|
208
208
|
let actions = '';
|
|
209
209
|
if (needsAction) {
|
|
210
210
|
const actionTarget = prdFile || p.file;
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
'<
|
|
214
|
-
|
|
215
|
-
|
|
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
|
|
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>' +
|
|
@@ -698,12 +710,18 @@ async function planRegeneratePRD(source) {
|
|
|
698
710
|
function _renderVerifyBadge(verifyWi) {
|
|
699
711
|
const statusColors = { pending: 'var(--muted)', dispatched: 'var(--blue)', done: 'var(--green)', failed: 'var(--red)' };
|
|
700
712
|
const color = statusColors[verifyWi.status] || 'var(--muted)';
|
|
701
|
-
const label = verifyWi.status === 'dispatched' ? 'Verifying...' : verifyWi.status === 'done' ? 'Verified' : verifyWi.status === 'failed' ? 'Verify failed' : 'Verify pending';
|
|
713
|
+
const label = verifyWi.status === 'dispatched' ? 'Verifying...' : verifyWi.status === 'done' ? '\u2714 Verified' : verifyWi.status === 'failed' ? 'Verify failed' : 'Verify pending';
|
|
714
|
+
// E2E PR — check by prdItems, branch, or title
|
|
702
715
|
const allPrs = (window._lastStatus?.pullRequests) || [];
|
|
703
|
-
const
|
|
704
|
-
const
|
|
705
|
-
const
|
|
706
|
-
|
|
716
|
+
const planFile = verifyWi.sourcePlan || '';
|
|
717
|
+
const planSlug = planFile.replace('.json', '');
|
|
718
|
+
const verifyPr = allPrs.find(pr => (pr.prdItems || []).includes(verifyWi.id) || (pr.branch && pr.branch.includes(planSlug) && (pr.title || '').includes('[E2E]')));
|
|
719
|
+
const prLink = verifyPr?.url ? ' <a href="' + escHtml(verifyPr.url) + '" target="_blank" onclick="event.stopPropagation()" style="color:var(--blue);text-decoration:underline;font-size:9px">' + escHtml(verifyPr.id || 'E2E PR') + '</a>' : '';
|
|
720
|
+
// Testing guide
|
|
721
|
+
const guides = window._lastStatus?.verifyGuides || [];
|
|
722
|
+
const guide = guides.find(g => g.planFile === planFile);
|
|
723
|
+
const guideLink = guide ? ' <span onclick="event.stopPropagation();openVerifyGuide(\'' + escHtml(guide.file) + '\')" style="color:var(--green);cursor:pointer;text-decoration:underline;font-size:9px">Testing Guide</span>' : '';
|
|
724
|
+
return '<span style="font-size:9px;font-weight:600;color:' + color + ';padding:0 4px">' + label + '</span>' + prLink + guideLink;
|
|
707
725
|
}
|
|
708
726
|
|
|
709
727
|
async function openVerifyGuide(file) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.691",
|
|
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"
|