@yemi33/minions 0.1.696 → 0.1.698

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,6 +1,6 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.696 (2026-04-09)
3
+ ## 0.1.698 (2026-04-09)
4
4
 
5
5
  ### Fixes
6
6
  - ADO build error log fetches all failing pipelines, not just first
@@ -8,6 +8,10 @@
8
8
  - ADO build error log fallback when targetUrl lacks buildId
9
9
  - syncPrsFromOutput missed PRs mentioned in assistant text blocks
10
10
 
11
+ ### Other
12
+ - simplify: hoist textCreatedPattern regex out of block loop
13
+ - refactor: reorder card buttons (Approve first), split modal approve/reject
14
+
11
15
  ## 0.1.692 (2026-04-09)
12
16
 
13
17
  ### Fixes
@@ -211,8 +211,8 @@ function renderPlans(plans) {
211
211
  // For awaiting-approval: show Execute (re-generate PRD from updated plan) + Approve (use current PRD as-is)
212
212
  if (effectiveStatus === 'awaiting-approval' && isDraft && prdFile) {
213
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>' +
214
+ '<button class="plan-btn approve" onclick="planApprove(\'' + escHtml(actionTarget) + '\')">Approve</button>' +
215
+ '<button class="plan-btn approve" style="opacity:0.7" onclick="planExecute(\'' + escHtml(p.file) + '\',\'' + escHtml(p.project || '') + '\',this)">Re-execute</button>' +
216
216
  '<button class="plan-btn reject" onclick="planReject(\'' + escHtml(actionTarget) + '\')">Reject</button>' +
217
217
  '</div>';
218
218
  } else {
@@ -465,10 +465,10 @@ function _renderPlanModal(normalizedFile, raw, lastMod) {
465
465
  const isActuallyPaused = planStatus === 'paused' || linkedPrd?.status === 'paused';
466
466
  const modalApproveLabel = isActuallyPaused ? 'Resume' : 'Approve';
467
467
  const showRejectInModal = linkedPrdAwaiting || planStatus === 'awaiting-approval';
468
- const modalResumeBtn = modalShowResume ? '<button class="pr-pager-btn" style="font-size:10px;padding:2px 10px;color:var(--green)" ' +
469
- 'onclick="planApprove(\'' + escHtml(modalApproveTarget) + '\',this)">' + modalApproveLabel + '</button>' +
470
- (showRejectInModal ? ' <button class="pr-pager-btn" style="font-size:10px;padding:2px 10px;color:var(--red)" ' +
471
- 'onclick="planReject(\'' + escHtml(modalApproveTarget) + '\')">Reject</button>' : '') : '';
468
+ const modalApproveBtn = modalShowResume ? '<button class="pr-pager-btn" style="font-size:10px;padding:2px 10px;color:var(--green)" ' +
469
+ 'onclick="planApprove(\'' + escHtml(modalApproveTarget) + '\',this)">' + modalApproveLabel + '</button>' : '';
470
+ const modalRejectBtn = showRejectInModal ? '<button class="pr-pager-btn" style="font-size:10px;padding:2px 10px;color:var(--red)" ' +
471
+ 'onclick="planReject(\'' + escHtml(modalApproveTarget) + '\')">Reject</button>' : '';
472
472
  const modalVerifyWi = (window._lastWorkItems || []).find(w => w.itemType === 'verify' && w.sourcePlan === normalizedFile);
473
473
  const modalVerifyBtn = isModalCompleted && !modalVerifyWi ? '<button class="pr-pager-btn" style="font-size:10px;padding:2px 10px;color:var(--green)" ' +
474
474
  'onclick="triggerVerify(\'' + escHtml(normalizedFile) + '\',this)">Verify</button>' : '';
@@ -477,7 +477,7 @@ function _renderPlanModal(normalizedFile, raw, lastMod) {
477
477
  'onclick="planArchive(\'' + escHtml(normalizedFile) + '\')">Archive</button>';
478
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>' : '';
479
479
  const actionBtns = '<div style="display:flex;gap:4px;flex-wrap:wrap;margin-top:4px">' +
480
- (modalCompletedLabel || '') + (modalAwaitingLabel || '') + (modalInProgressLabel || '') + (modalReExecuteBtn || '') + (modalExecuteBtn || '') + (modalPauseBtn || '') + (modalResumeBtn || '') + (modalVerifyBtn || '') + (modalVerifyInfo || '') +
480
+ (modalCompletedLabel || '') + (modalAwaitingLabel || '') + (modalInProgressLabel || '') + (modalApproveBtn || '') + (modalReExecuteBtn || '') + (modalExecuteBtn || '') + (modalPauseBtn || '') + (modalRejectBtn || '') + (modalVerifyBtn || '') + (modalVerifyInfo || '') +
481
481
  ' ' + modalArchiveBtn +
482
482
  ' <button class="pr-pager-btn" style="font-size:10px;padding:2px 10px;color:var(--red)" ' +
483
483
  'onclick="planDelete(\'' + escHtml(normalizedFile) + '\')">Delete</button>' +
@@ -567,6 +567,7 @@ function syncPrsFromOutput(output, agentId, meta, config) {
567
567
 
568
568
  const prMatches = new Set();
569
569
  const urlPattern = /(?:visualstudio\.com|dev\.azure\.com)[^\s"]*?pullrequest\/(\d+)|github\.com\/[^\s"]*?\/pull\/(\d+)/g;
570
+ const textCreatedPattern = /(?:PR created|created PR|E2E PR)[:\s#-]*(\d{1,})/gi;
570
571
  let match;
571
572
 
572
573
  try {
@@ -586,7 +587,7 @@ function syncPrsFromOutput(output, agentId, meta, config) {
586
587
  // Also scan assistant text blocks for PR URLs and "PR created" patterns
587
588
  if (block.type === 'text' && block.text) {
588
589
  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
+ textCreatedPattern.lastIndex = 0;
590
591
  let m2;
591
592
  while ((m2 = textCreatedPattern.exec(block.text)) !== null) prMatches.add(m2[1]);
592
593
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.696",
3
+ "version": "0.1.698",
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"