@yemi33/minions 0.1.671 → 0.1.673
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 +7 -1
- package/dashboard/js/render-work-items.js +16 -3
- package/engine/queries.js +24 -11
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.673 (2026-04-09)
|
|
4
|
+
|
|
5
|
+
### Fixes
|
|
6
|
+
- output log matching used work item ID suffix, not dispatch ID
|
|
7
|
+
|
|
8
|
+
## 0.1.672 (2026-04-09)
|
|
4
9
|
|
|
5
10
|
### Features
|
|
6
11
|
- populate _artifacts on work items for detail modal
|
|
7
12
|
|
|
8
13
|
### Fixes
|
|
14
|
+
- cache dir listings in artifact population, make notes clickable
|
|
9
15
|
- surface blocking tool call state in dashboard (closes #619) (#634)
|
|
10
16
|
- interrupt blocking tool calls immediately on steering (closes #627) (#632)
|
|
11
17
|
- reduce Bash blocking grace and errored task dedup window (closes #593) (#630)
|
|
@@ -457,8 +457,9 @@ function openWorkItemDetail(id) {
|
|
|
457
457
|
if (arts.prd) artPills += '<span onclick="planView(\'' + escHtml(arts.prd) + '\')" style="' + pillStyle + '">📄 PRD</span> ';
|
|
458
458
|
if (arts.sourcePlan) artPills += '<span onclick="planView(\'' + escHtml(arts.sourcePlan) + '\')" style="' + pillStyle + '">📋 Source Plan</span> ';
|
|
459
459
|
if (arts.notes && arts.notes.length > 0) arts.notes.forEach(function(n) {
|
|
460
|
-
var
|
|
461
|
-
|
|
460
|
+
var noteFile = (n && typeof n === 'object') ? (n.file || n) : String(n || '');
|
|
461
|
+
var noteLabel = noteFile.replace(/\.md$/, '').slice(0, 30);
|
|
462
|
+
artPills += '<span onclick="openInboxNote(\'' + escHtml(noteFile) + '\')" style="' + pillStyle + '">📝 ' + escHtml(noteLabel) + '</span> ';
|
|
462
463
|
});
|
|
463
464
|
if (arts.skills && arts.skills.length > 0) arts.skills.forEach(function(s) { artPills += '<span onclick="openSkill(\'' + escHtml(s) + '\',\'minions\',\'\')" style="' + pillStyle + '">⚙ ' + escHtml(s) + '</span> '; });
|
|
464
465
|
if (artPills) html += field('Artifacts', '<div style="display:flex;flex-wrap:wrap;gap:4px">' + artPills + '</div>');
|
|
@@ -501,4 +502,16 @@ function viewAgentOutput(logPath) {
|
|
|
501
502
|
});
|
|
502
503
|
}
|
|
503
504
|
|
|
504
|
-
|
|
505
|
+
function openInboxNote(filename) {
|
|
506
|
+
// Find in inboxData by filename, or open directly via fetch
|
|
507
|
+
var idx = (inboxData || []).findIndex(function(item) { return item.name === filename; });
|
|
508
|
+
if (idx >= 0) {
|
|
509
|
+
openModal(idx);
|
|
510
|
+
} else {
|
|
511
|
+
// Fallback: switch to inbox page
|
|
512
|
+
closeModal();
|
|
513
|
+
switchPage('inbox');
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
window.MinionsWork = { wiRow, renderWorkItems, editWorkItem, submitWorkItemEdit, deleteWorkItem, archiveWorkItem, toggleWorkItemArchive, retryWorkItem, wiPrev, wiNext, feedbackWorkItem, submitFeedback, openCreateWorkItemModal, openWorkItemDetail, openAllWorkItems, viewAgentOutput, openInboxNote };
|
package/engine/queries.js
CHANGED
|
@@ -707,21 +707,34 @@ function getWorkItems(config) {
|
|
|
707
707
|
}
|
|
708
708
|
|
|
709
709
|
// Populate _artifacts for the work item detail modal
|
|
710
|
+
// Build dispatch ID → work item ID lookup from completed dispatches
|
|
711
|
+
const dispatchByWiId = {};
|
|
712
|
+
for (const d of (dispatch.completed || [])) {
|
|
713
|
+
const wiId = d.meta?.item?.id;
|
|
714
|
+
if (wiId) dispatchByWiId[wiId] = d.id; // last completed dispatch wins
|
|
715
|
+
}
|
|
716
|
+
for (const d of (dispatch.active || [])) {
|
|
717
|
+
const wiId = d.meta?.item?.id;
|
|
718
|
+
if (wiId) dispatchByWiId[wiId] = d.id;
|
|
719
|
+
}
|
|
720
|
+
const _agentDirCache = {};
|
|
721
|
+
const _inboxFiles = safeReadDir(INBOX_DIR);
|
|
710
722
|
for (const item of allItems) {
|
|
711
723
|
const arts = {};
|
|
712
724
|
const agentId = item.dispatched_to || item.agent;
|
|
713
725
|
if (agentId) {
|
|
714
|
-
// Output log —
|
|
715
|
-
const
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
726
|
+
// Output log — match by dispatch ID (output-{dispatchId}.log)
|
|
727
|
+
const dispatchId = dispatchByWiId[item.id];
|
|
728
|
+
if (dispatchId) {
|
|
729
|
+
if (!_agentDirCache[agentId]) {
|
|
730
|
+
_agentDirCache[agentId] = safeReadDir(path.join(MINIONS_DIR, 'agents', agentId)).filter(f => f.startsWith('output-') && f.endsWith('.log'));
|
|
731
|
+
}
|
|
732
|
+
const matchLog = _agentDirCache[agentId].find(f => f.includes(dispatchId));
|
|
733
|
+
if (matchLog) arts.outputLog = agentId + '/' + matchLog;
|
|
734
|
+
}
|
|
735
|
+
// Inbox notes — match by agent ID + work item ID in filename
|
|
736
|
+
const matchNotes = _inboxFiles.filter(f => f.includes(agentId) && f.includes(item.id || '___'));
|
|
737
|
+
if (matchNotes.length > 0) arts.notes = matchNotes;
|
|
725
738
|
}
|
|
726
739
|
if (item.branch) arts.branch = item.branch;
|
|
727
740
|
if (item.sourcePlan) arts.sourcePlan = item.sourcePlan;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.673",
|
|
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"
|