@yemi33/minions 0.1.1784 → 0.1.1786

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.1786 (2026-05-08)
4
+
5
+ ### Features
6
+ - fix pipeline title fallback (#2197)
7
+ - remove cc implement action alias (#2185)
8
+
3
9
  ## 0.1.1784 (2026-05-08)
4
10
 
5
11
  ### Fixes
@@ -141,7 +141,7 @@ function _ccMergeStreamText(prev, incoming) {
141
141
  return current + '\n\n' + next;
142
142
  }
143
143
 
144
- var CC_DISPATCH_ACTION_ALIASES = ['fix', 'implement', 'explore', 'review', 'test'];
144
+ var CC_DISPATCH_ACTION_ALIASES = ['fix', 'explore', 'review', 'test'];
145
145
  function _ccNormalizeDispatchAction(action) {
146
146
  if (!action || typeof action !== 'object' || typeof action.type !== 'string') return action;
147
147
  var type = action.type.trim().toLowerCase();
@@ -1045,7 +1045,7 @@ async function ccExecuteAction(action, targetTabId) {
1045
1045
  status.style.color = action._serverDuplicate ? 'var(--orange)' : 'var(--green)';
1046
1046
  }
1047
1047
  ccAddMessage('action', status.outerHTML, false, targetTabId);
1048
- if (['dispatch','create-meeting'].includes(action.type)) wakeEngine();
1048
+ if (['dispatch','fix','explore','review','test','create-meeting'].includes(action.type)) wakeEngine();
1049
1049
  refresh();
1050
1050
  return;
1051
1051
  }
@@ -1054,7 +1054,6 @@ async function ccExecuteAction(action, targetTabId) {
1054
1054
  switch (action.type) {
1055
1055
  case 'dispatch':
1056
1056
  case 'fix':
1057
- case 'implement':
1058
1057
  case 'explore':
1059
1058
  case 'review':
1060
1059
  case 'test': {
@@ -81,6 +81,15 @@ function _getPipelineEmptyRunCopy(pipeline) {
81
81
  return 'No runs yet. Use Run Now to start this pipeline.';
82
82
  }
83
83
 
84
+ function _getPipelineDisplayTitle(pipeline) {
85
+ var title = pipeline && pipeline.title != null ? String(pipeline.title).trim() : '';
86
+ if (title && title.toLowerCase() !== 'undefined' && title.toLowerCase() !== 'null') return title;
87
+ var id = pipeline && pipeline.id != null ? String(pipeline.id).trim() : '';
88
+ var human = id.replace(/[_-]+/g, ' ').replace(/\s+/g, ' ').trim();
89
+ if (human) return human.charAt(0).toUpperCase() + human.slice(1);
90
+ return 'Untitled pipeline';
91
+ }
92
+
84
93
  /**
85
94
  * Render clickable artifact links for a pipeline stage.
86
95
  * Each artifact type gets an icon and navigates to the relevant detail view.
@@ -301,6 +310,7 @@ function renderPipelines(pipelines) {
301
310
  if ((p.stages || []).length > 0) {
302
311
  progressHtml = _buildNodeChain(p.stages || [], displayRun, { compact: true, pipeline: p });
303
312
  }
313
+ var displayTitle = _getPipelineDisplayTitle(p);
304
314
 
305
315
  // Monitored resources (pipeline-level + stage-level, compact on card)
306
316
  var allResources = _collectMonitoredResources(p);
@@ -309,7 +319,7 @@ function renderPipelines(pipelines) {
309
319
  return '<div class="pipeline-card" onclick="if(shouldIgnoreSelectionClick(event))return;openPipelineDetail(\'' + escHtml(p.id) + '\')">' +
310
320
  '<div class="pipeline-card-header">' +
311
321
  '<div class="pipeline-card-main">' +
312
- '<strong class="pipeline-card-title">' + escHtml(p.title || p.id) + '</strong>' +
322
+ '<strong class="pipeline-card-title">' + escHtml(displayTitle) + '</strong>' +
313
323
  '<div class="pipeline-card-meta">' +
314
324
  '<span>' + escHtml(p.id) + '</span>' +
315
325
  '<span>' + escHtml(_getPipelineStageLabel(p)) + '</span>' +
@@ -332,6 +342,7 @@ function openPipelineDetail(id) {
332
342
  _stopPipelinePoll();
333
343
  var p = _pipelinesData.find(function(x) { return x.id === id; });
334
344
  if (!p) { alert('Pipeline not found'); return; }
345
+ var displayTitle = _getPipelineDisplayTitle(p);
335
346
 
336
347
  var html = '<div style="display:flex;flex-direction:column;gap:12px">';
337
348
 
@@ -426,7 +437,7 @@ function openPipelineDetail(id) {
426
437
 
427
438
  html += '</div>';
428
439
 
429
- document.getElementById('modal-title').textContent = 'Pipeline: ' + p.title;
440
+ document.getElementById('modal-title').textContent = 'Pipeline: ' + displayTitle;
430
441
  document.getElementById('modal-body').innerHTML = html;
431
442
  document.getElementById('modal').classList.add('open');
432
443
 
@@ -663,6 +674,7 @@ async function _submitCreatePipeline() {
663
674
  function openEditPipelineModal(id) {
664
675
  var p = _pipelinesData.find(function(x) { return x.id === id; });
665
676
  if (!p) return;
677
+ var displayTitle = _getPipelineDisplayTitle(p);
666
678
  var inputStyle = 'display:block;width:100%;margin-top:4px;padding:6px 8px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:var(--text-md);font-family:inherit';
667
679
  var pillStyle = 'display:inline-block;padding:4px 10px;margin:2px;border:1px solid var(--border);border-radius:12px;cursor:pointer;font-size:11px;color:var(--text);background:var(--bg);user-select:none;transition:all 0.15s';
668
680
  var linkStyle = 'font-size:10px;color:var(--blue);cursor:pointer;text-decoration:underline;margin-right:8px';
@@ -686,7 +698,7 @@ function openEditPipelineModal(id) {
686
698
 
687
699
  window._editPipelineId = id;
688
700
 
689
- document.getElementById('modal-title').textContent = 'Edit Pipeline: ' + p.title;
701
+ document.getElementById('modal-title').textContent = 'Edit Pipeline: ' + displayTitle;
690
702
  document.getElementById('modal-body').innerHTML =
691
703
  '<div style="display:flex;flex-direction:column;gap:10px">' +
692
704
  '<div style="color:var(--muted);font-size:11px">ID: <strong style="color:var(--text)">' + escHtml(id) + '</strong></div>' +
package/dashboard.js CHANGED
@@ -1799,7 +1799,7 @@ function _extractActionsJson(segment) {
1799
1799
  return null;
1800
1800
  }
1801
1801
 
1802
- const CC_DISPATCH_ACTION_ALIASES = new Set(['fix', 'implement', 'explore', 'review', 'test']);
1802
+ const CC_DISPATCH_ACTION_ALIASES = new Set(['fix', 'explore', 'review', 'test']);
1803
1803
 
1804
1804
  function normalizeCCAction(action) {
1805
1805
  if (!action || typeof action !== 'object') return action;
@@ -2209,7 +2209,7 @@ function createPipelineFromAction(action) {
2209
2209
  function _ccValidateAction(action) {
2210
2210
  if (!action || typeof action !== 'object' || !action.type) return 'action is missing required field: type';
2211
2211
  switch (action.type) {
2212
- case 'dispatch': case 'fix': case 'implement': case 'explore': case 'review': case 'test':
2212
+ case 'dispatch': case 'fix': case 'explore': case 'review': case 'test':
2213
2213
  if (!action.title || typeof action.title !== 'string' || !action.title.trim()) return `${action.type} action missing required field: title`;
2214
2214
  return null;
2215
2215
  case 'build-and-test':
@@ -2543,8 +2543,8 @@ async function executeCCActions(actions, { source = 'command-center', inferredPr
2543
2543
  }
2544
2544
  try {
2545
2545
  switch (action.type) {
2546
- case 'dispatch': case 'fix': case 'implement': case 'explore': case 'review': case 'test': {
2547
- const workType = routing.normalizeWorkType(action.workType || WORK_TYPE.IMPLEMENT, WORK_TYPE.IMPLEMENT);
2546
+ case 'dispatch': case 'fix': case 'explore': case 'review': case 'test': {
2547
+ const workType = routing.normalizeWorkType(action.workType || (action.type !== 'dispatch' ? action.type : WORK_TYPE.IMPLEMENT), WORK_TYPE.IMPLEMENT);
2548
2548
  const id = 'W-' + shared.uid();
2549
2549
  const project = action.project || '';
2550
2550
  const prRef = getWorkItemPrRef(action);
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "runtime": "copilot",
3
3
  "models": null,
4
- "cachedAt": "2026-05-08T00:32:02.189Z"
4
+ "cachedAt": "2026-05-08T01:29:08.471Z"
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.1784",
3
+ "version": "0.1.1786",
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"
@@ -91,11 +91,11 @@ I'll dispatch dallas to fix that bug.
91
91
  - `knowledge`: `title`, `content`, and `category` REQUIRED. Valid categories: architecture, conventions, project-notes, build-reports, reviews.
92
92
 
93
93
  Core action types:
94
- - **dispatch**: title (REQUIRED), workType, priority (low/medium/high), agents[] or agent (optional — both shapes accepted), project (REQUIRED when multi-project unless `pr` resolves to a tracked PR), description, pr (optional PR number/id/url for work that targets an existing PR), scope (`"fan-out"` only when the user explicitly asks to fan out to all agents). Do not emit `type:"fix"` or `type:"implement"`; emit `type:"dispatch"` with `workType:"fix"` or `workType:"implement"`.
94
+ - **dispatch**: title (REQUIRED), workType, priority (low/medium/high), agents[] or agent (optional — both shapes accepted), project (REQUIRED when multi-project unless `pr` resolves to a tracked PR), description, pr (optional PR number/id/url for work that targets an existing PR), scope (`"fan-out"` only when the user explicitly asks to fan out to all agents). Do not emit `type:"fix"` or `type:"implement"`; emit `type:"dispatch"` with `workType:"fix"` or emit `type:"dispatch"` with `workType:"implement"`.
95
95
  workTypes: `explore` (research/report only, NO PR), `ask` (answer/report, NO PR), `implement` (new code, PR REQUIRED), `fix` (standalone bug fix creates a PR; include `pr` when fixing review comments/build failures on an existing PR), `review` (code review, NO PR), `test` (tests, PR if new), `verify` (merge/build/maintenance, NO PR)
96
96
  If the user wants a design/architecture artifact committed through a PR, dispatch `implement` or `docs` rather than `explore`.
97
97
  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. If the user explicitly asks for fan-out/all agents, set `scope: "fan-out"`.
98
- After emitting a dispatch, fix, or implement action, return immediately; do not poll, monitor, watch, wait, or check until completion, and do not add follow-up status actions. Only create a watch, monitor, poll, or periodically check when the human explicitly asks for monitoring, watching, periodic checks, or notification on completion.
98
+ After emitting a dispatch-like action, return immediately; do not poll, monitor, watch, wait, or check until completion, and do not add follow-up status actions. Only create a watch, monitor, poll, or periodically check when the human explicitly asks for monitoring, watching, periodic checks, or notification on completion.
99
99
  - **build-and-test**: pr, project (optional), agent (optional) — Run the build-and-test playbook against a PR. The agent will checkout the PR branch, run the project's build/test commands, and report results. Use when the user asks to "run tests on PR X" or "build PR X" or after a fix to verify nothing regressed.
100
100
  Example: user says "run build and test on PR 1834" → `{"type":"build-and-test","pr":"1834"}`
101
101
  - **note**: title, content — save to inbox