@yemi33/minions 0.1.501 → 0.1.503

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,12 +1,18 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.501 (2026-04-07)
3
+ ## 0.1.503 (2026-04-07)
4
+
5
+ ### Fixes
6
+ - live output reads only tail bytes from disk, increase cap to 64KB
7
+
8
+ ## 0.1.502 (2026-04-07)
4
9
 
5
10
  ### Features
6
11
  - explicitly-assigned work items bypass concurrency cap
7
12
  - strengthen CC dispatch contract with domain terminology mapping
8
13
 
9
14
  ### Fixes
15
+ - correct stale dispatch priority comment
10
16
  - comprehensive steering failure handling with user-visible feedback
11
17
 
12
18
  ## 0.1.498 (2026-04-07)
package/dashboard.js CHANGED
@@ -1681,18 +1681,24 @@ const server = http.createServer(async (req, res) => {
1681
1681
  async function handleAgentLive(req, res, match) {
1682
1682
  const agentId = match[1];
1683
1683
  const livePath = path.join(MINIONS_DIR, 'agents', agentId, 'live-output.log');
1684
- const content = safeRead(livePath);
1685
1684
  res.setHeader('Content-Type', 'text/plain; charset=utf-8');
1686
1685
  res.setHeader('Access-Control-Allow-Origin', '*');
1687
- if (!content) {
1686
+ const params = new URL(req.url, 'http://localhost').searchParams;
1687
+ const rawTail = parseInt(params.get('tail'));
1688
+ if (params.has('tail') && isNaN(rawTail)) return jsonReply(res, 400, { error: 'tail must be a number' });
1689
+ const tailBytes = isNaN(rawTail) ? 8192 : Math.max(1, Math.min(65536, rawTail));
1690
+ // Read only the tail bytes from disk instead of entire file
1691
+ try {
1692
+ const stat = fs.statSync(livePath);
1693
+ if (stat.size === 0) { res.end('No live output. Agent may not be running.'); return; }
1694
+ const start = Math.max(0, stat.size - tailBytes);
1695
+ const buf = Buffer.alloc(Math.min(tailBytes, stat.size));
1696
+ const fd = fs.openSync(livePath, 'r');
1697
+ fs.readSync(fd, buf, 0, buf.length, start);
1698
+ fs.closeSync(fd);
1699
+ res.end(buf.toString('utf8'));
1700
+ } catch {
1688
1701
  res.end('No live output. Agent may not be running.');
1689
- } else {
1690
- // Return last N bytes via ?tail=N param (default last 8KB)
1691
- const params = new URL(req.url, 'http://localhost').searchParams;
1692
- const rawTail = parseInt(params.get('tail'));
1693
- if (params.has('tail') && isNaN(rawTail)) return jsonReply(res, 400, { error: 'tail must be a number' });
1694
- const tailBytes = isNaN(rawTail) ? 8192 : Math.max(1, Math.min(10000, rawTail));
1695
- res.end(content.length > tailBytes ? content.slice(-tailBytes) : content);
1696
1702
  }
1697
1703
  return;
1698
1704
  }
package/engine.js CHANGED
@@ -2475,7 +2475,7 @@ async function tickInner() {
2475
2475
 
2476
2476
  const slotsAvailable = Math.max(0, maxConcurrent - activeCount);
2477
2477
 
2478
- // Priority dispatch: fixes > reviews > plan-to-prd > implement > verify > other
2478
+ // Priority dispatch: implement > fix/ask > review > test/verify > plan > other
2479
2479
  const typePriority = { 'implement:large': 0, implement: 0, fix: 1, ask: 1, review: 2, test: 3, verify: 3, plan: 4, 'plan-to-prd': 4 };
2480
2480
  const itemPriority = { high: 0, medium: 1, low: 2 };
2481
2481
  dispatch.pending.sort((a, b) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.501",
3
+ "version": "0.1.503",
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"