@yemi33/minions 0.1.695 → 0.1.696

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.695 (2026-04-09)
3
+ ## 0.1.696 (2026-04-09)
4
4
 
5
5
  ### Fixes
6
+ - ADO build error log fetches all failing pipelines, not just first
6
7
  - verify/implement playbooks must include PR URL in final message
7
8
  - ADO build error log fallback when targetUrl lacks buildId
8
9
  - syncPrsFromOutput missed PRs mentioned in assistant text blocks
package/engine/ado.js CHANGED
@@ -99,7 +99,7 @@ const BUILD_ERROR_LOG_MAX_LINES = 150;
99
99
  * for failed tasks, and fetches their logs.
100
100
  * Returns truncated log text or null if unavailable.
101
101
  */
102
- async function fetchAdoBuildErrorLog(orgBase, project, failedStatus, token, pr) {
102
+ async function fetchAdoBuildErrorLog(orgBase, project, failedStatus, token, pr, seenBuildIds) {
103
103
  try {
104
104
  // Try extracting buildId from targetUrl (e.g. .../_build/results?buildId=12345)
105
105
  const targetUrl = failedStatus?.targetUrl || '';
@@ -112,10 +112,11 @@ async function fetchAdoBuildErrorLog(orgBase, project, failedStatus, token, pr)
112
112
  try {
113
113
  const branch = pr?.branch || pr?.sourceRefName?.replace('refs/heads/', '');
114
114
  if (branch) {
115
- const buildsUrl = `${orgBase}/${project.adoProject}/_apis/build/builds?branchName=refs/heads/${encodeURIComponent(branch)}&statusFilter=completed&resultFilter=failed&$top=1&api-version=7.1`;
115
+ const buildsUrl = `${orgBase}/${project.adoProject}/_apis/build/builds?branchName=refs/heads/${encodeURIComponent(branch)}&statusFilter=completed&resultFilter=failed&$top=3&api-version=7.1`;
116
116
  const builds = await adoFetch(buildsUrl, token);
117
- if (builds?.value?.[0]?.id) {
118
- buildId = String(builds.value[0].id);
117
+ const fresh = (builds?.value || []).find(b => !seenBuildIds?.has(String(b.id)));
118
+ if (fresh?.id) {
119
+ buildId = String(fresh.id);
119
120
  log('debug', `Found buildId ${buildId} via branch query for ${branch}`);
120
121
  }
121
122
  }
@@ -125,6 +126,8 @@ async function fetchAdoBuildErrorLog(orgBase, project, failedStatus, token, pr)
125
126
  log('debug', `No buildId from targetUrl or branch query: ${targetUrl.slice(0, 120)}`);
126
127
  return null;
127
128
  }
129
+ if (seenBuildIds?.has(buildId)) return null; // already fetched this build
130
+ if (seenBuildIds) seenBuildIds.add(buildId);
128
131
 
129
132
  // Fetch build timeline to find failed tasks
130
133
  const timelineUrl = `${orgBase}/${project.adoProject}/_apis/build/builds/${buildId}/timeline?api-version=7.1`;
@@ -390,11 +393,16 @@ async function pollPrStatus(config) {
390
393
 
391
394
  // Fetch actual compiler/build error logs when transitioning to failing
392
395
  if (buildStatus === 'failing') {
393
- const failedStatusObj = buildStatuses.find(s => s.state === 'failed' || s.state === 'error');
394
- const errorLog = await fetchAdoBuildErrorLog(orgBase, project, failedStatusObj, token, pr);
395
- if (errorLog) {
396
- pr.buildErrorLog = errorLog;
397
- log('info', `PR ${pr.id}: fetched ${errorLog.split('\n').length} lines of build error log`);
396
+ const failedStatusObjs = buildStatuses.filter(s => s.state === 'failed' || s.state === 'error').slice(0, 3);
397
+ const logParts = [];
398
+ const seenBuildIds = new Set();
399
+ for (const failedStatusObj of failedStatusObjs) {
400
+ const errorLog = await fetchAdoBuildErrorLog(orgBase, project, failedStatusObj, token, pr, seenBuildIds);
401
+ if (errorLog) logParts.push(errorLog);
402
+ }
403
+ if (logParts.length > 0) {
404
+ pr.buildErrorLog = logParts.join('\n\n');
405
+ log('info', `PR ${pr.id}: fetched error logs from ${logParts.length} failing pipeline(s)`);
398
406
  }
399
407
  }
400
408
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.695",
3
+ "version": "0.1.696",
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"