@yemi33/minions 0.1.250 → 0.1.252
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 +3 -1
- package/dashboard/js/command-center.js +97 -0
- package/dashboard.js +11 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.252 (2026-04-03)
|
|
4
4
|
|
|
5
5
|
### Features
|
|
6
|
+
- add 10 missing CC action types for full dashboard parity
|
|
7
|
+
- add 'pin' action to CC — pin critical context to all agents
|
|
6
8
|
- mandatory test validation before PR creation in implement and fix playbooks
|
|
7
9
|
|
|
8
10
|
### Fixes
|
|
@@ -279,6 +279,16 @@ async function ccExecuteAction(action) {
|
|
|
279
279
|
status.style.color = 'var(--green)';
|
|
280
280
|
break;
|
|
281
281
|
}
|
|
282
|
+
case 'pin': {
|
|
283
|
+
await fetch('/api/pinned', {
|
|
284
|
+
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
|
285
|
+
body: JSON.stringify({ title: action.title, content: action.content || action.description, level: action.level || '' })
|
|
286
|
+
});
|
|
287
|
+
status.innerHTML = '📌 Pinned: <strong>' + escHtml(action.title) + '</strong> — visible to all agents';
|
|
288
|
+
status.style.color = 'var(--green)';
|
|
289
|
+
refresh();
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
282
292
|
case 'plan': {
|
|
283
293
|
await fetch('/api/plan', {
|
|
284
294
|
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
|
@@ -473,6 +483,93 @@ async function ccExecuteAction(action) {
|
|
|
473
483
|
status.style.color = 'var(--green)';
|
|
474
484
|
break;
|
|
475
485
|
}
|
|
486
|
+
case 'unpin': {
|
|
487
|
+
await fetch('/api/pinned/remove', {
|
|
488
|
+
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
|
489
|
+
body: JSON.stringify({ title: action.title })
|
|
490
|
+
});
|
|
491
|
+
status.innerHTML = '✓ Unpinned: <strong>' + escHtml(action.title) + '</strong>';
|
|
492
|
+
status.style.color = 'var(--green)';
|
|
493
|
+
refresh();
|
|
494
|
+
break;
|
|
495
|
+
}
|
|
496
|
+
case 'archive-plan': {
|
|
497
|
+
await fetch('/api/plans/archive', {
|
|
498
|
+
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
|
499
|
+
body: JSON.stringify({ file: action.file })
|
|
500
|
+
});
|
|
501
|
+
status.innerHTML = '✓ Archived plan: <strong>' + escHtml(action.file) + '</strong>';
|
|
502
|
+
status.style.color = 'var(--green)';
|
|
503
|
+
refresh();
|
|
504
|
+
break;
|
|
505
|
+
}
|
|
506
|
+
case 'reject-plan': {
|
|
507
|
+
await fetch('/api/plans/reject', {
|
|
508
|
+
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
|
509
|
+
body: JSON.stringify({ file: action.file, reason: action.reason || '' })
|
|
510
|
+
});
|
|
511
|
+
status.innerHTML = '✓ Rejected plan: <strong>' + escHtml(action.file) + '</strong>';
|
|
512
|
+
status.style.color = 'var(--orange)';
|
|
513
|
+
break;
|
|
514
|
+
}
|
|
515
|
+
case 'steer-agent': {
|
|
516
|
+
await fetch('/api/agents/steer', {
|
|
517
|
+
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
|
518
|
+
body: JSON.stringify({ agent: action.agent, message: action.message || action.content })
|
|
519
|
+
});
|
|
520
|
+
status.innerHTML = '✓ Steering message sent to <strong>' + escHtml(action.agent) + '</strong>';
|
|
521
|
+
status.style.color = 'var(--green)';
|
|
522
|
+
break;
|
|
523
|
+
}
|
|
524
|
+
case 'add-meeting-note': {
|
|
525
|
+
await fetch('/api/meetings/note', {
|
|
526
|
+
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
|
527
|
+
body: JSON.stringify({ id: action.id, note: action.note || action.content })
|
|
528
|
+
});
|
|
529
|
+
status.innerHTML = '✓ Note added to meeting <strong>' + escHtml(action.id) + '</strong>';
|
|
530
|
+
status.style.color = 'var(--green)';
|
|
531
|
+
break;
|
|
532
|
+
}
|
|
533
|
+
case 'trigger-pipeline': {
|
|
534
|
+
var res = await fetch('/api/pipelines/trigger', {
|
|
535
|
+
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
|
536
|
+
body: JSON.stringify({ id: action.id })
|
|
537
|
+
});
|
|
538
|
+
if (!res.ok) { var d = await res.json().catch(function() { return {}; }); throw new Error(d.error || 'Pipeline trigger failed'); }
|
|
539
|
+
status.innerHTML = '✓ Pipeline triggered: <strong>' + escHtml(action.id) + '</strong>';
|
|
540
|
+
status.style.color = 'var(--green)';
|
|
541
|
+
wakeEngine();
|
|
542
|
+
break;
|
|
543
|
+
}
|
|
544
|
+
case 'link-pr': {
|
|
545
|
+
await fetch('/api/pull-requests/link', {
|
|
546
|
+
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
|
547
|
+
body: JSON.stringify({ url: action.url, title: action.title || '', project: action.project || '', autoObserve: action.autoObserve !== false })
|
|
548
|
+
});
|
|
549
|
+
status.innerHTML = '✓ PR linked: <strong>' + escHtml(action.url) + '</strong>';
|
|
550
|
+
status.style.color = 'var(--green)';
|
|
551
|
+
refresh();
|
|
552
|
+
break;
|
|
553
|
+
}
|
|
554
|
+
case 'archive-meeting': {
|
|
555
|
+
await fetch('/api/meetings/archive', {
|
|
556
|
+
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
|
557
|
+
body: JSON.stringify({ id: action.id })
|
|
558
|
+
});
|
|
559
|
+
status.innerHTML = '✓ Meeting archived: <strong>' + escHtml(action.id) + '</strong>';
|
|
560
|
+
status.style.color = 'var(--green)';
|
|
561
|
+
refresh();
|
|
562
|
+
break;
|
|
563
|
+
}
|
|
564
|
+
case 'update-routing': {
|
|
565
|
+
await fetch('/api/settings/routing', {
|
|
566
|
+
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
|
567
|
+
body: JSON.stringify({ content: action.content })
|
|
568
|
+
});
|
|
569
|
+
status.innerHTML = '✓ Routing updated';
|
|
570
|
+
status.style.color = 'var(--green)';
|
|
571
|
+
break;
|
|
572
|
+
}
|
|
476
573
|
default:
|
|
477
574
|
status.innerHTML = '? Unknown action: ' + escHtml(action.type);
|
|
478
575
|
status.style.color = 'var(--muted)';
|
package/dashboard.js
CHANGED
|
@@ -378,7 +378,8 @@ If no actions are needed (just answering a question, or you handled it directly)
|
|
|
378
378
|
|
|
379
379
|
Available action types:
|
|
380
380
|
- **dispatch**: Create a work item for an agent. Fields: title, workType (ask/explore/fix/review/test/implement/verify), priority (low/medium/high), agents (array of IDs, optional), project, description. Use \`verify\` when the user wants to build PRs locally, merge branches together, start a dev server, and get a localhost URL to test.
|
|
381
|
-
- **note**: Save a note/decision. Fields: title, content
|
|
381
|
+
- **note**: Save a note/decision to the inbox. Fields: title, content
|
|
382
|
+
- **pin**: Pin critical context visible to ALL agents on every task. Use when the user says "remember", "pin", "always", "from now on". Fields: title, content, level (optional: "critical" or "warning")
|
|
382
383
|
- **plan**: Create a multi-step plan. Fields: title, description, project, branchStrategy (parallel/shared-branch)
|
|
383
384
|
- **cancel**: Cancel a running agent. Fields: agent (agent ID), reason
|
|
384
385
|
- **retry**: Retry failed work items. Fields: ids (array of work item IDs)
|
|
@@ -395,6 +396,15 @@ Available action types:
|
|
|
395
396
|
- **create-meeting**: Start a team meeting. Fields: title (short meeting name), agenda (detailed text — what agents should investigate/debate, numbered items work best), agents (array of agent IDs), rounds (optional, default 3), project (optional).
|
|
396
397
|
- **set-config**: Update engine settings. Fields: setting (setting name), value (new value). Valid settings: autoApprovePlans (bool), autoDecompose (bool), allowTempAgents (bool), maxConcurrent (number), maxTurns (number). Example: { "type": "set-config", "setting": "autoApprovePlans", "value": true }
|
|
397
398
|
- **edit-pipeline**: Update an existing pipeline. Fields: id (pipeline ID), title (optional), stages (optional, JSON array), trigger (optional, { cron: "minute hour dow" } or null for manual).
|
|
399
|
+
- **unpin**: Remove a pinned note. Fields: title (exact title of the pinned note to remove)
|
|
400
|
+
- **archive-plan**: Archive a completed/paused plan. Fields: file (PRD .json or plan .md filename)
|
|
401
|
+
- **reject-plan**: Reject a plan. Fields: file (PRD .json filename), reason (optional)
|
|
402
|
+
- **steer-agent**: Send a steering message to a running agent. Fields: agent (agent ID), message (text to inject)
|
|
403
|
+
- **add-meeting-note**: Add a human note to an active meeting. Fields: id (meeting ID like MTG-xxx), note (text)
|
|
404
|
+
- **trigger-pipeline**: Manually trigger a pipeline run. Fields: id (pipeline ID)
|
|
405
|
+
- **link-pr**: Link an external PR for tracking. Fields: url (PR URL), title (optional), project (optional), autoObserve (bool, default true)
|
|
406
|
+
- **archive-meeting**: Archive a completed meeting. Fields: id (meeting ID)
|
|
407
|
+
- **update-routing**: Update the routing table. Fields: content (full routing.md content)
|
|
398
408
|
|
|
399
409
|
## Rules
|
|
400
410
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.252",
|
|
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"
|