@yemi33/minions 0.1.585 → 0.1.587

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,15 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.585 (2026-04-08)
3
+ ## 0.1.587 (2026-04-08)
4
4
 
5
5
  ### Fixes
6
+ - use TCP socket probe for minions dash port check
6
7
  - minions dash opens browser when dashboard already running
7
8
  - add conditional block support to playbook renderer
8
9
 
10
+ ### Other
11
+ - perf: per-type max-turns and explicit stop conditions in playbooks
12
+
9
13
  ## 0.1.583 (2026-04-08)
10
14
 
11
15
  ### Fixes
package/bin/minions.js CHANGED
@@ -705,11 +705,15 @@ if (!cmd || cmd === 'help' || cmd === '--help' || cmd === '-h') {
705
705
  } else if (cmd === 'dash' || cmd === 'dashboard') {
706
706
  ensureInstalled();
707
707
  // If dashboard is already running, just open the browser
708
- const http = require('http');
708
+ const net = require('net');
709
709
  const dashPort = 7331;
710
- const probe = http.get(`http://localhost:${dashPort}/api/status`, (res) => {
711
- res.resume();
712
- // Dashboard is running — open browser
710
+ const sock = new net.Socket();
711
+ let handled = false;
712
+ sock.setTimeout(1000);
713
+ sock.on('connect', () => {
714
+ sock.destroy();
715
+ if (handled) return;
716
+ handled = true;
713
717
  const url = `http://localhost:${dashPort}`;
714
718
  console.log(`\n Dashboard already running: ${url}\n`);
715
719
  try {
@@ -717,11 +721,18 @@ if (!cmd || cmd === 'help' || cmd === '--help' || cmd === '-h') {
717
721
  execSync(openCmd, { stdio: 'ignore', windowsHide: true });
718
722
  } catch {}
719
723
  });
720
- probe.on('error', () => {
721
- // Dashboard not running — start it
724
+ sock.on('error', () => {
725
+ if (handled) return;
726
+ handled = true;
722
727
  delegate('dashboard.js', rest);
723
728
  });
724
- probe.setTimeout(2000, () => { probe.destroy(); delegate('dashboard.js', rest); });
729
+ sock.on('timeout', () => {
730
+ sock.destroy();
731
+ if (handled) return;
732
+ handled = true;
733
+ delegate('dashboard.js', rest);
734
+ });
735
+ sock.connect(dashPort, '127.0.0.1');
725
736
  } else if (engineCmds.has(cmd)) {
726
737
  delegate('engine.js', [cmd, ...rest]);
727
738
  } else {
package/engine.js CHANGED
@@ -147,6 +147,17 @@ let engineRestartGraceUntil = 0; // timestamp — suppress orphan detection unti
147
147
  // Cleared at the start of each tick cycle (see tickInner)
148
148
  const _failedRefCache = new Set();
149
149
  const _FAST_WORK_TYPES = new Set([WORK_TYPE.EXPLORE, WORK_TYPE.ASK, WORK_TYPE.REVIEW]);
150
+ const _MAX_TURNS_BY_TYPE = {
151
+ [WORK_TYPE.EXPLORE]: 30, [WORK_TYPE.ASK]: 20, [WORK_TYPE.REVIEW]: 30,
152
+ [WORK_TYPE.DECOMPOSE]: 15, [WORK_TYPE.PLAN]: 30, [WORK_TYPE.PLAN_TO_PRD]: 20,
153
+ [WORK_TYPE.MEETING]: 30,
154
+ [WORK_TYPE.IMPLEMENT]: 75, [WORK_TYPE.IMPLEMENT_LARGE]: 75, [WORK_TYPE.FIX]: 50,
155
+ [WORK_TYPE.TEST]: 50, [WORK_TYPE.VERIFY]: 100, [WORK_TYPE.DOCS]: 30,
156
+ };
157
+ function _maxTurnsForType(type, engineConfig) {
158
+ // User override takes precedence, then per-type default, then global default
159
+ return engineConfig.maxTurns || _MAX_TURNS_BY_TYPE[type] || DEFAULTS.maxTurns;
160
+ }
150
161
 
151
162
  // Resolve dependency plan item IDs to their PR branches
152
163
  function resolveDependencyBranches(depIds, sourcePlan, project, config) {
@@ -484,7 +495,7 @@ async function spawnAgent(dispatchItem, config) {
484
495
  // Build claude CLI args
485
496
  const args = [
486
497
  '--output-format', claudeConfig.outputFormat || 'stream-json',
487
- '--max-turns', String(engineConfig.maxTurns || DEFAULTS.maxTurns),
498
+ '--max-turns', String(_maxTurnsForType(type, engineConfig)),
488
499
  '--verbose',
489
500
  '--permission-mode', claudeConfig.permissionMode || 'bypassPermissions'
490
501
  ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.585",
3
+ "version": "0.1.587",
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"
@@ -63,5 +63,9 @@ Use subagents only for genuinely parallel, independent tasks. For reading files,
63
63
  - Read `notes.md` for all team rules before starting.
64
64
  - If you discover a repeatable workflow, output it as a ```skill block (the engine auto-extracts it to ~/.claude/skills/)
65
65
 
66
+ ## When to Stop
67
+
68
+ Your task is complete once you have written your findings to the inbox file. Do NOT continue reading additional files, exploring tangential areas, or producing extra analysis beyond what was asked. Write your findings and stop.
69
+
66
70
  ## Team Decisions
67
71
  {{notes_content}}
package/playbooks/fix.md CHANGED
@@ -60,6 +60,8 @@ Before pushing your fix, run the project's test suite:
60
60
  3. If any tests fail due to your changes, fix them before pushing
61
61
  4. Do NOT push code that breaks existing tests
62
62
 
63
- ## Signal Completion
63
+ ## When to Stop
64
+
65
+ Your task is complete once you have: (1) pushed the fix, (2) created or updated the PR, and (3) confirmed tests pass. Do NOT continue exploring unrelated code or making additional improvements. Stop immediately after the fix is verified.
64
66
 
65
67
  **Note:** Do NOT write to `agents/*/status.json` — the engine manages your status automatically.
@@ -60,7 +60,9 @@ Do NOT remove the worktree — the engine handles cleanup automatically.
60
60
 
61
61
  {{pr_section}}
62
62
 
63
- ## Signal Completion
63
+ ## When to Stop
64
+
65
+ Your task is complete once you have: (1) pushed your branch, (2) created the PR, and (3) confirmed the build passes. Do NOT continue exploring, refactoring, or adding features beyond the task description. Stop immediately after the PR is created and verified.
64
66
 
65
67
  **Note:** Do NOT write to `agents/*/status.json` — the engine manages your status automatically.
66
68
 
@@ -67,6 +67,8 @@ If you encounter merge conflicts (e.g., the PR shows conflicts):
67
67
 
68
68
  ## Do not run git checkout on the main working tree. Use `git diff` and `git show` only.
69
69
 
70
- ## Signal Completion
70
+ ## When to Stop
71
+
72
+ Your task is complete once you have: (1) posted your review comment on the PR, and (2) cast your vote. Do NOT continue reading unrelated files or performing additional analysis. Stop after voting.
71
73
 
72
74
  **Note:** Do NOT write to `agents/*/status.json` — the engine manages your status automatically.