@yemi33/minions 0.1.124 → 0.1.126

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,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.126 (2026-04-01)
4
+
5
+ ### Engine
6
+ - engine.js
7
+ - engine/shared.js
8
+
9
+ ### Dashboard
10
+ - dashboard/js/detail-panel.js
11
+ - dashboard/js/render-meetings.js
12
+ - dashboard/js/render-work-items.js
13
+ - dashboard/js/settings.js
14
+
15
+ ## 0.1.125 (2026-04-01)
16
+
17
+ ### Dashboard
18
+ - dashboard/js/render-schedules.js
19
+
3
20
  ## 0.1.124 (2026-04-01)
4
21
 
5
22
  ### Dashboard
@@ -135,6 +135,7 @@ function _cancelCharterEdit() {
135
135
  }
136
136
 
137
137
  async function _saveCharter() {
138
+ if (!currentAgentId) { alert('No agent selected'); return; }
138
139
  const content = document.getElementById('charter-editor').value;
139
140
  const btn = document.getElementById('charter-save-btn');
140
141
  btn.textContent = 'Saving...'; btn.style.pointerEvents = 'none';
@@ -305,7 +305,7 @@ async function _unarchiveMeeting(id) {
305
305
  method: 'POST', headers: { 'Content-Type': 'application/json' },
306
306
  body: JSON.stringify({ id })
307
307
  });
308
- if (!res.ok) { const d = await res.json().catch(() => ({})); alert('Delete failed: ' + (d.error || 'unknown')); refresh(); }
308
+ if (!res.ok) { const d = await res.json().catch(() => ({})); alert('Unarchive failed: ' + (d.error || 'unknown')); refresh(); }
309
309
  } catch (e) { alert('Error: ' + e.message); refresh(); }
310
310
  }
311
311
 
@@ -223,9 +223,9 @@ function _renderScheduleCalendar(schedules) {
223
223
  }
224
224
 
225
225
  // Build grid: header row + one row per hour
226
- // Columns: Mon(1) Tue(2) Wed(3) Thu(4) Fri(5) Sat(6) Sun(0)
227
- var dayOrder = [1, 2, 3, 4, 5, 6, 0];
228
- var dayLabels = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];
226
+ // Columns: Sun(0) Mon(1) Tue(2) Wed(3) Thu(4) Fri(5) Sat(6)
227
+ var dayOrder = [0, 1, 2, 3, 4, 5, 6];
228
+ var dayLabels = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
229
229
 
230
230
  var html = '<div class="sched-cal">';
231
231
  // Header row
@@ -161,7 +161,8 @@ async function submitWorkItemEdit(id, source) {
161
161
  async function deleteWorkItem(id, source) {
162
162
  if (!confirm('Delete work item ' + id + '? This will kill any running agent and remove all dispatch history.')) return;
163
163
  markDeleted('wi:' + id);
164
- document.querySelectorAll('tr').forEach(function(r) { if (r.textContent.includes(id)) r.remove(); });
164
+ var wiTable = document.getElementById('work-items-content');
165
+ (wiTable || document).querySelectorAll('tr').forEach(function(r) { if (r.textContent.includes(id)) r.remove(); });
165
166
  try {
166
167
  const res = await fetch('/api/work-items/delete', {
167
168
  method: 'POST', headers: { 'Content-Type': 'application/json' },
@@ -173,7 +174,8 @@ async function deleteWorkItem(id, source) {
173
174
 
174
175
  async function archiveWorkItem(id, source) {
175
176
  markDeleted('wi:' + id);
176
- document.querySelectorAll('tr').forEach(function(r) { if (r.textContent.includes(id)) r.remove(); });
177
+ var wiTable = document.getElementById('work-items-content');
178
+ (wiTable || document).querySelectorAll('tr').forEach(function(r) { if (r.textContent.includes(id)) r.remove(); });
177
179
  showToast('cmd-toast', 'Archived ' + id, true);
178
180
  try {
179
181
  const res = await fetch('/api/work-items/archive', {
@@ -39,6 +39,7 @@ async function openSettings() {
39
39
  '</div>' +
40
40
  '<div style="display:flex;flex-direction:column;gap:6px;margin-bottom:16px">' +
41
41
  settingsToggle('Auto-approve Plans', 'set-autoApprovePlans', !!e.autoApprovePlans, 'PRDs are approved automatically without human review') +
42
+ settingsToggle('Auto-review PRs', 'set-autoReview', e.autoReview !== false, 'Automatically dispatch review agents for new PRs') +
42
43
  settingsToggle('Auto-decompose', 'set-autoDecompose', e.autoDecompose !== false, 'Large implement items are auto-split into sub-tasks') +
43
44
  settingsToggle('Allow Temp Agents', 'set-allowTempAgents', !!e.allowTempAgents, 'Spawn ephemeral agents when all permanent agents are busy') +
44
45
  '</div>' +
@@ -121,6 +122,7 @@ async function saveSettings() {
121
122
  restartGracePeriod: document.getElementById('set-restartGracePeriod').value,
122
123
  meetingRoundTimeout: document.getElementById('set-meetingRoundTimeout').value,
123
124
  autoApprovePlans: document.getElementById('set-autoApprovePlans').checked,
125
+ autoReview: document.getElementById('set-autoReview').checked,
124
126
  autoDecompose: document.getElementById('set-autoDecompose').checked,
125
127
  allowTempAgents: document.getElementById('set-allowTempAgents').checked,
126
128
  };
package/engine/shared.js CHANGED
@@ -337,6 +337,7 @@ const ENGINE_DEFAULTS = {
337
337
  allowTempAgents: false, // opt-in: spawn ephemeral agents when all permanent agents are busy
338
338
  autoDecompose: true, // auto-decompose implement:large items into sub-tasks
339
339
  autoApprovePlans: false, // auto-approve PRDs without waiting for human approval
340
+ autoReview: true, // auto-dispatch review agents for new PRs (disable for manual review workflow)
340
341
  meetingRoundTimeout: 600000, // 10min per meeting round before auto-advance
341
342
  };
342
343
 
package/engine.js CHANGED
@@ -1245,7 +1245,8 @@ function discoverFromPrs(config, project) {
1245
1245
  const reviewStatus = pr.reviewStatus || 'pending';
1246
1246
 
1247
1247
  // PRs needing review: pending or waiting (review dispatched but no verdict yet)
1248
- const needsReview = reviewStatus === 'pending' || reviewStatus === 'waiting';
1248
+ const autoReview = config.engine?.autoReview !== false;
1249
+ const needsReview = autoReview && (reviewStatus === 'pending' || reviewStatus === 'waiting');
1249
1250
  if (needsReview) {
1250
1251
  const key = `review-${project?.name || 'default'}-${pr.id}`;
1251
1252
  if (isAlreadyDispatched(key) || isOnCooldown(key, cooldownMs)) continue;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.124",
3
+ "version": "0.1.126",
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"