@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 CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.389 (2026-04-06)
4
+
5
+ ### Features
6
+ - Fix spawn-agent.js direct proc.kill() — use cross-platform helpers (#243)
7
+
3
8
  ## 0.1.388 (2026-04-06)
4
9
 
5
10
  ### Fixes
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
@@ -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
- try { proc.kill('SIGTERM'); } catch { /* process may already be dead */ }
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
- try { proc.kill('SIGTERM'); } catch { /* process may be dead */ }
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.388",
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"