@yemi33/minions 0.1.878 → 0.1.880

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,16 +1,20 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.878 (2026-04-11)
3
+ ## 0.1.880 (2026-04-11)
4
4
 
5
5
  ### Features
6
6
  - add 13 missing CC action types for full dashboard parity
7
7
 
8
8
  ### Fixes
9
+ - suppress false [steering-failed] banner when agent responded (closes #894) (#896)
9
10
  - delete .backup sidecar when archiving PRD
10
11
  - CC action bugs + security guard on generic fallback
11
12
  - reset central work-items.json on agent kill (closes #890) (#891)
12
13
  - include started_at in done/error agent status so duration renders
13
14
 
15
+ ### Other
16
+ - simplify: CC actions cleanup — missing wakeEngine, redundant refresh, hardened fallback
17
+
14
18
  ## 0.1.873 (2026-04-11)
15
19
 
16
20
  ### Features
@@ -758,13 +758,13 @@ async function ccExecuteAction(action, targetTabId) {
758
758
  await _ccFetch('/api/pinned', { title: action.title, content: action.content || action.description, level: action.level || '' });
759
759
  status.innerHTML = '&#x1F4CC; Pinned: <strong>' + escHtml(action.title) + '</strong> — visible to all agents';
760
760
  status.style.color = 'var(--green)';
761
- refresh();
762
761
  break;
763
762
  }
764
763
  case 'plan': {
765
764
  await _ccFetch('/api/plan', { title: action.title, description: action.description, project: action.project, branchStrategy: action.branchStrategy || 'parallel' });
766
765
  status.innerHTML = '&#10003; Plan queued: <strong>' + escHtml(action.title) + '</strong>';
767
766
  status.style.color = 'var(--green)';
767
+ wakeEngine();
768
768
  break;
769
769
  }
770
770
  case 'cancel': {
@@ -792,6 +792,7 @@ async function ccExecuteAction(action, targetTabId) {
792
792
  await _ccFetch('/api/plans/approve', { file: action.file });
793
793
  status.innerHTML = '&#10003; Approved plan: <strong>' + escHtml(action.file) + '</strong>';
794
794
  status.style.color = 'var(--green)';
795
+ wakeEngine();
795
796
  break;
796
797
  }
797
798
  case 'resume-plan': {
@@ -857,14 +858,10 @@ async function ccExecuteAction(action, targetTabId) {
857
858
  break;
858
859
  }
859
860
  case 'execute-plan': {
860
- await fetch('/api/plans/execute', {
861
- method: 'POST', headers: { 'Content-Type': 'application/json' },
862
- body: JSON.stringify({ file: action.file, project: action.project || '' })
863
- });
861
+ await _ccFetch('/api/plans/execute', { file: action.file, project: action.project || '' });
864
862
  status.innerHTML = '&#10003; Plan execution queued: <strong>' + escHtml(action.file) + '</strong>';
865
863
  status.style.color = 'var(--green)';
866
864
  wakeEngine();
867
- refreshPlans();
868
865
  break;
869
866
  }
870
867
  case 'file-edit': {
@@ -957,14 +954,12 @@ async function ccExecuteAction(action, targetTabId) {
957
954
  await _ccFetch('/api/pinned/remove', { title: action.title });
958
955
  status.innerHTML = '&#10003; Unpinned: <strong>' + escHtml(action.title) + '</strong>';
959
956
  status.style.color = 'var(--green)';
960
- refresh();
961
957
  break;
962
958
  }
963
959
  case 'archive-plan': {
964
960
  await _ccFetch('/api/plans/archive', { file: action.file });
965
961
  status.innerHTML = '&#10003; Archived plan: <strong>' + escHtml(action.file) + '</strong>';
966
962
  status.style.color = 'var(--green)';
967
- refresh();
968
963
  break;
969
964
  }
970
965
  case 'reject-plan': {
@@ -1000,14 +995,12 @@ async function ccExecuteAction(action, targetTabId) {
1000
995
  await _ccFetch('/api/pull-requests/link', { url: action.url, title: action.title || '', project: action.project || '', autoObserve: action.autoObserve !== false });
1001
996
  status.innerHTML = '&#10003; PR linked: <strong>' + escHtml(action.url) + '</strong>';
1002
997
  status.style.color = 'var(--green)';
1003
- refresh();
1004
998
  break;
1005
999
  }
1006
1000
  case 'archive-meeting': {
1007
1001
  await _ccFetch('/api/meetings/archive', { id: action.id });
1008
1002
  status.innerHTML = '&#10003; Meeting archived: <strong>' + escHtml(action.id) + '</strong>';
1009
1003
  status.style.color = 'var(--green)';
1010
- refresh();
1011
1004
  break;
1012
1005
  }
1013
1006
  case 'update-routing': {
@@ -1031,21 +1024,18 @@ async function ccExecuteAction(action, targetTabId) {
1031
1024
  await _ccFetch('/api/pipelines', { id: action.id, title: action.title, stages: action.stages || [], trigger: action.trigger || null, stopWhen: action.stopWhen || null, monitoredResources: action.monitoredResources || null });
1032
1025
  status.innerHTML = '&#10003; Pipeline created: <strong>' + escHtml(action.id) + '</strong>';
1033
1026
  status.style.color = 'var(--green)';
1034
- refresh();
1035
1027
  break;
1036
1028
  }
1037
1029
  case 'delete-pipeline': {
1038
1030
  await _ccFetch('/api/pipelines/delete', { id: action.id });
1039
1031
  status.innerHTML = '&#10003; Pipeline deleted: <strong>' + escHtml(action.id) + '</strong>';
1040
1032
  status.style.color = 'var(--green)';
1041
- refresh();
1042
1033
  break;
1043
1034
  }
1044
1035
  case 'abort-pipeline': {
1045
1036
  await _ccFetch('/api/pipelines/abort', { id: action.id });
1046
1037
  status.innerHTML = '&#10003; Pipeline aborted: <strong>' + escHtml(action.id) + '</strong>';
1047
1038
  status.style.color = 'var(--green)';
1048
- refresh();
1049
1039
  break;
1050
1040
  }
1051
1041
  case 'retrigger-pipeline': {
@@ -1059,21 +1049,19 @@ async function ccExecuteAction(action, targetTabId) {
1059
1049
  await _ccFetch('/api/meetings/advance', { id: action.id });
1060
1050
  status.innerHTML = '&#10003; Meeting advanced: <strong>' + escHtml(action.id) + '</strong>';
1061
1051
  status.style.color = 'var(--green)';
1062
- refresh();
1052
+ wakeEngine();
1063
1053
  break;
1064
1054
  }
1065
1055
  case 'end-meeting': {
1066
1056
  await _ccFetch('/api/meetings/end', { id: action.id });
1067
1057
  status.innerHTML = '&#10003; Meeting ended: <strong>' + escHtml(action.id) + '</strong>';
1068
1058
  status.style.color = 'var(--green)';
1069
- refresh();
1070
1059
  break;
1071
1060
  }
1072
1061
  case 'delete-meeting': {
1073
1062
  await _ccFetch('/api/meetings/delete', { id: action.id });
1074
1063
  status.innerHTML = '&#10003; Meeting deleted: <strong>' + escHtml(action.id) + '</strong>';
1075
1064
  status.style.color = 'var(--green)';
1076
- refresh();
1077
1065
  break;
1078
1066
  }
1079
1067
  case 'trigger-verify': {
@@ -1094,10 +1082,8 @@ async function ccExecuteAction(action, targetTabId) {
1094
1082
  await _ccFetch('/api/plans/unarchive', { file: action.file });
1095
1083
  status.innerHTML = '&#10003; Plan unarchived: <strong>' + escHtml(action.file) + '</strong>';
1096
1084
  status.style.color = 'var(--green)';
1097
- refresh();
1098
1085
  break;
1099
1086
  }
1100
- // ── High-impact gaps ──
1101
1087
  case 'continue-pipeline': {
1102
1088
  await _ccFetch('/api/pipelines/continue', { id: action.id });
1103
1089
  status.innerHTML = '&#10003; Pipeline continued: <strong>' + escHtml(action.id) + '</strong>';
@@ -1115,7 +1101,6 @@ async function ccExecuteAction(action, targetTabId) {
1115
1101
  await _ccFetch('/api/work-items/archive', { id: action.id });
1116
1102
  status.innerHTML = '&#10003; Work item archived: <strong>' + escHtml(action.id) + '</strong>';
1117
1103
  status.style.color = 'var(--green)';
1118
- refresh();
1119
1104
  break;
1120
1105
  }
1121
1106
  case 'reopen-prd-item': {
@@ -1129,10 +1114,8 @@ async function ccExecuteAction(action, targetTabId) {
1129
1114
  await _ccFetch('/api/inbox/promote-kb', { name: action.file, category: action.category || 'project-notes' });
1130
1115
  status.innerHTML = '&#10003; Promoted to KB: <strong>' + escHtml(action.file) + '</strong>';
1131
1116
  status.style.color = 'var(--green)';
1132
- refresh();
1133
1117
  break;
1134
1118
  }
1135
- // ── Lower-priority gaps ──
1136
1119
  case 'revise-plan': {
1137
1120
  await _ccFetch('/api/plans/revise', { file: action.file, feedback: action.feedback || action.description, requestedBy: 'command-center' });
1138
1121
  status.innerHTML = '&#10003; Plan revision dispatched: <strong>' + escHtml(action.file) + '</strong>';
@@ -1150,14 +1133,12 @@ async function ccExecuteAction(action, targetTabId) {
1150
1133
  await _ccFetch('/api/kb-pins/toggle', { key: action.key });
1151
1134
  status.innerHTML = '&#10003; KB pin toggled: <strong>' + escHtml(action.key) + '</strong>';
1152
1135
  status.style.color = 'var(--green)';
1153
- refresh();
1154
1136
  break;
1155
1137
  }
1156
1138
  case 'add-project': {
1157
1139
  await _ccFetch('/api/projects/add', { localPath: action.localPath, name: action.name || '', repoHost: action.repoHost || 'github' });
1158
1140
  status.innerHTML = '&#10003; Project added: <strong>' + escHtml(action.name || action.localPath) + '</strong>';
1159
1141
  status.style.color = 'var(--green)';
1160
- refresh();
1161
1142
  break;
1162
1143
  }
1163
1144
  case 'restart-engine': {
@@ -1170,14 +1151,12 @@ async function ccExecuteAction(action, targetTabId) {
1170
1151
  await _ccFetch('/api/pull-requests/delete', { id: action.id, project: action.project || '' });
1171
1152
  status.innerHTML = '&#10003; PR unlinked: <strong>' + escHtml(action.id) + '</strong>';
1172
1153
  status.style.color = 'var(--green)';
1173
- refresh();
1174
1154
  break;
1175
1155
  }
1176
1156
  case 'unarchive-meeting': {
1177
1157
  await _ccFetch('/api/meetings/unarchive', { id: action.id });
1178
1158
  status.innerHTML = '&#10003; Meeting unarchived: <strong>' + escHtml(action.id) + '</strong>';
1179
1159
  status.style.color = 'var(--green)';
1180
- refresh();
1181
1160
  break;
1182
1161
  }
1183
1162
  case 'reset-settings': {
@@ -1188,7 +1167,7 @@ async function ccExecuteAction(action, targetTabId) {
1188
1167
  }
1189
1168
  default: {
1190
1169
  // Generic fallback: if action has an `endpoint` field, call it directly (local API only)
1191
- if (action.endpoint && action.endpoint.startsWith('/api/') && !action.endpoint.includes('..')) {
1170
+ if (action.endpoint && action.endpoint.startsWith('/api/') && !action.endpoint.includes('..') && !/\%2e/i.test(action.endpoint)) {
1192
1171
  var genRes = await _ccFetch(action.endpoint, action.params || {});
1193
1172
  var genData = await genRes.json().catch(function() { return {}; });
1194
1173
  status.innerHTML = '&#10003; ' + escHtml(action.type) + ': ' + escHtml(genData.message || genData.id || 'done');
package/engine.js CHANGED
@@ -898,7 +898,11 @@ async function spawnAgent(dispatchItem, config) {
898
898
  try { fs.unlinkSync(steerPromptPath); } catch { /* cleanup */ }
899
899
  if (resumeCode !== 0) {
900
900
  log('warn', `Steering resume for ${agentId} exited with code ${resumeCode} | stderr: ${stderr.slice(-300).replace(/\n/g, ' ')}`);
901
- try { fs.appendFileSync(liveOutputPath, `\n[steering-failed] Resume exited with code ${resumeCode}. Your message was received but the agent could not continue the session.\n`); } catch {}
901
+ // Claude CLI can exit code 1 after a successful single-turn --resume session.
902
+ // Only show [steering-failed] if no output was produced — suppress when agent responded despite non-zero exit.
903
+ if (!stdout.trim()) {
904
+ try { fs.appendFileSync(liveOutputPath, `\n[steering-failed] Resume exited with code ${resumeCode}. Your message was received but the agent could not continue the session.\n`); } catch {}
905
+ }
902
906
  // Don't assume original work completed — run normal close handler to parse output and determine actual result
903
907
  onAgentClose(resumeCode);
904
908
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.878",
3
+ "version": "0.1.880",
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"