@yemi33/minions 0.1.237 → 0.1.239

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,6 +1,10 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.237 (2026-04-03)
3
+ ## 0.1.239 (2026-04-03)
4
+
5
+ ### Features
6
+ - capture-demos seeds mock data for richer screenshots
7
+ - add capture-demos skill for regenerating GitHub Pages screenshots
4
8
 
5
9
  ### Fixes
6
10
  - CLI audit — kill dashboard on restart, expose kill/complete, update help
@@ -1,82 +1,146 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * Capture dashboard screenshots for GitHub Pages.
4
- * Run: npx playwright test docs/capture-demos.js (or node docs/capture-demos.js)
4
+ * Seeds demo data, captures all pages, then cleans up.
5
+ *
6
+ * Run: node docs/capture-demos.js
7
+ * Requires: dashboard running on :7331, playwright chromium installed
5
8
  */
6
9
  const { chromium } = require('@playwright/test');
10
+ const { execSync } = require('child_process');
7
11
  const path = require('path');
8
12
 
9
13
  const DEMO_DIR = path.join(__dirname, 'demo');
10
14
  const BASE = 'http://localhost:7331';
15
+ const ROOT = path.resolve(__dirname, '..');
11
16
 
12
17
  async function capture() {
18
+ // Seed demo data
19
+ console.log(' Seeding demo data...');
20
+ execSync(`node "${path.join(ROOT, 'test', 'seed-demo-data.js')}"`, { stdio: 'inherit' });
21
+
22
+ // Wait for dashboard to pick up seeded data
23
+ await new Promise(r => setTimeout(r, 5000));
24
+
13
25
  const browser = await chromium.launch({ headless: true });
14
26
  const ctx = await browser.newContext({ viewport: { width: 1400, height: 900 }, colorScheme: 'dark' });
15
27
  const page = await ctx.newPage();
16
28
 
17
- // Wait for dashboard to load
18
- await page.goto(BASE, { waitUntil: 'networkidle' });
19
- await page.waitForTimeout(2000);
20
-
21
- // 1. Home / Overview
22
- console.log(' Capturing: home');
23
- await page.screenshot({ path: path.join(DEMO_DIR, '01-dashboard-overview.png'), fullPage: false });
24
-
25
- // 2. Work Items
26
- console.log(' Capturing: work items');
27
- await page.click('a[data-page="work"]');
28
- await page.waitForTimeout(1500);
29
- await page.screenshot({ path: path.join(DEMO_DIR, '02-work-items.png'), fullPage: false });
30
-
31
- // 3. Plans & PRD
32
- console.log(' Capturing: plans & PRD');
33
- await page.click('a[data-page="plans"]');
34
- await page.waitForTimeout(1500);
35
- await page.screenshot({ path: path.join(DEMO_DIR, '03-plans-prd.png'), fullPage: false });
36
-
37
- // 4. Pull Requests
38
- console.log(' Capturing: pull requests');
39
- await page.click('a[data-page="prs"]');
40
- await page.waitForTimeout(1500);
41
- await page.screenshot({ path: path.join(DEMO_DIR, '04-pull-requests.png'), fullPage: false });
42
-
43
- // 5. Meetings
44
- console.log(' Capturing: meetings');
45
- await page.click('a[data-page="meetings"]');
46
- await page.waitForTimeout(1500);
47
- await page.screenshot({ path: path.join(DEMO_DIR, '05-meetings.png'), fullPage: false });
48
-
49
- // 6. Pipelines
50
- console.log(' Capturing: pipelines');
51
- await page.click('a[data-page="pipelines"]');
52
- await page.waitForTimeout(1500);
53
- await page.screenshot({ path: path.join(DEMO_DIR, '06-pipelines.png'), fullPage: false });
54
-
55
- // 7. Notes & KB
56
- console.log(' Capturing: notes & KB');
57
- await page.click('a[data-page="inbox"]');
58
- await page.waitForTimeout(1500);
59
- await page.screenshot({ path: path.join(DEMO_DIR, '07-notes-kb.png'), fullPage: false });
60
-
61
- // 8. Schedules
62
- console.log(' Capturing: schedules');
63
- await page.click('a[data-page="schedule"]');
64
- await page.waitForTimeout(1500);
65
- await page.screenshot({ path: path.join(DEMO_DIR, '08-schedules.png'), fullPage: false });
66
-
67
- // 9. Engine page (dispatch, log, metrics)
68
- console.log(' Capturing: engine');
69
- await page.click('a[data-page="engine"]');
70
- await page.waitForTimeout(1500);
71
- await page.screenshot({ path: path.join(DEMO_DIR, '09-engine.png'), fullPage: false });
72
-
73
- // 10. Command Center
74
- console.log(' Capturing: command center');
75
- await page.click('#cc-toggle-btn');
76
- await page.waitForTimeout(1000);
77
- await page.screenshot({ path: path.join(DEMO_DIR, '10-command-center.png'), fullPage: false });
78
-
79
- await browser.close();
29
+ try {
30
+ await page.goto(BASE, { waitUntil: 'networkidle' });
31
+ await page.waitForTimeout(3000);
32
+
33
+ // 1. Home / Overview (agents should show as working from seeded dispatches)
34
+ console.log(' Capturing: home');
35
+ await page.screenshot({ path: path.join(DEMO_DIR, '01-dashboard-overview.png'), fullPage: false });
36
+
37
+ // 2. Work Items
38
+ console.log(' Capturing: work items');
39
+ await page.click('a[data-page="work"]');
40
+ await page.waitForTimeout(2000);
41
+ await page.screenshot({ path: path.join(DEMO_DIR, '02-work-items.png'), fullPage: false });
42
+
43
+ // 3. Plans & PRD (seeded PRD with dependency graph)
44
+ console.log(' Capturing: plans & PRD');
45
+ await page.click('a[data-page="plans"]');
46
+ await page.waitForTimeout(2000);
47
+ await page.screenshot({ path: path.join(DEMO_DIR, '03-plans-prd.png'), fullPage: false });
48
+
49
+ // 4. Pull Requests
50
+ console.log(' Capturing: pull requests');
51
+ await page.click('a[data-page="prs"]');
52
+ await page.waitForTimeout(1500);
53
+ await page.screenshot({ path: path.join(DEMO_DIR, '04-pull-requests.png'), fullPage: false });
54
+
55
+ // 5. Meetings
56
+ console.log(' Capturing: meetings');
57
+ await page.click('a[data-page="meetings"]');
58
+ await page.waitForTimeout(1500);
59
+ await page.screenshot({ path: path.join(DEMO_DIR, '05-meetings.png'), fullPage: false });
60
+
61
+ // 6. Pipelines
62
+ console.log(' Capturing: pipelines');
63
+ await page.click('a[data-page="pipelines"]');
64
+ await page.waitForTimeout(1500);
65
+ await page.screenshot({ path: path.join(DEMO_DIR, '06-pipelines.png'), fullPage: false });
66
+
67
+ // 7. Notes & KB
68
+ console.log(' Capturing: notes & KB');
69
+ await page.click('a[data-page="inbox"]');
70
+ await page.waitForTimeout(1500);
71
+ await page.screenshot({ path: path.join(DEMO_DIR, '07-notes-kb.png'), fullPage: false });
72
+
73
+ // 8. Schedules
74
+ console.log(' Capturing: schedules');
75
+ await page.click('a[data-page="schedule"]');
76
+ await page.waitForTimeout(1500);
77
+ await page.screenshot({ path: path.join(DEMO_DIR, '08-schedules.png'), fullPage: false });
78
+
79
+ // 9. Engine page (dispatch, log, metrics)
80
+ console.log(' Capturing: engine');
81
+ await page.click('a[data-page="engine"]');
82
+ await page.waitForTimeout(1500);
83
+ await page.screenshot({ path: path.join(DEMO_DIR, '09-engine.png'), fullPage: false });
84
+
85
+ // 10. Command Center with mock conversation
86
+ console.log(' Capturing: command center');
87
+ await page.click('#cc-toggle-btn');
88
+ await page.waitForTimeout(500);
89
+
90
+ // Inject mock CC messages into the DOM for the screenshot
91
+ await page.evaluate(() => {
92
+ const el = document.getElementById('cc-messages');
93
+ if (!el) return;
94
+ el.innerHTML = '';
95
+
96
+ function addMsg(role, html) {
97
+ const div = document.createElement('div');
98
+ div.className = 'cc-msg cc-msg-' + role;
99
+ div.innerHTML = html;
100
+ el.appendChild(div);
101
+ }
102
+
103
+ addMsg('user', 'Create a plan to add OAuth2 authentication to OfficeAgent with JWT tokens and role-based access control.');
104
+
105
+ addMsg('assistant', '<div class="md-content">' +
106
+ '<p>I\'ll create a plan for OAuth2 authentication with RBAC. Let me check the current auth setup first.</p>' +
107
+ '<p>After reviewing the codebase, here\'s what I\'m dispatching:</p>' +
108
+ '<ul>' +
109
+ '<li><strong>Plan created:</strong> <code>auth-plan.md</code> with 5 features (OAuth2, RBAC, rate limiting, sessions, audit logging)</li>' +
110
+ '<li><strong>Dispatched to Lambert</strong> for PRD generation</li>' +
111
+ '</ul>' +
112
+ '<p>The plan is now in <strong>Plans &amp; PRD</strong> awaiting your approval. Once approved, Dallas and Rebecca will start implementing in parallel.</p>' +
113
+ '</div>' +
114
+ '<div style="margin-top:8px;padding:6px 10px;background:rgba(63,185,80,0.1);border:1px solid rgba(63,185,80,0.2);border-radius:6px;font-size:11px;color:var(--green)">' +
115
+ '&#x2713; Created plan: auth-plan.md &nbsp; &#x2713; Dispatched: Lambert &rarr; plan-to-prd</div>');
116
+
117
+ addMsg('user', 'What\'s the status of the auth implementation?');
118
+
119
+ addMsg('assistant', '<div class="md-content">' +
120
+ '<p>Here\'s the current status:</p>' +
121
+ '<table style="width:100%;font-size:12px">' +
122
+ '<tr><td style="color:var(--green)">&#x2713; Done</td><td>OAuth2 Middleware</td><td style="color:var(--muted)">Dallas &mdash; PR-4520 merged</td></tr>' +
123
+ '<tr><td style="color:var(--green)">&#x2713; Done</td><td>Role-Based Access Control</td><td style="color:var(--muted)">Rebecca &mdash; PR-4521 in review</td></tr>' +
124
+ '<tr><td style="color:var(--blue)">&#x25CB; Active</td><td>API Rate Limiting</td><td style="color:var(--muted)">Dallas &mdash; working now</td></tr>' +
125
+ '<tr><td style="color:var(--blue)">&#x25CB; Active</td><td>Session Management</td><td style="color:var(--muted)">Rebecca &mdash; working now</td></tr>' +
126
+ '<tr><td style="color:var(--muted)">&#x25CB; Pending</td><td>Audit Logging</td><td style="color:var(--muted)">Blocked on RBAC</td></tr>' +
127
+ '</table>' +
128
+ '<p><strong>2/5 done, 2 active, 1 pending.</strong> On track for completion today.</p>' +
129
+ '</div>');
130
+
131
+ el.scrollTop = el.scrollHeight;
132
+ });
133
+ await page.waitForTimeout(500);
134
+ await page.screenshot({ path: path.join(DEMO_DIR, '10-command-center.png'), fullPage: false });
135
+
136
+ } finally {
137
+ await browser.close();
138
+
139
+ // Clean up demo data
140
+ console.log(' Cleaning demo data...');
141
+ execSync(`node "${path.join(ROOT, 'test', 'seed-demo-data.js')}" --clean`, { stdio: 'inherit' });
142
+ }
143
+
80
144
  console.log('\n Done! Screenshots saved to docs/demo/');
81
145
  }
82
146
 
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.237",
3
+ "version": "0.1.239",
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"