nodebench-mcp 2.25.0 → 2.27.0

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.
Files changed (86) hide show
  1. package/NODEBENCH_AGENTS.md +5 -4
  2. package/README.md +145 -16
  3. package/dist/__tests__/architectComplex.test.js +3 -5
  4. package/dist/__tests__/architectComplex.test.js.map +1 -1
  5. package/dist/__tests__/batchAutopilot.test.d.ts +8 -0
  6. package/dist/__tests__/batchAutopilot.test.js +218 -0
  7. package/dist/__tests__/batchAutopilot.test.js.map +1 -0
  8. package/dist/__tests__/cliSubcommands.test.d.ts +1 -0
  9. package/dist/__tests__/cliSubcommands.test.js +138 -0
  10. package/dist/__tests__/cliSubcommands.test.js.map +1 -0
  11. package/dist/__tests__/evalHarness.test.js +1 -1
  12. package/dist/__tests__/forecastingDogfood.test.d.ts +9 -0
  13. package/dist/__tests__/forecastingDogfood.test.js +284 -0
  14. package/dist/__tests__/forecastingDogfood.test.js.map +1 -0
  15. package/dist/__tests__/forecastingScoring.test.d.ts +9 -0
  16. package/dist/__tests__/forecastingScoring.test.js +202 -0
  17. package/dist/__tests__/forecastingScoring.test.js.map +1 -0
  18. package/dist/__tests__/localDashboard.test.d.ts +1 -0
  19. package/dist/__tests__/localDashboard.test.js +226 -0
  20. package/dist/__tests__/localDashboard.test.js.map +1 -0
  21. package/dist/__tests__/multiHopDogfood.test.js +11 -11
  22. package/dist/__tests__/multiHopDogfood.test.js.map +1 -1
  23. package/dist/__tests__/openclawDogfood.test.d.ts +23 -0
  24. package/dist/__tests__/openclawDogfood.test.js +535 -0
  25. package/dist/__tests__/openclawDogfood.test.js.map +1 -0
  26. package/dist/__tests__/openclawMessaging.test.d.ts +14 -0
  27. package/dist/__tests__/openclawMessaging.test.js +232 -0
  28. package/dist/__tests__/openclawMessaging.test.js.map +1 -0
  29. package/dist/__tests__/presetRealWorldBench.test.js +0 -2
  30. package/dist/__tests__/presetRealWorldBench.test.js.map +1 -1
  31. package/dist/__tests__/tools.test.js +9 -157
  32. package/dist/__tests__/tools.test.js.map +1 -1
  33. package/dist/__tests__/toolsetGatingEval.test.js +0 -2
  34. package/dist/__tests__/toolsetGatingEval.test.js.map +1 -1
  35. package/dist/__tests__/traceabilityDogfood.test.d.ts +12 -0
  36. package/dist/__tests__/traceabilityDogfood.test.js +241 -0
  37. package/dist/__tests__/traceabilityDogfood.test.js.map +1 -0
  38. package/dist/__tests__/webmcpTools.test.d.ts +7 -0
  39. package/dist/__tests__/webmcpTools.test.js +195 -0
  40. package/dist/__tests__/webmcpTools.test.js.map +1 -0
  41. package/dist/dashboard/briefHtml.d.ts +20 -0
  42. package/dist/dashboard/briefHtml.js +1000 -0
  43. package/dist/dashboard/briefHtml.js.map +1 -0
  44. package/dist/dashboard/briefServer.d.ts +18 -0
  45. package/dist/dashboard/briefServer.js +320 -0
  46. package/dist/dashboard/briefServer.js.map +1 -0
  47. package/dist/dashboard/html.js +1470 -1230
  48. package/dist/dashboard/html.js.map +1 -1
  49. package/dist/dashboard/server.js +166 -41
  50. package/dist/dashboard/server.js.map +1 -1
  51. package/dist/index.js +210 -14
  52. package/dist/index.js.map +1 -1
  53. package/dist/tools/critterTools.js +4 -0
  54. package/dist/tools/critterTools.js.map +1 -1
  55. package/dist/tools/forecastingTools.d.ts +11 -0
  56. package/dist/tools/forecastingTools.js +616 -0
  57. package/dist/tools/forecastingTools.js.map +1 -0
  58. package/dist/tools/localDashboardTools.d.ts +8 -0
  59. package/dist/tools/localDashboardTools.js +332 -0
  60. package/dist/tools/localDashboardTools.js.map +1 -0
  61. package/dist/tools/metaTools.js +170 -1
  62. package/dist/tools/metaTools.js.map +1 -1
  63. package/dist/tools/openclawTools.d.ts +11 -0
  64. package/dist/tools/openclawTools.js +1017 -0
  65. package/dist/tools/openclawTools.js.map +1 -0
  66. package/dist/tools/overstoryTools.d.ts +14 -0
  67. package/dist/tools/overstoryTools.js +426 -0
  68. package/dist/tools/overstoryTools.js.map +1 -0
  69. package/dist/tools/progressiveDiscoveryTools.js +50 -115
  70. package/dist/tools/progressiveDiscoveryTools.js.map +1 -1
  71. package/dist/tools/selfEvalTools.js +8 -1
  72. package/dist/tools/selfEvalTools.js.map +1 -1
  73. package/dist/tools/sessionMemoryTools.js +14 -2
  74. package/dist/tools/sessionMemoryTools.js.map +1 -1
  75. package/dist/tools/toolRegistry.d.ts +1 -15
  76. package/dist/tools/toolRegistry.js +243 -228
  77. package/dist/tools/toolRegistry.js.map +1 -1
  78. package/dist/tools/visualQaTools.d.ts +2 -0
  79. package/dist/tools/visualQaTools.js +1088 -0
  80. package/dist/tools/visualQaTools.js.map +1 -0
  81. package/dist/tools/webmcpTools.d.ts +16 -0
  82. package/dist/tools/webmcpTools.js +703 -0
  83. package/dist/tools/webmcpTools.js.map +1 -0
  84. package/dist/toolsetRegistry.js +6 -2
  85. package/dist/toolsetRegistry.js.map +1 -1
  86. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/dashboard/html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA8sCD,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/dashboard/html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA87CD,CAAC;AACT,CAAC"}
@@ -20,20 +20,24 @@ export function startDashboardServer(db, preferredPort = 6274) {
20
20
  return;
21
21
  }
22
22
  _server = createServer((req, res) => handleRequest(db, req, res));
23
+ let attempts = 0;
24
+ const maxAttempts = 10;
25
+ function tryListen(port) {
26
+ _server.listen(port, "127.0.0.1", () => {
27
+ _port = port;
28
+ resolve(_port);
29
+ });
30
+ }
23
31
  _server.on("error", (err) => {
24
- if (err.code === "EADDRINUSE") {
25
- // Try next port
26
- _server.listen(preferredPort + 1, "127.0.0.1");
27
- _port = preferredPort + 1;
32
+ if (err.code === "EADDRINUSE" && attempts < maxAttempts) {
33
+ attempts++;
34
+ tryListen(preferredPort + attempts);
28
35
  }
29
36
  else {
30
37
  reject(err);
31
38
  }
32
39
  });
33
- _server.listen(preferredPort, "127.0.0.1", () => {
34
- _port = preferredPort;
35
- resolve(_port);
36
- });
40
+ tryListen(preferredPort);
37
41
  });
38
42
  }
39
43
  /** Stop the dashboard server */
@@ -80,6 +84,15 @@ function handleRequest(db, req, res) {
80
84
  else if (path === "/api/latest") {
81
85
  apiLatestSession(db, res);
82
86
  }
87
+ else if (path === "/api/agents/status") {
88
+ apiAgentStatus(db, res);
89
+ }
90
+ else if (path === "/api/agents/activity") {
91
+ apiAgentActivity(db, res);
92
+ }
93
+ else if (path === "/api/agents/mailbox") {
94
+ apiAgentMailbox(db, res);
95
+ }
83
96
  else {
84
97
  res.writeHead(404, { "Content-Type": "application/json" });
85
98
  res.end(JSON.stringify({ error: "Not found" }));
@@ -97,24 +110,24 @@ function serveHtml(res) {
97
110
  }
98
111
  // ── API: List sessions ──────────────────────────────────────────────
99
112
  function apiSessions(db, res) {
100
- const rows = db.prepare(`
101
- SELECT s.id, s.app_url, s.app_name, s.status, s.created_at, s.completed_at,
102
- (SELECT COUNT(*) FROM ui_dive_components WHERE session_id = s.id) as component_count,
103
- (SELECT COUNT(*) FROM ui_dive_bugs WHERE session_id = s.id) as bug_count,
104
- (SELECT COUNT(*) FROM ui_dive_bugs WHERE session_id = s.id AND status = 'resolved') as bugs_resolved,
105
- (SELECT COUNT(*) FROM ui_dive_interactions WHERE session_id = s.id) as interaction_count,
106
- (SELECT COUNT(*) FROM ui_dive_fix_verifications WHERE session_id = s.id) as fix_count,
107
- (SELECT COUNT(*) FROM ui_dive_code_reviews WHERE session_id = s.id) as review_count
108
- FROM ui_dive_sessions s
109
- ORDER BY s.created_at DESC
110
- LIMIT 50
113
+ const rows = db.prepare(`
114
+ SELECT s.id, s.app_url, s.app_name, s.status, s.created_at, s.completed_at,
115
+ (SELECT COUNT(*) FROM ui_dive_components WHERE session_id = s.id) as component_count,
116
+ (SELECT COUNT(*) FROM ui_dive_bugs WHERE session_id = s.id) as bug_count,
117
+ (SELECT COUNT(*) FROM ui_dive_bugs WHERE session_id = s.id AND status = 'resolved') as bugs_resolved,
118
+ (SELECT COUNT(*) FROM ui_dive_interactions WHERE session_id = s.id) as interaction_count,
119
+ (SELECT COUNT(*) FROM ui_dive_fix_verifications WHERE session_id = s.id) as fix_count,
120
+ (SELECT COUNT(*) FROM ui_dive_code_reviews WHERE session_id = s.id) as review_count
121
+ FROM ui_dive_sessions s
122
+ ORDER BY s.created_at DESC
123
+ LIMIT 50
111
124
  `).all();
112
125
  json(res, rows);
113
126
  }
114
127
  // ── API: Latest session redirect ────────────────────────────────────
115
128
  function apiLatestSession(db, res) {
116
- const row = db.prepare(`
117
- SELECT id FROM ui_dive_sessions ORDER BY created_at DESC LIMIT 1
129
+ const row = db.prepare(`
130
+ SELECT id FROM ui_dive_sessions ORDER BY created_at DESC LIMIT 1
118
131
  `).get();
119
132
  if (!row) {
120
133
  json(res, { error: "No sessions found" }, 404);
@@ -185,23 +198,23 @@ function apiComponents(db, sid, res) {
185
198
  json(res, db.prepare("SELECT * FROM ui_dive_components WHERE session_id = ? ORDER BY created_at").all(sid));
186
199
  }
187
200
  function apiBugs(db, sid, res) {
188
- json(res, db.prepare(`
189
- SELECT b.*, c.name as component_name
190
- FROM ui_dive_bugs b
191
- LEFT JOIN ui_dive_components c ON b.component_id = c.id
192
- WHERE b.session_id = ?
193
- ORDER BY
194
- CASE b.severity WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 ELSE 3 END,
195
- b.created_at
201
+ json(res, db.prepare(`
202
+ SELECT b.*, c.name as component_name
203
+ FROM ui_dive_bugs b
204
+ LEFT JOIN ui_dive_components c ON b.component_id = c.id
205
+ WHERE b.session_id = ?
206
+ ORDER BY
207
+ CASE b.severity WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 ELSE 3 END,
208
+ b.created_at
196
209
  `).all(sid));
197
210
  }
198
211
  function apiInteractions(db, sid, res) {
199
- json(res, db.prepare(`
200
- SELECT i.*, c.name as component_name
201
- FROM ui_dive_interactions i
202
- LEFT JOIN ui_dive_components c ON i.component_id = c.id
203
- WHERE i.session_id = ?
204
- ORDER BY i.sequence_num
212
+ json(res, db.prepare(`
213
+ SELECT i.*, c.name as component_name
214
+ FROM ui_dive_interactions i
215
+ LEFT JOIN ui_dive_components c ON i.component_id = c.id
216
+ WHERE i.session_id = ?
217
+ ORDER BY i.sequence_num
205
218
  `).all(sid));
206
219
  }
207
220
  function apiScreenshots(db, sid, res) {
@@ -250,12 +263,12 @@ function apiCodeLocations(db, sid, res) {
250
263
  json(res, db.prepare("SELECT * FROM ui_dive_code_locations WHERE session_id = ? ORDER BY created_at").all(sid));
251
264
  }
252
265
  function apiFixes(db, sid, res) {
253
- json(res, db.prepare(`
254
- SELECT f.*, b.title as bug_title, b.severity as bug_severity, b.status as bug_status
255
- FROM ui_dive_fix_verifications f
256
- LEFT JOIN ui_dive_bugs b ON f.bug_id = b.id
257
- WHERE f.session_id = ?
258
- ORDER BY f.created_at
266
+ json(res, db.prepare(`
267
+ SELECT f.*, b.title as bug_title, b.severity as bug_severity, b.status as bug_status
268
+ FROM ui_dive_fix_verifications f
269
+ LEFT JOIN ui_dive_bugs b ON f.bug_id = b.id
270
+ WHERE f.session_id = ?
271
+ ORDER BY f.created_at
259
272
  `).all(sid));
260
273
  }
261
274
  function apiChangelogs(db, sid, res) {
@@ -270,6 +283,118 @@ function apiReviews(db, sid, res) {
270
283
  function apiDesignIssues(db, sid, res) {
271
284
  json(res, db.prepare("SELECT * FROM ui_dive_design_issues WHERE session_id = ? ORDER BY created_at").all(sid));
272
285
  }
286
+ // ── API: Agent Monitor ──────────────────────────────────────────────
287
+ function apiAgentStatus(db, res) {
288
+ // Only agents active in the last 2 hours (has recent calls OR a claimed task)
289
+ const roles = db.prepare(`
290
+ SELECT r.session_id, r.role, r.focus_area, r.created_at
291
+ FROM agent_roles r
292
+ WHERE EXISTS (
293
+ SELECT 1 FROM tool_call_log t
294
+ WHERE t.session_id = r.session_id AND t.created_at >= datetime('now', '-2 hours')
295
+ ) OR EXISTS (
296
+ SELECT 1 FROM agent_tasks a
297
+ WHERE a.session_id = r.session_id AND a.status = 'claimed'
298
+ AND a.claimed_at >= datetime('now', '-4 hours')
299
+ )
300
+ ORDER BY r.created_at DESC
301
+ LIMIT 20
302
+ `).all();
303
+ const agents = roles.map(r => {
304
+ const task = db.prepare(`
305
+ SELECT task_key, description, claimed_at
306
+ FROM agent_tasks
307
+ WHERE session_id = ? AND status = 'claimed'
308
+ ORDER BY claimed_at DESC LIMIT 1
309
+ `).get(r.session_id);
310
+ const callCount = db.prepare(`
311
+ SELECT COUNT(*) as c FROM tool_call_log
312
+ WHERE session_id = ? AND created_at >= datetime('now', '-30 minutes')
313
+ `).get(r.session_id);
314
+ const lastCall = db.prepare(`
315
+ SELECT created_at FROM tool_call_log
316
+ WHERE session_id = ? ORDER BY created_at DESC LIMIT 1
317
+ `).get(r.session_id);
318
+ const budget = db.prepare(`
319
+ SELECT tokens_used, tokens_limit FROM context_budget_log
320
+ WHERE session_id = ? ORDER BY created_at DESC LIMIT 1
321
+ `).get(r.session_id);
322
+ const unread = db.prepare(`
323
+ SELECT COUNT(*) as c FROM agent_mailbox
324
+ WHERE (recipient_id = ? OR recipient_role = ?) AND read = 0
325
+ `).get(r.session_id, r.role);
326
+ return {
327
+ sessionId: r.session_id,
328
+ role: r.role,
329
+ focusArea: r.focus_area,
330
+ assignedAt: r.created_at,
331
+ currentTask: task ? { key: task.task_key, description: task.description, claimedAt: task.claimed_at } : null,
332
+ toolCallCount: callCount.c,
333
+ lastCallAt: lastCall?.created_at ?? null,
334
+ tokenBudget: budget
335
+ ? { used: budget.tokens_used, limit: budget.tokens_limit, percent: Math.round((budget.tokens_used / budget.tokens_limit) * 100) }
336
+ : { used: 0, limit: 200000, percent: 0 },
337
+ unreadMessages: unread.c,
338
+ };
339
+ });
340
+ // Summary stats
341
+ const activeSessions = agents.map(a => a.sessionId);
342
+ const totalCalls = activeSessions.length > 0
343
+ ? db.prepare(`SELECT COUNT(*) as c FROM tool_call_log WHERE session_id IN (${activeSessions.map(() => "?").join(",")})`)
344
+ .get(...activeSessions).c
345
+ : 0;
346
+ const claimedCount = agents.filter(a => a.currentTask).length;
347
+ const completedTasks = db.prepare(`
348
+ SELECT task_key, session_id, description, progress_note, released_at
349
+ FROM agent_tasks
350
+ WHERE status = 'released' AND released_at >= datetime('now', '-1 hour')
351
+ ORDER BY released_at DESC LIMIT 20
352
+ `).all();
353
+ json(res, {
354
+ agents,
355
+ completedTasks,
356
+ summary: {
357
+ activeAgents: agents.length,
358
+ activeTasks: claimedCount,
359
+ completedTasks: completedTasks.length,
360
+ totalCalls,
361
+ },
362
+ });
363
+ }
364
+ function apiAgentActivity(db, res) {
365
+ // Only show calls from agents active in last 2 hours
366
+ const calls = db.prepare(`
367
+ SELECT t.tool_name, t.session_id, t.result_status, t.duration_ms, t.created_at
368
+ FROM tool_call_log t
369
+ WHERE EXISTS (
370
+ SELECT 1 FROM agent_roles r
371
+ WHERE r.session_id = t.session_id AND (
372
+ EXISTS (SELECT 1 FROM tool_call_log t2 WHERE t2.session_id = r.session_id AND t2.created_at >= datetime('now', '-2 hours'))
373
+ OR EXISTS (SELECT 1 FROM agent_tasks a WHERE a.session_id = r.session_id AND a.status = 'claimed')
374
+ )
375
+ )
376
+ ORDER BY t.created_at DESC LIMIT 30
377
+ `).all();
378
+ json(res, { calls, totalCalls: calls.length });
379
+ }
380
+ function apiAgentMailbox(db, res) {
381
+ // Deduplicate by subject+sender — keep only the latest of each
382
+ const messages = db.prepare(`
383
+ SELECT id, sender_id, recipient_id, recipient_role, category, priority, subject, body, created_at
384
+ FROM agent_mailbox
385
+ WHERE read = 0 AND id IN (
386
+ SELECT id FROM (
387
+ SELECT id, ROW_NUMBER() OVER (PARTITION BY sender_id, subject ORDER BY created_at DESC) as rn
388
+ FROM agent_mailbox WHERE read = 0
389
+ ) WHERE rn = 1
390
+ )
391
+ ORDER BY
392
+ CASE priority WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'normal' THEN 2 ELSE 3 END,
393
+ created_at DESC
394
+ LIMIT 10
395
+ `).all();
396
+ json(res, { messages });
397
+ }
273
398
  // ── Helpers ─────────────────────────────────────────────────────────
274
399
  function json(res, data, status = 200) {
275
400
  res.writeHead(status, { "Content-Type": "application/json" });
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -43,28 +43,26 @@ const exportStats = cliArgs.includes("--export-stats");
43
43
  const resetStats = cliArgs.includes("--reset-stats");
44
44
  const listPresetsFlag = cliArgs.includes("--list-presets");
45
45
  export { TOOLSET_MAP };
46
- // Default: 50 tools (core AI Flywheel + recon + security + boilerplate)
47
- // skill_update available via load_toolset("skill_update") for rule file freshness tracking
48
- const DEFAULT_TOOLSETS = ["verification", "eval", "quality_gate", "learning", "flywheel", "recon", "security", "boilerplate"];
46
+ const DEFAULT_TOOLSETS = ["verification", "eval", "quality_gate", "learning", "flywheel", "recon", "security", "boilerplate", "skill_update"];
49
47
  const PRESETS = {
50
48
  default: DEFAULT_TOOLSETS,
51
49
  // Themed presets — bridge between default (50 tools) and full (175 tools)
52
- web_dev: [...DEFAULT_TOOLSETS, "ui_capture", "vision", "web", "seo", "git_workflow", "architect", "ui_ux_dive", "ui_ux_dive_v2", "mcp_bridge", "pr_report"],
50
+ web_dev: [...DEFAULT_TOOLSETS, "ui_capture", "vision", "web", "seo", "git_workflow", "architect", "ui_ux_dive", "ui_ux_dive_v2", "mcp_bridge", "qa_orchestration", "visual_qa"],
53
51
  research: [...DEFAULT_TOOLSETS, "web", "llm", "rss", "email", "docs"],
54
52
  data: [...DEFAULT_TOOLSETS, "local_file", "llm", "web"],
55
- devops: [...DEFAULT_TOOLSETS, "git_workflow", "session_memory", "benchmark", "pattern", "pr_report"],
56
- mobile: [...DEFAULT_TOOLSETS, "ui_capture", "vision", "flicker_detection", "ui_ux_dive", "ui_ux_dive_v2", "mcp_bridge"],
53
+ devops: [...DEFAULT_TOOLSETS, "git_workflow", "session_memory", "benchmark", "pattern"],
54
+ mobile: [...DEFAULT_TOOLSETS, "ui_capture", "vision", "flicker_detection", "ui_ux_dive", "ui_ux_dive_v2", "mcp_bridge", "visual_qa"],
57
55
  academic: [...DEFAULT_TOOLSETS, "research_writing", "llm", "web", "local_file"],
58
- multi_agent: [...DEFAULT_TOOLSETS, "parallel", "self_eval", "session_memory", "pattern", "toon"],
59
- content: [...DEFAULT_TOOLSETS, "llm", "critter", "email", "rss", "platform", "architect"],
56
+ multi_agent: [...DEFAULT_TOOLSETS, "parallel", "self_eval", "session_memory", "pattern", "toon", "qa_orchestration"],
57
+ content: [...DEFAULT_TOOLSETS, "llm", "critter", "email", "rss", "platform", "architect", "local_dashboard"],
60
58
  full: Object.keys(TOOLSET_MAP),
61
59
  };
62
60
  const PRESET_DESCRIPTIONS = {
63
61
  default: "Core AI Flywheel — verification, eval, quality gates, learning, recon",
64
- web_dev: "Web projects — adds visual QA, SEO audit, git workflow, PR reports, code architecture",
62
+ web_dev: "Web projects — adds visual QA, SEO audit, git workflow, code architecture",
65
63
  research: "Research workflows — adds web search, LLM calls, RSS feeds, email, docs",
66
64
  data: "Data analysis — adds CSV/XLSX/PDF/JSON parsing, LLM extraction, web fetch",
67
- devops: "CI/CD & ops — adds git compliance, session memory, benchmarks, pattern mining, PR reports",
65
+ devops: "CI/CD & ops — adds git compliance, session memory, benchmarks, pattern mining",
68
66
  mobile: "Mobile apps — adds screenshot capture, vision analysis, flicker detection",
69
67
  academic: "Academic papers — adds polish, review, translate, logic check, data analysis",
70
68
  multi_agent: "Multi-agent teams — adds task locking, messaging, roles, oracle testing",
@@ -102,12 +100,12 @@ function parseToolsets() {
102
100
  }),
103
101
  "",
104
102
  "Examples:",
105
- " npx nodebench-mcp # Default (54 tools) - core AI Flywheel",
103
+ " npx nodebench-mcp # Default (50 tools) - core AI Flywheel",
106
104
  " npx nodebench-mcp --preset web_dev # Web development (+ vision, SEO, git)",
107
105
  " npx nodebench-mcp --preset research # Research workflows (+ web, LLM, RSS, email)",
108
106
  " npx nodebench-mcp --preset data # Data analysis (+ local file parsing, LLM)",
109
107
  " npx nodebench-mcp --preset academic # Academic writing (+ paper tools, LLM)",
110
- " npx nodebench-mcp --preset full # All 218 tools",
108
+ " npx nodebench-mcp --preset full # All 175 tools",
111
109
  " npx nodebench-mcp --smart-preset # Get AI-powered preset recommendation",
112
110
  " npx nodebench-mcp --stats # Show usage statistics",
113
111
  " npx nodebench-mcp --toolsets verification,eval,recon",
@@ -685,7 +683,7 @@ if (useEmbedding) {
685
683
  // Tool nodes: individual tools with full metadata text
686
684
  const toolCorpus = ALL_REGISTRY_ENTRIES.map((entry) => ({
687
685
  name: entry.name,
688
- text: `${entry.name} ${entry.tags.join(" ")} ${entry.category} ${entry.phase} ${(entry.quickRef.relatedTools ?? []).join(" ")} ${descMap.get(entry.name) ?? ""}`,
686
+ text: `${entry.name} ${entry.tags.join(" ")} ${entry.category} ${entry.phase} ${descMap.get(entry.name) ?? ""}`,
689
687
  nodeType: "tool",
690
688
  }));
691
689
  // Domain nodes: aggregate category descriptions for upward traversal
@@ -1293,6 +1291,204 @@ artifacts (findings, risks, gaps, tests, evals, gates, learnings) that compound
1293
1291
  },
1294
1292
  ],
1295
1293
  },
1294
+ {
1295
+ name: "orchestrating-swarms",
1296
+ description: "Master multi-agent orchestration using Claude Code's TeammateTool and Task system. Use when coordinating multiple agents, running parallel code reviews, creating pipeline workflows with dependencies, building self-organizing task queues, or any task benefiting from divide-and-conquer patterns.",
1297
+ messages: [
1298
+ {
1299
+ role: "user",
1300
+ content: {
1301
+ type: "text",
1302
+ text: `# Claude Code Swarm Orchestration
1303
+
1304
+ Master multi-agent orchestration using Claude Code's TeammateTool and Task system.
1305
+
1306
+ ---
1307
+
1308
+ ## Primitives
1309
+
1310
+ | Primitive | What It Is |
1311
+ |-----------|-----------|
1312
+ | **Agent** | A Claude instance that can use tools. You are an agent. Subagents are agents you spawn. |
1313
+ | **Team** | A named group of agents working together. One leader, multiple teammates. Config: \`~/.claude/teams/{name}/config.json\` |
1314
+ | **Teammate** | An agent that joined a team. Has a name, color, inbox. Spawned via Task with \`team_name\` + \`name\`. |
1315
+ | **Leader** | The agent that created the team. Receives messages, approves plans/shutdowns. |
1316
+ | **Task** | A work item with subject, description, status, owner, and dependencies. |
1317
+ | **Inbox** | JSON file where an agent receives messages. \`~/.claude/teams/{name}/inboxes/{agent}.json\` |
1318
+ | **Backend** | How teammates run. Auto-detected: \`in-process\` (invisible), \`tmux\` (visible panes), \`iterm2\` (split panes). |
1319
+
1320
+ ---
1321
+
1322
+ ## Two Ways to Spawn Agents
1323
+
1324
+ ### Method 1: Task Tool (Subagents) — short-lived, returns result directly
1325
+ \`\`\`javascript
1326
+ Task({ subagent_type: "Explore", description: "Find auth files", prompt: "...", model: "haiku" })
1327
+ \`\`\`
1328
+
1329
+ ### Method 2: Task + team_name + name (Teammates) — persistent, communicates via inbox
1330
+ \`\`\`javascript
1331
+ Teammate({ operation: "spawnTeam", team_name: "my-project" })
1332
+ Task({ team_name: "my-project", name: "security-reviewer", subagent_type: "general-purpose", prompt: "...", run_in_background: true })
1333
+ \`\`\`
1334
+
1335
+ | Aspect | Task (subagent) | Task + team_name + name (teammate) |
1336
+ |--------|-----------------|-----------------------------------|
1337
+ | Lifespan | Until task complete | Until shutdown requested |
1338
+ | Communication | Return value | Inbox messages |
1339
+ | Task access | None | Shared task list |
1340
+ | Team membership | No | Yes |
1341
+
1342
+ ---
1343
+
1344
+ ## Built-in Agent Types
1345
+
1346
+ - **Bash** — command execution, git ops (tools: Bash only)
1347
+ - **Explore** — read-only codebase search, file finding (use \`model: "haiku"\`)
1348
+ - **Plan** — architecture + implementation plans (read-only tools)
1349
+ - **general-purpose** — all tools, multi-step research + action
1350
+ - **claude-code-guide** — questions about Claude Code, Agent SDK, Anthropic API
1351
+ - **statusline-setup** — configure Claude Code status line
1352
+
1353
+ ---
1354
+
1355
+ ## TeammateTool Operations
1356
+
1357
+ | Operation | Who | What |
1358
+ |-----------|-----|------|
1359
+ | \`spawnTeam\` | Leader | Create team + task directory |
1360
+ | \`discoverTeams\` | Anyone | List joinable teams |
1361
+ | \`requestJoin\` | Teammate | Request to join existing team |
1362
+ | \`approveJoin\` | Leader | Accept join request |
1363
+ | \`write\` | Anyone | Message ONE teammate |
1364
+ | \`broadcast\` | Anyone | Message ALL teammates (N messages — expensive, avoid) |
1365
+ | \`requestShutdown\` | Leader | Ask teammate to exit |
1366
+ | \`approveShutdown\` | Teammate | **MUST call** — sends confirmation, exits process |
1367
+ | \`rejectShutdown\` | Teammate | Decline shutdown with reason |
1368
+ | \`approvePlan\` | Leader | Approve plan_approval_request |
1369
+ | \`rejectPlan\` | Leader | Reject plan with feedback |
1370
+ | \`cleanup\` | Leader | Remove team + task files (all teammates must be shut down first) |
1371
+
1372
+ ---
1373
+
1374
+ ## Task System
1375
+
1376
+ \`\`\`javascript
1377
+ TaskCreate({ subject: "Step 1", description: "...", activeForm: "Working on step 1..." })
1378
+ TaskList() // See all tasks + statuses
1379
+ TaskGet({ taskId: "2" }) // Get full task details
1380
+ TaskUpdate({ taskId: "2", addBlockedBy: ["1"] }) // Dependency — auto-unblocks when #1 completes
1381
+ TaskUpdate({ taskId: "2", owner: "worker-1", status: "in_progress" })
1382
+ TaskUpdate({ taskId: "2", status: "completed" })
1383
+ \`\`\`
1384
+
1385
+ ---
1386
+
1387
+ ## Orchestration Patterns
1388
+
1389
+ ### Pattern 1: Parallel Specialists
1390
+ \`\`\`javascript
1391
+ Teammate({ operation: "spawnTeam", team_name: "pr-review" })
1392
+ // Spawn reviewers in ONE message (parallel execution)
1393
+ Task({ team_name: "pr-review", name: "security", subagent_type: "general-purpose", prompt: "Review for security issues. Send findings to team-lead via Teammate write.", run_in_background: true })
1394
+ Task({ team_name: "pr-review", name: "perf", subagent_type: "general-purpose", prompt: "Review for perf issues. Send findings to team-lead via Teammate write.", run_in_background: true })
1395
+ // Collect from: cat ~/.claude/teams/pr-review/inboxes/team-lead.json
1396
+ \`\`\`
1397
+
1398
+ ### Pattern 2: Pipeline (Sequential Dependencies)
1399
+ \`\`\`javascript
1400
+ TaskCreate({ subject: "Research" }) // #1
1401
+ TaskCreate({ subject: "Plan" }) // #2
1402
+ TaskCreate({ subject: "Implement" }) // #3
1403
+ TaskUpdate({ taskId: "2", addBlockedBy: ["1"] }) // #2 waits for #1
1404
+ TaskUpdate({ taskId: "3", addBlockedBy: ["2"] }) // #3 waits for #2
1405
+ // Spawn workers that poll TaskList and claim unblocked tasks
1406
+ \`\`\`
1407
+
1408
+ ### Pattern 3: Self-Organizing Swarm
1409
+ \`\`\`javascript
1410
+ // 1. Create N independent tasks (no dependencies)
1411
+ // 2. Spawn M workers with this prompt loop:
1412
+ // a. TaskList → find pending+unclaimed task
1413
+ // b. TaskUpdate(claim) → TaskUpdate(in_progress) → do work
1414
+ // c. TaskUpdate(completed) → Teammate write findings to team-lead → repeat
1415
+ // d. If no tasks: notify team-lead idle, retry 3x, then exit
1416
+ \`\`\`
1417
+
1418
+ ### Pattern 4: Research → Implement (synchronous)
1419
+ \`\`\`javascript
1420
+ const research = await Task({ subagent_type: "general-purpose", prompt: "Research best practices for X..." })
1421
+ Task({ subagent_type: "general-purpose", prompt: \`Implement based on research: \${research.content}\` })
1422
+ \`\`\`
1423
+
1424
+ ---
1425
+
1426
+ ## Shutdown Sequence (always follow this order)
1427
+
1428
+ \`\`\`javascript
1429
+ // 1. Request shutdown for all teammates
1430
+ Teammate({ operation: "requestShutdown", target_agent_id: "worker-1", reason: "All tasks complete" })
1431
+ // 2. Wait for {"type": "shutdown_approved"} in inbox
1432
+ // 3. Only then cleanup
1433
+ Teammate({ operation: "cleanup" })
1434
+ \`\`\`
1435
+
1436
+ ---
1437
+
1438
+ ## Spawn Backends
1439
+
1440
+ | Backend | When auto-selected | Visibility |
1441
+ |---------|-------------------|------------|
1442
+ | \`in-process\` | Not in tmux/iTerm2 (default) | Hidden — no real-time output |
1443
+ | \`tmux\` | Inside tmux session (\$TMUX set) | Visible — switch panes |
1444
+ | \`iterm2\` | In iTerm2 + \`it2\` CLI installed | Visible — split panes |
1445
+
1446
+ Force: \`export CLAUDE_CODE_SPAWN_BACKEND=tmux\`
1447
+
1448
+ ---
1449
+
1450
+ ## Best Practices
1451
+
1452
+ 1. **Meaningful names**: \`security-reviewer\` not \`worker-1\`
1453
+ 2. **Explicit prompts**: Numbered steps + "send findings to team-lead via Teammate write"
1454
+ 3. **Use dependencies**: \`addBlockedBy\` — never poll manually
1455
+ 4. **Prefer write over broadcast**: broadcast = N messages for N teammates
1456
+ 5. **Always cleanup**: Don't leave orphaned teams
1457
+ 6. **Worker failures**: 5-min heartbeat timeout; crashed worker tasks can be reclaimed by others
1458
+
1459
+ ---
1460
+
1461
+ ## Quick Reference
1462
+
1463
+ \`\`\`javascript
1464
+ // Subagent (returns result)
1465
+ Task({ subagent_type: "Explore", description: "Find files", prompt: "..." })
1466
+
1467
+ // Teammate (persistent, background)
1468
+ Teammate({ operation: "spawnTeam", team_name: "my-team" })
1469
+ Task({ team_name: "my-team", name: "worker", subagent_type: "general-purpose", prompt: "...", run_in_background: true })
1470
+
1471
+ // Message teammate
1472
+ Teammate({ operation: "write", target_agent_id: "worker-1", value: "..." })
1473
+
1474
+ // Pipeline
1475
+ TaskCreate({ subject: "Step 1" }) // → #1
1476
+ TaskCreate({ subject: "Step 2" }) // → #2
1477
+ TaskUpdate({ taskId: "2", addBlockedBy: ["1"] })
1478
+
1479
+ // Shutdown
1480
+ Teammate({ operation: "requestShutdown", target_agent_id: "worker-1" })
1481
+ // wait for {"type": "shutdown_approved"} in inbox...
1482
+ Teammate({ operation: "cleanup" })
1483
+ \`\`\`
1484
+
1485
+ ---
1486
+
1487
+ *Source: kieranklaassen/orchestrating-swarms gist — Claude Code v2.1.19*`,
1488
+ },
1489
+ },
1490
+ ],
1491
+ },
1296
1492
  ];
1297
1493
  // Server instructions — tells Claude Code Tool Search (and other clients) when to search
1298
1494
  // for NodeBench tools. This is the key integration point for lazy loading compatibility.
@@ -1311,7 +1507,7 @@ Use NodeBench tools when you need to:
1311
1507
  - Audit SEO, analyze Figma flows, detect Android flicker
1312
1508
  - Call LLMs (GPT, Claude, Gemini) for analysis and extraction
1313
1509
  Start with discover_tools("<your task>") to find the right tool.`;
1314
- const server = new Server({ name: "nodebench-mcp-methodology", version: "2.24.0" }, {
1510
+ const server = new Server({ name: "nodebench-mcp-methodology", version: "2.27.0" }, {
1315
1511
  capabilities: { tools: { listChanged: true }, prompts: {} },
1316
1512
  instructions: SERVER_INSTRUCTIONS,
1317
1513
  });