@yemi33/minions 0.1.359 → 0.1.361
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-prd.js +14 -7
- package/engine/lifecycle.js +12 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.361 (2026-04-06)
|
|
4
4
|
|
|
5
5
|
### Features
|
|
6
6
|
- pipeline plan stage uses LLM to generate structured plan from meeting
|
|
7
7
|
- show 'Converting to PRD' status instead of 'In Progress' during plan conversion
|
|
8
8
|
|
|
9
9
|
### Fixes
|
|
10
|
+
- archived PRD picker uses file key instead of positional index
|
|
11
|
+
- check pull-requests.json for existing PRs before no-PR retry
|
|
10
12
|
- smart no-PR handling — distinguish MCP stall from intentional no-PR
|
|
11
13
|
|
|
12
14
|
## 0.1.356 (2026-04-06)
|
|
@@ -148,8 +148,11 @@ function renderPrdProgress(prog) {
|
|
|
148
148
|
|
|
149
149
|
// Linked work item info
|
|
150
150
|
const wi = wiById[i.id];
|
|
151
|
+
const wiAgent = wi?.dispatched_to ? (agentData.find(a => a.id === wi.dispatched_to) || {}) : null;
|
|
151
152
|
const wiLabel = wi ? '<span style="font-size:9px;color:var(--muted);background:var(--surface);padding:1px 5px;border-radius:3px;border:1px solid var(--border)" title="Work item: ' + escHtml(wi.id) + '">' +
|
|
152
|
-
escHtml(wi.id) +
|
|
153
|
+
escHtml(wi.id) + '</span>' : '';
|
|
154
|
+
const agentLabel = wiAgent ? '<span style="font-size:9px;color:var(--muted)" title="' + escHtml(wiAgent.name || wi.dispatched_to) + '">' +
|
|
155
|
+
(wiAgent.emoji || '') + ' ' + escHtml(wiAgent.name || wi.dispatched_to) + '</span>' : '';
|
|
153
156
|
|
|
154
157
|
// Requeue button for failed items
|
|
155
158
|
const canRequeue = wi && (wi.status === 'failed' || i.status === 'failed');
|
|
@@ -170,6 +173,7 @@ function renderPrdProgress(prog) {
|
|
|
170
173
|
'<span class="prd-item-id">' + escHtml(i.id) + '</span>' +
|
|
171
174
|
'<span class="prd-item-name" title="' + escHtml(i.name) + '">' + escHtml(i.name) + '</span>' +
|
|
172
175
|
wiLabel +
|
|
176
|
+
agentLabel +
|
|
173
177
|
requeueBtn +
|
|
174
178
|
(projBadges ? '<span>' + projBadges + '</span>' : '') +
|
|
175
179
|
(prLinks ? '<span>' + prLinks + '</span>' : '') +
|
|
@@ -320,7 +324,9 @@ function renderPrdProgress(prog) {
|
|
|
320
324
|
const borderColor = statusColor(i.status);
|
|
321
325
|
const src = escHtml(i.source || '');
|
|
322
326
|
const iid = escHtml(i.id || '');
|
|
323
|
-
const
|
|
327
|
+
const agentId = wi[i.id]?.dispatched_to || '';
|
|
328
|
+
const agentInfo = agentId ? (agentData.find(a => a.id === agentId) || {}) : null;
|
|
329
|
+
const agentDisplay = agentInfo ? (agentInfo.emoji || '') + ' ' + escHtml(agentInfo.name || agentId) : (agentId ? escHtml(agentId) : '');
|
|
324
330
|
const deps = (i.depends_on || []).join(', ');
|
|
325
331
|
const wipAnim = i.status === 'dispatched' ? 'animation:prdWipPulse 2s infinite;' : '';
|
|
326
332
|
html += '<div onclick="prdItemEdit(\'' + src + '\',\'' + iid + '\')" ' +
|
|
@@ -333,7 +339,7 @@ function renderPrdProgress(prog) {
|
|
|
333
339
|
'<div style="color:var(--text);font-size:11px;line-height:1.3;margin-bottom:3px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical">' + escHtml(i.name) + '</div>' +
|
|
334
340
|
'<div style="display:flex;gap:4px;flex-wrap:wrap;align-items:center">' +
|
|
335
341
|
'<span class="prd-item-priority ' + (i.priority || '') + '" style="font-size:8px;padding:1px 4px">' + escHtml(i.priority || '') + '</span>' +
|
|
336
|
-
(
|
|
342
|
+
(agentDisplay ? '<span style="font-size:8px;color:var(--muted)">' + agentDisplay + '</span>' : '') +
|
|
337
343
|
(function() {
|
|
338
344
|
const w = wi[i.id];
|
|
339
345
|
if (!w) return '';
|
|
@@ -484,7 +490,7 @@ function openArchivedPrdModal() {
|
|
|
484
490
|
const done = g.items.filter(it => it.status === 'done').length;
|
|
485
491
|
const failed = g.items.filter(it => it.status === 'failed').length;
|
|
486
492
|
const completed = g.completedAt ? new Date(g.completedAt).toLocaleDateString() : '';
|
|
487
|
-
return '<div class="plan-card" style="cursor:pointer;margin-bottom:8px" onclick="showArchivedPrdDetail(' +
|
|
493
|
+
return '<div class="plan-card" style="cursor:pointer;margin-bottom:8px" onclick="showArchivedPrdDetail(\'' + escHtml(g.file) + '\')">' +
|
|
488
494
|
'<div class="plan-card-title" style="font-size:13px">' + escHtml(g.summary || g.file) + '</div>' +
|
|
489
495
|
'<div class="plan-card-meta">' +
|
|
490
496
|
(g.project ? '<span>' + escHtml(g.project) + '</span>' : '') +
|
|
@@ -504,16 +510,17 @@ function openArchivedPrdModal() {
|
|
|
504
510
|
document.getElementById('modal').classList.add('open');
|
|
505
511
|
}
|
|
506
512
|
|
|
507
|
-
function showArchivedPrdDetail(
|
|
513
|
+
function showArchivedPrdDetail(idxOrFile) {
|
|
508
514
|
const groups = window._archivedPrdGroups || [];
|
|
515
|
+
const idx = typeof idxOrFile === 'string' ? groups.findIndex(g => g.file === idxOrFile) : idxOrFile;
|
|
509
516
|
const g = groups[idx];
|
|
510
517
|
if (!g) return;
|
|
511
518
|
|
|
512
519
|
// View mode toggle for archived
|
|
513
520
|
const isGraph = window._archivedPrdViewMode !== 'list';
|
|
514
521
|
const toggleHtml = '<div style="display:flex;gap:4px;margin-bottom:8px">' +
|
|
515
|
-
'<button class="pr-pager-btn" style="font-size:9px;padding:2px 8px;' + (isGraph ? 'background:var(--blue);color:#fff;border-color:var(--blue)' : '') + '" onclick="window._archivedPrdViewMode=\'graph\';showArchivedPrdDetail(' +
|
|
516
|
-
'<button class="pr-pager-btn" style="font-size:9px;padding:2px 8px;' + (!isGraph ? 'background:var(--blue);color:#fff;border-color:var(--blue)' : '') + '" onclick="window._archivedPrdViewMode=\'list\';showArchivedPrdDetail(' +
|
|
522
|
+
'<button class="pr-pager-btn" style="font-size:9px;padding:2px 8px;' + (isGraph ? 'background:var(--blue);color:#fff;border-color:var(--blue)' : '') + '" onclick="window._archivedPrdViewMode=\'graph\';showArchivedPrdDetail(\'' + escHtml(g.file) + '\')">Graph</button>' +
|
|
523
|
+
'<button class="pr-pager-btn" style="font-size:9px;padding:2px 8px;' + (!isGraph ? 'background:var(--blue);color:#fff;border-color:var(--blue)' : '') + '" onclick="window._archivedPrdViewMode=\'list\';showArchivedPrdDetail(\'' + escHtml(g.file) + '\')">List</button>' +
|
|
517
524
|
'<button class="pr-pager-btn" style="font-size:9px;padding:2px 8px;color:var(--green);margin-left:auto" onclick="triggerVerify(\'' + escHtml(g.file) + '\')">Trigger Verify</button>' +
|
|
518
525
|
'<button class="pr-pager-btn" style="font-size:9px;padding:2px 8px" onclick="planUnarchive(\'' + escHtml(g.file) + '\',this)">Unarchive</button>' +
|
|
519
526
|
'<button class="pr-pager-btn" style="font-size:9px;padding:2px 8px" onclick="openArchivedPrdModal()">Back</button>' +
|
package/engine/lifecycle.js
CHANGED
|
@@ -1279,7 +1279,18 @@ function runPostCompletionHooks(dispatchItem, agentId, code, stdout, config) {
|
|
|
1279
1279
|
// Detect implement tasks that completed without creating a PR
|
|
1280
1280
|
if (isSuccess && (type === WORK_TYPE.IMPLEMENT || type === WORK_TYPE.IMPLEMENT_LARGE || type === WORK_TYPE.FIX) && prsCreatedCount === 0 && meta?.item?.id && !meta?.item?.skipPr && meta?.project?.localPath) {
|
|
1281
1281
|
// Check if a PR already exists linked to this work item (from a previous attempt)
|
|
1282
|
-
|
|
1282
|
+
let existingPrFound = Object.values(getPrLinks()).includes(meta.item.id);
|
|
1283
|
+
// Also check pull-requests.json for PRs with matching prdItems or branch
|
|
1284
|
+
if (!existingPrFound) {
|
|
1285
|
+
const allProjects = shared.getProjects(config);
|
|
1286
|
+
for (const p of allProjects) {
|
|
1287
|
+
const prs = safeJson(shared.projectPrPath(p)) || [];
|
|
1288
|
+
if (prs.some(pr => (pr.prdItems || []).includes(meta.item.id) || (pr.branch && pr.branch.includes(meta.item.id)))) {
|
|
1289
|
+
existingPrFound = true;
|
|
1290
|
+
break;
|
|
1291
|
+
}
|
|
1292
|
+
}
|
|
1293
|
+
}
|
|
1283
1294
|
if (!existingPrFound) {
|
|
1284
1295
|
let wiPath;
|
|
1285
1296
|
if (meta.source === 'central-work-item' || meta.source === 'central-work-item-fanout') {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.361",
|
|
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"
|