@yemi33/minions 0.1.114 → 0.1.115

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,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.115 (2026-04-01)
4
+
5
+ ### Engine
6
+ - engine.js
7
+ - engine/shared.js
8
+
9
+ ### Dashboard
10
+ - dashboard.js
11
+ - dashboard/js/settings.js
12
+
3
13
  ## 0.1.114 (2026-04-01)
4
14
 
5
15
  ### Dashboard
@@ -32,6 +32,11 @@ async function openSettings() {
32
32
  settingsField('Worktree Create Timeout', 'set-worktreeCreateTimeout', e.worktreeCreateTimeout || 300000, 'ms', 'Timeout for git worktree add (increase for large repos/Windows)') +
33
33
  settingsField('Worktree Create Retries', 'set-worktreeCreateRetries', e.worktreeCreateRetries || 1, '', 'Retry count for transient worktree add failures (0-3)') +
34
34
  '</div>' +
35
+ '<div style="display:flex;flex-direction:column;gap:6px;margin-bottom:16px">' +
36
+ settingsToggle('Auto-approve Plans', 'set-autoApprovePlans', !!e.autoApprovePlans, 'PRDs are approved automatically without human review') +
37
+ settingsToggle('Auto-decompose', 'set-autoDecompose', e.autoDecompose !== false, 'Large implement items are auto-split into sub-tasks') +
38
+ settingsToggle('Allow Temp Agents', 'set-allowTempAgents', !!e.allowTempAgents, 'Spawn ephemeral agents when all permanent agents are busy') +
39
+ '</div>' +
35
40
 
36
41
  '<h3 style="font-size:13px;color:var(--blue);margin-bottom:8px">Claude CLI</h3>' +
37
42
  '<div style="display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:16px">' +
@@ -72,6 +77,14 @@ async function openSettings() {
72
77
  document.getElementById('modal').classList.add('open');
73
78
  }
74
79
 
80
+ function settingsToggle(label, id, checked, hint) {
81
+ return '<div style="display:flex;align-items:center;gap:8px;padding:4px 0">' +
82
+ '<input type="checkbox" id="' + id + '"' + (checked ? ' checked' : '') + ' style="accent-color:var(--blue);width:16px;height:16px;cursor:pointer">' +
83
+ '<label for="' + id + '" style="font-size:12px;color:var(--text);cursor:pointer">' + escHtml(label) + '</label>' +
84
+ (hint ? '<span style="font-size:9px;color:var(--muted)">' + escHtml(hint) + '</span>' : '') +
85
+ '</div>';
86
+ }
87
+
75
88
  function settingsField(label, id, value, unit, hint) {
76
89
  return '<div>' +
77
90
  '<label style="font-size:10px;color:var(--muted);display:block;margin-bottom:2px">' + escHtml(label) + (unit ? ' <span style="opacity:0.6">(' + escHtml(unit) + ')</span>' : '') + '</label>' +
@@ -95,6 +108,9 @@ async function saveSettings() {
95
108
  heartbeatTimeout: document.getElementById('set-heartbeatTimeout').value,
96
109
  worktreeCreateTimeout: document.getElementById('set-worktreeCreateTimeout').value,
97
110
  worktreeCreateRetries: document.getElementById('set-worktreeCreateRetries').value,
111
+ autoApprovePlans: document.getElementById('set-autoApprovePlans').checked,
112
+ autoDecompose: document.getElementById('set-autoDecompose').checked,
113
+ allowTempAgents: document.getElementById('set-allowTempAgents').checked,
98
114
  };
99
115
 
100
116
  const claudePayload = {
package/dashboard.js CHANGED
@@ -3065,6 +3065,9 @@ What would you like to discuss or change? When you're happy, say "approve" and I
3065
3065
  if (e.heartbeatTimeout !== undefined) config.engine.heartbeatTimeout = Math.max(60000, Number(e.heartbeatTimeout) || D.heartbeatTimeout);
3066
3066
  if (e.worktreeCreateTimeout !== undefined) config.engine.worktreeCreateTimeout = Math.max(60000, Number(e.worktreeCreateTimeout) || D.worktreeCreateTimeout);
3067
3067
  if (e.worktreeCreateRetries !== undefined) config.engine.worktreeCreateRetries = Math.max(0, Math.min(3, Number(e.worktreeCreateRetries) || D.worktreeCreateRetries));
3068
+ if (e.autoApprovePlans !== undefined) config.engine.autoApprovePlans = !!e.autoApprovePlans;
3069
+ if (e.autoDecompose !== undefined) config.engine.autoDecompose = !!e.autoDecompose;
3070
+ if (e.allowTempAgents !== undefined) config.engine.allowTempAgents = !!e.allowTempAgents;
3068
3071
  }
3069
3072
 
3070
3073
  if (body.claude) {
package/engine/shared.js CHANGED
@@ -336,6 +336,7 @@ const ENGINE_DEFAULTS = {
336
336
  shutdownTimeout: 300000, // 5min — max wait for active agents during graceful shutdown
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
+ autoApprovePlans: false, // auto-approve PRDs without waiting for human approval
339
340
  meetingRoundTimeout: 600000, // 10min per meeting round before auto-advance
340
341
  };
341
342
 
package/engine.js CHANGED
@@ -1031,8 +1031,19 @@ function materializePlansAsWorkItems(config) {
1031
1031
  // Human approval gate: plans start as 'awaiting-approval' and must be approved before work begins
1032
1032
  // Plans without a status (legacy) or with status 'approved' are allowed through
1033
1033
  const planStatus = plan.status || (plan.requires_approval ? 'awaiting-approval' : null);
1034
- if (planStatus === 'awaiting-approval' || planStatus === 'paused' || planStatus === 'rejected' || planStatus === 'revision-requested') {
1035
- continue; // Skip — waiting for human approval, paused, or revision
1034
+ if (planStatus === 'awaiting-approval') {
1035
+ if (config.engine?.autoApprovePlans) {
1036
+ plan.status = 'approved';
1037
+ plan.approvedAt = new Date().toISOString();
1038
+ plan.approvedBy = 'auto-mode';
1039
+ safeWrite(prdPath, plan);
1040
+ log('info', `Auto-approved plan: ${file}`);
1041
+ } else {
1042
+ continue; // Skip — waiting for human approval
1043
+ }
1044
+ }
1045
+ if (planStatus === 'paused' || planStatus === 'rejected' || planStatus === 'revision-requested') {
1046
+ continue; // Skip — paused or revision requested
1036
1047
  }
1037
1048
  // Stale PRDs: source plan was revised — don't materialize NEW items until user regenerates
1038
1049
  if (plan.planStale) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.114",
3
+ "version": "0.1.115",
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"