@yemi33/minions 0.1.118 → 0.1.120

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,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.120 (2026-04-01)
4
+
5
+ ### Dashboard
6
+ - dashboard/js/settings.js
7
+
8
+ ## 0.1.119 (2026-04-01)
9
+
10
+ ### Dashboard
11
+ - dashboard.js
12
+ - dashboard/js/settings.js
13
+
3
14
  ## 0.1.118 (2026-04-01)
4
15
 
5
16
  ### Playbooks
@@ -31,6 +31,11 @@ async function openSettings() {
31
31
  settingsField('Heartbeat Timeout', 'set-heartbeatTimeout', e.heartbeatTimeout || 300000, 'ms', 'No output = dead after this') +
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
+ settingsField('Worktree Root', 'set-worktreeRoot', e.worktreeRoot || '../worktrees', '', 'Relative path for git worktrees') +
35
+ settingsField('Idle Alert', 'set-idleAlertMinutes', e.idleAlertMinutes || 15, 'min', 'Alert after agent idle this long') +
36
+ settingsField('Shutdown Timeout', 'set-shutdownTimeout', e.shutdownTimeout || 300000, 'ms', 'Max wait for agents during graceful shutdown') +
37
+ settingsField('Restart Grace Period', 'set-restartGracePeriod', e.restartGracePeriod || 1200000, 'ms', 'Grace period before orphan detection on restart') +
38
+ settingsField('Meeting Round Timeout', 'set-meetingRoundTimeout', e.meetingRoundTimeout || 600000, 'ms', 'Auto-advance meeting round after this') +
34
39
  '</div>' +
35
40
  '<div style="display:flex;flex-direction:column;gap:6px;margin-bottom:16px">' +
36
41
  settingsToggle('Auto-approve Plans', 'set-autoApprovePlans', !!e.autoApprovePlans, 'PRDs are approved automatically without human review') +
@@ -95,8 +100,10 @@ function settingsField(label, id, value, unit, hint) {
95
100
 
96
101
  async function saveSettings() {
97
102
  const status = document.getElementById('settings-status');
103
+ const saveBtn = document.getElementById('modal-settings-save');
98
104
  status.textContent = 'Saving...';
99
105
  status.style.color = 'var(--blue)';
106
+ if (saveBtn) { saveBtn.disabled = true; saveBtn.style.opacity = '0.6'; saveBtn.innerHTML = 'Saving...'; }
100
107
 
101
108
  try {
102
109
  const enginePayload = {
@@ -108,6 +115,11 @@ async function saveSettings() {
108
115
  heartbeatTimeout: document.getElementById('set-heartbeatTimeout').value,
109
116
  worktreeCreateTimeout: document.getElementById('set-worktreeCreateTimeout').value,
110
117
  worktreeCreateRetries: document.getElementById('set-worktreeCreateRetries').value,
118
+ worktreeRoot: document.getElementById('set-worktreeRoot').value,
119
+ idleAlertMinutes: document.getElementById('set-idleAlertMinutes').value,
120
+ shutdownTimeout: document.getElementById('set-shutdownTimeout').value,
121
+ restartGracePeriod: document.getElementById('set-restartGracePeriod').value,
122
+ meetingRoundTimeout: document.getElementById('set-meetingRoundTimeout').value,
111
123
  autoApprovePlans: document.getElementById('set-autoApprovePlans').checked,
112
124
  autoDecompose: document.getElementById('set-autoDecompose').checked,
113
125
  allowTempAgents: document.getElementById('set-allowTempAgents').checked,
@@ -142,11 +154,18 @@ async function saveSettings() {
142
154
  });
143
155
  if (!rRes.ok) { const d = await rRes.json(); throw new Error(d.error); }
144
156
 
145
- status.textContent = 'Saved. Restart engine for full effect.';
157
+ status.textContent = 'Saved. Engine picks up changes on next tick.';
146
158
  status.style.color = 'var(--green)';
159
+ if (saveBtn) { saveBtn.innerHTML = '<svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><path d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"/></svg> Saved'; saveBtn.style.color = 'var(--green)'; saveBtn.style.borderColor = 'var(--green)'; }
160
+ showToast('cmd-toast', 'Settings saved', true);
161
+ setTimeout(function() {
162
+ if (saveBtn) { saveBtn.disabled = false; saveBtn.style.opacity = ''; saveBtn.innerHTML = '<svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><path d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"/></svg> Save'; }
163
+ }, 2000);
147
164
  } catch (e) {
148
165
  status.textContent = 'Error: ' + e.message;
149
166
  status.style.color = 'var(--red)';
167
+ if (saveBtn) { saveBtn.disabled = false; saveBtn.style.opacity = ''; saveBtn.innerHTML = '<svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><path d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"/></svg> Save'; }
168
+ showToast('cmd-toast', 'Settings save failed: ' + e.message, false);
150
169
  }
151
170
  }
152
171
 
package/dashboard.js CHANGED
@@ -3071,6 +3071,11 @@ What would you like to discuss or change? When you're happy, say "approve" and I
3071
3071
  if (e.heartbeatTimeout !== undefined) config.engine.heartbeatTimeout = Math.max(60000, Number(e.heartbeatTimeout) || D.heartbeatTimeout);
3072
3072
  if (e.worktreeCreateTimeout !== undefined) config.engine.worktreeCreateTimeout = Math.max(60000, Number(e.worktreeCreateTimeout) || D.worktreeCreateTimeout);
3073
3073
  if (e.worktreeCreateRetries !== undefined) config.engine.worktreeCreateRetries = Math.max(0, Math.min(3, Number(e.worktreeCreateRetries) || D.worktreeCreateRetries));
3074
+ if (e.worktreeRoot !== undefined) config.engine.worktreeRoot = String(e.worktreeRoot || D.worktreeRoot);
3075
+ if (e.idleAlertMinutes !== undefined) config.engine.idleAlertMinutes = Math.max(1, Number(e.idleAlertMinutes) || D.idleAlertMinutes);
3076
+ if (e.shutdownTimeout !== undefined) config.engine.shutdownTimeout = Math.max(30000, Number(e.shutdownTimeout) || D.shutdownTimeout);
3077
+ if (e.restartGracePeriod !== undefined) config.engine.restartGracePeriod = Math.max(60000, Number(e.restartGracePeriod) || D.restartGracePeriod);
3078
+ if (e.meetingRoundTimeout !== undefined) config.engine.meetingRoundTimeout = Math.max(60000, Number(e.meetingRoundTimeout) || D.meetingRoundTimeout);
3074
3079
  if (e.autoApprovePlans !== undefined) config.engine.autoApprovePlans = !!e.autoApprovePlans;
3075
3080
  if (e.autoDecompose !== undefined) config.engine.autoDecompose = !!e.autoDecompose;
3076
3081
  if (e.allowTempAgents !== undefined) config.engine.allowTempAgents = !!e.allowTempAgents;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.118",
3
+ "version": "0.1.120",
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"