@yemi33/minions 0.1.354 → 0.1.356
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 +7 -1
- package/engine/pipeline.js +5 -16
- package/engine/spawn-agent.js +15 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.356 (2026-04-06)
|
|
4
4
|
|
|
5
5
|
### Fixes
|
|
6
|
+
- add MCP startup timeout — kill agent if no output after 3 minutes
|
|
7
|
+
|
|
8
|
+
## 0.1.355 (2026-04-06)
|
|
9
|
+
|
|
10
|
+
### Fixes
|
|
11
|
+
- pipeline plan stage includes only meeting conclusion, not full transcript
|
|
6
12
|
- pipeline plans include full meeting content, conclusion playbook requires concrete details
|
|
7
13
|
- pipeline template regex now matches hyphenated stage IDs
|
|
8
14
|
- pipeline Continue button shows immediate feedback
|
package/engine/pipeline.js
CHANGED
|
@@ -227,29 +227,18 @@ function executePlanStage(stage, stageState, run, config) {
|
|
|
227
227
|
const depStage = run.stages[depId];
|
|
228
228
|
if (!depStage) continue;
|
|
229
229
|
|
|
230
|
-
// If dependency is a meeting, include
|
|
230
|
+
// If dependency is a meeting, include the conclusion (which should be concrete and actionable)
|
|
231
231
|
const meetingId = depStage.artifacts?.meetings?.[0];
|
|
232
232
|
if (meetingId) {
|
|
233
233
|
try {
|
|
234
234
|
const mtgPath = path.join(__dirname, '..', 'meetings', meetingId + '.json');
|
|
235
235
|
const mtg = safeJson(mtgPath);
|
|
236
236
|
if (mtg) {
|
|
237
|
-
content += `## Meeting: ${mtg.title || depId}\n\n`;
|
|
238
|
-
content += `**Agenda:** ${mtg.agenda || ''}\n\n`;
|
|
239
|
-
// Include each agent's findings
|
|
240
|
-
for (const [agent, finding] of Object.entries(mtg.findings || {})) {
|
|
241
|
-
const text = typeof finding === 'string' ? finding : finding?.content || '';
|
|
242
|
-
if (text) content += `### ${agent} — Findings\n\n${text}\n\n`;
|
|
243
|
-
}
|
|
244
|
-
// Include debate if present
|
|
245
|
-
for (const [agent, debate] of Object.entries(mtg.debate || {})) {
|
|
246
|
-
const text = typeof debate === 'string' ? debate : debate?.content || '';
|
|
247
|
-
if (text) content += `### ${agent} — Debate\n\n${text}\n\n`;
|
|
248
|
-
}
|
|
249
|
-
// Include conclusion
|
|
250
237
|
const conclusion = typeof mtg.conclusion === 'string' ? mtg.conclusion : mtg.conclusion?.content || '';
|
|
251
|
-
if (conclusion)
|
|
252
|
-
|
|
238
|
+
if (conclusion) {
|
|
239
|
+
content += `## Meeting Conclusion: ${mtg.title || depId}\n\n${conclusion}\n\n`;
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
253
242
|
}
|
|
254
243
|
} catch { /* fall through to output-only */ }
|
|
255
244
|
}
|
package/engine/spawn-agent.js
CHANGED
|
@@ -189,7 +189,22 @@ proc.stderr.on('data', (chunk) => {
|
|
|
189
189
|
// Pipe stdout to parent
|
|
190
190
|
proc.stdout.pipe(process.stdout);
|
|
191
191
|
|
|
192
|
+
// MCP startup timeout: kill if no stdout within 3 minutes (MCP servers downloading/starting)
|
|
193
|
+
const MCP_STARTUP_TIMEOUT = 180000; // 3 minutes
|
|
194
|
+
let gotFirstOutput = false;
|
|
195
|
+
const startupTimer = setTimeout(() => {
|
|
196
|
+
if (!gotFirstOutput) {
|
|
197
|
+
const msg = `TIMEOUT: Claude CLI produced no output after ${MCP_STARTUP_TIMEOUT / 1000}s (likely MCP server startup stall)`;
|
|
198
|
+
console.error(msg);
|
|
199
|
+
fs.appendFileSync(debugPath, msg + '\n');
|
|
200
|
+
try { proc.kill('SIGTERM'); } catch { /* process may be dead */ }
|
|
201
|
+
setTimeout(() => { try { proc.kill('SIGKILL'); } catch {} }, 5000);
|
|
202
|
+
}
|
|
203
|
+
}, MCP_STARTUP_TIMEOUT);
|
|
204
|
+
proc.stdout.once('data', () => { gotFirstOutput = true; clearTimeout(startupTimer); });
|
|
205
|
+
|
|
192
206
|
proc.on('close', (code) => {
|
|
207
|
+
clearTimeout(startupTimer);
|
|
193
208
|
fs.appendFileSync(debugPath, `EXIT: code=${code}\nSTDERR: ${stderrBuf.slice(0, 500)}\n`);
|
|
194
209
|
process.exit(code || 0);
|
|
195
210
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.356",
|
|
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"
|