@yemi33/minions 0.1.2130 → 0.1.2131

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.
@@ -136,7 +136,11 @@ function _ccMergeStreamText(prev, incoming) {
136
136
  if (next === current) return current;
137
137
  if (next.startsWith(current)) return next;
138
138
  if (current.startsWith(next)) return current;
139
- for (var overlap = Math.min(current.length, next.length); overlap > 0; overlap--) {
139
+ // Overlap >= 3 only a 1- or 2-char tail/head match is statistically a
140
+ // false positive (e.g. trailing 's' or '.' against a leading capital
141
+ // letter) and welds back-to-back assistant messages into `...prev.next...`
142
+ // with no separator (W-mq1jwwqo000f20d9 — CC chunk welding fix).
143
+ for (var overlap = Math.min(current.length, next.length); overlap >= 3; overlap--) {
140
144
  if (current.slice(-overlap) === next.slice(0, overlap)) {
141
145
  return current + next.slice(overlap);
142
146
  }
@@ -1080,6 +1080,12 @@ function createStreamConsumer(ctx) {
1080
1080
  let copilotMessageBuffer = '';
1081
1081
  let terminalText = '';
1082
1082
  let taskCompleteSummary = '';
1083
+ // Tracks whether a non-tool `assistant.message` has already pushed terminal
1084
+ // text in this stream. Used to insert a `\n\n` paragraph break between
1085
+ // back-to-back terminating messages so consumers don't render the welded
1086
+ // form `...prev.next...`. First push is NEVER prefixed (would leave every
1087
+ // reply with a leading blank line). Reset by reset() on stream restart.
1088
+ let _hadPriorAssistantMessage = false;
1083
1089
 
1084
1090
  function _captureTaskComplete(summary, success = true, { clearBuffer = false } = {}) {
1085
1091
  if (typeof summary !== 'string' || !summary) return;
@@ -1131,8 +1137,17 @@ function createStreamConsumer(ctx) {
1131
1137
  // the terminal answer. A non-tool assistant.message overrides any
1132
1138
  // streamed deltas (Copilot's authoritative final text for the turn).
1133
1139
  if (content && !hasTools) {
1134
- terminalText = content;
1135
- ctx.pushText(content);
1140
+ // Second-and-later terminating message in a single turn: prefix the
1141
+ // pushed text with `\n\n` so the dashboard merge sees a clean
1142
+ // paragraph boundary instead of welding `<prev>.<next>` together
1143
+ // (W-mq1jwwqo000f20d9 — CC chunk welding fix). The first push must
1144
+ // NOT be prefixed or every reply starts with a blank line. Tool-use
1145
+ // boundaries are skipped — those get rendered as visible chips
1146
+ // client-side and already act as natural separators.
1147
+ const pushed = _hadPriorAssistantMessage ? '\n\n' + content : content;
1148
+ terminalText = _hadPriorAssistantMessage ? terminalText + '\n\n' + content : content;
1149
+ ctx.pushText(pushed);
1150
+ _hadPriorAssistantMessage = true;
1136
1151
  }
1137
1152
  copilotMessageBuffer = '';
1138
1153
  }
@@ -1168,6 +1183,7 @@ function createStreamConsumer(ctx) {
1168
1183
  copilotMessageBuffer = '';
1169
1184
  terminalText = '';
1170
1185
  taskCompleteSummary = '';
1186
+ _hadPriorAssistantMessage = false;
1171
1187
  }
1172
1188
 
1173
1189
  return { consume, reset };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.2130",
3
+ "version": "0.1.2131",
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"