@yemi33/minions 0.1.594 → 0.1.596

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,11 +1,17 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.594 (2026-04-08)
3
+ ## 0.1.596 (2026-04-08)
4
+
5
+ ### Features
6
+ - per-type max-turns configurable from settings page
7
+
8
+ ## 0.1.595 (2026-04-08)
4
9
 
5
10
  ### Features
6
11
  - show worktree count and engine quick stats on engine page
7
12
 
8
13
  ### Fixes
14
+ - bump fix task max-turns from 50 to 75
9
15
  - Pipeline UI show monitored resources in pipeline card (closes #523) (#542)
10
16
  - move 'When to Stop' after Build/Test in implement playbook
11
17
  - per-type maxTurns bypassed when config has default maxTurns=100
@@ -55,6 +55,20 @@ async function openSettings() {
55
55
  settingsField('Version Check Interval', 'set-versionCheckInterval', e.versionCheckInterval || 3600000, 'ms', 'How often to check npm for updates (default: 1 hour)') +
56
56
  '</div>' +
57
57
 
58
+ '<h3 style="font-size:13px;color:var(--blue);margin-bottom:8px">Max Turns by Task Type</h3>' +
59
+ '<div style="font-size:10px;color:var(--muted);margin-bottom:6px">How many tool-use turns each task type gets before forced stop. Blank = built-in default.</div>' +
60
+ '<div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-bottom:16px">' +
61
+ settingsField('Explore', 'set-mt-explore', (e.maxTurnsByType || {}).explore || '', '', 'Default: 30') +
62
+ settingsField('Ask', 'set-mt-ask', (e.maxTurnsByType || {}).ask || '', '', 'Default: 20') +
63
+ settingsField('Review', 'set-mt-review', (e.maxTurnsByType || {}).review || '', '', 'Default: 30') +
64
+ settingsField('Implement', 'set-mt-implement', (e.maxTurnsByType || {}).implement || '', '', 'Default: 75') +
65
+ settingsField('Fix', 'set-mt-fix', (e.maxTurnsByType || {}).fix || '', '', 'Default: 75') +
66
+ settingsField('Test', 'set-mt-test', (e.maxTurnsByType || {}).test || '', '', 'Default: 50') +
67
+ settingsField('Verify', 'set-mt-verify', (e.maxTurnsByType || {}).verify || '', '', 'Default: 100') +
68
+ settingsField('Plan', 'set-mt-plan', (e.maxTurnsByType || {}).plan || '', '', 'Default: 30') +
69
+ settingsField('Decompose', 'set-mt-decompose', (e.maxTurnsByType || {}).decompose || '', '', 'Default: 15') +
70
+ '</div>' +
71
+
58
72
  '<h3 style="font-size:13px;color:var(--blue);margin-bottom:8px">Command Center / Doc Chat</h3>' +
59
73
  '<div style="display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:16px">' +
60
74
  '<div>' +
@@ -197,6 +211,15 @@ async function saveSettings() {
197
211
  versionCheckInterval: document.getElementById('set-versionCheckInterval').value,
198
212
  ccModel: document.getElementById('set-ccModel').value,
199
213
  ccEffort: document.getElementById('set-ccEffort').value || null,
214
+ maxTurnsByType: (function() {
215
+ var mbt = {};
216
+ var types = ['explore', 'ask', 'review', 'implement', 'fix', 'test', 'verify', 'plan', 'decompose'];
217
+ for (var i = 0; i < types.length; i++) {
218
+ var v = document.getElementById('set-mt-' + types[i])?.value?.trim();
219
+ if (v) mbt[types[i]] = Number(v);
220
+ }
221
+ return mbt;
222
+ })(),
200
223
  };
201
224
 
202
225
  const claudePayload = {
package/dashboard.js CHANGED
@@ -3470,6 +3470,15 @@ What would you like to discuss or change? When you're happy, say "approve" and I
3470
3470
  const valid = [null, 'low', 'medium', 'high'];
3471
3471
  config.engine.ccEffort = valid.includes(e.ccEffort) ? e.ccEffort : null;
3472
3472
  }
3473
+ // Per-type max turns
3474
+ if (e.maxTurnsByType !== undefined && typeof e.maxTurnsByType === 'object') {
3475
+ const mbt = {};
3476
+ for (const [type, val] of Object.entries(e.maxTurnsByType)) {
3477
+ const n = Number(val);
3478
+ if (n && n >= 5 && n <= 500) mbt[type] = n;
3479
+ }
3480
+ config.engine.maxTurnsByType = mbt;
3481
+ }
3473
3482
  // Boolean fields
3474
3483
  for (const key of ['autoApprovePlans', 'evalLoop', 'autoDecompose', 'allowTempAgents']) {
3475
3484
  if (e[key] !== undefined) config.engine[key] = !!e[key];
package/engine.js CHANGED
@@ -151,13 +151,15 @@ const _MAX_TURNS_BY_TYPE = {
151
151
  [WORK_TYPE.EXPLORE]: 30, [WORK_TYPE.ASK]: 20, [WORK_TYPE.REVIEW]: 30,
152
152
  [WORK_TYPE.DECOMPOSE]: 15, [WORK_TYPE.PLAN]: 30, [WORK_TYPE.PLAN_TO_PRD]: 20,
153
153
  [WORK_TYPE.MEETING]: 30,
154
- [WORK_TYPE.IMPLEMENT]: 75, [WORK_TYPE.IMPLEMENT_LARGE]: 75, [WORK_TYPE.FIX]: 50,
154
+ [WORK_TYPE.IMPLEMENT]: 75, [WORK_TYPE.IMPLEMENT_LARGE]: 75, [WORK_TYPE.FIX]: 75,
155
155
  [WORK_TYPE.TEST]: 50, [WORK_TYPE.VERIFY]: 100, [WORK_TYPE.DOCS]: 30,
156
156
  };
157
157
  function _maxTurnsForType(type, engineConfig) {
158
- // Per-type defaults apply unless user explicitly set a custom maxTurns (different from engine default)
159
- const userOverride = engineConfig.maxTurns && engineConfig.maxTurns !== DEFAULTS.maxTurns ? engineConfig.maxTurns : null;
160
- return userOverride || _MAX_TURNS_BY_TYPE[type] || DEFAULTS.maxTurns;
158
+ // Priority: per-type config override global config override built-in per-type default global default
159
+ const perType = engineConfig.maxTurnsByType || {};
160
+ if (perType[type]) return perType[type];
161
+ const globalOverride = engineConfig.maxTurns && engineConfig.maxTurns !== DEFAULTS.maxTurns ? engineConfig.maxTurns : null;
162
+ return globalOverride || _MAX_TURNS_BY_TYPE[type] || DEFAULTS.maxTurns;
161
163
  }
162
164
 
163
165
  // Resolve dependency plan item IDs to their PR branches
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.594",
3
+ "version": "0.1.596",
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"