@yemi33/minions 0.1.2244 → 0.1.2245

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.
@@ -147,7 +147,7 @@ const RENDER_VERSIONS = {
147
147
  dispatch: 2,
148
148
  engineLog: 2,
149
149
  metrics: 1,
150
- workItems: 4,
150
+ workItems: 5,
151
151
  skills: 1,
152
152
  commands: 1,
153
153
  mcpServers: 1,
@@ -171,6 +171,14 @@ function wiRow(item) {
171
171
  : (item.branchStrategy === 'shared-branch' && item.status === 'done')
172
172
  ? '<span style="font-size:var(--text-xs);color:var(--muted)" title="Part of shared branch — aggregate PR created at verify stage">shared branch</span>'
173
173
  : '<span style="color:var(--muted)">—</span>';
174
+ // W-mqrdn6qq — Non-retryable failures surface their red failReason snippet in
175
+ // the PR column (not the Agent column). The engine prefixes failReason with
176
+ // "Non-retryable failure:" and stamps item._failureClass on non-retryable
177
+ // demotion (engine/dispatch.js writeDispatchResult / force-demote path).
178
+ var isNonRetryableFail = !!item._failureClass || /^Non-retryable failure:/i.test(item.failReason || '');
179
+ var failSnippet = item.failReason
180
+ ? '<span style="display:block;font-size:var(--text-xs);color:var(--red)" title="' + escapeHtml(item.failReason) + '">' + escapeHtml(item.failReason.slice(0, 30)) + '</span>'
181
+ : '';
174
182
  // PR follow-up chip (W-mpej3cox00099466) — surfaced when the WI was spun
175
183
  // off from a PR comment via meta.pr_followup. Links to the parent PR.
176
184
  var prFollowup = item.meta && item.meta.pr_followup;
@@ -183,7 +191,7 @@ function wiRow(item) {
183
191
  }
184
192
  return '<tr data-wi-id="' + escapeHtml(item.id) + '" style="cursor:pointer" onclick="if(shouldIgnoreSelectionClick(event))return;openWorkItemDetail(\'' + escapeHtml(item.id) + '\')">' +
185
193
  '<td><span class="pr-id">' + escapeHtml(item.id || '') + '</span></td>' +
186
- '<td style="max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap" title="' + escapeHtml((item.title || '').slice(0, 200)) + '">' + escapeHtml(item.title || '') + followupChip + '</td>' +
194
+ '<td style="min-width:280px;max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap" title="' + escapeHtml((item.title || '').slice(0, 200)) + '">' + escapeHtml(item.title || '') + followupChip + '</td>' +
187
195
  '<td><span style="font-size:var(--text-sm);color:var(--muted)">' + escapeHtml(item._source || '') + '</span>' +
188
196
  (item.scope === 'fan-out' ? ' <span class="pr-badge ' + (item.status === 'done' || item.status === 'failed' ? 'draft' : 'building') + '" style="font-size:var(--text-xs)">fan-out</span>' : '') + '</td>' +
189
197
  '<td>' + typeBadge(item.type) + '</td>' +
@@ -217,9 +225,9 @@ function wiRow(item) {
217
225
  (item.completedAgents && item.completedAgents.length > 0
218
226
  ? '<span class="pr-agent">' + escapeHtml(item.completedAgents.join(', ')) + '</span>'
219
227
  : '<span class="pr-agent">' + escapeHtml(item.dispatched_to || item.agent || '—') + '</span>') +
220
- (item.failReason ? '<span style="display:block;font-size:var(--text-xs);color:var(--red)" title="' + escapeHtml(item.failReason) + '">' + escapeHtml(item.failReason.slice(0, 30)) + '</span>' : '') +
228
+ (failSnippet && !isNonRetryableFail ? failSnippet : '') +
221
229
  '</td>' +
222
- '<td>' + prLink + '</td>' +
230
+ '<td>' + prLink + (failSnippet && isNonRetryableFail ? failSnippet : '') + '</td>' +
223
231
  '<td><span class="pr-date">' + escapeHtml((item.created || '').slice(0, 16).replace('T', ' ')) + '</span></td>' +
224
232
  '<td style="white-space:nowrap;font-size:var(--text-xs);color:var(--muted)">' +
225
233
  (function() {
@@ -278,7 +286,7 @@ function renderWorkItems(items, opts) {
278
286
  const start = wiPage * WI_PER_PAGE;
279
287
  const pageItems = items.slice(start, start + WI_PER_PAGE);
280
288
 
281
- let html = '<div class="pr-table-wrap"><table class="pr-table"><thead><tr><th>ID</th><th>Title</th><th>Source</th><th>Type</th><th>Priority</th><th>Status</th><th>Agent</th><th>PR</th><th>Created</th><th></th><th></th></tr></thead><tbody>';
289
+ let html = '<div class="pr-table-wrap"><table class="pr-table"><thead><tr><th>ID</th><th>Title</th><th>Project</th><th>Type</th><th>Priority</th><th>Status</th><th>Agent</th><th>PR</th><th>Created</th><th></th><th></th></tr></thead><tbody>';
282
290
  html += pageItems.map(wiRow).join('');
283
291
  html += '</tbody></table></div>';
284
292
 
@@ -479,7 +487,7 @@ async function toggleWorkItemArchive() {
479
487
  items.map(function(i) {
480
488
  return '<tr style="opacity:0.6">' +
481
489
  '<td><span class="pr-id">' + escapeHtml(i.id || '') + '</span></td>' +
482
- '<td style="max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">' + escapeHtml(i.title || '') + '</td>' +
490
+ '<td style="min-width:240px;max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">' + escapeHtml(i.title || '') + '</td>' +
483
491
  '<td><span class="dispatch-type ' + (i.type || '') + '">' + escapeHtml(i.type || '') + '</span></td>' +
484
492
  '<td style="color:' + (i.status === 'done' ? 'var(--green)' : 'var(--red)') + '">' + escapeHtml(i.status || '') + '</td>' +
485
493
  '<td>' + escapeHtml(i.dispatched_to || '—') + '</td>' +
@@ -746,7 +754,7 @@ function _wiRenderDetail(item) {
746
754
  }
747
755
  html += field('Description', '<div id="wi-detail-desc" style="font-size:var(--text-md);max-height:320px;overflow-y:auto;padding:8px 10px;background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius-sm)">' + _descHtml + '</div>');
748
756
  html += field('Agent', escapeHtml(item.dispatched_to || item.agent || 'Auto'));
749
- html += field('Source', escapeHtml(item._source || 'central'));
757
+ html += field('Project', escapeHtml(item._source || 'central'));
750
758
  // P-714ef144 — surface meta.workdir in the detail modal so operators can
751
759
  // confirm the agent's actual cwd. Renders nothing when unset (which is
752
760
  // the back-compat default = project root). Code-tagged so the path is
@@ -1053,7 +1061,7 @@ function openWorkItemDetail(id) {
1053
1061
 
1054
1062
  function openAllWorkItems() {
1055
1063
  document.getElementById('modal-title').textContent = 'All Work Items (' + allWorkItems.length + ')';
1056
- const html = '<div class="pr-table-wrap"><table class="pr-table"><thead><tr><th>ID</th><th>Title</th><th>Source</th><th>Type</th><th>Priority</th><th>Status</th><th>Agent</th><th>PR</th><th>Created</th><th></th><th></th></tr></thead><tbody>' +
1064
+ const html = '<div class="pr-table-wrap"><table class="pr-table"><thead><tr><th>ID</th><th>Title</th><th>Project</th><th>Type</th><th>Priority</th><th>Status</th><th>Agent</th><th>PR</th><th>Created</th><th></th><th></th></tr></thead><tbody>' +
1057
1065
  allWorkItems.map(wiRow).join('') + '</tbody></table></div>';
1058
1066
  // eslint-disable-next-line no-unsanitized/property -- reason: structural HTML is a string literal; all user data wrapped in escapeHtml() by wiRow() (fields: work item id/title/source/status/agent/PR links/dates/follow-up metadata)
1059
1067
  document.getElementById('modal-body').innerHTML = html;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.2244",
3
+ "version": "0.1.2245",
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"