@yemi33/minions 0.1.1609 → 0.1.1610

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,8 +1,9 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.1609 (2026-04-28)
3
+ ## 0.1.1610 (2026-04-28)
4
4
 
5
5
  ### Features
6
+ - hard-pin agent assignment when CC names a specific agent
6
7
  - auto-detect available CLI runtimes and pin engine.defaultCli
7
8
  - match runtime tags to actual logos (pixel-crab Claude, mascot Copilot)
8
9
  - replace runtime text tag with inline SVG logos
@@ -807,10 +807,16 @@ async function ccExecuteAction(action, targetTabId) {
807
807
  case 'review':
808
808
  case 'test': {
809
809
  var workType = action.workType || (action.type !== 'dispatch' ? action.type : 'implement');
810
+ // Forward both singular (`agent`) and plural (`agents`) hint shapes —
811
+ // the LLM emits either depending on phrasing ("assign to lambert" vs
812
+ // "dispatch to dallas, ralph"). The server-side handler promotes a
813
+ // single explicit agent to a hard pin so routing doesn't reassign it.
810
814
  var res = await _ccFetch('/api/work-items', {
811
815
  title: action.title, type: workType,
812
816
  priority: action.priority || 'medium', description: action.description || '',
813
- project: action.project || '', agents: action.agents || [],
817
+ project: action.project || '',
818
+ agent: action.agent || '',
819
+ agents: action.agents || [],
814
820
  });
815
821
  var d = await res.json();
816
822
  status.innerHTML = '&#10003; Dispatched: <strong>' + escHtml(d.id || action.title) + '</strong>';
package/dashboard.js CHANGED
@@ -1004,7 +1004,7 @@ async function executeCCActions(actions) {
1004
1004
  priority: action.priority || 'medium', description: action.description || '',
1005
1005
  status: WI_STATUS.PENDING, created: new Date().toISOString(),
1006
1006
  createdBy: 'command-center', project,
1007
- ...(action.agents?.length ? { preferred_agent: action.agents[0] } : {}),
1007
+ ...(action.agents?.length ? { preferred_agent: action.agents[0], agents: action.agents } : {}),
1008
1008
  ...(isOneShot ? { oneShot: true } : {}),
1009
1009
  });
1010
1010
  return items;
@@ -2207,8 +2207,17 @@ const server = http.createServer(async (req, res) => {
2207
2207
  status: WI_STATUS.PENDING, created: new Date().toISOString(), createdBy: 'dashboard',
2208
2208
  };
2209
2209
  if (body.scope) item.scope = body.scope;
2210
- if (body.agent) item.agent = body.agent;
2211
- if (body.agents) item.agents = body.agents;
2210
+ // Agent assignment normalization: when the caller (CC, dashboard form,
2211
+ // direct API) supplies a single explicit agent — either via `agent`
2212
+ // (singular) or a one-element `agents` array — treat it as a HARD pin
2213
+ // by setting `item.agent`. The engine reads `item.agent || resolveAgent(…)`,
2214
+ // so a hard-pinned item bypasses routing entirely and queues until that
2215
+ // exact agent is free. Multi-agent arrays remain `item.agents` (hints
2216
+ // for resolveAgent or fan-out scope).
2217
+ const _agentsArr = Array.isArray(body.agents) ? body.agents.filter(Boolean) : (typeof body.agents === 'string' && body.agents ? [body.agents] : []);
2218
+ if (body.agent) item.agent = String(body.agent);
2219
+ else if (_agentsArr.length === 1 && body.scope !== 'fan-out') item.agent = String(_agentsArr[0]);
2220
+ if (_agentsArr.length > 0) item.agents = _agentsArr;
2212
2221
  if (body.references) item.references = body.references;
2213
2222
  if (body.acceptanceCriteria) item.acceptanceCriteria = body.acceptanceCriteria;
2214
2223
  if (body.skipPr) item.skipPr = true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.1609",
3
+ "version": "0.1.1610",
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"
@@ -63,6 +63,7 @@ I'll dispatch dallas to fix that bug.
63
63
  Core action types:
64
64
  - **dispatch**: title, workType, priority (low/medium/high), agents[] (optional), project, description
65
65
  workTypes: `explore` (research, NO PR), `ask` (answer/report, NO PR), `implement` (new code, PR REQUIRED), `fix` (bug fix, PR REQUIRED), `review` (code review, NO PR), `test` (tests, PR if new), `verify` (merge/build/maintenance, NO PR)
66
+ When the user names a specific agent ("assign this to lambert"), put exactly that one name in `agents` (e.g. `"agents": ["lambert"]`). A single-agent assignment is hard-pinned by the server — it will queue for that agent only and skip the routing table. Use multi-agent arrays only when the user names multiple agents or asks for fan-out.
66
67
  - **note**: title, content — save to inbox
67
68
  - **knowledge**: title, content, category (architecture/conventions/project-notes/build-reports/reviews) — create new KB entry or copy existing doc to KB
68
69
  - **pin-to-pinned**: title, content, level (critical/warning) — write to pinned.md, force-injected into ALL agent prompts (rarely needed)