@yemi33/minions 0.1.265 → 0.1.267

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,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.267 (2026-04-03)
4
+
5
+ ### Features
6
+ - CC streaming shows cumulative tool list with loading dots
7
+
8
+ ### Fixes
9
+ - Thinking... indicator shows alongside tool calls until text arrives
10
+ - use safeJson instead of JSON.parse(safeRead()) in trigger-verify handler
11
+
3
12
  ## 0.1.265 (2026-04-03)
4
13
 
5
14
  ### Features
@@ -198,6 +198,25 @@ async function _ccDoSend(message, skipUserMsg) {
198
198
  const msgs = document.getElementById('cc-messages');
199
199
  const streamDiv = msgs.lastElementChild; // the message we just added
200
200
  let streamedText = '';
201
+ let toolsUsed = [];
202
+ const dotPulse = '<span style="display:inline-flex;gap:3px;margin-left:6px;vertical-align:middle"><span style="width:4px;height:4px;background:var(--blue);border-radius:50%;animation:dotPulse 1.2s infinite"></span><span style="width:4px;height:4px;background:var(--blue);border-radius:50%;animation:dotPulse 1.2s infinite;animation-delay:0.2s"></span><span style="width:4px;height:4px;background:var(--blue);border-radius:50%;animation:dotPulse 1.2s infinite;animation-delay:0.4s"></span></span>';
203
+ function updateStreamDiv() {
204
+ var html = '';
205
+ if (toolsUsed.length > 0) {
206
+ html += '<div style="margin-bottom:6px">';
207
+ toolsUsed.forEach(function(t) {
208
+ html += '<div style="color:var(--blue);font-size:11px">\uD83D\uDD27 ' + escHtml(t) + '</div>';
209
+ });
210
+ html += '</div>';
211
+ }
212
+ if (streamedText) {
213
+ html += renderMd(streamedText);
214
+ } else {
215
+ html += '<span style="color:var(--muted);font-size:11px">Thinking...' + dotPulse + '</span>';
216
+ }
217
+ streamDiv.innerHTML = html;
218
+ if (msgs.scrollHeight - msgs.scrollTop - msgs.clientHeight < 150) msgs.scrollTop = msgs.scrollHeight;
219
+ }
201
220
 
202
221
  const reader = res.body.getReader();
203
222
  const decoder = new TextDecoder();
@@ -215,10 +234,10 @@ async function _ccDoSend(message, skipUserMsg) {
215
234
  const evt = JSON.parse(line.slice(6));
216
235
  if (evt.type === 'chunk') {
217
236
  streamedText = evt.text;
218
- streamDiv.innerHTML = renderMd(streamedText);
219
- if (msgs.scrollHeight - msgs.scrollTop - msgs.clientHeight < 150) msgs.scrollTop = msgs.scrollHeight;
237
+ updateStreamDiv();
220
238
  } else if (evt.type === 'tool') {
221
- streamDiv.innerHTML = '<span style="color:var(--blue);font-size:11px">\uD83D\uDD27 Using ' + escHtml(evt.name) + '...</span>';
239
+ toolsUsed.push(evt.name);
240
+ updateStreamDiv();
222
241
  if (msgs.scrollHeight - msgs.scrollTop - msgs.clientHeight < 150) msgs.scrollTop = msgs.scrollHeight;
223
242
  } else if (evt.type === 'done') {
224
243
  // Replace streaming div with a proper ccAddMessage
package/dashboard.js CHANGED
@@ -831,7 +831,8 @@ const server = http.createServer(async (req, res) => {
831
831
  // If archived, temporarily restore to active so checkPlanCompletion can find it
832
832
  const activePath = path.join(prdDir, body.file);
833
833
  if (fromArchive) {
834
- const plan = JSON.parse(safeRead(prdPath));
834
+ const plan = safeJson(prdPath);
835
+ if (!plan) return jsonReply(res, 500, { error: 'Could not parse PRD file' });
835
836
  plan.status = 'approved';
836
837
  delete plan.completedAt;
837
838
  safeWrite(activePath, plan);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.265",
3
+ "version": "0.1.267",
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"