@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 +5 -0
- package/engine/timeout.js +20 -0
- package/package.json +1 -1
- package/playbooks/build-and-test.md +2 -0
- package/playbooks/fix.md +2 -0
- package/playbooks/implement-shared.md +2 -0
- package/playbooks/implement.md +2 -0
- package/playbooks/shared-rules.md +31 -0
- package/playbooks/verify.md +2 -0
package/CHANGELOG.md
CHANGED
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.
|
|
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:
|
package/playbooks/implement.md
CHANGED
|
@@ -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:
|
package/playbooks/verify.md
CHANGED
|
@@ -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.
|