@yemi33/minions 0.1.1138 → 0.1.1139
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 +52 -1
- package/dashboard/js/render-pinned.js +28 -2
- package/dashboard.js +11 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.1139 (2026-04-18)
|
|
4
4
|
|
|
5
5
|
### Features
|
|
6
6
|
- redact ADO tokens and JWTs from engine/log.json writes (#1297)
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
- seed realActivityMap at spawn time, stamp pid in live-output (#1200)
|
|
10
10
|
|
|
11
11
|
### Fixes
|
|
12
|
+
- pinned context optimistic save (closes #1295) (#1316)
|
|
12
13
|
- re-check throttle state per-PR iteration to avoid stale fixThrottled
|
|
13
14
|
- preserve buildErrorLog through transient states, persist poll time (#1273)
|
|
14
15
|
- auto-fetch PR title on link-pr (closes #1283) (#1299)
|
|
@@ -28,7 +29,57 @@
|
|
|
28
29
|
- guard undefined agent in pending dispatch loop (closes #1206) (#1210)
|
|
29
30
|
- improve fallback meeting conclusion
|
|
30
31
|
- remove command center chevron
|
|
32
|
+
|
|
33
|
+
### Other
|
|
34
|
+
- refactor: hoist fixThrottled before PR loop and drop underscore prefix
|
|
35
|
+
- docs(skill): add substitute-scheduler-template-vars (#1278)
|
|
36
|
+
- Clarify PR poll labels
|
|
37
|
+
- Prevent modal opens on text selection
|
|
38
|
+
- refactor: clarify settings page section structure and PR polling dependencies
|
|
39
|
+
- refactor: extract _probeClaudePackage helper, use shared.log for spawn errors
|
|
40
|
+
- Make work item descriptions scrollable
|
|
41
|
+
- Use PAT for publish merges
|
|
42
|
+
- test(queries): add unit tests for invalidateDispatchCache/getInbox/getAgentCharter (#1214)
|
|
43
|
+
- test(shared): add unit tests for truncateTextBytes/tailTextBytes/execSilent/trackReviewMetric/parseCanonicalPrId (#1215)
|
|
44
|
+
- Fix publish workflow merge
|
|
45
|
+
- chore: raise default meeting round timeout
|
|
46
|
+
- Harden prompt context handling
|
|
47
|
+
- Harden loop watch conversion
|
|
48
|
+
- Add watches sidebar activity badge
|
|
49
|
+
- test(cli): add unit tests for handleCommand, start, stop, kill, spawn (#1191)
|
|
50
|
+
- chore: untrack pipeline files — local config only
|
|
51
|
+
- restore: recover daily-arch-improvement and weekly-dead-code-cleanup pipelines
|
|
52
|
+
- Harden CC stream resilience
|
|
53
|
+
|
|
54
|
+
## 0.1.1137 (2026-04-18)
|
|
55
|
+
|
|
56
|
+
### Features
|
|
57
|
+
- redact ADO tokens and JWTs from engine/log.json writes (#1297)
|
|
58
|
+
- SEC-02 — replace curl shell-out in ado.js with adoFetch (#1296)
|
|
59
|
+
- validate project name and path on POST /api/projects/add (SEC-04, SEC-05) (#1298)
|
|
60
|
+
- seed realActivityMap at spawn time, stamp pid in live-output (#1200)
|
|
61
|
+
|
|
62
|
+
### Fixes
|
|
63
|
+
- preserve buildErrorLog through transient states, persist poll time (#1273)
|
|
64
|
+
- auto-fetch PR title on link-pr (closes #1283) (#1299)
|
|
65
|
+
- scheduler double-fire within same cron minute (#1277)
|
|
66
|
+
- gate auto-fix dispatch on throttle state to prevent stale-data spurious fixes
|
|
67
|
+
- preserve buildErrorLog through transient build states (#1232) (#1274)
|
|
68
|
+
- annotate fast-exit empty-output failures with diagnostic hint (#1276)
|
|
69
|
+
- invalidate PRD cache on pr-links.json change + guard aggregate PRs (#1220) (#1272)
|
|
70
|
+
- pass --add-dir for minions + ~/.claude to agents (#1271)
|
|
71
|
+
- preserve VERDICT marker by tail-slicing agent output (#1234) (#1270)
|
|
72
|
+
- PRD info cache staleness and aggregate PR bleed-through (#1222)
|
|
73
|
+
- avoid no-op work item writes
|
|
74
|
+
- resilient claude binary resolution + surface spawn errors
|
|
75
|
+
- resolve native claude.exe from npm wrapper on Windows
|
|
76
|
+
- cap temp-agent creation at maxConcurrent per tick (#1219)
|
|
77
|
+
- reassign pending items from unspawned temp agents to idle named agents (#1204) (#1212)
|
|
78
|
+
- guard undefined agent in pending dispatch loop (closes #1206) (#1210)
|
|
79
|
+
- improve fallback meeting conclusion
|
|
80
|
+
- remove command center chevron
|
|
31
81
|
- stamp live-output.log stub before spawn (#1198)
|
|
82
|
+
- harden settings save and migrate pr poll config
|
|
32
83
|
|
|
33
84
|
### Other
|
|
34
85
|
- refactor: hoist fixThrottled before PR loop and drop underscore prefix
|
|
@@ -42,11 +42,37 @@ async function submitPinnedNote(e) {
|
|
|
42
42
|
const level = document.getElementById('pin-level').value;
|
|
43
43
|
if (!title || !content) { if (btn) { btn.disabled = false; btn.textContent = 'Pin Note'; } alert('Title and content required'); return; }
|
|
44
44
|
try { closeModal(); } catch { /* may not be open */ }
|
|
45
|
+
|
|
46
|
+
// Optimistic render: append the new entry to the pinned list and re-render immediately
|
|
47
|
+
// so it appears without waiting for the POST round-trip or the next status refresh (closes #1295).
|
|
48
|
+
// Snapshot prevEntries so we can revert on failure.
|
|
49
|
+
const prevEntries = Array.isArray(window._pinnedEntries) ? window._pinnedEntries.slice() : [];
|
|
50
|
+
const newEntry = { title, content, level: level || 'info' };
|
|
51
|
+
const nextEntries = prevEntries.concat([newEntry]);
|
|
52
|
+
window._pinnedEntries = nextEntries;
|
|
53
|
+
try { renderPinned(nextEntries); } catch { /* DOM may be missing — non-fatal */ }
|
|
45
54
|
showToast('cmd-toast', 'Note pinned', true);
|
|
55
|
+
|
|
46
56
|
try {
|
|
47
57
|
const res = await fetch('/api/pinned', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ title, content, level }) });
|
|
48
|
-
if (res.ok) {
|
|
49
|
-
|
|
58
|
+
if (res.ok) {
|
|
59
|
+
// Reconcile with server state (captures the normalised entry shape from parsePinnedEntries).
|
|
60
|
+
refresh();
|
|
61
|
+
} else {
|
|
62
|
+
// Revert optimistic update and surface the error.
|
|
63
|
+
window._pinnedEntries = prevEntries;
|
|
64
|
+
try { renderPinned(prevEntries); } catch { /* ignore */ }
|
|
65
|
+
const d = await res.json().catch(() => ({}));
|
|
66
|
+
showToast('cmd-toast', 'Pin failed: ' + (d.error || 'unknown'), false);
|
|
67
|
+
openPinNoteModal();
|
|
68
|
+
}
|
|
69
|
+
} catch (err) {
|
|
70
|
+
// Network failure — revert optimistic update.
|
|
71
|
+
window._pinnedEntries = prevEntries;
|
|
72
|
+
try { renderPinned(prevEntries); } catch { /* ignore */ }
|
|
73
|
+
showToast('cmd-toast', 'Error: ' + err.message, false);
|
|
74
|
+
openPinNoteModal();
|
|
75
|
+
}
|
|
50
76
|
}
|
|
51
77
|
|
|
52
78
|
async function removePinnedNote(title) {
|
package/dashboard.js
CHANGED
|
@@ -381,10 +381,15 @@ function _mtimesChanged(prev, curr) {
|
|
|
381
381
|
return false;
|
|
382
382
|
}
|
|
383
383
|
|
|
384
|
-
function invalidateStatusCache() {
|
|
384
|
+
function invalidateStatusCache(opts) {
|
|
385
385
|
_fastState = null;
|
|
386
386
|
_fastStateTs = 0;
|
|
387
|
-
// Slow state continues on its own TTL —
|
|
387
|
+
// Slow state continues on its own TTL by default — mutations of slow-state data
|
|
388
|
+
// (pinned.md, schedules, etc.) must opt in via { includeSlow: true } for immediate visibility.
|
|
389
|
+
if (opts && opts.includeSlow) {
|
|
390
|
+
_slowState = null;
|
|
391
|
+
_slowStateTs = 0;
|
|
392
|
+
}
|
|
388
393
|
_statusCache = null;
|
|
389
394
|
_statusCacheJson = null;
|
|
390
395
|
_statusCacheGzip = null;
|
|
@@ -4785,7 +4790,8 @@ What would you like to discuss or change? When you're happy, say "approve" and I
|
|
|
4785
4790
|
const levelTag = level === 'critical' ? '🔴 ' : level === 'warning' ? '🟡 ' : '';
|
|
4786
4791
|
const entry = '\n\n### ' + levelTag + title + '\n\n' + content + '\n\n*Pinned by human on ' + new Date().toISOString().slice(0, 10) + '*';
|
|
4787
4792
|
safeWrite(pinnedPath, (existing || '# Pinned Context\n\nCritical notes visible to all agents.') + entry);
|
|
4788
|
-
|
|
4793
|
+
// pinned.md is in slow-state cache — opt-in invalidation so the new entry is visible immediately (closes #1295)
|
|
4794
|
+
invalidateStatusCache({ includeSlow: true });
|
|
4789
4795
|
return jsonReply(res, 200, { ok: true });
|
|
4790
4796
|
}},
|
|
4791
4797
|
{ method: 'POST', path: '/api/pinned/remove', desc: 'Remove a pinned note by title', params: 'title', handler: async (req, res) => {
|
|
@@ -4798,7 +4804,8 @@ What would you like to discuss or change? When you're happy, say "approve" and I
|
|
|
4798
4804
|
const regex = new RegExp('\\n\\n###\\s*(?:🔴\\s*|🟡\\s*)?' + title.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + '\\n[\\s\\S]*?(?=\\n\\n###|$)', 'i');
|
|
4799
4805
|
content = content.replace(regex, '');
|
|
4800
4806
|
safeWrite(pinnedPath, content);
|
|
4801
|
-
|
|
4807
|
+
// pinned.md is in slow-state cache — opt-in invalidation so the unpin is visible immediately
|
|
4808
|
+
invalidateStatusCache({ includeSlow: true });
|
|
4802
4809
|
return jsonReply(res, 200, { ok: true });
|
|
4803
4810
|
}},
|
|
4804
4811
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1139",
|
|
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"
|