@yemi33/minions 0.1.1575 → 0.1.1577

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,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.1577 (2026-04-27)
4
+
5
+ ### Fixes
6
+ - gate review retries by _lastRetryAt + minRetryGapMs (#1770) (#1790)
7
+
3
8
  ## 0.1.1575 (2026-04-27)
4
9
 
5
10
  ### Other
package/engine/timeout.js CHANGED
@@ -273,6 +273,26 @@ function checkTimeouts(config) {
273
273
  isBlocking = true;
274
274
  blockingTool = 'Bash';
275
275
  }
276
+ // PowerShell tool call — Windows-native shell with same explicit-timeout
277
+ // semantics as Bash (input.timeout, max 600s). Required for projects that
278
+ // build via PowerShell on Windows (gradlew.bat, MSBuild, dotnet test) where
279
+ // the cold-start phase produces no stdout for several minutes (#1786).
280
+ if (name === 'PowerShell') {
281
+ const psTimeout = input.timeout || 120000;
282
+ blockingTimeout = Math.max(itemHeartbeat, psTimeout + 60000);
283
+ isBlocking = true;
284
+ blockingTool = 'PowerShell';
285
+ }
286
+ // Monitor tool call — blocks waiting for stdout-line notifications from a
287
+ // background process started via Bash with run_in_background. Between
288
+ // notifications the call produces no output, so the heartbeat monitor
289
+ // must extend timeout. No fixed timeout on Monitor — match Agent (30min)
290
+ // since both are inherently long-running waits (#1786).
291
+ if (name === 'Monitor') {
292
+ blockingTimeout = Math.max(itemHeartbeat, 1800000); // 30min for background process waits
293
+ isBlocking = true;
294
+ blockingTool = 'Monitor';
295
+ }
276
296
  // Agent (subagent) tool call — parent waits silently for child to complete
277
297
  if (name === 'Agent') {
278
298
  blockingTimeout = Math.max(itemHeartbeat, 1800000); // 30min for subagents
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.1575",
3
+ "version": "0.1.1577",
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"
@@ -43,6 +43,8 @@ cargo build
43
43
 
44
44
  If the build **fails**, report the errors clearly and stop. Do NOT attempt to fix the code.
45
45
 
46
+ > ⚠️ **Cold builds are silent for minutes** (Gradle daemon spin-up, dotnet restore, fresh `npm install`). Run them via `Bash(run_in_background: true)` then `Monitor` to stream stdout, OR pass an explicit `timeout` on the Bash call (max 600000 ms). Without one of these, the heartbeat monitor will kill the agent at ~5 min of silence. See **Long-Running Build / Test Commands** below.
47
+
46
48
  ### 4. Run tests
47
49
 
48
50
  ```bash
package/playbooks/fix.md CHANGED
@@ -47,6 +47,8 @@ Before pushing, verify the fix doesn't break anything:
47
47
  4. If the build fails 3 times, report the errors in your PR comment and stop.
48
48
  5. Do NOT push code that breaks existing tests or the build.
49
49
 
50
+ > ⚠️ **Long builds (Gradle, MSBuild, dotnet, fresh `npm install`)**: any command that may stay silent for more than ~4 minutes will be killed by the heartbeat monitor. Run it via `Bash(run_in_background: true)` then `Monitor` to stream stdout, OR pass an explicit `timeout` (max 600000 ms). See **Long-Running Build / Test Commands** below for the full pattern.
51
+
50
52
  ## Push & Comment on PR
51
53
 
52
54
  Only after build and tests pass:
@@ -65,6 +65,8 @@ After implementation, verify everything works:
65
65
  5. If the build fails 3 times, report the errors in your findings and stop
66
66
  6. Do NOT push code with a broken build or failing tests that you introduced
67
67
 
68
+ > ⚠️ **Long builds (Gradle, MSBuild, dotnet, fresh `npm install`)**: any command that may stay silent for more than ~4 minutes will be killed by the heartbeat monitor. Run it via `Bash(run_in_background: true)` then `Monitor` to stream stdout, OR pass an explicit `timeout` (max 600000 ms). See **Long-Running Build / Test Commands** below for the full pattern.
69
+
68
70
  ## Push
69
71
 
70
72
  Only after build and tests pass:
@@ -59,6 +59,8 @@ Build and test before pushing:
59
59
  4. **Run any other checks** the repo defines (linting, type checking, formatting).
60
60
  5. Do NOT push code with a broken build or failing tests that you introduced.
61
61
 
62
+ > ⚠️ **Long builds (Gradle, MSBuild, dotnet, fresh `npm install`)**: any command that may stay silent for more than ~4 minutes will be killed by the heartbeat monitor. Run it via `Bash(run_in_background: true)` then `Monitor` to stream stdout, OR pass an explicit `timeout` (max 600000 ms). See **Long-Running Build / Test Commands** below for the full pattern.
63
+
62
64
  ## Push & Create PR
63
65
 
64
66
  Only after build and tests pass:
@@ -49,6 +49,37 @@ Your context window may be compacted or summarized mid-task by Claude's automati
49
49
  Do **not** create a skill for one-off bug fixes, isolated command outputs, obvious repo facts, or anything already covered by existing docs/playbooks/skills.
50
50
  - Do TDD where it makes sense — write failing tests first, then implement, then verify tests pass. Especially for bug fixes (write a test that reproduces the bug) and new utility functions.
51
51
 
52
+ ## Long-Running Build / Test Commands (Heartbeat Safety)
53
+
54
+ The engine kills agents that produce no stdout for `heartbeatTimeout` (default **300s / 5 min**). A blocking shell call with zero stdout for that long is treated as hung. Cold builds (Gradle daemon spin-up, MSBuild restore, fresh `npm install`, `cargo build`) routinely exceed this with no intermediate output.
55
+
56
+ **Two approved patterns — pick one when a command may exceed 4 minutes of silence:**
57
+
58
+ ### Pattern A — Stream output via background process + Monitor (preferred)
59
+
60
+ ```
61
+ 1. Bash({ command: "./gradlew test", run_in_background: true }) # returns a bash_id immediately
62
+ 2. Monitor({ bash_id: "<id>" }) # streams each stdout line as a notification
63
+ ```
64
+
65
+ Why: each line that the build emits arrives as a notification, which resets the heartbeat. You see live progress in the dashboard. The Monitor call itself is recognised by the engine as a blocking tool (heartbeat extended ~30 min).
66
+
67
+ ### Pattern B — Single Bash call with explicit `timeout`
68
+
69
+ ```
70
+ Bash({ command: "./gradlew test", timeout: 600000 }) # max 600000 = 10 min
71
+ ```
72
+
73
+ The engine reads `input.timeout` from the tool call and extends the heartbeat to `timeout + 60s` for that turn. **The extension is opt-in** — without an explicit `timeout`, the agent is killed at `heartbeatTimeout`. PowerShell tool follows the same rule.
74
+
75
+ ### What NOT to do
76
+
77
+ - Do NOT run `./gradlew`, `mvn`, `dotnet test`, or any cold-cache build as a default `Bash` call (no `timeout`, no `run_in_background`). It will hit the 120s Bash default, then the 300s heartbeat, and the engine will kill you.
78
+ - Do NOT loop `sleep` to "wait it out" — sleep produces no stdout and looks identical to a hang.
79
+ - Do NOT pipe through `tee` thinking that helps — heartbeat reads agent stdout, not the underlying file.
80
+
81
+ If you don't know how long a command takes, default to **Pattern A** — there is no downside to streaming.
82
+
52
83
  ## Checking PR and Build Status
53
84
 
54
85
  When asked to check build status, CI results, or review state for a PR:
@@ -58,6 +58,8 @@ For each project worktree:
58
58
 
59
59
  If a build or test fails, **do NOT fix it** — report the exact error and continue with other projects.
60
60
 
61
+ > ⚠️ **Long builds (Gradle, MSBuild, dotnet, fresh `npm install`)**: any command that may stay silent for more than ~4 minutes will be killed by the heartbeat monitor. Run it via `Bash(run_in_background: true)` then `Monitor` to stream stdout, OR pass an explicit `timeout` (max 600000 ms). See **Long-Running Build / Test Commands** below for the full pattern.
62
+
61
63
  ## Step 4: Start the Application (if applicable)
62
64
 
63
65
  Determine if the project has a **runnable application** (web server, API, desktop app, mobile emulator, etc.) by reading its documentation and build config. For mobile apps, check if an emulator/simulator can be launched or if building an APK/IPA is the appropriate verification step.