@yemi33/minions 0.1.691 → 0.1.693

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,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.693 (2026-04-09)
4
+
5
+ ### Fixes
6
+ - syncPrsFromOutput missed PRs mentioned in assistant text blocks
7
+
8
+ ## 0.1.692 (2026-04-09)
9
+
10
+ ### Fixes
11
+ - fetch actual build error logs instead of just annotations
12
+
3
13
  ## 0.1.691 (2026-04-09)
4
14
 
5
15
  ### Features
@@ -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 first — these contain structured compiler/lint errors
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 formatted = annotations
116
- .filter(a => a.annotation_level === 'failure' || a.annotation_level === 'warning')
117
- .map(a => `${a.path || ''}:${a.start_line || ''} [${a.annotation_level}] ${a.message || ''}`)
118
- .join('\n');
119
- if (formatted) {
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
- continue; // annotations are sufficient for this run
122
+ hasUsefulAnnotations = true;
122
123
  }
123
124
  }
124
125
  } catch { /* fall through to job log */ }
125
126
 
126
- // Fallback: fetch the full Actions job log
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
  }
@@ -583,6 +583,13 @@ function syncPrsFromOutput(output, agentId, meta, config) {
583
583
  while ((match = urlPattern.exec(text)) !== null) prMatches.add(match[1] || match[2]);
584
584
  }
585
585
  }
586
+ // Also scan assistant text blocks for PR URLs and "PR created" patterns
587
+ if (block.type === 'text' && block.text) {
588
+ while ((match = urlPattern.exec(block.text)) !== null) prMatches.add(match[1] || match[2]);
589
+ const textCreatedPattern = /(?:PR created|created PR|E2E PR)[:\s#-]*(\d{1,})/gi;
590
+ let m2;
591
+ while ((m2 = textCreatedPattern.exec(block.text)) !== null) prMatches.add(m2[1]);
592
+ }
586
593
  }
587
594
  if (parsed.type === 'result' && parsed.result) {
588
595
  const resultText = parsed.result;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.691",
3
+ "version": "0.1.693",
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"