@yemi33/minions 0.1.687 → 0.1.688

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.687 (2026-04-09)
3
+ ## 0.1.688 (2026-04-09)
4
4
 
5
5
  ### Features
6
+ - PR review/fix cycle pipeline, fix node rendering for never-run pipelines
6
7
  - modal back button for artifact navigation
7
8
  - collapsible doc-chat thread in modal
8
9
 
@@ -10,6 +11,9 @@
10
11
  - add archive fallback for artifact notes when KB entry was swept
11
12
  - link work item artifacts to KB entries, not raw archive copies
12
13
 
14
+ ### Other
15
+ - refactor: remove dead stageFlow code from pipeline card rendering
16
+
13
17
  ## 0.1.683 (2026-04-09)
14
18
 
15
19
  ### Features
@@ -241,10 +241,13 @@ function _buildNodeChain(stages, run, options) {
241
241
 
242
242
  html += '</div>';
243
243
 
244
- // Loop indicator
245
- if (pipeline?.trigger?.cron) {
244
+ // Loop indicator — only for pipelines with stopWhen or condition stages (repeat-until pattern)
245
+ var hasStopWhen = !!pipeline?.stopWhen;
246
+ var hasConditionStage = (pipeline?.stages || []).some(function(s) { return s.type === 'condition'; });
247
+ if (hasStopWhen || hasConditionStage) {
246
248
  var runCount = (pipeline.runs || []).length;
247
- html += '<div class="pl-node-loop">\u21BA Loop (' + escHtml(_cronToHuman(pipeline.trigger.cron)) + ')';
249
+ var cronLabel = pipeline?.trigger?.cron ? _cronToHuman(pipeline.trigger.cron) : 'until condition met';
250
+ html += '<div class="pl-node-loop">\u21BA Loop (' + escHtml(cronLabel) + ')';
248
251
  if (runCount > 0) html += ' \u00b7 Run ' + runCount;
249
252
  html += '</div>';
250
253
  }
@@ -271,18 +274,10 @@ function renderPipelines(pipelines) {
271
274
  const statusLabel = activeRun ? 'Running' : lastRun ? (lastRun.status === 'completed' ? 'Completed' : lastRun.status === 'failed' ? 'Failed' : lastRun.status === 'stopped' ? 'Stopped' : lastRun.status) : 'Never run';
272
275
  const trigger = p.trigger?.cron ? _cronToHuman(p.trigger.cron) : 'Manual';
273
276
 
274
- // Stage flow visualization
275
- var stageFlow = (p.stages || []).map(function(s) {
276
- var icon = { task: '\u2699', meeting: '\uD83D\uDCAC', plan: '\uD83D\uDCCB', 'merge-prs': '\uD83D\uDD00', api: '\uD83C\uDF10', wait: '\u23F8', parallel: '\u2693', schedule: '\u23F0', condition: '\u2753' }[s.type] || '\u2022';
277
- var stageStatus = activeRun?.stages?.[s.id]?.status || 'pending';
278
- var color = stageStatus === 'completed' ? 'var(--green)' : stageStatus === 'running' ? 'var(--blue)' : stageStatus === 'failed' ? 'var(--red)' : stageStatus === 'waiting-human' ? 'var(--yellow)' : 'var(--muted)';
279
- return '<span style="color:' + color + ';font-size:11px" title="' + escHtml(s.id) + ': ' + escHtml(s.title || s.type) + ' (' + stageStatus + ')">' + icon + ' ' + escHtml(s.id) + '</span>';
280
- }).join(' <span style="color:var(--border)">\u2192</span> ');
281
-
282
- // Build step-progress indicator for pipelines with a run
277
+ // Build node chain (renders for all pipelines, even never-run)
283
278
  var progressHtml = '';
284
279
  var displayRun = activeRun || lastRun;
285
- if (displayRun && (p.stages || []).length > 0) {
280
+ if ((p.stages || []).length > 0) {
286
281
  progressHtml = _buildNodeChain(p.stages || [], displayRun, { compact: true, pipeline: p });
287
282
  }
288
283
 
@@ -330,7 +325,7 @@ function openPipelineDetail(id) {
330
325
 
331
326
  // Stage detail with progress bar
332
327
  var detailRun = activeRun || (p.runs || []).slice(-1)[0];
333
- if (detailRun && (p.stages || []).length > 0) {
328
+ if ((p.stages || []).length > 0) {
334
329
  html += _buildNodeChain(p.stages || [], detailRun, { compact: false, pipeline: p });
335
330
  }
336
331
  // Pipeline-level monitored resources (full view in detail)
@@ -194,7 +194,7 @@
194
194
  .pl-progress-label { display: flex; gap: 8px; align-items: center; margin-top: 4px; font-size: 10px; }
195
195
  .pl-node-chain { display: flex; align-items: flex-start; gap: 2px; overflow-x: auto; padding: 8px 0; }
196
196
  .pl-node { display: flex; flex-direction: column; align-items: center; flex-shrink: 0; }
197
- .pl-node-box { padding: 4px 8px; border-radius: 6px; border: 2px solid var(--border); background: var(--surface2); text-align: center; font-size: 10px; transition: border-color 0.2s; white-space: nowrap; }
197
+ .pl-node-box { padding: 4px 8px; border-radius: 6px; border: 1px solid var(--border); background: var(--surface2); text-align: center; font-size: 10px; transition: border-color 0.2s; white-space: nowrap; }
198
198
  .pl-node-box.complete { border-color: var(--green); background: rgba(63,185,80,0.08); }
199
199
  .pl-node-box.running { border-color: var(--blue); animation: plSegPulse 1.5s ease-in-out infinite; }
200
200
  .pl-node-box.failed { border-color: var(--red); background: rgba(248,81,73,0.08); }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.687",
3
+ "version": "0.1.688",
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"
@@ -0,0 +1,42 @@
1
+ {
2
+ "id": "pr-review-fix-cycle",
3
+ "title": "PR Review & Fix Cycle",
4
+ "description": "Visualizes the default engine flow: review a PR, fix issues if rejected, re-review until approved and build passes.",
5
+ "trigger": { "manual": true },
6
+ "stages": [
7
+ {
8
+ "id": "review-pr",
9
+ "type": "task",
10
+ "taskType": "review",
11
+ "title": "Review PR",
12
+ "description": "Review the target PR for correctness, quality, and completeness. Provide actionable feedback if changes are needed."
13
+ },
14
+ {
15
+ "id": "check-review-status",
16
+ "type": "condition",
17
+ "title": "Approved?",
18
+ "check": "allBuildsGreen",
19
+ "action": "stop",
20
+ "onMet": "Merge",
21
+ "onUnmet": "Fix",
22
+ "dependsOn": ["review-pr"]
23
+ },
24
+ {
25
+ "id": "fix-feedback",
26
+ "type": "task",
27
+ "taskType": "fix",
28
+ "title": "Fix review feedback",
29
+ "description": "Address all review comments and push fixes to the PR branch.",
30
+ "dependsOn": ["check-review-status"]
31
+ },
32
+ {
33
+ "id": "re-review",
34
+ "type": "task",
35
+ "taskType": "review",
36
+ "title": "Re-review after fix",
37
+ "description": "Re-review the PR after fixes have been applied. Verify all prior feedback was addressed.",
38
+ "dependsOn": ["fix-feedback"]
39
+ }
40
+ ],
41
+ "stopWhen": "allBuildsGreen"
42
+ }