@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.
|
|
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
|
-
|
|
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>' +
|
|
@@ -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="' +
|
|
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="' +
|
|
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="' +
|
|
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.
|
|
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"
|