@yemi33/minions 0.1.262 → 0.1.264

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,11 +1,17 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.262 (2026-04-03)
3
+ ## 0.1.264 (2026-04-03)
4
+
5
+ ### Fixes
6
+ - clean up remaining evaluate references in comments and log messages
7
+
8
+ ## 0.1.263 (2026-04-03)
4
9
 
5
10
  ### Features
6
11
  - real-time token streaming for CC via partial JSON extraction
7
12
 
8
13
  ### Fixes
14
+ - all CC messages go through ccAddMessage — no more duplicated styling
9
15
  - streaming CC done event includes copy button matching ccAddMessage
10
16
  - streaming CC message bubble matches ccAddMessage styling
11
17
  - CC stream clears ccInFlight on client disconnect + defensive thinking.remove
@@ -190,14 +190,13 @@ async function _ccDoSend(message, skipUserMsg) {
190
190
  return;
191
191
  }
192
192
 
193
- // Create streaming message bubble
193
+ // Use a temporary streaming div for live updates, then replace with ccAddMessage on completion
194
194
  clearInterval(ccTimer);
195
195
  try { thinking.remove(); } catch { /* may already be removed */ }
196
- const streamDiv = document.createElement('div');
197
- streamDiv.className = 'cc-msg-assistant';
198
- streamDiv.style.cssText = 'padding:8px 12px;border-radius:8px;font-size:12px;line-height:1.6;max-width:95%;background:var(--surface2);color:var(--text);align-self:flex-start;border:1px solid var(--border);position:relative';
199
- streamDiv.innerHTML = '<span style="color:var(--muted);font-size:11px">Thinking...</span>';
200
- document.getElementById('cc-messages').appendChild(streamDiv);
196
+ // Add a temporary placeholder via ccAddMessage so it gets proper styling
197
+ ccAddMessage('assistant', '<span style="color:var(--muted);font-size:11px">Thinking...</span>', true);
198
+ const msgs = document.getElementById('cc-messages');
199
+ const streamDiv = msgs.lastElementChild; // the message we just added
201
200
  let streamedText = '';
202
201
 
203
202
  const reader = res.body.getReader();
@@ -215,23 +214,24 @@ async function _ccDoSend(message, skipUserMsg) {
215
214
  try {
216
215
  const evt = JSON.parse(line.slice(6));
217
216
  if (evt.type === 'chunk') {
218
- streamedText = evt.text; // each chunk is the full text so far for this turn
217
+ streamedText = evt.text;
219
218
  streamDiv.innerHTML = renderMd(streamedText);
220
- const msgs = document.getElementById('cc-messages');
221
219
  if (msgs.scrollHeight - msgs.scrollTop - msgs.clientHeight < 150) msgs.scrollTop = msgs.scrollHeight;
222
220
  } else if (evt.type === 'done') {
223
- // Final result replace with rendered markdown + copy button + timer
221
+ // Replace streaming div with a proper ccAddMessage
222
+ streamDiv.remove();
223
+ _ccMessages.pop(); // remove the placeholder we pushed
224
224
  const ccElapsed = Math.round((Date.now() - ccStartTime) / 1000);
225
- const finalHtml = renderMd(evt.text || streamedText || '');
226
- streamDiv.innerHTML = llmCopyBtn() + finalHtml +
227
- '<div style="font-size:9px;color:var(--muted);margin-top:6px;display:flex;justify-content:flex-end;padding-right:30px">' + ccElapsed + 's</div>';
228
- _ccMessages.push({ role: 'assistant', html: streamDiv.innerHTML });
225
+ const rendered = renderMd(evt.text || streamedText || '');
226
+ ccAddMessage('assistant', rendered + '<div style="font-size:9px;color:var(--muted);margin-top:6px;display:flex;justify-content:flex-end;padding-right:30px">' + ccElapsed + 's</div>');
229
227
  if (evt.sessionId) { _ccSessionId = evt.sessionId; ccSaveState(); ccUpdateSessionIndicator(); }
230
228
  if (evt.actions && evt.actions.length > 0) {
231
229
  for (const action of evt.actions) { await ccExecuteAction(action); }
232
230
  }
233
231
  } else if (evt.type === 'error') {
234
- streamDiv.innerHTML = '<span style="color:var(--red)">' + escHtml(evt.error) + '</span>';
232
+ streamDiv.remove();
233
+ _ccMessages.pop();
234
+ ccAddMessage('assistant', '<span style="color:var(--red)">' + escHtml(evt.error) + '</span>');
235
235
  }
236
236
  } catch { /* incomplete JSON */ }
237
237
  }
@@ -1075,7 +1075,7 @@ function resolveWiPath(meta) {
1075
1075
  }
1076
1076
 
1077
1077
  /**
1078
- * Parse structured eval verdict from evaluate agent output.
1078
+ * Parse structured eval verdict from review agent output.
1079
1079
  * Looks for a JSON block with { pass, build, tests, criteria_met, criteria_failed, feedback }.
1080
1080
  * Returns parsed object or null if not found.
1081
1081
  */
@@ -1256,7 +1256,7 @@ function runPostCompletionHooks(dispatchItem, agentId, code, stdout, config) {
1256
1256
 
1257
1257
  if (isSuccess && meta?.item?.id && !skipDoneStatus) updateWorkItemStatus(meta, 'done', '');
1258
1258
 
1259
- // Auto-dispatch evaluate work item after implement or fix completes successfully
1259
+ // Auto-dispatch review work item after implement or fix completes successfully
1260
1260
  if (isSuccess && !skipDoneStatus && (type === 'implement' || (type === 'fix' && meta?.item?._evalParentId)) && meta?.item?.id) {
1261
1261
  const evalLoop = config.engine?.evalLoop ?? shared.ENGINE_DEFAULTS.evalLoop;
1262
1262
  if (evalLoop) {
@@ -1269,7 +1269,7 @@ function runPostCompletionHooks(dispatchItem, agentId, code, stdout, config) {
1269
1269
  // Dedup: skip if a review item already exists for this parent
1270
1270
  const existing = items.find(i => i._evalParentId === evalTargetId && i.type === 'review' && i.status === 'pending');
1271
1271
  if (existing) {
1272
- log('info', `Eval loop: evaluate item ${existing.id} already exists for ${evalTargetId}, skipping`);
1272
+ log('info', `Eval loop: review item ${existing.id} already exists for ${evalTargetId}, skipping`);
1273
1273
  return items;
1274
1274
  }
1275
1275
  const parentItem = items.find(i => i.id === evalTargetId);
package/engine/shared.js CHANGED
@@ -356,8 +356,8 @@ const ENGINE_DEFAULTS = {
356
356
  autoApprovePlans: false, // auto-approve PRDs without waiting for human approval
357
357
  autoReview: true, // auto-dispatch review agents for new PRs (disable for manual review workflow)
358
358
  meetingRoundTimeout: 600000, // 10min per meeting round before auto-advance
359
- evalLoop: true, // enable evaluate→fix loop after implementation completes
360
- evalMaxIterations: 3, // max evaluate→fix cycles before escalating to human
359
+ evalLoop: true, // enable review→fix loop after implementation completes
360
+ evalMaxIterations: 3, // max review→fix cycles before escalating to human
361
361
  evalMaxCost: null, // USD ceiling per work item across all eval iterations; null = no limit (gather baseline data first)
362
362
  };
363
363
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.262",
3
+ "version": "0.1.264",
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"