@yemi33/minions 0.1.358 → 0.1.359
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 +4 -1
- package/engine/lifecycle.js +18 -9
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.359 (2026-04-06)
|
|
4
4
|
|
|
5
5
|
### Features
|
|
6
6
|
- pipeline plan stage uses LLM to generate structured plan from meeting
|
|
7
7
|
- show 'Converting to PRD' status instead of 'In Progress' during plan conversion
|
|
8
8
|
|
|
9
|
+
### Fixes
|
|
10
|
+
- smart no-PR handling — distinguish MCP stall from intentional no-PR
|
|
11
|
+
|
|
9
12
|
## 0.1.356 (2026-04-06)
|
|
10
13
|
|
|
11
14
|
### Fixes
|
package/engine/lifecycle.js
CHANGED
|
@@ -1279,11 +1279,8 @@ function runPostCompletionHooks(dispatchItem, agentId, code, stdout, config) {
|
|
|
1279
1279
|
// Detect implement tasks that completed without creating a PR
|
|
1280
1280
|
if (isSuccess && (type === WORK_TYPE.IMPLEMENT || type === WORK_TYPE.IMPLEMENT_LARGE || type === WORK_TYPE.FIX) && prsCreatedCount === 0 && meta?.item?.id && !meta?.item?.skipPr && meta?.project?.localPath) {
|
|
1281
1281
|
// Check if a PR already exists linked to this work item (from a previous attempt)
|
|
1282
|
-
const projects = shared.getProjects(config);
|
|
1283
1282
|
const existingPrFound = Object.values(getPrLinks()).includes(meta.item.id);
|
|
1284
1283
|
if (!existingPrFound) {
|
|
1285
|
-
log('warn', `Agent completed implement task ${meta.item.id} but no PR was created — reverting to failed for retry`);
|
|
1286
|
-
// Revert to failed so auto-retry can re-attempt with PR creation
|
|
1287
1284
|
let wiPath;
|
|
1288
1285
|
if (meta.source === 'central-work-item' || meta.source === 'central-work-item-fanout') {
|
|
1289
1286
|
wiPath = path.join(MINIONS_DIR, 'work-items.json');
|
|
@@ -1294,18 +1291,30 @@ function runPostCompletionHooks(dispatchItem, agentId, code, stdout, config) {
|
|
|
1294
1291
|
const items = safeJson(wiPath) || [];
|
|
1295
1292
|
const wi = items.find(i => i.id === meta.item.id);
|
|
1296
1293
|
if (wi) {
|
|
1297
|
-
wi.noPr = true;
|
|
1298
|
-
wi.failReason = 'Completed without creating a pull request';
|
|
1299
1294
|
const retries = wi._retryCount || 0;
|
|
1300
|
-
if (
|
|
1295
|
+
// Check if agent produced meaningful output (not just MCP timeout)
|
|
1296
|
+
const hasOutput = stdout && stdout.length > 500;
|
|
1297
|
+
if (!hasOutput && retries < ENGINE_DEFAULTS.maxRetries) {
|
|
1298
|
+
// No meaningful output — likely MCP stall or startup failure, retry
|
|
1301
1299
|
wi.status = WI_STATUS.PENDING;
|
|
1302
1300
|
wi._retryCount = retries + 1;
|
|
1303
1301
|
delete wi.dispatched_at;
|
|
1304
1302
|
delete wi.dispatched_to;
|
|
1305
|
-
log('info', `Auto-retry ${retries + 1}/${ENGINE_DEFAULTS.maxRetries} for ${meta.item.id} (no PR
|
|
1303
|
+
log('info', `Auto-retry ${retries + 1}/${ENGINE_DEFAULTS.maxRetries} for ${meta.item.id} (no output, no PR)`);
|
|
1304
|
+
} else if (hasOutput) {
|
|
1305
|
+
// Agent ran successfully but chose not to create a PR — mark done
|
|
1306
|
+
wi.status = WI_STATUS.DONE;
|
|
1307
|
+
wi.completedAt = ts();
|
|
1308
|
+
wi._noPr = true;
|
|
1309
|
+
wi._noPrReason = 'Agent completed without creating a PR (changes may already exist or not be needed)';
|
|
1310
|
+
delete wi.failReason;
|
|
1311
|
+
log('info', `${meta.item.id} completed without PR — marking done (agent produced output)`);
|
|
1306
1312
|
} else {
|
|
1307
|
-
|
|
1308
|
-
|
|
1313
|
+
// No output after max retries — mark as needs review
|
|
1314
|
+
wi.status = WI_STATUS.NEEDS_REVIEW;
|
|
1315
|
+
wi._noPr = true;
|
|
1316
|
+
wi.failReason = 'Completed without output or PR after ' + ENGINE_DEFAULTS.maxRetries + ' attempts';
|
|
1317
|
+
log('warn', `${meta.item.id} needs review — no output after ${ENGINE_DEFAULTS.maxRetries} retries`);
|
|
1309
1318
|
}
|
|
1310
1319
|
shared.safeWrite(wiPath, items);
|
|
1311
1320
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.359",
|
|
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"
|