@yemi33/minions 0.1.1592 → 0.1.1594

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.1594 (2026-04-28)
4
+
5
+ ### Features
6
+ - match runtime tags to actual logos (pixel-crab Claude, mascot Copilot)
7
+ - replace runtime text tag with inline SVG logos
8
+
3
9
  ## 0.1.1592 (2026-04-28)
4
10
 
5
11
  ### Features
@@ -1,14 +1,37 @@
1
1
  // dashboard/js/render-agents.js — Agent grid rendering extracted from dashboard.html
2
2
 
3
- // Per-runtime display labels and accent colors. Add a new entry here when a
4
- // new runtime is registered in engine/runtimes/index.js.
3
+ // Per-runtime inline SVG logo + accent color. Each entry must define `label`
4
+ // (used as title/tooltip + accessibility fallback) and `svg` (full inline
5
+ // markup, currentColor-themed). Add a new entry here when a new runtime is
6
+ // registered in engine/runtimes/index.js.
5
7
  const RUNTIME_TAGS = {
6
- claude: { label: 'Claude', color: 'var(--blue)' },
7
- copilot: { label: 'Copilot', color: 'var(--purple)' },
8
+ // Claude Code — pixel-art "crab" mascot in Anthropic orange. Wide blocky
9
+ // body with two black square eyes, side fin protrusions, and four legs at
10
+ // the bottom with a wide middle gap. Approximates the standalone Claude
11
+ // Code sticker icon.
12
+ claude: {
13
+ label: 'Claude',
14
+ color: '#cc785c',
15
+ svg: '<svg viewBox="0 0 24 24" width="13" height="13" aria-hidden="true" focusable="false" style="display:inline-block;vertical-align:-2px"><g fill="currentColor"><rect x="4" y="3" width="16" height="15"/><rect x="2" y="8" width="2" height="4"/><rect x="20" y="8" width="2" height="4"/><rect x="4" y="18" width="2.5" height="3"/><rect x="8" y="18" width="2.5" height="3"/><rect x="13.5" y="18" width="2.5" height="3"/><rect x="17.5" y="18" width="2.5" height="3"/></g><g fill="#000"><rect x="7" y="7.5" width="2.5" height="3"/><rect x="14.5" y="7.5" width="2.5" height="3"/></g></svg>',
16
+ },
17
+ // GitHub Copilot — bespectacled "pilot" mascot: head with side ear cups,
18
+ // two round goggles, small bridge, and a rectangular grill mouth with two
19
+ // vertical bars. Matches the standalone github-copilot icon. Cutouts use
20
+ // white so the logo stays recognisable against any agent-card background.
21
+ copilot: {
22
+ label: 'Copilot',
23
+ color: '#8957e5',
24
+ svg: '<svg viewBox="0 0 24 24" width="13" height="13" aria-hidden="true" focusable="false" style="display:inline-block;vertical-align:-2px"><g fill="currentColor"><ellipse cx="12" cy="11" rx="10" ry="8.5"/><circle cx="2.5" cy="13" r="2.4"/><circle cx="21.5" cy="13" r="2.4"/></g><g fill="#fff"><circle cx="8" cy="10" r="3"/><circle cx="16" cy="10" r="3"/><rect x="11.2" y="9.5" width="1.6" height="1.6" rx="0.3"/><rect x="8.4" y="14" width="7.2" height="3.8" rx="0.5"/></g><g fill="currentColor"><rect x="10.4" y="14.5" width="0.9" height="2.8" rx="0.2"/><rect x="12.7" y="14.5" width="0.9" height="2.8" rx="0.2"/></g></svg>',
25
+ },
8
26
  };
9
27
  function _runtimeTagHtml(runtime) {
10
- const meta = RUNTIME_TAGS[runtime] || { label: runtime || 'unknown', color: 'var(--muted)' };
11
- return '<span class="agent-runtime-tag" title="Runtime: ' + escapeHtml(runtime || 'unknown') + '" style="font-size:9px;font-weight:600;letter-spacing:0.4px;text-transform:uppercase;padding:1px 5px;margin-left:6px;border:1px solid ' + meta.color + ';border-radius:3px;color:' + meta.color + ';background:transparent">' + escapeHtml(meta.label) + '</span>';
28
+ const meta = RUNTIME_TAGS[runtime];
29
+ if (meta && meta.svg) {
30
+ return '<span class="agent-runtime-tag" title="Runtime: ' + escapeHtml(meta.label) + '" style="display:inline-block;margin-left:6px;color:' + meta.color + '" aria-label="' + escapeHtml(meta.label) + ' runtime">' + meta.svg + '</span>';
31
+ }
32
+ // Unknown runtime — fall back to a small text pill so the user still sees something
33
+ const fallback = runtime || 'unknown';
34
+ return '<span class="agent-runtime-tag" title="Runtime: ' + escapeHtml(fallback) + '" style="font-size:9px;font-weight:600;letter-spacing:0.4px;text-transform:uppercase;padding:1px 5px;margin-left:6px;border:1px solid var(--muted);border-radius:3px;color:var(--muted);background:transparent">' + escapeHtml(fallback) + '</span>';
12
35
  }
13
36
 
14
37
  function renderAgents(agents) {
@@ -49,13 +72,23 @@ async function openAgentDetail(id) {
49
72
  const emojiSpan = document.createElement('span');
50
73
  emojiSpan.style.fontSize = '22px';
51
74
  emojiSpan.textContent = agent.emoji || '';
52
- // Runtime tag rendered as a separate span so the textContent path keeps its
53
- // SEC-03-Phase-A safety for the user-controlled name/role fields.
54
- const runtimeMeta = RUNTIME_TAGS[agent.runtime] || { label: agent.runtime || 'unknown', color: 'var(--muted)' };
75
+ // Runtime tag \u2014 uses the inline-SVG logo from the same RUNTIME_TAGS map the
76
+ // card uses, so the visual is consistent. The container's user-controlled
77
+ // text fields stay on the textContent path; the SVG is a hardcoded literal
78
+ // from RUNTIME_TAGS keyed by the runtime string (server-controlled, finite
79
+ // set), so injecting via innerHTML on the icon-only span is safe.
80
+ const runtimeMeta = RUNTIME_TAGS[agent.runtime];
55
81
  const runtimeSpan = document.createElement('span');
56
- runtimeSpan.style.cssText = 'font-size:10px;font-weight:600;letter-spacing:0.4px;text-transform:uppercase;padding:2px 6px;margin-left:10px;border:1px solid ' + runtimeMeta.color + ';border-radius:3px;color:' + runtimeMeta.color;
57
- runtimeSpan.title = 'Runtime: ' + (agent.runtime || 'unknown');
58
- runtimeSpan.textContent = runtimeMeta.label;
82
+ runtimeSpan.title = 'Runtime: ' + (runtimeMeta?.label || agent.runtime || 'unknown');
83
+ runtimeSpan.style.cssText = 'display:inline-block;margin-left:10px';
84
+ if (runtimeMeta && runtimeMeta.svg) {
85
+ runtimeSpan.style.color = runtimeMeta.color;
86
+ runtimeSpan.innerHTML = runtimeMeta.svg.replace('width="13"', 'width="18"').replace('height="13"', 'height="18"');
87
+ runtimeSpan.setAttribute('aria-label', runtimeMeta.label + ' runtime');
88
+ } else {
89
+ runtimeSpan.style.cssText += ';font-size:10px;font-weight:600;letter-spacing:0.4px;text-transform:uppercase;padding:2px 6px;border:1px solid var(--muted);border-radius:3px;color:var(--muted)';
90
+ runtimeSpan.textContent = agent.runtime || 'unknown';
91
+ }
59
92
  nameEl.replaceChildren(
60
93
  emojiSpan,
61
94
  document.createTextNode(' ' + (agent.name || '') + ' \u2014 ' + (agent.role || '')),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.1592",
3
+ "version": "0.1.1594",
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"