@yemi33/minions 0.1.583 → 0.1.585

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,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.585 (2026-04-08)
4
+
5
+ ### Fixes
6
+ - minions dash opens browser when dashboard already running
7
+ - add conditional block support to playbook renderer
8
+
3
9
  ## 0.1.583 (2026-04-08)
4
10
 
5
11
  ### Fixes
package/bin/minions.js CHANGED
@@ -703,7 +703,25 @@ if (!cmd || cmd === 'help' || cmd === '--help' || cmd === '-h') {
703
703
  const { doctor } = require(path.join(MINIONS_HOME, 'engine', 'preflight'));
704
704
  doctor(MINIONS_HOME).then(ok => process.exit(ok ? 0 : 1));
705
705
  } else if (cmd === 'dash' || cmd === 'dashboard') {
706
- delegate('dashboard.js', rest);
706
+ ensureInstalled();
707
+ // If dashboard is already running, just open the browser
708
+ const http = require('http');
709
+ const dashPort = 7331;
710
+ const probe = http.get(`http://localhost:${dashPort}/api/status`, (res) => {
711
+ res.resume();
712
+ // Dashboard is running — open browser
713
+ const url = `http://localhost:${dashPort}`;
714
+ console.log(`\n Dashboard already running: ${url}\n`);
715
+ try {
716
+ const openCmd = process.platform === 'win32' ? `start ${url}` : process.platform === 'darwin' ? `open ${url}` : `xdg-open ${url}`;
717
+ execSync(openCmd, { stdio: 'ignore', windowsHide: true });
718
+ } catch {}
719
+ });
720
+ probe.on('error', () => {
721
+ // Dashboard not running — start it
722
+ delegate('dashboard.js', rest);
723
+ });
724
+ probe.setTimeout(2000, () => { probe.destroy(); delegate('dashboard.js', rest); });
707
725
  } else if (engineCmds.has(cmd)) {
708
726
  delegate('engine.js', [cmd, ...rest]);
709
727
  } else {
@@ -283,6 +283,12 @@ function renderPlaybook(type, vars) {
283
283
  };
284
284
  const allVars = { ...projectVars, ...vars };
285
285
 
286
+ // Process conditional blocks: {{#key}}...{{/key}} — include block only if key is truthy
287
+ content = content.replace(/\{\{#(\w+)\}\}([\s\S]*?)\{\{\/\1\}\}/g, (_, key, block) => {
288
+ const val = allVars[key];
289
+ return (val && String(val).trim()) ? block : '';
290
+ });
291
+
286
292
  // Substitute variables
287
293
  for (const [key, val] of Object.entries(allVars)) {
288
294
  content = content.replace(new RegExp(`\\{\\{${key}\\}\\}`, 'g'), String(val));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.583",
3
+ "version": "0.1.585",
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"