@yemi33/minions 0.1.690 → 0.1.692
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 +7 -1
- package/dashboard/js/render-plans.js +11 -5
- package/dashboard/js/render-work-items.js +1 -0
- package/engine/github.js +10 -9
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.692 (2026-04-09)
|
|
4
|
+
|
|
5
|
+
### Fixes
|
|
6
|
+
- fetch actual build error logs instead of just annotations
|
|
7
|
+
|
|
8
|
+
## 0.1.691 (2026-04-09)
|
|
4
9
|
|
|
5
10
|
### Features
|
|
6
11
|
- Re-execute button for plans with existing awaiting-approval PRD
|
|
@@ -9,6 +14,7 @@
|
|
|
9
14
|
- collapsible doc-chat thread in modal
|
|
10
15
|
|
|
11
16
|
### Fixes
|
|
17
|
+
- show E2E PR + testing guide in verify badge, improve PR matching
|
|
12
18
|
- add archive fallback for artifact notes when KB entry was swept
|
|
13
19
|
- link work item artifacts to KB entries, not raw archive copies
|
|
14
20
|
|
|
@@ -710,12 +710,18 @@ async function planRegeneratePRD(source) {
|
|
|
710
710
|
function _renderVerifyBadge(verifyWi) {
|
|
711
711
|
const statusColors = { pending: 'var(--muted)', dispatched: 'var(--blue)', done: 'var(--green)', failed: 'var(--red)' };
|
|
712
712
|
const color = statusColors[verifyWi.status] || 'var(--muted)';
|
|
713
|
-
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
|
|
714
715
|
const allPrs = (window._lastStatus?.pullRequests) || [];
|
|
715
|
-
const
|
|
716
|
-
const
|
|
717
|
-
const
|
|
718
|
-
|
|
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;
|
|
719
725
|
}
|
|
720
726
|
|
|
721
727
|
async function openVerifyGuide(file) {
|
|
@@ -419,6 +419,7 @@ async function _submitCreateWorkItem(e) {
|
|
|
419
419
|
}
|
|
420
420
|
|
|
421
421
|
function openWorkItemDetail(id) {
|
|
422
|
+
if (window.getSelection && window.getSelection().toString().length > 0) return;
|
|
422
423
|
const item = allWorkItems.find(i => i.id === id);
|
|
423
424
|
if (!item) return;
|
|
424
425
|
|
package/engine/github.js
CHANGED
|
@@ -108,27 +108,28 @@ async function fetchGhBuildErrorLog(slug, failedRuns) {
|
|
|
108
108
|
for (const run of (failedRuns || []).slice(0, 3)) {
|
|
109
109
|
if (!run?.id) continue;
|
|
110
110
|
|
|
111
|
-
// Try annotations
|
|
111
|
+
// Try annotations for structured compiler/lint errors
|
|
112
|
+
let hasUsefulAnnotations = false;
|
|
112
113
|
try {
|
|
113
114
|
const annotations = await ghApi(`/check-runs/${run.id}/annotations`, slug);
|
|
114
115
|
if (Array.isArray(annotations) && annotations.length > 0) {
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
116
|
+
const failures = annotations.filter(a => a.annotation_level === 'failure');
|
|
117
|
+
if (failures.length > 0) {
|
|
118
|
+
const formatted = failures
|
|
119
|
+
.map(a => `${a.path || ''}:${a.start_line || ''} [${a.annotation_level}] ${a.message || ''}`)
|
|
120
|
+
.join('\n');
|
|
120
121
|
logParts.push(`--- ${run.name || 'Check'} (annotations) ---\n${formatted}`);
|
|
121
|
-
|
|
122
|
+
hasUsefulAnnotations = true;
|
|
122
123
|
}
|
|
123
124
|
}
|
|
124
125
|
} catch { /* fall through to job log */ }
|
|
125
126
|
|
|
126
|
-
//
|
|
127
|
+
// Always fetch job log — annotations alone often lack test failure details
|
|
127
128
|
try {
|
|
128
129
|
const cmd = `gh api "repos/${slug}/actions/jobs/${run.id}/logs" 2>&1`;
|
|
129
130
|
const result = await execAsync(cmd, { timeout: 15000, encoding: 'utf-8' });
|
|
130
131
|
if (result && !result.includes('Not Found')) {
|
|
131
|
-
logParts.push(`--- ${run.name || 'Check'} ---\n${result}`);
|
|
132
|
+
logParts.push(`--- ${run.name || 'Check'} (log) ---\n${result}`);
|
|
132
133
|
}
|
|
133
134
|
} catch { /* skip individual log fetch failures */ }
|
|
134
135
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.692",
|
|
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"
|