@mechris3/glassbox 0.1.47 → 0.1.48
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 +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +162 -19
- package/dist/src/mcp/server.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -387,7 +387,7 @@ Requires `glassbox serve` to be running. The AI gets these tools:
|
|
|
387
387
|
|
|
388
388
|
| Tool | Purpose |
|
|
389
389
|
|------|---------|
|
|
390
|
-
| `
|
|
390
|
+
| `getDiagnosticSummary` | Summary of diagnostic counts (call first) |
|
|
391
391
|
| `getConsoleErrors` | console.error/warn with stack traces |
|
|
392
392
|
| `getExceptions` | Unhandled JS exceptions with source locations |
|
|
393
393
|
| `getNetworkFailures` | Failed HTTP requests (4xx/5xx/network errors) |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAsWH,4BAA4B;AAC5B,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA6BpD"}
|
package/dist/src/mcp/server.js
CHANGED
|
@@ -27,90 +27,233 @@ const GLASSBOX_URL = process.env.GLASSBOX_URL ?? 'http://localhost:3001';
|
|
|
27
27
|
/** Tool definitions — each maps to a diagnostic REST endpoint. */
|
|
28
28
|
const TOOLS = [
|
|
29
29
|
{
|
|
30
|
-
name: '
|
|
31
|
-
description:
|
|
30
|
+
name: 'getDiagnosticSummary',
|
|
31
|
+
description: `Returns a summary of diagnostic data counts from the last journey run. Use this AFTER runJourney to decide which detailed diagnostic tools to call next.
|
|
32
|
+
|
|
33
|
+
Response shape: { consoleErrors: number, exceptions: number, networkFailures: number, totalRequests: number, timelineEvents: number, liveSessionAvailable: boolean }
|
|
34
|
+
|
|
35
|
+
Workflow: runJourney → getDiagnosticSummary (see what data is available) → drill into specific categories (getConsoleErrors, getExceptions, getNetworkFailures, getTimeline, getDomSnapshot).
|
|
36
|
+
|
|
37
|
+
If consoleErrors > 0: call getConsoleErrors to see the error messages and stack traces.
|
|
38
|
+
If exceptions > 0: call getExceptions to see unhandled errors with source locations.
|
|
39
|
+
If networkFailures > 0: call getNetworkFailures to see which API calls failed and why.
|
|
40
|
+
If you need to understand the sequence of events: call getTimeline.
|
|
41
|
+
If liveSessionAvailable is true: you can call getDomSnapshot and getScreenshot to inspect the current page state.`,
|
|
32
42
|
inputSchema: { type: 'object', properties: {} },
|
|
33
43
|
},
|
|
34
44
|
{
|
|
35
45
|
name: 'getConsoleErrors',
|
|
36
|
-
description:
|
|
46
|
+
description: `Returns all console.error() and console.warn() calls captured during the journey execution, including stack traces and argument values.
|
|
47
|
+
|
|
48
|
+
Each entry contains: { level: 'error'|'warning', text: string, args: string[], timestamp: number, stackTrace: Array<{ functionName, url, lineNumber, columnNumber }> }
|
|
49
|
+
|
|
50
|
+
Use this when:
|
|
51
|
+
- getDiagnosticSummary shows consoleErrors > 0
|
|
52
|
+
- You suspect the app is logging errors that explain the failure
|
|
53
|
+
- You need to see validation errors, deprecation warnings, or framework-level error messages
|
|
54
|
+
|
|
55
|
+
The stack traces show where in the APPLICATION code the error originated (not the test code). Look for your app's source files in the trace to identify the root cause.`,
|
|
37
56
|
inputSchema: { type: 'object', properties: {} },
|
|
38
57
|
},
|
|
39
58
|
{
|
|
40
59
|
name: 'getExceptions',
|
|
41
|
-
description:
|
|
60
|
+
description: `Returns all unhandled JavaScript exceptions thrown during the journey, with full stack traces, source file URLs, and line/column numbers.
|
|
61
|
+
|
|
62
|
+
Each entry contains: { text: string, description: string, lineNumber: number, columnNumber: number, url: string, stackTrace: Array<{ functionName, url, lineNumber, columnNumber }>, timestamp: number }
|
|
63
|
+
|
|
64
|
+
Use this when:
|
|
65
|
+
- getDiagnosticSummary shows exceptions > 0
|
|
66
|
+
- The journey failed with a cryptic error and you need to see what crashed
|
|
67
|
+
- You suspect a null reference, type error, or unhandled promise rejection in the app
|
|
68
|
+
|
|
69
|
+
These are UNCAUGHT exceptions — errors that propagated up without being caught. They typically indicate bugs in the application code rather than expected failures.`,
|
|
42
70
|
inputSchema: { type: 'object', properties: {} },
|
|
43
71
|
},
|
|
44
72
|
{
|
|
45
73
|
name: 'getNetworkFailures',
|
|
46
|
-
description:
|
|
74
|
+
description: `Returns all failed network requests — both HTTP errors (status >= 400) and network-level failures (connection refused, timeout, CORS blocked).
|
|
75
|
+
|
|
76
|
+
Each entry contains: { requestId: string, url: string, method: string, errorText: string, timestamp: number }
|
|
77
|
+
|
|
78
|
+
Use this when:
|
|
79
|
+
- getDiagnosticSummary shows networkFailures > 0
|
|
80
|
+
- The app shows "something went wrong" but no console errors
|
|
81
|
+
- You suspect the backend API is returning errors or is unreachable
|
|
82
|
+
- Login/auth flows are failing (look for 401/403 responses)
|
|
83
|
+
|
|
84
|
+
Common patterns:
|
|
85
|
+
- 401 Unauthorized: auth token expired or not being sent
|
|
86
|
+
- 404 Not Found: wrong API URL or missing route
|
|
87
|
+
- 500 Internal Server Error: backend bug
|
|
88
|
+
- net::ERR_CONNECTION_REFUSED: backend server not running
|
|
89
|
+
- CORS error: missing Access-Control headers`,
|
|
47
90
|
inputSchema: { type: 'object', properties: {} },
|
|
48
91
|
},
|
|
49
92
|
{
|
|
50
93
|
name: 'getNetworkLog',
|
|
51
|
-
description:
|
|
94
|
+
description: `Returns ALL network requests made during the journey (not just failures) — every XHR and Fetch call with URL, method, status code, and timing.
|
|
95
|
+
|
|
96
|
+
Each entry contains: { requestId: string, url: string, method: string, status?: number, statusText?: string, type: string, timestamp: number, failed?: boolean, failureReason?: string }
|
|
97
|
+
|
|
98
|
+
Use this when:
|
|
99
|
+
- You need to verify an API call was actually made (e.g. "did the login POST fire?")
|
|
100
|
+
- You want to check the order of API calls
|
|
101
|
+
- You need to see response status codes for requests that didn't fail (2xx/3xx)
|
|
102
|
+
- Debugging race conditions between API calls
|
|
103
|
+
|
|
104
|
+
This returns ALL requests including successful ones. For just failures, use getNetworkFailures instead. The list can be large on API-heavy pages.`,
|
|
52
105
|
inputSchema: { type: 'object', properties: {} },
|
|
53
106
|
},
|
|
54
107
|
{
|
|
55
108
|
name: 'getTimeline',
|
|
56
|
-
description:
|
|
109
|
+
description: `Returns a chronological stream of ALL events that occurred during the journey — console calls, network requests, network responses, network failures, and exceptions — interleaved in time order.
|
|
110
|
+
|
|
111
|
+
Each entry contains: { type: 'console'|'exception'|'network-request'|'network-response'|'network-failure'|'metrics', timestamp: number, data: object }
|
|
112
|
+
|
|
113
|
+
RECOMMENDED as the first diagnostic tool after a failure. It shows you the SEQUENCE of events leading up to the error, which is often more useful than looking at categories in isolation.
|
|
114
|
+
|
|
115
|
+
Example: you might see "login API returned 200 → app navigated → network request to /api/profile returned 401 → console error 'unauthorized' → exception thrown". That sequence tells the story.
|
|
116
|
+
|
|
117
|
+
Use lastN parameter to limit results (default 20). Start with lastN=30 and increase if needed.`,
|
|
57
118
|
inputSchema: {
|
|
58
119
|
type: 'object',
|
|
59
120
|
properties: {
|
|
60
|
-
lastN: { type: 'number', description: 'Number of recent events to return
|
|
121
|
+
lastN: { type: 'number', description: 'Number of most recent events to return. Default: 20. Increase to 50-100 if you need more context around the failure.' },
|
|
61
122
|
},
|
|
62
123
|
},
|
|
63
124
|
},
|
|
64
125
|
{
|
|
65
126
|
name: 'getPerformanceMetrics',
|
|
66
|
-
description:
|
|
127
|
+
description: `Returns Chrome performance metric snapshots captured at key points during the journey (start, after navigation, on failure/completion).
|
|
128
|
+
|
|
129
|
+
Each snapshot contains: { label: string, timestamp: number, metrics: { JSHeapUsedSize, JSHeapTotalSize, Nodes, LayoutCount, RecalcStyleCount, ... } }
|
|
130
|
+
|
|
131
|
+
Use this when:
|
|
132
|
+
- The page is slow or unresponsive (check LayoutCount, RecalcStyleCount)
|
|
133
|
+
- You suspect a memory leak (compare JSHeapUsedSize across snapshots)
|
|
134
|
+
- DOM is too complex (check Nodes count)
|
|
135
|
+
- The journey times out without errors (performance issue rather than functional bug)
|
|
136
|
+
|
|
137
|
+
This is rarely needed for functional test failures. Use it for performance investigations only.`,
|
|
67
138
|
inputSchema: { type: 'object', properties: {} },
|
|
68
139
|
},
|
|
69
140
|
{
|
|
70
141
|
name: 'listJourneys',
|
|
71
|
-
description:
|
|
142
|
+
description: `Returns all available journey files discovered from the configured glob pattern. Each journey has an id (filename without extension), a human-readable name (derived from filename), and the relative file path.
|
|
143
|
+
|
|
144
|
+
Response shape: Array<{ id: string, name: string, path: string }>
|
|
145
|
+
|
|
146
|
+
Use this to discover what journeys exist before calling runJourney. The id or name can be used as the journey parameter in runJourney (partial matches work — e.g. "login" matches "login-and-edit-profile").`,
|
|
72
147
|
inputSchema: { type: 'object', properties: {} },
|
|
73
148
|
},
|
|
74
149
|
{
|
|
75
150
|
name: 'runJourney',
|
|
76
|
-
description:
|
|
151
|
+
description: `Execute one or more journeys and collect diagnostic data. Returns pass/fail status, error messages, and a diagnostic summary in a single response.
|
|
152
|
+
|
|
153
|
+
Response shape: { outcome: 'PASSED'|'FAILED', results: Array<{ journey, status, duration, error? }>, diagnostics: { consoleErrors, exceptions, networkFailures, totalRequests, timelineEvents, liveSessionAvailable }, failedJourneys: Array<{ journey, error }> }
|
|
154
|
+
|
|
155
|
+
Behaviour:
|
|
156
|
+
- Resets diagnostic data before running (clean slate)
|
|
157
|
+
- Runs lifecycle hooks (globalSetup, beforeEach, afterEach, globalTeardown) if configured
|
|
158
|
+
- On failure: browser stays open so getDomSnapshot and getScreenshot can inspect the final page state
|
|
159
|
+
- On success: browser is closed (unless keepBrowserOpen is configured)
|
|
160
|
+
|
|
161
|
+
After a failure, follow this workflow:
|
|
162
|
+
1. Read the error message in failedJourneys[].error
|
|
163
|
+
2. Check diagnostics counts to decide what to investigate
|
|
164
|
+
3. Call getTimeline(lastN=30) to see the sequence of events
|
|
165
|
+
4. Use getDomSnapshot with a specific selector to check element state
|
|
166
|
+
5. If needed, use getConsoleErrors or getNetworkFailures for details
|
|
167
|
+
|
|
168
|
+
The journey parameter accepts: full path, ID (e.g. "login-and-edit-profile"), name (e.g. "Login And Edit Profile"), or partial match (e.g. "login"). Omit to run all journeys.`,
|
|
77
169
|
inputSchema: {
|
|
78
170
|
type: 'object',
|
|
79
171
|
properties: {
|
|
80
|
-
journey: { type: 'string', description: 'Journey name, ID, or
|
|
81
|
-
targetUrl: { type: 'string', description: 'Target URL of the app under test (
|
|
172
|
+
journey: { type: 'string', description: 'Journey identifier — name, ID, path, or partial match (from listJourneys). Omit to run all journeys sequentially.' },
|
|
173
|
+
targetUrl: { type: 'string', description: 'Target URL of the app under test. Defaults to the URL configured in the dashboard settings (typically http://localhost:3000 or http://localhost:4200).' },
|
|
82
174
|
},
|
|
83
175
|
},
|
|
84
176
|
},
|
|
85
177
|
{
|
|
86
178
|
name: 'getDomSnapshot',
|
|
87
|
-
description:
|
|
179
|
+
description: `Returns the outerHTML of a specific element or the full page. PREFERRED over getScreenshot for debugging because you can see actual selectors, text content, attribute values, form state, and hidden elements.
|
|
180
|
+
|
|
181
|
+
ALWAYS provide a selector — full page HTML is extremely large and will consume excessive context. Use targeted queries like:
|
|
182
|
+
- "[data-testid='login-form']" — inspect a specific component
|
|
183
|
+
- "[data-testid='error-message']" — check if an error is showing
|
|
184
|
+
- "form" — see all form inputs and their current values
|
|
185
|
+
- ".modal" — check if a modal/dialog is present
|
|
186
|
+
- "body" — get a high-level view (still large but smaller than full HTML)
|
|
187
|
+
|
|
188
|
+
Only available when liveSessionAvailable is true (browser stays open after failure). If the page has navigated away from the expected state, this shows you what's ACTUALLY rendered.
|
|
189
|
+
|
|
190
|
+
Use this when:
|
|
191
|
+
- A selector-based action failed ("not found within 5000ms") — check if the element exists with a different selector
|
|
192
|
+
- Form submission didn't work — inspect form values and button states
|
|
193
|
+
- The wrong page is showing — check what URL/content is rendered
|
|
194
|
+
- Text content doesn't match expectations — see the actual text`,
|
|
88
195
|
inputSchema: {
|
|
89
196
|
type: 'object',
|
|
90
197
|
properties: {
|
|
91
|
-
selector: { type: 'string', description: 'CSS selector to inspect.
|
|
198
|
+
selector: { type: 'string', description: 'CSS selector to inspect. ALWAYS provide this — full page HTML is too large. Examples: "[data-testid=\'submit-btn\']", ".error-message", "#app", "form input"' },
|
|
92
199
|
},
|
|
93
200
|
},
|
|
94
201
|
},
|
|
95
202
|
{
|
|
96
203
|
name: 'getScreenshot',
|
|
97
|
-
description:
|
|
204
|
+
description: `Capture a screenshot of the current page state as a base64-encoded PNG image.
|
|
205
|
+
|
|
206
|
+
Use this when:
|
|
207
|
+
- You need to see the VISUAL layout (element positioning, overlapping, responsive issues)
|
|
208
|
+
- You want a quick confirmation of what page/state the browser is on
|
|
209
|
+
- Debugging CSS/styling issues that don't show in HTML
|
|
210
|
+
|
|
211
|
+
Limitations:
|
|
212
|
+
- Cannot reveal text content reliably (depends on rendering resolution)
|
|
213
|
+
- Cannot see hidden elements (display:none, visibility:hidden, off-screen)
|
|
214
|
+
- Cannot inspect attribute values, form state, or data-testid selectors
|
|
215
|
+
- Large base64 payload consumes context
|
|
216
|
+
|
|
217
|
+
For debugging FUNCTIONAL issues (wrong content, missing elements, failed interactions), use getDomSnapshot with a selector instead — it's more precise and actionable.
|
|
218
|
+
|
|
219
|
+
Only available when liveSessionAvailable is true (browser stays open after failure).`,
|
|
98
220
|
inputSchema: { type: 'object', properties: {} },
|
|
99
221
|
},
|
|
100
222
|
{
|
|
101
223
|
name: 'getAccessibilityTree',
|
|
102
|
-
description:
|
|
224
|
+
description: `Returns the full ARIA accessibility tree of the current page — a structured representation of all interactive elements, their roles, names, and states.
|
|
225
|
+
|
|
226
|
+
More structured than raw HTML for understanding:
|
|
227
|
+
- Page layout and landmark regions
|
|
228
|
+
- Interactive elements (buttons, inputs, links) and their accessible names
|
|
229
|
+
- Current states (expanded, checked, disabled, selected)
|
|
230
|
+
- Form field labels and descriptions
|
|
231
|
+
|
|
232
|
+
Use this when:
|
|
233
|
+
- You need to understand the page structure without reading large HTML
|
|
234
|
+
- Looking for a specific interactive element by its accessible name
|
|
235
|
+
- Debugging accessibility issues (missing labels, wrong roles)
|
|
236
|
+
- The DOM is complex but you just need to know what's interactable
|
|
237
|
+
|
|
238
|
+
Only available when liveSessionAvailable is true (browser stays open after failure).`,
|
|
103
239
|
inputSchema: { type: 'object', properties: {} },
|
|
104
240
|
},
|
|
105
241
|
{
|
|
106
242
|
name: 'resetDiagnostics',
|
|
107
|
-
description:
|
|
243
|
+
description: `Clear all collected diagnostic data and close any live browser session. You rarely need to call this manually — runJourney resets diagnostics automatically before each run.
|
|
244
|
+
|
|
245
|
+
Only use this if:
|
|
246
|
+
- You want to close the live browser session without running another journey
|
|
247
|
+
- You need to free resources after finishing an investigation
|
|
248
|
+
- You're debugging the diagnostic system itself
|
|
249
|
+
|
|
250
|
+
Do NOT call this between runJourney and your diagnostic queries — it would erase the data you're trying to inspect.`,
|
|
108
251
|
inputSchema: { type: 'object', properties: {} },
|
|
109
252
|
},
|
|
110
253
|
];
|
|
111
254
|
/** Map tool names to their API call implementations. */
|
|
112
255
|
const toolHandlers = new Map([
|
|
113
|
-
['
|
|
256
|
+
['getDiagnosticSummary', async () => fetchJson('/api/diagnostics/summary')],
|
|
114
257
|
['getConsoleErrors', async () => fetchJson('/api/diagnostics/console-errors')],
|
|
115
258
|
['getExceptions', async () => fetchJson('/api/diagnostics/exceptions')],
|
|
116
259
|
['getNetworkFailures', async () => fetchJson('/api/diagnostics/network-failures')],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED