nodebench-mcp 1.0.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.
- package/README.md +237 -0
- package/dist/__tests__/tools.test.d.ts +1 -0
- package/dist/__tests__/tools.test.js +402 -0
- package/dist/__tests__/tools.test.js.map +1 -0
- package/dist/db.d.ts +4 -0
- package/dist/db.js +198 -0
- package/dist/db.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +237 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/documentTools.d.ts +5 -0
- package/dist/tools/documentTools.js +524 -0
- package/dist/tools/documentTools.js.map +1 -0
- package/dist/tools/documentationTools.d.ts +12 -0
- package/dist/tools/documentationTools.js +647 -0
- package/dist/tools/documentationTools.js.map +1 -0
- package/dist/tools/evalTools.d.ts +6 -0
- package/dist/tools/evalTools.js +335 -0
- package/dist/tools/evalTools.js.map +1 -0
- package/dist/tools/financialTools.d.ts +10 -0
- package/dist/tools/financialTools.js +403 -0
- package/dist/tools/financialTools.js.map +1 -0
- package/dist/tools/flywheelTools.d.ts +6 -0
- package/dist/tools/flywheelTools.js +366 -0
- package/dist/tools/flywheelTools.js.map +1 -0
- package/dist/tools/githubTools.d.ts +12 -0
- package/dist/tools/githubTools.js +432 -0
- package/dist/tools/githubTools.js.map +1 -0
- package/dist/tools/learningTools.d.ts +6 -0
- package/dist/tools/learningTools.js +199 -0
- package/dist/tools/learningTools.js.map +1 -0
- package/dist/tools/memoryTools.d.ts +5 -0
- package/dist/tools/memoryTools.js +137 -0
- package/dist/tools/memoryTools.js.map +1 -0
- package/dist/tools/metaTools.d.ts +7 -0
- package/dist/tools/metaTools.js +837 -0
- package/dist/tools/metaTools.js.map +1 -0
- package/dist/tools/planningTools.d.ts +5 -0
- package/dist/tools/planningTools.js +147 -0
- package/dist/tools/planningTools.js.map +1 -0
- package/dist/tools/qualityGateTools.d.ts +6 -0
- package/dist/tools/qualityGateTools.js +347 -0
- package/dist/tools/qualityGateTools.js.map +1 -0
- package/dist/tools/reconTools.d.ts +8 -0
- package/dist/tools/reconTools.js +729 -0
- package/dist/tools/reconTools.js.map +1 -0
- package/dist/tools/searchTools.d.ts +5 -0
- package/dist/tools/searchTools.js +145 -0
- package/dist/tools/searchTools.js.map +1 -0
- package/dist/tools/uiCaptureTools.d.ts +8 -0
- package/dist/tools/uiCaptureTools.js +339 -0
- package/dist/tools/uiCaptureTools.js.map +1 -0
- package/dist/tools/verificationTools.d.ts +6 -0
- package/dist/tools/verificationTools.js +472 -0
- package/dist/tools/verificationTools.js.map +1 -0
- package/dist/tools/visionTools.d.ts +12 -0
- package/dist/tools/visionTools.js +553 -0
- package/dist/tools/visionTools.js.map +1 -0
- package/dist/tools/webTools.d.ts +12 -0
- package/dist/tools/webTools.js +443 -0
- package/dist/tools/webTools.js.map +1 -0
- package/dist/types.d.ts +16 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconTools.js","sourceRoot":"","sources":["../../src/tools/reconTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search tools — local full-text search via SQLite FTS5 over documents and memory.
|
|
3
|
+
*/
|
|
4
|
+
import { getDb } from "../db.js";
|
|
5
|
+
export const searchTools = [
|
|
6
|
+
{
|
|
7
|
+
name: "quickSearch",
|
|
8
|
+
description: "Execute a quick search across local documents and memory. Returns ranked results.",
|
|
9
|
+
inputSchema: {
|
|
10
|
+
type: "object",
|
|
11
|
+
properties: {
|
|
12
|
+
query: { type: "string", description: "Search query" },
|
|
13
|
+
maxResults: {
|
|
14
|
+
type: "number",
|
|
15
|
+
description: "Maximum number of results (default 10)",
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
required: ["query"],
|
|
19
|
+
},
|
|
20
|
+
handler: async (args) => {
|
|
21
|
+
const db = getDb();
|
|
22
|
+
const maxResults = args.maxResults ?? 10;
|
|
23
|
+
const query = args.query;
|
|
24
|
+
// Search documents via FTS5
|
|
25
|
+
const docResults = db.prepare(`
|
|
26
|
+
SELECT d.id, d.title, 'document' as source,
|
|
27
|
+
snippet(documents_fts, 1, '**', '**', '...', 48) as snippet,
|
|
28
|
+
rank
|
|
29
|
+
FROM documents_fts
|
|
30
|
+
JOIN documents d ON d.rowid = documents_fts.rowid
|
|
31
|
+
WHERE documents_fts MATCH ?
|
|
32
|
+
AND d.is_archived = 0
|
|
33
|
+
ORDER BY rank
|
|
34
|
+
LIMIT ?
|
|
35
|
+
`).all(query, maxResults);
|
|
36
|
+
// Search memory via FTS5
|
|
37
|
+
const memResults = db.prepare(`
|
|
38
|
+
SELECT m.id, m.key as title, 'memory' as source,
|
|
39
|
+
snippet(memory_fts, 1, '**', '**', '...', 48) as snippet,
|
|
40
|
+
rank
|
|
41
|
+
FROM memory_fts
|
|
42
|
+
JOIN memory m ON m.id = memory_fts.rowid
|
|
43
|
+
WHERE memory_fts MATCH ?
|
|
44
|
+
ORDER BY rank
|
|
45
|
+
LIMIT ?
|
|
46
|
+
`).all(query, maxResults);
|
|
47
|
+
// Merge and sort by rank
|
|
48
|
+
const combined = [...docResults, ...memResults]
|
|
49
|
+
.sort((a, b) => a.rank - b.rank)
|
|
50
|
+
.slice(0, maxResults);
|
|
51
|
+
return {
|
|
52
|
+
query,
|
|
53
|
+
count: combined.length,
|
|
54
|
+
results: combined.map((r) => ({
|
|
55
|
+
id: r.id,
|
|
56
|
+
title: r.title,
|
|
57
|
+
source: r.source,
|
|
58
|
+
snippet: r.snippet,
|
|
59
|
+
})),
|
|
60
|
+
};
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: "fusionSearch",
|
|
65
|
+
description: "Multi-source search with mode control. Modes: fast (documents only), balanced (documents + memory), comprehensive (documents + memory + plans).",
|
|
66
|
+
inputSchema: {
|
|
67
|
+
type: "object",
|
|
68
|
+
properties: {
|
|
69
|
+
query: { type: "string", description: "Search query" },
|
|
70
|
+
mode: {
|
|
71
|
+
type: "string",
|
|
72
|
+
enum: ["fast", "balanced", "comprehensive"],
|
|
73
|
+
description: "Search mode (default: balanced)",
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
required: ["query"],
|
|
77
|
+
},
|
|
78
|
+
handler: async (args) => {
|
|
79
|
+
const db = getDb();
|
|
80
|
+
const mode = args.mode ?? "balanced";
|
|
81
|
+
const query = args.query;
|
|
82
|
+
const results = [];
|
|
83
|
+
// Always search documents
|
|
84
|
+
const docResults = db.prepare(`
|
|
85
|
+
SELECT d.id, d.title, 'document' as source,
|
|
86
|
+
snippet(documents_fts, 1, '**', '**', '...', 48) as snippet,
|
|
87
|
+
rank
|
|
88
|
+
FROM documents_fts
|
|
89
|
+
JOIN documents d ON d.rowid = documents_fts.rowid
|
|
90
|
+
WHERE documents_fts MATCH ?
|
|
91
|
+
AND d.is_archived = 0
|
|
92
|
+
ORDER BY rank
|
|
93
|
+
LIMIT 20
|
|
94
|
+
`).all(query);
|
|
95
|
+
results.push(...docResults);
|
|
96
|
+
// Balanced and comprehensive: also search memory
|
|
97
|
+
if (mode === "balanced" || mode === "comprehensive") {
|
|
98
|
+
const memResults = db.prepare(`
|
|
99
|
+
SELECT m.id, m.key as title, 'memory' as source,
|
|
100
|
+
snippet(memory_fts, 1, '**', '**', '...', 48) as snippet,
|
|
101
|
+
rank
|
|
102
|
+
FROM memory_fts
|
|
103
|
+
JOIN memory m ON m.id = memory_fts.rowid
|
|
104
|
+
WHERE memory_fts MATCH ?
|
|
105
|
+
ORDER BY rank
|
|
106
|
+
LIMIT 20
|
|
107
|
+
`).all(query);
|
|
108
|
+
results.push(...memResults);
|
|
109
|
+
}
|
|
110
|
+
// Comprehensive: also search plans (keyword match, no FTS)
|
|
111
|
+
if (mode === "comprehensive") {
|
|
112
|
+
const queryLower = query.toLowerCase();
|
|
113
|
+
const plans = db.prepare("SELECT id, goal, steps FROM plans").all();
|
|
114
|
+
for (const plan of plans) {
|
|
115
|
+
const text = `${plan.goal} ${plan.steps}`.toLowerCase();
|
|
116
|
+
if (text.includes(queryLower)) {
|
|
117
|
+
results.push({
|
|
118
|
+
id: plan.id,
|
|
119
|
+
title: plan.goal,
|
|
120
|
+
source: "plan",
|
|
121
|
+
snippet: plan.goal,
|
|
122
|
+
rank: -0.5, // lower priority than FTS matches
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Sort by rank and dedupe
|
|
128
|
+
const sorted = results
|
|
129
|
+
.sort((a, b) => a.rank - b.rank)
|
|
130
|
+
.slice(0, 30);
|
|
131
|
+
return {
|
|
132
|
+
query,
|
|
133
|
+
mode,
|
|
134
|
+
count: sorted.length,
|
|
135
|
+
results: sorted.map((r) => ({
|
|
136
|
+
id: r.id,
|
|
137
|
+
title: r.title,
|
|
138
|
+
source: r.source,
|
|
139
|
+
snippet: r.snippet,
|
|
140
|
+
})),
|
|
141
|
+
};
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
];
|
|
145
|
+
//# sourceMappingURL=searchTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchTools.js","sourceRoot":"","sources":["../../src/tools/searchTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Capture tools — headless browser screenshot capture for visual verification.
|
|
3
|
+
* Uses Playwright (optional dependency) to open a URL, capture screenshots at
|
|
4
|
+
* specified viewports, and collect console errors. Returns screenshots as base64
|
|
5
|
+
* image content blocks so multimodal agents can visually inspect the UI directly.
|
|
6
|
+
*/
|
|
7
|
+
import type { McpTool } from "../types.js";
|
|
8
|
+
export declare const uiCaptureTools: McpTool[];
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Capture tools — headless browser screenshot capture for visual verification.
|
|
3
|
+
* Uses Playwright (optional dependency) to open a URL, capture screenshots at
|
|
4
|
+
* specified viewports, and collect console errors. Returns screenshots as base64
|
|
5
|
+
* image content blocks so multimodal agents can visually inspect the UI directly.
|
|
6
|
+
*/
|
|
7
|
+
import { join } from "path";
|
|
8
|
+
import { homedir } from "os";
|
|
9
|
+
import { mkdirSync, existsSync, readFileSync } from "fs";
|
|
10
|
+
// Screenshot storage directory
|
|
11
|
+
const CAPTURE_DIR = join(homedir(), ".nodebench", "captures");
|
|
12
|
+
function ensureCaptureDir() {
|
|
13
|
+
if (!existsSync(CAPTURE_DIR)) {
|
|
14
|
+
mkdirSync(CAPTURE_DIR, { recursive: true });
|
|
15
|
+
}
|
|
16
|
+
return CAPTURE_DIR;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Dynamically import playwright. Returns null if not installed.
|
|
20
|
+
*/
|
|
21
|
+
async function getPlaywright() {
|
|
22
|
+
try {
|
|
23
|
+
return await import("playwright");
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const VIEWPORT_PRESETS = {
|
|
30
|
+
mobile: { width: 375, height: 812 },
|
|
31
|
+
tablet: { width: 768, height: 1024 },
|
|
32
|
+
desktop: { width: 1280, height: 800 },
|
|
33
|
+
wide: { width: 1920, height: 1080 },
|
|
34
|
+
};
|
|
35
|
+
export const uiCaptureTools = [
|
|
36
|
+
{
|
|
37
|
+
name: "capture_ui_screenshot",
|
|
38
|
+
description: "Capture a screenshot of a URL using headless Playwright. Returns the screenshot as an inline image that multimodal agents can see and evaluate directly. Also captures browser console errors. Supports viewport presets (mobile/tablet/desktop/wide) or custom dimensions. Requires Playwright to be installed in the project.",
|
|
39
|
+
rawContent: true,
|
|
40
|
+
inputSchema: {
|
|
41
|
+
type: "object",
|
|
42
|
+
properties: {
|
|
43
|
+
url: {
|
|
44
|
+
type: "string",
|
|
45
|
+
description: "URL to capture (e.g. http://localhost:3000, http://localhost:6006 for Storybook)",
|
|
46
|
+
},
|
|
47
|
+
viewport: {
|
|
48
|
+
type: "string",
|
|
49
|
+
enum: ["mobile", "tablet", "desktop", "wide", "custom"],
|
|
50
|
+
description: "Viewport preset: mobile (375×812), tablet (768×1024), desktop (1280×800), wide (1920×1080), or custom",
|
|
51
|
+
},
|
|
52
|
+
width: {
|
|
53
|
+
type: "number",
|
|
54
|
+
description: "Custom viewport width (only used when viewport is 'custom')",
|
|
55
|
+
},
|
|
56
|
+
height: {
|
|
57
|
+
type: "number",
|
|
58
|
+
description: "Custom viewport height (only used when viewport is 'custom')",
|
|
59
|
+
},
|
|
60
|
+
fullPage: {
|
|
61
|
+
type: "boolean",
|
|
62
|
+
description: "Capture full scrollable page (default: true)",
|
|
63
|
+
},
|
|
64
|
+
waitForSelector: {
|
|
65
|
+
type: "string",
|
|
66
|
+
description: "Optional CSS selector to wait for before capturing (e.g. '[data-testid=\"main-content\"]')",
|
|
67
|
+
},
|
|
68
|
+
waitMs: {
|
|
69
|
+
type: "number",
|
|
70
|
+
description: "Additional wait time in ms after page load (default: 1000). Useful for animations or lazy-loaded content.",
|
|
71
|
+
},
|
|
72
|
+
label: {
|
|
73
|
+
type: "string",
|
|
74
|
+
description: "Human-readable label for the capture (used in filename, e.g. 'agent-status-card-mobile')",
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
required: ["url"],
|
|
78
|
+
},
|
|
79
|
+
handler: async (args) => {
|
|
80
|
+
const pw = await getPlaywright();
|
|
81
|
+
if (!pw) {
|
|
82
|
+
return [
|
|
83
|
+
{
|
|
84
|
+
type: "text",
|
|
85
|
+
text: JSON.stringify({
|
|
86
|
+
error: true,
|
|
87
|
+
message: "Playwright is not installed. Install it with: npm install playwright && npx playwright install chromium",
|
|
88
|
+
suggestion: "The capture_ui_screenshot tool requires Playwright for headless browser automation. " +
|
|
89
|
+
"Run `npm install playwright` in your project, then `npx playwright install chromium` to download the browser binary.",
|
|
90
|
+
}),
|
|
91
|
+
},
|
|
92
|
+
];
|
|
93
|
+
}
|
|
94
|
+
const viewportName = args.viewport ?? "desktop";
|
|
95
|
+
let viewportSize;
|
|
96
|
+
if (viewportName === "custom") {
|
|
97
|
+
if (!args.width || !args.height) {
|
|
98
|
+
throw new Error("Custom viewport requires both 'width' and 'height' parameters");
|
|
99
|
+
}
|
|
100
|
+
viewportSize = { width: args.width, height: args.height };
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
viewportSize = VIEWPORT_PRESETS[viewportName];
|
|
104
|
+
if (!viewportSize) {
|
|
105
|
+
throw new Error(`Unknown viewport: ${viewportName}. Use: mobile, tablet, desktop, wide, or custom`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const fullPage = args.fullPage !== false;
|
|
109
|
+
const waitMs = args.waitMs ?? 1000;
|
|
110
|
+
const captureDir = ensureCaptureDir();
|
|
111
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
112
|
+
const labelSlug = args.label
|
|
113
|
+
? args.label.replace(/[^a-zA-Z0-9-_]/g, "-").toLowerCase()
|
|
114
|
+
: "capture";
|
|
115
|
+
const filename = `${labelSlug}_${viewportName}_${timestamp}.png`;
|
|
116
|
+
const filepath = join(captureDir, filename);
|
|
117
|
+
const consoleErrors = [];
|
|
118
|
+
let browser;
|
|
119
|
+
try {
|
|
120
|
+
browser = await pw.chromium.launch({ headless: true });
|
|
121
|
+
const context = await browser.newContext({ viewport: viewportSize });
|
|
122
|
+
const page = await context.newPage();
|
|
123
|
+
page.on("console", (msg) => {
|
|
124
|
+
if (msg.type() === "error" || msg.type() === "warning") {
|
|
125
|
+
consoleErrors.push(`[${msg.type()}] ${msg.text()}`);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
page.on("pageerror", (err) => {
|
|
129
|
+
consoleErrors.push(`[pageerror] ${err.message}`);
|
|
130
|
+
});
|
|
131
|
+
await page.goto(args.url, { waitUntil: "networkidle", timeout: 30000 });
|
|
132
|
+
if (args.waitForSelector) {
|
|
133
|
+
await page.waitForSelector(args.waitForSelector, { timeout: 10000 });
|
|
134
|
+
}
|
|
135
|
+
if (waitMs > 0) {
|
|
136
|
+
await new Promise((resolve) => setTimeout(resolve, waitMs));
|
|
137
|
+
}
|
|
138
|
+
await page.screenshot({ path: filepath, fullPage });
|
|
139
|
+
await browser.close();
|
|
140
|
+
browser = null;
|
|
141
|
+
// Read screenshot as base64
|
|
142
|
+
const imageBuffer = readFileSync(filepath);
|
|
143
|
+
const base64 = imageBuffer.toString("base64");
|
|
144
|
+
// Build content blocks: metadata text + inline image
|
|
145
|
+
const content = [
|
|
146
|
+
{
|
|
147
|
+
type: "text",
|
|
148
|
+
text: JSON.stringify({
|
|
149
|
+
url: args.url,
|
|
150
|
+
viewport: { preset: viewportName, ...viewportSize },
|
|
151
|
+
filepath,
|
|
152
|
+
fullPage,
|
|
153
|
+
consoleErrorCount: consoleErrors.length,
|
|
154
|
+
consoleErrors: consoleErrors.slice(0, 20),
|
|
155
|
+
instruction: consoleErrors.length > 0
|
|
156
|
+
? `Screenshot captured. Found ${consoleErrors.length} console error(s) — review them and fix before passing the no_console_errors gate.`
|
|
157
|
+
: "Screenshot captured with zero console errors. Visually inspect the image below to verify layout, spacing, and component rendering.",
|
|
158
|
+
}),
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: "image",
|
|
162
|
+
data: base64,
|
|
163
|
+
mimeType: "image/png",
|
|
164
|
+
},
|
|
165
|
+
];
|
|
166
|
+
return content;
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
if (browser) {
|
|
170
|
+
try {
|
|
171
|
+
await browser.close();
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
// ignore cleanup error
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return [
|
|
178
|
+
{
|
|
179
|
+
type: "text",
|
|
180
|
+
text: JSON.stringify({
|
|
181
|
+
error: true,
|
|
182
|
+
message: `Screenshot capture failed: ${err.message}`,
|
|
183
|
+
url: args.url,
|
|
184
|
+
viewport: viewportName,
|
|
185
|
+
suggestion: "Ensure the URL is accessible. If capturing localhost, make sure the dev server is running.",
|
|
186
|
+
}),
|
|
187
|
+
},
|
|
188
|
+
];
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
name: "capture_responsive_suite",
|
|
194
|
+
description: "Capture screenshots at all 3 standard responsive breakpoints (mobile 375px, tablet 768px, desktop 1280px) in one call. Returns all 3 screenshots as inline images that multimodal agents can see and compare side-by-side. Also captures console errors per viewport. Use this after UI implementations to quickly verify responsive behavior.",
|
|
195
|
+
rawContent: true,
|
|
196
|
+
inputSchema: {
|
|
197
|
+
type: "object",
|
|
198
|
+
properties: {
|
|
199
|
+
url: {
|
|
200
|
+
type: "string",
|
|
201
|
+
description: "URL to capture at all breakpoints",
|
|
202
|
+
},
|
|
203
|
+
label: {
|
|
204
|
+
type: "string",
|
|
205
|
+
description: "Component/feature label (e.g. 'agent-status-card'). Used in filenames.",
|
|
206
|
+
},
|
|
207
|
+
waitForSelector: {
|
|
208
|
+
type: "string",
|
|
209
|
+
description: "Optional CSS selector to wait for before each capture",
|
|
210
|
+
},
|
|
211
|
+
waitMs: {
|
|
212
|
+
type: "number",
|
|
213
|
+
description: "Additional wait time in ms after load (default: 1000)",
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
required: ["url", "label"],
|
|
217
|
+
},
|
|
218
|
+
handler: async (args) => {
|
|
219
|
+
const pw = await getPlaywright();
|
|
220
|
+
if (!pw) {
|
|
221
|
+
return [
|
|
222
|
+
{
|
|
223
|
+
type: "text",
|
|
224
|
+
text: JSON.stringify({
|
|
225
|
+
error: true,
|
|
226
|
+
message: "Playwright is not installed. Install it with: npm install playwright && npx playwright install chromium",
|
|
227
|
+
}),
|
|
228
|
+
},
|
|
229
|
+
];
|
|
230
|
+
}
|
|
231
|
+
const waitMs = args.waitMs ?? 1000;
|
|
232
|
+
const captureDir = ensureCaptureDir();
|
|
233
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
234
|
+
const labelSlug = args.label
|
|
235
|
+
.replace(/[^a-zA-Z0-9-_]/g, "-")
|
|
236
|
+
.toLowerCase();
|
|
237
|
+
const breakpoints = [
|
|
238
|
+
{ name: "mobile", ...VIEWPORT_PRESETS.mobile },
|
|
239
|
+
{ name: "tablet", ...VIEWPORT_PRESETS.tablet },
|
|
240
|
+
{ name: "desktop", ...VIEWPORT_PRESETS.desktop },
|
|
241
|
+
];
|
|
242
|
+
const content = [];
|
|
243
|
+
const captureResults = [];
|
|
244
|
+
let browser;
|
|
245
|
+
try {
|
|
246
|
+
browser = await pw.chromium.launch({ headless: true });
|
|
247
|
+
for (const bp of breakpoints) {
|
|
248
|
+
const consoleErrors = [];
|
|
249
|
+
const context = await browser.newContext({
|
|
250
|
+
viewport: { width: bp.width, height: bp.height },
|
|
251
|
+
});
|
|
252
|
+
const page = await context.newPage();
|
|
253
|
+
page.on("console", (msg) => {
|
|
254
|
+
if (msg.type() === "error" || msg.type() === "warning") {
|
|
255
|
+
consoleErrors.push(`[${msg.type()}] ${msg.text()}`);
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
page.on("pageerror", (err) => {
|
|
259
|
+
consoleErrors.push(`[pageerror] ${err.message}`);
|
|
260
|
+
});
|
|
261
|
+
await page.goto(args.url, { waitUntil: "networkidle", timeout: 30000 });
|
|
262
|
+
if (args.waitForSelector) {
|
|
263
|
+
await page.waitForSelector(args.waitForSelector, { timeout: 10000 });
|
|
264
|
+
}
|
|
265
|
+
if (waitMs > 0) {
|
|
266
|
+
await new Promise((resolve) => setTimeout(resolve, waitMs));
|
|
267
|
+
}
|
|
268
|
+
const filename = `${labelSlug}_${bp.name}_${timestamp}.png`;
|
|
269
|
+
const filepath = join(captureDir, filename);
|
|
270
|
+
await page.screenshot({ path: filepath, fullPage: true });
|
|
271
|
+
await context.close();
|
|
272
|
+
// Read screenshot as base64
|
|
273
|
+
const imageBuffer = readFileSync(filepath);
|
|
274
|
+
const base64 = imageBuffer.toString("base64");
|
|
275
|
+
captureResults.push({
|
|
276
|
+
breakpoint: bp.name,
|
|
277
|
+
viewport: `${bp.width}×${bp.height}`,
|
|
278
|
+
filepath,
|
|
279
|
+
consoleErrorCount: consoleErrors.length,
|
|
280
|
+
consoleErrors: consoleErrors.slice(0, 10),
|
|
281
|
+
});
|
|
282
|
+
// Add label text + image for this breakpoint
|
|
283
|
+
content.push({
|
|
284
|
+
type: "text",
|
|
285
|
+
text: `[${bp.name.toUpperCase()} ${bp.width}×${bp.height}] ${consoleErrors.length === 0 ? "0 console errors" : `${consoleErrors.length} console error(s): ${consoleErrors.slice(0, 3).join("; ")}`}`,
|
|
286
|
+
});
|
|
287
|
+
content.push({
|
|
288
|
+
type: "image",
|
|
289
|
+
data: base64,
|
|
290
|
+
mimeType: "image/png",
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
await browser.close();
|
|
294
|
+
browser = null;
|
|
295
|
+
const totalErrors = captureResults.reduce((sum, r) => sum + r.consoleErrorCount, 0);
|
|
296
|
+
// Add summary as the first content block
|
|
297
|
+
content.unshift({
|
|
298
|
+
type: "text",
|
|
299
|
+
text: JSON.stringify({
|
|
300
|
+
url: args.url,
|
|
301
|
+
label: args.label,
|
|
302
|
+
captures: captureResults,
|
|
303
|
+
summary: {
|
|
304
|
+
totalCaptures: captureResults.length,
|
|
305
|
+
totalConsoleErrors: totalErrors,
|
|
306
|
+
allClean: totalErrors === 0,
|
|
307
|
+
},
|
|
308
|
+
instruction: totalErrors > 0
|
|
309
|
+
? `Captured ${captureResults.length} breakpoints. Found ${totalErrors} console error(s) — fix before gating. Inspect the images below to verify responsive layout.`
|
|
310
|
+
: `Captured ${captureResults.length} breakpoints with zero console errors. Inspect the images below to verify responsive layout at each breakpoint.`,
|
|
311
|
+
}),
|
|
312
|
+
});
|
|
313
|
+
return content;
|
|
314
|
+
}
|
|
315
|
+
catch (err) {
|
|
316
|
+
if (browser) {
|
|
317
|
+
try {
|
|
318
|
+
await browser.close();
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
// ignore cleanup error
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return [
|
|
325
|
+
{
|
|
326
|
+
type: "text",
|
|
327
|
+
text: JSON.stringify({
|
|
328
|
+
error: true,
|
|
329
|
+
message: `Responsive capture failed: ${err.message}`,
|
|
330
|
+
url: args.url,
|
|
331
|
+
suggestion: "Ensure the URL is accessible and the dev server is running.",
|
|
332
|
+
}),
|
|
333
|
+
},
|
|
334
|
+
];
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
},
|
|
338
|
+
];
|
|
339
|
+
//# sourceMappingURL=uiCaptureTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uiCaptureTools.js","sourceRoot":"","sources":["../../src/tools/uiCaptureTools.ts"],"names":[],"mappings":"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"}
|