@yemi33/minions 0.1.388 → 0.1.389
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/dashboard.js +3 -0
- package/engine/spawn-agent.js +3 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/dashboard.js
CHANGED
|
@@ -1345,6 +1345,7 @@ const server = http.createServer(async (req, res) => {
|
|
|
1345
1345
|
const planPath = resolvePlanPath(body.source);
|
|
1346
1346
|
if (!fs.existsSync(planPath)) return jsonReply(res, 404, { error: 'plan file not found' });
|
|
1347
1347
|
const plan = safeJsonObj(planPath);
|
|
1348
|
+
if (!plan) return jsonReply(res, 500, { error: 'failed to read plan file' });
|
|
1348
1349
|
const idx = (plan.missing_features || []).findIndex(f => f.id === body.itemId);
|
|
1349
1350
|
if (idx < 0) return jsonReply(res, 404, { error: 'item not found in plan' });
|
|
1350
1351
|
|
|
@@ -2214,6 +2215,7 @@ If nothing to do: { "duplicates": [], "reclassify": [], "remove": [] }`;
|
|
|
2214
2215
|
for (const wiPath of wiPaths) {
|
|
2215
2216
|
try {
|
|
2216
2217
|
const items = safeJsonArr(wiPath);
|
|
2218
|
+
if (!items) continue;
|
|
2217
2219
|
const filtered = items.filter(w => w.sourcePlan !== body.file);
|
|
2218
2220
|
if (filtered.length < items.length) {
|
|
2219
2221
|
cleaned += items.length - filtered.length;
|
|
@@ -2921,6 +2923,7 @@ What would you like to discuss or change? When you're happy, say "approve" and I
|
|
|
2921
2923
|
|
|
2922
2924
|
const configPath = path.join(MINIONS_DIR, 'config.json');
|
|
2923
2925
|
const config = safeJsonObj(configPath);
|
|
2926
|
+
if (!config) return jsonReply(res, 500, { error: 'failed to read config' });
|
|
2924
2927
|
if (!config.projects) config.projects = [];
|
|
2925
2928
|
|
|
2926
2929
|
// Check if already linked
|
package/engine/spawn-agent.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
const fs = require('fs');
|
|
10
10
|
const path = require('path');
|
|
11
|
-
const { exec, runFile, cleanChildEnv } = require('./shared');
|
|
11
|
+
const { exec, runFile, cleanChildEnv, killGracefully, killImmediate } = require('./shared');
|
|
12
12
|
|
|
13
13
|
const [,, promptFile, sysPromptFile, ...extraArgs] = process.argv;
|
|
14
14
|
|
|
@@ -165,7 +165,7 @@ try {
|
|
|
165
165
|
} catch (err) {
|
|
166
166
|
console.error(`FATAL: stdin write failed (broken pipe): ${err.message}`);
|
|
167
167
|
fs.appendFileSync(debugPath, `STDIN ERROR: ${err.message}\n`);
|
|
168
|
-
|
|
168
|
+
killImmediate(proc);
|
|
169
169
|
process.exit(1);
|
|
170
170
|
}
|
|
171
171
|
|
|
@@ -197,8 +197,7 @@ const startupTimer = setTimeout(() => {
|
|
|
197
197
|
const msg = `TIMEOUT: Claude CLI produced no output after ${MCP_STARTUP_TIMEOUT / 1000}s (likely MCP server startup stall)`;
|
|
198
198
|
console.error(msg);
|
|
199
199
|
fs.appendFileSync(debugPath, msg + '\n');
|
|
200
|
-
|
|
201
|
-
setTimeout(() => { try { proc.kill('SIGKILL'); } catch {} }, 5000);
|
|
200
|
+
killGracefully(proc);
|
|
202
201
|
}
|
|
203
202
|
}, MCP_STARTUP_TIMEOUT);
|
|
204
203
|
proc.stdout.once('data', () => { gotFirstOutput = true; clearTimeout(startupTimer); });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.389",
|
|
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"
|