nodebench-mcp 2.22.0 → 2.26.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 (96) hide show
  1. package/NODEBENCH_AGENTS.md +5 -4
  2. package/README.md +495 -280
  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.d.ts +12 -0
  22. package/dist/__tests__/multiHopDogfood.test.js +303 -0
  23. package/dist/__tests__/multiHopDogfood.test.js.map +1 -0
  24. package/dist/__tests__/openclawDogfood.test.d.ts +23 -0
  25. package/dist/__tests__/openclawDogfood.test.js +535 -0
  26. package/dist/__tests__/openclawDogfood.test.js.map +1 -0
  27. package/dist/__tests__/openclawMessaging.test.d.ts +14 -0
  28. package/dist/__tests__/openclawMessaging.test.js +232 -0
  29. package/dist/__tests__/openclawMessaging.test.js.map +1 -0
  30. package/dist/__tests__/tools.test.js +7 -3
  31. package/dist/__tests__/tools.test.js.map +1 -1
  32. package/dist/__tests__/traceabilityDogfood.test.d.ts +12 -0
  33. package/dist/__tests__/traceabilityDogfood.test.js +241 -0
  34. package/dist/__tests__/traceabilityDogfood.test.js.map +1 -0
  35. package/dist/__tests__/webmcpTools.test.d.ts +7 -0
  36. package/dist/__tests__/webmcpTools.test.js +195 -0
  37. package/dist/__tests__/webmcpTools.test.js.map +1 -0
  38. package/dist/dashboard/briefHtml.d.ts +20 -0
  39. package/dist/dashboard/briefHtml.js +1000 -0
  40. package/dist/dashboard/briefHtml.js.map +1 -0
  41. package/dist/dashboard/briefServer.d.ts +18 -0
  42. package/dist/dashboard/briefServer.js +320 -0
  43. package/dist/dashboard/briefServer.js.map +1 -0
  44. package/dist/dashboard/html.d.ts +18 -0
  45. package/dist/dashboard/html.js +1491 -0
  46. package/dist/dashboard/html.js.map +1 -0
  47. package/dist/dashboard/server.d.ts +17 -0
  48. package/dist/dashboard/server.js +403 -0
  49. package/dist/dashboard/server.js.map +1 -0
  50. package/dist/db.js +38 -0
  51. package/dist/db.js.map +1 -1
  52. package/dist/index.js +211 -5
  53. package/dist/index.js.map +1 -1
  54. package/dist/tools/critterTools.js +4 -0
  55. package/dist/tools/critterTools.js.map +1 -1
  56. package/dist/tools/forecastingTools.d.ts +11 -0
  57. package/dist/tools/forecastingTools.js +616 -0
  58. package/dist/tools/forecastingTools.js.map +1 -0
  59. package/dist/tools/localDashboardTools.d.ts +8 -0
  60. package/dist/tools/localDashboardTools.js +332 -0
  61. package/dist/tools/localDashboardTools.js.map +1 -0
  62. package/dist/tools/metaTools.js +170 -1
  63. package/dist/tools/metaTools.js.map +1 -1
  64. package/dist/tools/openclawTools.d.ts +11 -0
  65. package/dist/tools/openclawTools.js +1017 -0
  66. package/dist/tools/openclawTools.js.map +1 -0
  67. package/dist/tools/overstoryTools.d.ts +14 -0
  68. package/dist/tools/overstoryTools.js +426 -0
  69. package/dist/tools/overstoryTools.js.map +1 -0
  70. package/dist/tools/prReportTools.d.ts +11 -0
  71. package/dist/tools/prReportTools.js +911 -0
  72. package/dist/tools/prReportTools.js.map +1 -0
  73. package/dist/tools/progressiveDiscoveryTools.js +28 -9
  74. package/dist/tools/progressiveDiscoveryTools.js.map +1 -1
  75. package/dist/tools/selfEvalTools.js +8 -1
  76. package/dist/tools/selfEvalTools.js.map +1 -1
  77. package/dist/tools/sessionMemoryTools.js +14 -2
  78. package/dist/tools/sessionMemoryTools.js.map +1 -1
  79. package/dist/tools/skillUpdateTools.d.ts +24 -0
  80. package/dist/tools/skillUpdateTools.js +469 -0
  81. package/dist/tools/skillUpdateTools.js.map +1 -0
  82. package/dist/tools/toolRegistry.js +178 -0
  83. package/dist/tools/toolRegistry.js.map +1 -1
  84. package/dist/tools/uiUxDiveAdvancedTools.js +61 -0
  85. package/dist/tools/uiUxDiveAdvancedTools.js.map +1 -1
  86. package/dist/tools/uiUxDiveTools.js +154 -1
  87. package/dist/tools/uiUxDiveTools.js.map +1 -1
  88. package/dist/tools/visualQaTools.d.ts +2 -0
  89. package/dist/tools/visualQaTools.js +1088 -0
  90. package/dist/tools/visualQaTools.js.map +1 -0
  91. package/dist/tools/webmcpTools.d.ts +16 -0
  92. package/dist/tools/webmcpTools.js +703 -0
  93. package/dist/tools/webmcpTools.js.map +1 -0
  94. package/dist/toolsetRegistry.js +4 -0
  95. package/dist/toolsetRegistry.js.map +1 -1
  96. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"briefHtml.js","sourceRoot":"","sources":["../../src/dashboard/briefHtml.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,UAAU,qBAAqB;IACnC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAi9BD,CAAC;AACT,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * NodeBench MCP — Local Daily Brief Dashboard Server
3
+ *
4
+ * Serves a local-first dashboard at port 6275 showing:
5
+ * 1. Daily Brief (metrics, features, source summary)
6
+ * 2. Narrative Lanes (threads by phase, events, claims)
7
+ * 3. Ops View (sync status, tool frequency, verification cycles)
8
+ *
9
+ * All data from local SQLite (~/.nodebench/nodebench.db).
10
+ * Zero Convex dependency at runtime — works fully offline.
11
+ */
12
+ import type Database from "better-sqlite3";
13
+ /** Start the brief dashboard HTTP server. Returns the port it's listening on. */
14
+ export declare function startBriefDashboardServer(db: Database.Database, preferredPort?: number): Promise<number>;
15
+ /** Stop the brief dashboard server */
16
+ export declare function stopBriefDashboardServer(): void;
17
+ /** Get the current brief dashboard URL */
18
+ export declare function getBriefDashboardUrl(): string | null;
@@ -0,0 +1,320 @@
1
+ /**
2
+ * NodeBench MCP — Local Daily Brief Dashboard Server
3
+ *
4
+ * Serves a local-first dashboard at port 6275 showing:
5
+ * 1. Daily Brief (metrics, features, source summary)
6
+ * 2. Narrative Lanes (threads by phase, events, claims)
7
+ * 3. Ops View (sync status, tool frequency, verification cycles)
8
+ *
9
+ * All data from local SQLite (~/.nodebench/nodebench.db).
10
+ * Zero Convex dependency at runtime — works fully offline.
11
+ */
12
+ import { createServer } from "node:http";
13
+ import { getBriefDashboardHtml } from "./briefHtml.js";
14
+ let _server = null;
15
+ let _port = 0;
16
+ /** Start the brief dashboard HTTP server. Returns the port it's listening on. */
17
+ export function startBriefDashboardServer(db, preferredPort = 6275) {
18
+ return new Promise((resolve, reject) => {
19
+ if (_server) {
20
+ resolve(_port);
21
+ return;
22
+ }
23
+ _server = createServer((req, res) => handleRequest(db, req, res));
24
+ let attempts = 0;
25
+ const maxRetries = 5;
26
+ function tryListen(port) {
27
+ _server.once("error", (err) => {
28
+ if (err.code === "EADDRINUSE" && attempts < maxRetries) {
29
+ attempts++;
30
+ tryListen(port + 1);
31
+ }
32
+ else {
33
+ reject(err);
34
+ }
35
+ });
36
+ _server.listen(port, "127.0.0.1", () => {
37
+ _port = port;
38
+ resolve(port);
39
+ });
40
+ }
41
+ tryListen(preferredPort);
42
+ });
43
+ }
44
+ /** Stop the brief dashboard server */
45
+ export function stopBriefDashboardServer() {
46
+ if (_server) {
47
+ _server.close();
48
+ _server = null;
49
+ _port = 0;
50
+ }
51
+ }
52
+ /** Get the current brief dashboard URL */
53
+ export function getBriefDashboardUrl() {
54
+ return _port ? `http://127.0.0.1:${_port}` : null;
55
+ }
56
+ // ── Helpers ────────────────────────────────────────────────────────────
57
+ function json(res, data) {
58
+ res.writeHead(200, { "Content-Type": "application/json; charset=utf-8" });
59
+ res.end(JSON.stringify(data));
60
+ }
61
+ // ── Request Router ─────────────────────────────────────────────────────
62
+ function handleRequest(db, req, res) {
63
+ const url = new URL(req.url || "/", `http://127.0.0.1:${_port}`);
64
+ const path = url.pathname;
65
+ res.setHeader("Access-Control-Allow-Origin", "*");
66
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
67
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type");
68
+ if (req.method === "OPTIONS") {
69
+ res.writeHead(204);
70
+ res.end();
71
+ return;
72
+ }
73
+ try {
74
+ if (path === "/" || path === "/index.html") {
75
+ res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
76
+ res.end(getBriefDashboardHtml());
77
+ }
78
+ else if (path === "/api/brief/latest") {
79
+ apiBriefLatest(db, res);
80
+ }
81
+ else if (path.startsWith("/api/brief/date/")) {
82
+ const date = decodeURIComponent(path.split("/api/brief/date/")[1]);
83
+ apiBriefByDate(db, date, res);
84
+ }
85
+ else if (path.startsWith("/api/brief/memories/")) {
86
+ const date = decodeURIComponent(path.split("/api/brief/memories/")[1]);
87
+ apiBriefMemories(db, date, res);
88
+ }
89
+ else if (path === "/api/narrative/threads") {
90
+ const phase = url.searchParams.get("phase") || undefined;
91
+ apiNarrativeThreads(db, res, phase);
92
+ }
93
+ else if (path.startsWith("/api/narrative/thread/")) {
94
+ const id = decodeURIComponent(path.split("/api/narrative/thread/")[1]);
95
+ apiNarrativeThread(db, id, res);
96
+ }
97
+ else if (path === "/api/narrative/events/recent") {
98
+ const limit = parseInt(url.searchParams.get("limit") || "30", 10);
99
+ apiRecentEvents(db, limit, res);
100
+ }
101
+ else if (path === "/api/ops/sync-status") {
102
+ apiSyncStatus(db, res);
103
+ }
104
+ else if (path === "/api/ops/stats") {
105
+ apiOpsStats(db, res);
106
+ }
107
+ else if (path === "/api/audience/event" && req.method === "POST") {
108
+ let body = "";
109
+ req.on("data", (chunk) => { body += chunk; });
110
+ req.on("end", () => {
111
+ try {
112
+ const data = JSON.parse(body);
113
+ apiLogAudienceEvent(db, data, res);
114
+ }
115
+ catch {
116
+ res.writeHead(400, { "Content-Type": "application/json" });
117
+ res.end(JSON.stringify({ error: "Invalid JSON" }));
118
+ }
119
+ });
120
+ return;
121
+ }
122
+ else {
123
+ res.writeHead(404, { "Content-Type": "application/json" });
124
+ res.end(JSON.stringify({ error: "Not found" }));
125
+ }
126
+ }
127
+ catch (err) {
128
+ res.writeHead(500, { "Content-Type": "application/json" });
129
+ res.end(JSON.stringify({ error: err.message }));
130
+ }
131
+ }
132
+ // ── Brief APIs ─────────────────────────────────────────────────────────
133
+ function apiBriefLatest(db, res) {
134
+ const row = db.prepare("SELECT * FROM brief_snapshots ORDER BY generated_at DESC LIMIT 1").get();
135
+ if (!row) {
136
+ json(res, { empty: true, message: "No brief snapshots synced yet. Run: npm run local:sync" });
137
+ return;
138
+ }
139
+ json(res, {
140
+ ...row,
141
+ dashboard_metrics: safeParseJson(row.dashboard_metrics),
142
+ source_summary: safeParseJson(row.source_summary),
143
+ });
144
+ }
145
+ function apiBriefByDate(db, date, res) {
146
+ const row = db.prepare("SELECT * FROM brief_snapshots WHERE date_string = ? ORDER BY version DESC LIMIT 1").get(date);
147
+ if (!row) {
148
+ json(res, { empty: true, date });
149
+ return;
150
+ }
151
+ json(res, {
152
+ ...row,
153
+ dashboard_metrics: safeParseJson(row.dashboard_metrics),
154
+ source_summary: safeParseJson(row.source_summary),
155
+ });
156
+ }
157
+ function apiBriefMemories(db, date, res) {
158
+ const memories = db.prepare("SELECT * FROM brief_memories WHERE date_string = ? ORDER BY rowid DESC").all();
159
+ const memoryIds = memories.map((m) => m.id);
160
+ let tasks = [];
161
+ if (memoryIds.length > 0) {
162
+ const placeholders = memoryIds.map(() => "?").join(",");
163
+ tasks = db.prepare(`SELECT * FROM brief_task_results WHERE memory_id IN (${placeholders}) ORDER BY rowid`).all(...memoryIds);
164
+ }
165
+ json(res, {
166
+ memories: memories.map((m) => ({
167
+ ...m,
168
+ features: safeParseJson(m.features),
169
+ progress_log: safeParseJson(m.progress_log),
170
+ })),
171
+ tasks: tasks.map((t) => ({
172
+ ...t,
173
+ citations: safeParseJson(t.citations),
174
+ artifacts: safeParseJson(t.artifacts),
175
+ })),
176
+ });
177
+ }
178
+ // ── Narrative APIs ─────────────────────────────────────────────────────
179
+ function apiNarrativeThreads(db, res, phase) {
180
+ const query = phase
181
+ ? "SELECT * FROM narrative_threads_local WHERE current_phase = ? ORDER BY latest_event_at DESC"
182
+ : "SELECT * FROM narrative_threads_local ORDER BY latest_event_at DESC";
183
+ const rows = phase
184
+ ? db.prepare(query).all(phase)
185
+ : db.prepare(query).all();
186
+ json(res, rows.map((r) => ({
187
+ ...r,
188
+ entity_keys: safeParseJson(r.entity_keys),
189
+ topic_tags: safeParseJson(r.topic_tags),
190
+ quality: safeParseJson(r.quality),
191
+ })));
192
+ }
193
+ function apiNarrativeThread(db, id, res) {
194
+ const thread = db.prepare("SELECT * FROM narrative_threads_local WHERE id = ? OR slug = ?").get(id, id);
195
+ if (!thread) {
196
+ json(res, { empty: true, id });
197
+ return;
198
+ }
199
+ const events = db.prepare("SELECT * FROM narrative_events_local WHERE thread_id = ? ORDER BY occurred_at DESC LIMIT 50").all(thread.id);
200
+ json(res, {
201
+ thread: {
202
+ ...thread,
203
+ entity_keys: safeParseJson(thread.entity_keys),
204
+ topic_tags: safeParseJson(thread.topic_tags),
205
+ quality: safeParseJson(thread.quality),
206
+ },
207
+ events: events.map((e) => ({
208
+ ...e,
209
+ source_urls: safeParseJson(e.source_urls),
210
+ citation_ids: safeParseJson(e.citation_ids),
211
+ claim_set: safeParseJson(e.claim_set),
212
+ })),
213
+ });
214
+ }
215
+ function apiRecentEvents(db, limit, res) {
216
+ const events = db.prepare("SELECT * FROM narrative_events_local ORDER BY occurred_at DESC LIMIT ?").all(Math.min(limit, 100));
217
+ json(res, events.map((e) => ({
218
+ ...e,
219
+ source_urls: safeParseJson(e.source_urls),
220
+ citation_ids: safeParseJson(e.citation_ids),
221
+ claim_set: safeParseJson(e.claim_set),
222
+ })));
223
+ }
224
+ // ── Ops APIs ───────────────────────────────────────────────────────────
225
+ function apiSyncStatus(db, res) {
226
+ const latest = db.prepare("SELECT * FROM sync_runs ORDER BY started_at DESC LIMIT 1").get();
227
+ const history = db.prepare("SELECT id, started_at, status, duration_ms, tables_synced FROM sync_runs ORDER BY started_at DESC LIMIT 10").all();
228
+ json(res, {
229
+ latest: latest ? { ...latest, tables_synced: safeParseJson(latest.tables_synced) } : null,
230
+ history: history.map((r) => ({ ...r, tables_synced: safeParseJson(r.tables_synced) })),
231
+ });
232
+ }
233
+ function apiOpsStats(db, res) {
234
+ // Tool call frequency (last 24h)
235
+ let toolStats = [];
236
+ try {
237
+ toolStats = db.prepare(`
238
+ SELECT tool_name, COUNT(*) as count, AVG(duration_ms) as avg_duration,
239
+ SUM(CASE WHEN status = 'error' THEN 1 ELSE 0 END) as errors
240
+ FROM tool_call_log
241
+ WHERE created_at > datetime('now', '-1 day')
242
+ GROUP BY tool_name
243
+ ORDER BY count DESC
244
+ LIMIT 20
245
+ `).all();
246
+ }
247
+ catch { /* tool_call_log may not exist */ }
248
+ // Active verification cycles
249
+ let activeCycles = [];
250
+ try {
251
+ activeCycles = db.prepare(`
252
+ SELECT id, title, status, created_at
253
+ FROM verification_cycles
254
+ WHERE status NOT IN ('completed', 'abandoned')
255
+ ORDER BY created_at DESC
256
+ LIMIT 5
257
+ `).all();
258
+ }
259
+ catch { /* verification_cycles may not exist */ }
260
+ // Audience events today
261
+ let audienceStats = null;
262
+ try {
263
+ const todayEvents = db.prepare(`
264
+ SELECT COUNT(*) as count,
265
+ SUM(CASE WHEN is_public = 1 THEN 1 ELSE 0 END) as public_triggers
266
+ FROM audience_events
267
+ WHERE created_at > datetime('now', '-1 day')
268
+ `).get();
269
+ if (todayEvents && todayEvents.count > 0) {
270
+ audienceStats = {
271
+ triggeredToday: todayEvents.public_triggers ?? 0,
272
+ totalEvents: todayEvents.count,
273
+ };
274
+ }
275
+ }
276
+ catch { /* audience_events may not exist */ }
277
+ // Brief + thread counts
278
+ let briefCount = 0;
279
+ let threadCount = 0;
280
+ let eventCount = 0;
281
+ try {
282
+ briefCount = db.prepare("SELECT COUNT(*) as c FROM brief_snapshots").get()?.c ?? 0;
283
+ threadCount = db.prepare("SELECT COUNT(*) as c FROM narrative_threads_local").get()?.c ?? 0;
284
+ eventCount = db.prepare("SELECT COUNT(*) as c FROM narrative_events_local").get()?.c ?? 0;
285
+ }
286
+ catch { /* tables may not exist */ }
287
+ json(res, {
288
+ toolCallFrequency: toolStats,
289
+ activeCycles,
290
+ privacyMode: audienceStats,
291
+ dataCounts: { briefs: briefCount, threads: threadCount, events: eventCount },
292
+ });
293
+ }
294
+ // ── Audience Event Logging ──────────────────────────────────────────────
295
+ function apiLogAudienceEvent(db, data, res) {
296
+ const id = `aud_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
297
+ try {
298
+ db.prepare(`
299
+ INSERT INTO audience_events (id, event_type, viewer_count, is_public)
300
+ VALUES (?, ?, ?, ?)
301
+ `).run(id, data.event_type ?? "unknown", data.viewer_count ?? 0, data.is_public ? 1 : 0);
302
+ json(res, { success: true, id });
303
+ }
304
+ catch (err) {
305
+ res.writeHead(500, { "Content-Type": "application/json" });
306
+ res.end(JSON.stringify({ error: err.message }));
307
+ }
308
+ }
309
+ // ── Utilities ──────────────────────────────────────────────────────────
310
+ function safeParseJson(s) {
311
+ if (!s)
312
+ return null;
313
+ try {
314
+ return JSON.parse(s);
315
+ }
316
+ catch {
317
+ return s;
318
+ }
319
+ }
320
+ //# sourceMappingURL=briefServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"briefServer.js","sourceRoot":"","sources":["../../src/dashboard/briefServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * NodeBench MCP — Dashboard HTML v4
3
+ *
4
+ * Single-scroll, zero-tab dashboard. Everything visible at once.
5
+ * Clean, intuitive design: Inter font, clear section hierarchy.
6
+ * Auto-refreshes every 5s with hash-based diffing.
7
+ *
8
+ * v4 improvements:
9
+ * - CSS custom properties for consistent spacing/shadows/gradients
10
+ * - Responsive @media breakpoints for mobile/tablet
11
+ * - Full ARIA accessibility (labels, roles, keyboard nav, focus-visible)
12
+ * - Carousel: IntersectionObserver dot tracking, edge-disabled arrows, keyboard arrows
13
+ * - XSS safety: all user-controlled strings escaped
14
+ * - Smart refresh: skip re-render when data unchanged
15
+ * - Priority-scored category detection
16
+ * - Deferred rendering for collapsed cards (DOM-light pagination)
17
+ */
18
+ export declare function getDashboardHtml(): string;