@explainui/mcp 0.1.0-beta.1 → 0.1.3

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/dist/tools.js CHANGED
@@ -20,8 +20,8 @@ export async function attachProject(session, client, projectId) {
20
20
  type: "text",
21
21
  text: [
22
22
  `✅ Project already loaded: ${config.name} (${config.project_id})`,
23
+ `Tier: ${config.tier} · Quota: ${config.analyses_remaining} of ${config.analyses_limit} remaining`,
23
24
  `Pages: ${config.pages.map((p) => p.page_key).join(", ")}`,
24
- `Trigger: ${config.trigger_threshold}`,
25
25
  `(cached — valid for ${Math.round((CONFIG_CACHE_TTL_MS - (Date.now() - config.fetched_at)) / 1000)}s)`,
26
26
  ].join("\n"),
27
27
  },
@@ -34,25 +34,35 @@ export async function attachProject(session, client, projectId) {
34
34
  const pageList = config.pages
35
35
  .map((p) => ` • ${p.page_key} → ${p.url}${p.description ? ` (${p.description})` : ""}`)
36
36
  .join("\n");
37
+ const lastRunInfo = config.last_run_page_keys.length > 0
38
+ ? `Last session analyzed: ${config.last_run_page_keys.join(", ")}`
39
+ : "Last session analyzed: none yet (first run)";
40
+ const quotaLine = `Quota: ${config.analyses_remaining} of ${config.analyses_limit} analyses remaining (${config.tier} tier)`;
41
+ const defaultPrompt = config.last_run_page_keys.length > 0
42
+ ? `(Default: ${config.last_run_page_keys.join(", ")} — same as last session. Say "all", "same", or list specific page keys.)`
43
+ : `(Default: all pages. Say "all" or list specific page keys like "homepage, pricing".)`;
37
44
  return {
38
45
  content: [
39
46
  {
40
47
  type: "text",
41
48
  text: [
42
49
  `✅ Project loaded: ${config.name} (${config.project_id})`,
50
+ `Tier: ${config.tier} · ${quotaLine}`,
43
51
  ``,
44
52
  `Pages:`,
45
53
  pageList,
46
54
  ``,
47
- `Trigger threshold: ${config.trigger_threshold}`,
55
+ lastRunInfo,
56
+ ``,
48
57
  config.constraint_bundle.user_goal
49
- ? `User goal: ${config.constraint_bundle.user_goal}`
58
+ ? `Goal: ${config.constraint_bundle.user_goal}`
50
59
  : "",
51
60
  config.constraint_bundle.do_not_flag.length > 0
52
61
  ? `Do not flag: ${config.constraint_bundle.do_not_flag.join(", ")}`
53
62
  : "",
54
63
  ``,
55
- `You may now call explainui_analyze for any page_key listed above.`,
64
+ `Which pages should I analyze this session?`,
65
+ defaultPrompt,
56
66
  ]
57
67
  .filter(Boolean)
58
68
  .join("\n"),
@@ -132,7 +142,7 @@ export async function analyze(session, client, args) {
132
142
  content: [
133
143
  {
134
144
  type: "text",
135
- text: `❌ Screenshot capture failed: ${err.message}\nCode: ${err.code}`,
145
+ text: `❌ ${err.message}`,
136
146
  },
137
147
  ],
138
148
  };
@@ -141,23 +151,50 @@ export async function analyze(session, client, args) {
141
151
  content: [
142
152
  {
143
153
  type: "text",
144
- text: `❌ Screenshot capture failed: ${err.message}`,
154
+ text: `❌ Unexpected error during screenshot capture: ${err.message}`,
145
155
  },
146
156
  ],
147
157
  };
148
158
  }
159
+ // Auto-manage iteration: increment per page_key, reset when starting fresh
160
+ const currentIteration = (session.iterationByPage[args.page_key] ?? 0) + 1;
161
+ session.iterationByPage[args.page_key] = currentIteration;
149
162
  // Step 2: Send to API
150
163
  try {
164
+ // Build element map: screenshot_label → visible DOM elements
165
+ const elementMap = {};
166
+ for (const s of capture.screenshots) {
167
+ if (s.elements && s.elements.length > 0) {
168
+ elementMap[s.label] = s.elements;
169
+ }
170
+ }
171
+ // constraint_bundle always comes from project config — no per-call override
172
+ const constraintBundle = session.projectConfig.constraint_bundle ?? {};
151
173
  const response = await client.analyze({
152
174
  project_id: args.project_id,
153
175
  page_key: args.page_key,
154
- iteration: args.iteration,
155
- this_iteration: args.this_iteration,
176
+ url: pageConfig.url,
177
+ iteration: currentIteration,
178
+ this_iteration: args.changes_made,
156
179
  license_key: "", // Filled by client
157
180
  screenshots_base64: capture.screenshots.map((s) => s.data),
158
181
  screenshot_labels: capture.screenshots.map((s) => s.label),
159
182
  git_snapshot_hash: args.git_snapshot_hash,
183
+ deterministic_checks: capture.deterministic_checks,
184
+ axe_violations: capture.axe_violations,
185
+ element_map: Object.keys(elementMap).length > 0 ? elementMap : undefined,
186
+ constraint_bundle: constraintBundle,
187
+ skip_iteration_validation: false,
160
188
  });
189
+ // Track run state in session
190
+ if (response.run_id) {
191
+ session.currentRunId = response.run_id;
192
+ session.currentRunNumber = response.run_number ?? null;
193
+ }
194
+ // If done or max reached, reset iteration counter for this page so next run starts at 1
195
+ if (response.next_action === "done" || response.next_action === "review_human" || response.max_iterations_reached) {
196
+ delete session.iterationByPage[args.page_key];
197
+ }
161
198
  // Step 3: Format response for Claude
162
199
  return { content: [{ type: "text", text: formatResponse(response) }] };
163
200
  }
@@ -181,6 +218,11 @@ export async function closeProject(session, _client, args) {
181
218
  await closeBrowser();
182
219
  // Clear session
183
220
  session.projectConfig = null;
221
+ session.currentRunId = null;
222
+ session.currentRunNumber = null;
223
+ session.iterationByPage = {};
224
+ session.selectedPages = null;
225
+ session.skippedPages = [];
184
226
  return {
185
227
  content: [
186
228
  {
@@ -197,48 +239,114 @@ export async function closeProject(session, _client, args) {
197
239
  };
198
240
  }
199
241
  // ── Response Formatter ─────────────────────────────────────────────────────
242
+ // The first block the agent reads is always the NEXT STEP instruction.
243
+ // This eliminates all ambiguity — the agent never has to decide what to do.
200
244
  function formatResponse(resp) {
201
245
  const lines = [];
246
+ // ── Error path ───────────────────────────────────────────────────────────
202
247
  if (resp.error) {
203
- lines.push(`❌ Analysis Error`);
204
- lines.push(`Code: ${resp.error.code}`);
205
- lines.push(`Message: ${resp.error.message}`);
248
+ if (resp.error.code === "ITERATION_LIMIT_REACHED") {
249
+ lines.push("━━━ NEXT STEP ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
250
+ lines.push("🛑 STOP. Do NOT call explainui_analyze again.");
251
+ lines.push("Tell the user: max iterations reached. Report: see ExplainUI dashboard.");
252
+ lines.push("Then call: explainui_close_project(reason='all_pages_done')");
253
+ lines.push("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
254
+ return lines.join("\n");
255
+ }
256
+ if (resp.error.code === "QUOTA_EXCEEDED") {
257
+ lines.push("━━━ NEXT STEP ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
258
+ lines.push("🛑 STOP. Quota exceeded — do NOT retry.");
259
+ lines.push(`Tell the user: ${resp.error.message}`);
260
+ if (resp.error.upgrade_url)
261
+ lines.push(`Upgrade: ${resp.error.upgrade_url}`);
262
+ lines.push("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
263
+ return lines.join("\n");
264
+ }
265
+ lines.push("━━━ NEXT STEP ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
266
+ lines.push(`❌ Error: ${resp.error.code} — ${resp.error.message}`);
206
267
  if (resp.error.hint)
207
268
  lines.push(`Hint: ${resp.error.hint}`);
269
+ lines.push("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
208
270
  return lines.join("\n");
209
271
  }
210
- const emoji = resp.pass ? "✅" : "🔧";
211
- lines.push(`${emoji} UX QA Result${resp.page_key} iteration ${resp.iteration}`);
212
- lines.push(`Pass: ${resp.pass}`);
213
- lines.push(`Next action: ${resp.next_action}`);
272
+ const runInfo = resp.run_number ? ` · Run ${resp.run_number}` : "";
273
+ // ── NEXT STEP block always first, always unambiguous ───────────────────
274
+ lines.push("━━━ NEXT STEP ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
275
+ if (resp.next_action === "done" || (resp.pass && (!resp.issues || resp.issues.length === 0))) {
276
+ lines.push("✅ ALL CHECKS PASSED. No fixes needed.");
277
+ lines.push("Tell the user: UX analysis complete — no issues found.");
278
+ lines.push(`Report: ${resp.report_url || "see ExplainUI dashboard"}`);
279
+ lines.push("Then call: explainui_close_project(reason='all_pages_done')");
280
+ }
281
+ else if (resp.next_action === "review_human" || resp.max_iterations_reached) {
282
+ lines.push("⚠️ STOP. Max iterations reached — do NOT call explainui_analyze again.");
283
+ lines.push("Tell the user: remaining issues need human review.");
284
+ lines.push(`Report: ${resp.report_url || "see ExplainUI dashboard"}`);
285
+ lines.push("Then call: explainui_close_project(reason='all_pages_done')");
286
+ }
287
+ else {
288
+ const issueCount = resp.issues?.length ?? 0;
289
+ lines.push(`🔧 ${issueCount} issue(s) found. Apply ALL fixes below, then:`);
290
+ lines.push(`→ Call explainui_analyze(project_id="${resp.project_id}", page_key="${resp.page_key}", changes_made="<what you just fixed>")`);
291
+ lines.push("Iteration is tracked automatically. Do NOT ask the user — just fix and call.");
292
+ }
293
+ lines.push("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
214
294
  lines.push("");
215
- // Checks summary
295
+ // ── Result summary ────────────────────────────────────────────────────────
296
+ lines.push(`Page: ${resp.page_key} · Iteration: ${resp.iteration}${runInfo}`);
297
+ lines.push("");
298
+ // Checks
216
299
  if (resp.checks) {
217
- lines.push("Checks:");
218
300
  for (const [check, result] of Object.entries(resp.checks)) {
219
301
  const r = result;
220
302
  const icon = r.pass ? "✅" : "❌";
221
- lines.push(` ${icon} ${check}: ${r.pass ? "pass" : `${r.issues_found} issue(s)`}`);
303
+ lines.push(` ${icon} ${check}${!r.pass && r.details ? `: ${r.details}` : ""}`);
222
304
  }
223
305
  lines.push("");
224
306
  }
225
- // Issues
226
- if (resp.issues && resp.issues.length > 0) {
227
- lines.push(`Issues (${resp.issues.length}):`);
228
- for (const issue of resp.issues) {
229
- lines.push(` [${issue.severity.toUpperCase()}] ${issue.id}: ${issue.summary}`);
230
- lines.push(` Type: ${issue.type}`);
231
- lines.push(` Location: ${issue.location.viewport} — ${issue.location.element_description}`);
232
- lines.push(` Confidence: ${(issue.confidence * 100).toFixed(0)}%`);
233
- lines.push(` Fix: ${issue.fix_suggestion}`);
307
+ // Corrected since last iteration
308
+ if (resp.issue_statuses) {
309
+ const corrected = Object.entries(resp.issue_statuses).filter(([, v]) => v === "CORRECTED");
310
+ if (corrected.length > 0) {
311
+ lines.push(`✅ Fixed since last iteration (${corrected.length}):`);
312
+ for (const [key] of corrected)
313
+ lines.push(` ${key}`);
234
314
  lines.push("");
235
315
  }
236
316
  }
237
- if (resp.deprecation_warning) {
238
- lines.push(`⚠️ ${resp.deprecation_warning}`);
317
+ // Issues — grouped by fix type
318
+ if (resp.issues && resp.issues.length > 0) {
319
+ const groups = { css: [], html: [], js: [], content: [], unknown: [] };
320
+ for (const issue of resp.issues) {
321
+ const key = issue.fixable_by && groups[issue.fixable_by] ? issue.fixable_by : "unknown";
322
+ groups[key].push(issue);
323
+ }
324
+ const groupLabels = {
325
+ css: "CSS fixes",
326
+ html: "HTML fixes",
327
+ js: "JavaScript fixes",
328
+ content: "Content/copy fixes",
329
+ unknown: "Review manually",
330
+ };
331
+ for (const [key, label] of Object.entries(groupLabels)) {
332
+ const bucket = groups[key];
333
+ if (!bucket || bucket.length === 0)
334
+ continue;
335
+ lines.push(`── ${label} (${bucket.length}) ──`);
336
+ for (const issue of bucket) {
337
+ const statusTag = resp.issue_statuses?.[issue.id] ? ` [${resp.issue_statuses[issue.id]}]` : "";
338
+ lines.push(` [${issue.severity.toUpperCase()}]${statusTag} ${issue.id}`);
339
+ lines.push(` ${issue.description}`);
340
+ if (issue.location?.viewport)
341
+ lines.push(` Where: ${issue.location.viewport}${issue.location.description ? ` — ${issue.location.description}` : ""}`);
342
+ if (issue.suggested_fix_context)
343
+ lines.push(` Fix: ${issue.suggested_fix_context}`);
344
+ lines.push("");
345
+ }
346
+ }
239
347
  }
240
- if (resp.analysis_duration_ms) {
241
- lines.push(`(Analysis took ${resp.analysis_duration_ms}ms)`);
348
+ if (resp.report_url) {
349
+ lines.push(`Full report: ${resp.report_url}`);
242
350
  }
243
351
  return lines.join("\n");
244
352
  }
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -4,7 +4,12 @@
4
4
  */
5
5
  export interface ExplainUISession {
6
6
  projectConfig: ProjectConfig | null;
7
- platform: "claude_desktop" | "cursor" | "cline" | "windsurf" | "unknown";
7
+ platform: "claude_desktop" | "cursor" | "cline" | "windsurf" | "copilot" | "unknown";
8
+ currentRunId: string | null;
9
+ currentRunNumber: number | null;
10
+ iterationByPage: Record<string, number>;
11
+ selectedPages: string[] | null;
12
+ skippedPages: string[];
8
13
  }
9
14
  export interface ProjectConfig {
10
15
  project_id: string;
@@ -13,6 +18,10 @@ export interface ProjectConfig {
13
18
  constraint_bundle: ConstraintBundle;
14
19
  trigger_threshold: "every_change" | "major_features" | "manual_only";
15
20
  fetched_at: number;
21
+ tier: string;
22
+ analyses_remaining: number;
23
+ analyses_limit: number;
24
+ last_run_page_keys: string[];
16
25
  }
17
26
  export interface PageConfig {
18
27
  page_key: string;
@@ -31,19 +40,177 @@ export interface ViewportDef {
31
40
  scrolls: number;
32
41
  }
33
42
  export declare const VIEWPORTS: ViewportDef[];
43
+ export interface A11yElementRef {
44
+ selector: string;
45
+ tag: string;
46
+ text: string;
47
+ }
48
+ export interface ContrastFailure {
49
+ selector: string;
50
+ text: string;
51
+ fg: string;
52
+ bg: string;
53
+ ratio: number;
54
+ required: number;
55
+ level: "AA" | "AAA";
56
+ font_size: number;
57
+ is_bold: boolean;
58
+ }
59
+ export interface DarkPatternFinding {
60
+ type: "countdown_timer" | "urgency_language" | "confirmshaming" | "pre_checked_opt_in" | "anchor_pricing";
61
+ text: string;
62
+ selector: string;
63
+ }
64
+ export interface TextSpacingViolation {
65
+ selector: string;
66
+ property: string;
67
+ value: string;
68
+ issue: string;
69
+ }
70
+ export interface FormDeepIssue {
71
+ type: "duplicate_id" | "onpaste_blocked" | "wrong_autocomplete" | "broken_label_for" | "missing_required" | "radio_no_fieldset" | "broken_idref" | "empty_attribute" | "select_onchange_nav" | "new_tab_no_warning";
72
+ selector: string;
73
+ detail: string;
74
+ }
75
+ export interface CssInteractionIssue {
76
+ type: "overflow_clips_focus" | "z_index_intercept" | "missing_reduced_motion" | "transition_all_focus" | "focus_border_only" | "label_pointer_events_none" | "user_select_none_interactive";
77
+ selector: string;
78
+ detail: string;
79
+ }
80
+ export interface ColorOnlyStateIssue {
81
+ type: "color_only_active_nav" | "color_only_success" | "color_only_error" | "aria_hidden_focusable" | "aria_live_on_static" | "role_alert_on_static" | "hover_only_content";
82
+ selector: string;
83
+ detail: string;
84
+ }
85
+ export interface DocumentSemanticIssue {
86
+ type: "aria_label_mismatch" | "table_missing_th" | "svg_missing_title" | "dialog_missing_aria_modal" | "iframe_missing_title" | "positive_tabindex" | "figure_missing_figcaption" | "time_missing_datetime" | "sensory_instruction" | "lang_mismatch_missing_lang" | "modal_escape_missing" | "modal_background_focusable" | "modal_missing_accessible_name" | "above_fold_lazy_critical_image" | "reflow_320_fixed_width" | "reflow_320_unbreakable_text" | "wrong_lang_locale" | "empty_lang_attr" | "fake_modal_div" | "disabled_input_adjacent_error" | "reduced_motion_wrong_media" | "anchor_no_href" | "details_misused_as_nav" | "aria_label_price_mismatch" | "progress_no_name" | "error_summary_below_submit" | "aria_owns_invalid" | "skip_link_target_no_tabindex" | "label_pointer_events_none" | "visibility_hidden_alert" | "user_select_none_interactive";
87
+ selector: string;
88
+ detail: string;
89
+ }
90
+ export interface CTACompetitionFinding {
91
+ section_selector: string;
92
+ cta_count: number;
93
+ cta_texts: string[];
94
+ }
95
+ export interface GhostButtonFinding {
96
+ selector: string;
97
+ text: string;
98
+ opacity: number;
99
+ bg_contrast: number;
100
+ }
101
+ export interface SpacingInconsistency {
102
+ parent_selector: string;
103
+ property: string;
104
+ values_px: number[];
105
+ outlier_index: number;
106
+ outlier_selector: string;
107
+ }
108
+ export interface HeadingHierarchyViolation {
109
+ larger_selector: string;
110
+ larger_tag: string;
111
+ larger_size_px: number;
112
+ smaller_selector: string;
113
+ smaller_tag: string;
114
+ smaller_size_px: number;
115
+ }
116
+ export interface DeterministicChecks {
117
+ page_renders: {
118
+ pass: boolean;
119
+ body_text_length: number;
120
+ visible_element_count: number;
121
+ };
122
+ layout_intact: {
123
+ pass: boolean;
124
+ overflow_delta: number;
125
+ };
126
+ content_readable: {
127
+ min_font_size: number;
128
+ has_text_below_12px: boolean;
129
+ };
130
+ accessibility?: {
131
+ missing_labels: A11yElementRef[];
132
+ missing_alt: Array<{
133
+ selector: string;
134
+ src: string;
135
+ }>;
136
+ missing_lang: boolean;
137
+ outline_none_focusable: A11yElementRef[];
138
+ small_touch_targets: Array<A11yElementRef & {
139
+ width: number;
140
+ height: number;
141
+ }>;
142
+ input_type_mismatches: Array<{
143
+ selector: string;
144
+ current_type: string;
145
+ suggested_type: string;
146
+ label_text: string;
147
+ }>;
148
+ contrast_failures: ContrastFailure[];
149
+ };
150
+ dark_patterns?: {
151
+ findings: DarkPatternFinding[];
152
+ };
153
+ text_spacing?: {
154
+ violations: TextSpacingViolation[];
155
+ };
156
+ form_issues?: {
157
+ findings: FormDeepIssue[];
158
+ };
159
+ css_interactions?: {
160
+ findings: CssInteractionIssue[];
161
+ };
162
+ color_only_states?: {
163
+ findings: ColorOnlyStateIssue[];
164
+ };
165
+ document_semantics?: {
166
+ findings: DocumentSemanticIssue[];
167
+ };
168
+ structural_ux?: {
169
+ cta_competition: CTACompetitionFinding[];
170
+ ghost_buttons: GhostButtonFinding[];
171
+ spacing_inconsistencies: SpacingInconsistency[];
172
+ heading_hierarchy_violations: HeadingHierarchyViolation[];
173
+ };
174
+ }
175
+ export interface DOMElement {
176
+ id: string;
177
+ tag: string;
178
+ text: string;
179
+ bbox: {
180
+ x: number;
181
+ y: number;
182
+ w: number;
183
+ h: number;
184
+ };
185
+ }
34
186
  export interface Screenshot {
35
187
  label: string;
36
188
  viewport: string;
37
189
  scroll_index: number;
38
190
  data: string;
191
+ elements?: DOMElement[];
192
+ }
193
+ export interface AxeViolation {
194
+ id: string;
195
+ impact: string;
196
+ description: string;
197
+ help_url: string;
198
+ nodes: Array<{
199
+ selector: string;
200
+ html: string;
201
+ failure_summary: string;
202
+ }>;
39
203
  }
40
204
  export interface CaptureResult {
41
205
  screenshots: Screenshot[];
42
206
  capture_duration_ms: number;
207
+ deterministic_checks?: DeterministicChecks;
208
+ axe_violations?: AxeViolation[];
43
209
  }
44
210
  export interface AnalyzeRequest {
45
211
  project_id: string;
46
212
  page_key: string;
213
+ url: string;
47
214
  iteration: number;
48
215
  this_iteration: string;
49
216
  license_key: string;
@@ -52,6 +219,11 @@ export interface AnalyzeRequest {
52
219
  git_snapshot_hash?: string | null;
53
220
  constraint_bundle?: ConstraintBundle;
54
221
  mcp_version?: string;
222
+ deterministic_checks?: DeterministicChecks;
223
+ axe_violations?: AxeViolation[];
224
+ element_map?: Record<string, DOMElement[]>;
225
+ skip_iteration_validation?: boolean;
226
+ focus_areas?: string[];
55
227
  }
56
228
  export interface AnalyzeResponse {
57
229
  project_id: string;
@@ -64,24 +236,36 @@ export interface AnalyzeResponse {
64
236
  error?: AnalysisError | null;
65
237
  deprecation_warning?: string | null;
66
238
  analysis_duration_ms?: number;
239
+ run_id?: string;
240
+ run_number?: number;
241
+ issue_statuses?: Record<string, string>;
242
+ max_iterations_reached?: boolean;
243
+ report_url?: string;
67
244
  }
68
245
  export interface Issue {
69
246
  id: string;
70
- type: string;
247
+ category: string;
248
+ type?: string;
71
249
  severity: string;
72
- summary: string;
250
+ description: string;
251
+ source?: "qa_defect" | "ux_observation";
252
+ element_ref?: string | null;
73
253
  location: {
74
254
  viewport: string;
75
- bbox: {
76
- x: number;
77
- y: number;
78
- w: number;
79
- h: number;
80
- };
81
- element_description: string;
255
+ scroll_index: number;
256
+ description: string;
82
257
  };
258
+ bbox?: {
259
+ x: number;
260
+ y: number;
261
+ w: number;
262
+ h: number;
263
+ } | null;
264
+ screenshot_label: string;
265
+ constraint_related: boolean;
266
+ suggested_fix_context: string;
83
267
  confidence: number;
84
- fix_suggestion: string;
268
+ fixable_by?: "css" | "html" | "js" | "content" | "unknown";
85
269
  }
86
270
  export interface AnalysisError {
87
271
  code: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -2,10 +2,9 @@
2
2
  * ExplainUI MCP — TypeScript Types
3
3
  * Mirrors the Python schema.py models for the MCP side.
4
4
  */
5
+ // Single desktop viewport — 7 consecutive scroll captures.
5
6
  export const VIEWPORTS = [
6
- { label: "desktop_1280", width: 1280, height: 800, scrolls: 3 },
7
- { label: "tablet_768", width: 768, height: 1024, scrolls: 2 },
8
- { label: "mobile_375", width: 375, height: 812, scrolls: 2 },
7
+ { label: "desktop_1440", width: 1440, height: 900, scrolls: 7 },
9
8
  ];
10
9
  // ── Error ──────────────────────────────────────────────────────────────────
11
10
  export class ExplainUIError extends Error {
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqCH,MAAM,CAAC,MAAM,SAAS,GAAkB;IACtC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE;IAC/D,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;IAC7D,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE;CAC7D,CAAC;AAsEF,8EAA8E;AAC9E,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,IAAI,CAAS;IACb,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiDH,2DAA2D;AAC3D,MAAM,CAAC,MAAM,SAAS,GAAkB;IACtC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE;CAChE,CAAC;AAuRF,8EAA8E;AAC9E,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,IAAI,CAAS;IACb,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@explainui/mcp",
3
- "version": "0.1.0-beta.1",
3
+ "version": "0.1.3",
4
4
  "description": "ExplainUI MCP server — silent UX QA in your AI agent workflow",
5
5
  "bin": {
6
6
  "explainui-mcp": "dist/index.js"
@@ -27,6 +27,8 @@
27
27
  "playwright",
28
28
  "claude",
29
29
  "cursor",
30
+ "copilot",
31
+ "github",
30
32
  "ai",
31
33
  "explainui"
32
34
  ],
@@ -35,6 +37,7 @@
35
37
  "node": ">=18"
36
38
  },
37
39
  "dependencies": {
40
+ "@axe-core/playwright": "^4.11.1",
38
41
  "@modelcontextprotocol/sdk": "^1.27.1",
39
42
  "axios": "^1.13.6",
40
43
  "playwright": "^1.58.2",