@yemi33/minions 0.1.569 → 0.1.571

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,16 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.569 (2026-04-08)
3
+ ## 0.1.571 (2026-04-08)
4
4
 
5
5
  ### Features
6
+ - include agent dispatches in LLM Call Performance tile
7
+ - add CC model and effort level to settings page
6
8
  - add LLM Call Performance tile to engine page
7
9
  - add ccModel/ccEffort settings and agent runtime tracking
8
10
 
11
+ ### Fixes
12
+ - remove dead Context Pressure tile from engine page
13
+
9
14
  ### Other
10
15
  - refactor: use safeJson/safeWrite for spawn-agent cache, remove unused checkedAt
11
16
 
@@ -42,7 +42,6 @@ function renderMetrics(metrics) {
42
42
  if (agents.length === 0) {
43
43
  el.innerHTML = '<p class="empty">No metrics yet. Metrics appear after agents complete tasks.</p>';
44
44
  renderTokenUsage(metrics);
45
- renderContextPressure(metrics);
46
45
  return;
47
46
  }
48
47
  // Consolidate temp-* agents into one row
@@ -92,7 +91,6 @@ function renderMetrics(metrics) {
92
91
  el.innerHTML = html;
93
92
  renderLlmPerf(metrics);
94
93
  renderTokenUsage(metrics);
95
- renderContextPressure(metrics);
96
94
  }
97
95
 
98
96
  function renderLlmPerf(metrics) {
@@ -257,26 +255,6 @@ function renderTokenUsage(metrics) {
257
255
  el.innerHTML = html;
258
256
  }
259
257
 
260
- function renderContextPressure(metrics) {
261
- const el = document.getElementById('context-pressure-content');
262
- if (!el) return;
263
- const cp = metrics._contextPressure;
264
- if (!cp || !cp.dispatches) {
265
- el.innerHTML = '<p class="empty">No context pressure data yet. Data appears after agents complete tasks.</p>';
266
- return;
267
- }
268
- const avgTurns = (cp.totalTurns / cp.dispatches).toFixed(1);
269
- const turnLimitPct = ((cp.turnLimitHits / cp.dispatches) * 100).toFixed(1);
270
- const pctColor = parseFloat(turnLimitPct) > 20 ? 'var(--red)' : parseFloat(turnLimitPct) > 5 ? 'var(--yellow, orange)' : 'var(--green)';
271
-
272
- let html = '<div class="token-tiles">';
273
- html += '<div class="token-tile"><div class="token-tile-label">Avg Turns</div><div class="token-tile-value">' + avgTurns + '</div><div class="token-tile-sub">per dispatch</div></div>';
274
- html += '<div class="token-tile"><div class="token-tile-label">Max Turns</div><div class="token-tile-value">' + cp.maxTurns + '</div></div>';
275
- html += '<div class="token-tile"><div class="token-tile-label">Hit Turn Limit</div><div class="token-tile-value" style="color:' + pctColor + '">' + turnLimitPct + '%</div><div class="token-tile-sub">' + cp.turnLimitHits + ' of ' + cp.dispatches + ' dispatches</div></div>';
276
- html += '<div class="token-tile"><div class="token-tile-label">Total Dispatches</div><div class="token-tile-value">' + cp.dispatches + '</div></div>';
277
- html += '</div>';
278
- el.innerHTML = html;
279
- }
280
258
 
281
259
  async function openScanProjectsModal() {
282
260
  document.getElementById('modal-title').textContent = 'Scan for Projects';
@@ -373,4 +351,4 @@ async function _addSelectedProjects() {
373
351
  }
374
352
  }
375
353
 
376
- window.MinionsOther = { renderProjects, renderMcpServers, renderMetrics, renderLlmPerf, renderTokenUsage, renderContextPressure, openScanProjectsModal };
354
+ window.MinionsOther = { renderProjects, renderMcpServers, renderMetrics, renderLlmPerf, renderTokenUsage, openScanProjectsModal };
@@ -55,6 +55,29 @@ async function openSettings() {
55
55
  settingsField('Version Check Interval', 'set-versionCheckInterval', e.versionCheckInterval || 3600000, 'ms', 'How often to check npm for updates (default: 1 hour)') +
56
56
  '</div>' +
57
57
 
58
+ '<h3 style="font-size:13px;color:var(--blue);margin-bottom:8px">Command Center / Doc Chat</h3>' +
59
+ '<div style="display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:16px">' +
60
+ '<div>' +
61
+ '<label style="font-size:10px;color:var(--muted);display:block;margin-bottom:2px">Model</label>' +
62
+ '<select id="set-ccModel" style="width:100%;padding:4px 6px;background:var(--surface);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:12px">' +
63
+ '<option value="sonnet"' + ((e.ccModel || 'sonnet') === 'sonnet' ? ' selected' : '') + '>Sonnet (default)</option>' +
64
+ '<option value="haiku"' + (e.ccModel === 'haiku' ? ' selected' : '') + '>Haiku (faster, cheaper)</option>' +
65
+ '<option value="opus"' + (e.ccModel === 'opus' ? ' selected' : '') + '>Opus (most capable)</option>' +
66
+ '</select>' +
67
+ '<div style="font-size:9px;color:var(--muted);margin-top:1px">Model used for CC and doc-chat conversations</div>' +
68
+ '</div>' +
69
+ '<div>' +
70
+ '<label style="font-size:10px;color:var(--muted);display:block;margin-bottom:2px">Effort Level</label>' +
71
+ '<select id="set-ccEffort" style="width:100%;padding:4px 6px;background:var(--surface);border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:12px">' +
72
+ '<option value=""' + (!e.ccEffort ? ' selected' : '') + '>Default</option>' +
73
+ '<option value="low"' + (e.ccEffort === 'low' ? ' selected' : '') + '>Low (quick responses)</option>' +
74
+ '<option value="medium"' + (e.ccEffort === 'medium' ? ' selected' : '') + '>Medium</option>' +
75
+ '<option value="high"' + (e.ccEffort === 'high' ? ' selected' : '') + '>High (thorough)</option>' +
76
+ '</select>' +
77
+ '<div style="font-size:9px;color:var(--muted);margin-top:1px">Controls response depth and reasoning effort</div>' +
78
+ '</div>' +
79
+ '</div>' +
80
+
58
81
  '<h3 style="font-size:13px;color:var(--blue);margin-bottom:8px">Claude CLI</h3>' +
59
82
  '<div style="display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:16px">' +
60
83
  settingsField('Output Format', 'set-outputFormat', c.outputFormat || 'stream-json', '', '') +
@@ -172,6 +195,8 @@ async function saveSettings() {
172
195
  evalMaxCost: document.getElementById('set-evalMaxCost').value || null,
173
196
  maxBuildFixAttempts: document.getElementById('set-maxBuildFixAttempts').value,
174
197
  versionCheckInterval: document.getElementById('set-versionCheckInterval').value,
198
+ ccModel: document.getElementById('set-ccModel').value,
199
+ ccEffort: document.getElementById('set-ccEffort').value || null,
175
200
  };
176
201
 
177
202
  const claudePayload = {
@@ -14,7 +14,3 @@
14
14
  <h2>Token Usage</h2>
15
15
  <div id="token-usage-content"><p class="empty">No usage data yet.</p></div>
16
16
  </section>
17
- <section>
18
- <h2>Context Pressure</h2>
19
- <div id="context-pressure-content"><p class="empty">No context pressure data yet. Data appears after agents complete tasks.</p></div>
20
- </section>
@@ -1040,6 +1040,22 @@ function updateMetrics(agentId, dispatchItem, result, taskUsage, prsCreatedCount
1040
1040
  m.totalOutputTokens = (m.totalOutputTokens || 0) + (taskUsage.outputTokens || 0);
1041
1041
  m.totalCacheRead = (m.totalCacheRead || 0) + (taskUsage.cacheRead || 0);
1042
1042
  }
1043
+ // Track agent runs in _engine for LLM performance tile (alongside CC/doc-chat)
1044
+ if (!metrics._engine) metrics._engine = {};
1045
+ if (!metrics._engine['agent-dispatch']) {
1046
+ metrics._engine['agent-dispatch'] = { calls: 0, costUsd: 0, inputTokens: 0, outputTokens: 0, cacheRead: 0, cacheCreation: 0, totalDurationMs: 0 };
1047
+ }
1048
+ const eng = metrics._engine['agent-dispatch'];
1049
+ eng.calls++;
1050
+ if (runtimeMs > 0) eng.totalDurationMs = (eng.totalDurationMs || 0) + runtimeMs;
1051
+ if (taskUsage) {
1052
+ eng.costUsd += taskUsage.costUsd || 0;
1053
+ eng.inputTokens += taskUsage.inputTokens || 0;
1054
+ eng.outputTokens += taskUsage.outputTokens || 0;
1055
+ eng.cacheRead += taskUsage.cacheRead || 0;
1056
+ eng.cacheCreation = (eng.cacheCreation || 0) + (taskUsage.cacheCreation || 0);
1057
+ }
1058
+
1043
1059
  const today = dateStamp();
1044
1060
  if (!metrics._daily) metrics._daily = {};
1045
1061
  if (!metrics._daily[today]) metrics._daily[today] = { costUsd: 0, inputTokens: 0, outputTokens: 0, cacheRead: 0, tasks: 0, runtimeMs: 0 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.569",
3
+ "version": "0.1.571",
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"