@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 +6 -1
- package/dashboard/js/render-other.js +1 -23
- package/dashboard/js/settings.js +25 -0
- package/dashboard/pages/engine.html +0 -4
- package/engine/lifecycle.js +16 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
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,
|
|
354
|
+
window.MinionsOther = { renderProjects, renderMcpServers, renderMetrics, renderLlmPerf, renderTokenUsage, openScanProjectsModal };
|
package/dashboard/js/settings.js
CHANGED
|
@@ -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>
|
package/engine/lifecycle.js
CHANGED
|
@@ -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.
|
|
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"
|