cbrowser 18.42.7 → 18.44.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/dist/mcp-server-remote.d.ts.map +1 -1
- package/dist/mcp-server-remote.js +4 -2
- package/dist/mcp-server-remote.js.map +1 -1
- package/dist/mcp-tools/base/persona-comparison-tools.d.ts.map +1 -1
- package/dist/mcp-tools/base/persona-comparison-tools.js +25 -9
- package/dist/mcp-tools/base/persona-comparison-tools.js.map +1 -1
- package/dist/mcp-tools/index.d.ts +11 -5
- package/dist/mcp-tools/index.d.ts.map +1 -1
- package/dist/mcp-tools/index.js +19 -9
- package/dist/mcp-tools/index.js.map +1 -1
- package/dist/mcp-tools/tier-gate.d.ts +40 -0
- package/dist/mcp-tools/tier-gate.d.ts.map +1 -0
- package/dist/mcp-tools/tier-gate.js +117 -0
- package/dist/mcp-tools/tier-gate.js.map +1 -0
- package/dist/mcp-tools/tool-categories.d.ts +13 -0
- package/dist/mcp-tools/tool-categories.d.ts.map +1 -1
- package/dist/mcp-tools/tool-categories.js +49 -0
- package/dist/mcp-tools/tool-categories.js.map +1 -1
- package/dist/visual/attention-quality.d.ts.map +1 -1
- package/dist/visual/attention-quality.js +13 -5
- package/dist/visual/attention-quality.js.map +1 -1
- package/dist/visual/cognitive-transport.d.ts.map +1 -1
- package/dist/visual/cognitive-transport.js +63 -32
- package/dist/visual/cognitive-transport.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tier Gating for CBrowser Hosted MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Wraps tool registration so gated tools return upgrade prompts
|
|
5
|
+
* instead of executing. Tools still appear in the tool list so
|
|
6
|
+
* users can discover what's available.
|
|
7
|
+
*
|
|
8
|
+
* Self-hosted (no tier set) = all tools ungated.
|
|
9
|
+
* Hosted demo (free tier) = core browser + testing + sessions only.
|
|
10
|
+
*
|
|
11
|
+
* @since v18.43.0
|
|
12
|
+
*/
|
|
13
|
+
import { getToolPricingTier, tierHasAccess } from "./tool-categories.js";
|
|
14
|
+
/** The current user tier for this server session */
|
|
15
|
+
let currentTier = null;
|
|
16
|
+
/** Set the active pricing tier. null = self-hosted (no gating). */
|
|
17
|
+
export function setActiveTier(tier) {
|
|
18
|
+
currentTier = tier;
|
|
19
|
+
}
|
|
20
|
+
/** Get the active pricing tier. null = ungated. */
|
|
21
|
+
export function getActiveTier() {
|
|
22
|
+
return currentTier;
|
|
23
|
+
}
|
|
24
|
+
/** Check if a tool is accessible at the current tier */
|
|
25
|
+
export function isToolAccessible(toolName) {
|
|
26
|
+
if (currentTier === null)
|
|
27
|
+
return true; // Self-hosted: no gating
|
|
28
|
+
const required = getToolPricingTier(toolName);
|
|
29
|
+
return tierHasAccess(currentTier, required);
|
|
30
|
+
}
|
|
31
|
+
/** Generate upgrade prompt for a gated tool */
|
|
32
|
+
export function upgradePrompt(toolName) {
|
|
33
|
+
const required = getToolPricingTier(toolName);
|
|
34
|
+
const tierLabel = required.charAt(0).toUpperCase() + required.slice(1);
|
|
35
|
+
const userLabel = currentTier ? currentTier.charAt(0).toUpperCase() + currentTier.slice(1) : "Free";
|
|
36
|
+
return {
|
|
37
|
+
content: [{
|
|
38
|
+
type: "text",
|
|
39
|
+
text: JSON.stringify({
|
|
40
|
+
error: "Upgrade Required",
|
|
41
|
+
tool: toolName,
|
|
42
|
+
currentTier: currentTier || "free",
|
|
43
|
+
requiredTier: required,
|
|
44
|
+
message: `⚡ ${toolName} requires CBrowser ${tierLabel}.\n\nYou're on the ${userLabel} tier. Upgrade to unlock ${toolName} and ${required === 'pro' ? '60+ cognitive analysis tools' : 'marketing suite, stealth, and web security'}.`,
|
|
45
|
+
upgrade: "https://cbrowser.ai/pricing",
|
|
46
|
+
features: required === 'pro'
|
|
47
|
+
? [
|
|
48
|
+
"Cognitive Transport Chain (6-layer effort analysis)",
|
|
49
|
+
"Attention heatmaps and visual cognitive stories",
|
|
50
|
+
"11 disability persona empathy audits",
|
|
51
|
+
"AI Friendliness Suite (agent-ready, benchmark, remediation)",
|
|
52
|
+
"Custom persona creation (26 traits)",
|
|
53
|
+
"Visual regression and cross-browser testing",
|
|
54
|
+
"Site knowledge and persistent models",
|
|
55
|
+
"Competitive UX benchmarking",
|
|
56
|
+
"Unlimited MCP access",
|
|
57
|
+
]
|
|
58
|
+
: [
|
|
59
|
+
"Everything in Pro, plus:",
|
|
60
|
+
"Marketing campaign suite (8 buyer personas)",
|
|
61
|
+
"Influence matrix and lever analysis",
|
|
62
|
+
"Constitutional stealth for authorized testing",
|
|
63
|
+
"Geo proxy (12 regions)",
|
|
64
|
+
"Web security scanning",
|
|
65
|
+
"Autonomous cognitive journeys",
|
|
66
|
+
"Self-hosted deployment support",
|
|
67
|
+
],
|
|
68
|
+
}, null, 2),
|
|
69
|
+
}],
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get the description prefix for a tool based on its pricing tier.
|
|
74
|
+
* Returns "" for free tools, "[Pro] " or "[Enterprise] " for gated ones.
|
|
75
|
+
*/
|
|
76
|
+
export function tierPrefix(toolName) {
|
|
77
|
+
if (currentTier === null)
|
|
78
|
+
return ""; // Self-hosted: no prefixes
|
|
79
|
+
const required = getToolPricingTier(toolName);
|
|
80
|
+
if (required === "free")
|
|
81
|
+
return "";
|
|
82
|
+
if (required === "pro")
|
|
83
|
+
return "[Pro] ";
|
|
84
|
+
return "[Enterprise] ";
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Create a proxy around an MCP server that intercepts registerTool calls
|
|
88
|
+
* and wraps handlers with tier gating. Gated tools still register (visible
|
|
89
|
+
* in tool list) but return upgrade prompts when called.
|
|
90
|
+
*
|
|
91
|
+
* If no tier is set (self-hosted), returns the server unchanged.
|
|
92
|
+
*/
|
|
93
|
+
export function createGatedServer(server) {
|
|
94
|
+
if (currentTier === null)
|
|
95
|
+
return server; // Self-hosted: no gating
|
|
96
|
+
const srv = server;
|
|
97
|
+
const originalRegisterTool = srv.registerTool.bind(srv);
|
|
98
|
+
srv.registerTool = (name, config, handler) => {
|
|
99
|
+
if (isToolAccessible(name)) {
|
|
100
|
+
// User has access — register normally, add tier prefix to description if gated at higher tier
|
|
101
|
+
const prefix = tierPrefix(name);
|
|
102
|
+
if (prefix && typeof config.description === "string") {
|
|
103
|
+
config.description = prefix + config.description;
|
|
104
|
+
}
|
|
105
|
+
originalRegisterTool(name, config, handler);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
// User doesn't have access — register with upgrade handler
|
|
109
|
+
const required = getToolPricingTier(name);
|
|
110
|
+
const tierLabel = required.charAt(0).toUpperCase() + required.slice(1);
|
|
111
|
+
const desc = typeof config.description === "string" ? config.description : "";
|
|
112
|
+
originalRegisterTool(name, { ...config, description: `[${tierLabel}] ${desc}` }, () => upgradePrompt(name));
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
return srv;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=tier-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tier-gate.js","sourceRoot":"","sources":["../../src/mcp-tools/tier-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,10 +10,12 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @since v18.39.0
|
|
12
12
|
*/
|
|
13
|
+
export type PricingTier = 'free' | 'pro' | 'enterprise';
|
|
13
14
|
export interface ToolCategory {
|
|
14
15
|
name: string;
|
|
15
16
|
description: string;
|
|
16
17
|
tier: 1 | 2 | 3;
|
|
18
|
+
pricingTier: PricingTier;
|
|
17
19
|
tools: string[];
|
|
18
20
|
}
|
|
19
21
|
export declare const TOOL_CATEGORIES: ToolCategory[];
|
|
@@ -23,6 +25,17 @@ export declare function getToolTier(toolName: string): 1 | 2 | 3;
|
|
|
23
25
|
export declare function getToolCategory(toolName: string): string | undefined;
|
|
24
26
|
/** Get all tools in a tier */
|
|
25
27
|
export declare function getToolsByTier(tier: 1 | 2 | 3): string[];
|
|
28
|
+
/** Get pricing tier required for a tool */
|
|
29
|
+
export declare function getToolPricingTier(toolName: string): PricingTier;
|
|
30
|
+
/** Check if a user tier has access to a tool's required tier */
|
|
31
|
+
export declare function tierHasAccess(userTier: PricingTier, requiredTier: PricingTier): boolean;
|
|
32
|
+
/** Get all tools accessible at a given tier */
|
|
33
|
+
export declare function getToolsForTier(tier: PricingTier): string[];
|
|
34
|
+
/** Get all tools that require upgrade from a given tier */
|
|
35
|
+
export declare function getGatedTools(userTier: PricingTier): Array<{
|
|
36
|
+
tool: string;
|
|
37
|
+
requiredTier: PricingTier;
|
|
38
|
+
}>;
|
|
26
39
|
/** Get category summary for LLM context (one line per category) */
|
|
27
40
|
export declare function getCategorySummary(): string;
|
|
28
41
|
//# sourceMappingURL=tool-categories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-categories.d.ts","sourceRoot":"","sources":["../../src/mcp-tools/tool-categories.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"tool-categories.d.ts","sourceRoot":"","sources":["../../src/mcp-tools/tool-categories.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,GAAG,YAAY,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,EAsQzC,CAAC;AAEF,+BAA+B;AAC/B,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAKvD;AAED,mCAAmC;AACnC,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKpE;AAED,8BAA8B;AAC9B,wBAAgB,cAAc,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAIxD;AAED,2CAA2C;AAC3C,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAKhE;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,GAAG,OAAO,CAGvF;AAED,+CAA+C;AAC/C,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,CAI3D;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,WAAW,CAAA;CAAE,CAAC,CAUvG;AAED,mEAAmE;AACnE,wBAAgB,kBAAkB,IAAI,MAAM,CAK3C"}
|
|
@@ -17,6 +17,7 @@ export const TOOL_CATEGORIES = [
|
|
|
17
17
|
name: "core_browser",
|
|
18
18
|
description: "Navigate, interact with, and capture web pages",
|
|
19
19
|
tier: 1,
|
|
20
|
+
pricingTier: "free",
|
|
20
21
|
tools: [
|
|
21
22
|
"navigate",
|
|
22
23
|
"click",
|
|
@@ -30,6 +31,7 @@ export const TOOL_CATEGORIES = [
|
|
|
30
31
|
name: "core_analysis",
|
|
31
32
|
description: "Assess sites for AI-friendliness, accessibility, and cognitive effort",
|
|
32
33
|
tier: 1,
|
|
34
|
+
pricingTier: "pro",
|
|
33
35
|
tools: [
|
|
34
36
|
"agent_ready_audit",
|
|
35
37
|
"empathy_audit",
|
|
@@ -48,6 +50,7 @@ export const TOOL_CATEGORIES = [
|
|
|
48
50
|
name: "visual_testing",
|
|
49
51
|
description: "Visual regression, baselines, cross-browser, responsive, and A/B comparison",
|
|
50
52
|
tier: 2,
|
|
53
|
+
pricingTier: "pro",
|
|
51
54
|
tools: [
|
|
52
55
|
"visual_baseline",
|
|
53
56
|
"visual_regression",
|
|
@@ -64,6 +67,7 @@ export const TOOL_CATEGORIES = [
|
|
|
64
67
|
name: "cognitive_transport",
|
|
65
68
|
description: "Wasserstein persona distance, interpolation, coverage, load estimation, and comparison",
|
|
66
69
|
tier: 2,
|
|
70
|
+
pricingTier: "pro",
|
|
67
71
|
tools: [
|
|
68
72
|
"cognitive_distance",
|
|
69
73
|
"cognitive_coverage",
|
|
@@ -78,6 +82,7 @@ export const TOOL_CATEGORIES = [
|
|
|
78
82
|
name: "testing",
|
|
79
83
|
description: "Natural language tests, flaky detection, test repair, and coverage mapping",
|
|
80
84
|
tier: 2,
|
|
85
|
+
pricingTier: "free",
|
|
81
86
|
tools: [
|
|
82
87
|
"nl_test_inline",
|
|
83
88
|
"nl_test_file",
|
|
@@ -90,6 +95,7 @@ export const TOOL_CATEGORIES = [
|
|
|
90
95
|
name: "site_knowledge",
|
|
91
96
|
description: "Persistent site models, profiles, and navigation knowledge",
|
|
92
97
|
tier: 2,
|
|
98
|
+
pricingTier: "pro",
|
|
93
99
|
tools: [
|
|
94
100
|
"site_model_status",
|
|
95
101
|
"site_model_query",
|
|
@@ -102,6 +108,7 @@ export const TOOL_CATEGORIES = [
|
|
|
102
108
|
name: "performance",
|
|
103
109
|
description: "Performance baselines and regression detection",
|
|
104
110
|
tier: 2,
|
|
111
|
+
pricingTier: "pro",
|
|
105
112
|
tools: [
|
|
106
113
|
"perf_baseline",
|
|
107
114
|
"perf_regression",
|
|
@@ -112,6 +119,7 @@ export const TOOL_CATEGORIES = [
|
|
|
112
119
|
name: "bug_hunting",
|
|
113
120
|
description: "Autonomous bug hunting and chaos engineering",
|
|
114
121
|
tier: 2,
|
|
122
|
+
pricingTier: "pro",
|
|
115
123
|
tools: [
|
|
116
124
|
"hunt_bugs",
|
|
117
125
|
"chaos_test",
|
|
@@ -122,6 +130,7 @@ export const TOOL_CATEGORIES = [
|
|
|
122
130
|
name: "marketing",
|
|
123
131
|
description: "Marketing campaigns, persona-based A/B testing, influence analysis",
|
|
124
132
|
tier: 2,
|
|
133
|
+
pricingTier: "enterprise",
|
|
125
134
|
tools: [
|
|
126
135
|
"marketing_personas_list",
|
|
127
136
|
"marketing_campaign_create",
|
|
@@ -133,6 +142,7 @@ export const TOOL_CATEGORIES = [
|
|
|
133
142
|
name: "sessions",
|
|
134
143
|
description: "Save, load, list, and delete browser sessions",
|
|
135
144
|
tier: 2,
|
|
145
|
+
pricingTier: "free",
|
|
136
146
|
tools: [
|
|
137
147
|
"save_session",
|
|
138
148
|
"load_session",
|
|
@@ -146,6 +156,7 @@ export const TOOL_CATEGORIES = [
|
|
|
146
156
|
name: "persona_creation",
|
|
147
157
|
description: "Create custom personas via questionnaire or description",
|
|
148
158
|
tier: 3,
|
|
159
|
+
pricingTier: "pro",
|
|
149
160
|
tools: [
|
|
150
161
|
"persona_create_start",
|
|
151
162
|
"persona_create_questionnaire_start",
|
|
@@ -159,6 +170,7 @@ export const TOOL_CATEGORIES = [
|
|
|
159
170
|
name: "persona_values",
|
|
160
171
|
description: "Persona value systems, traits, influence patterns, and questionnaires",
|
|
161
172
|
tier: 3,
|
|
173
|
+
pricingTier: "pro",
|
|
162
174
|
tools: [
|
|
163
175
|
"persona_values_list",
|
|
164
176
|
"persona_values_lookup",
|
|
@@ -174,6 +186,7 @@ export const TOOL_CATEGORIES = [
|
|
|
174
186
|
name: "browser_management",
|
|
175
187
|
description: "Browser health, recovery, reset, and status",
|
|
176
188
|
tier: 3,
|
|
189
|
+
pricingTier: "free",
|
|
177
190
|
tools: [
|
|
178
191
|
"status",
|
|
179
192
|
"browser_health",
|
|
@@ -185,6 +198,7 @@ export const TOOL_CATEGORIES = [
|
|
|
185
198
|
name: "advanced_interaction",
|
|
186
199
|
description: "Smart click with self-healing, dismiss overlays, find by intent, AI benchmark",
|
|
187
200
|
tier: 3,
|
|
201
|
+
pricingTier: "free",
|
|
188
202
|
tools: [
|
|
189
203
|
"smart_click",
|
|
190
204
|
"dismiss_overlay",
|
|
@@ -199,6 +213,7 @@ export const TOOL_CATEGORIES = [
|
|
|
199
213
|
name: "remediation",
|
|
200
214
|
description: "Generate remediation patches, llms.txt, structured data, and WebMCP audit",
|
|
201
215
|
tier: 3,
|
|
216
|
+
pricingTier: "pro",
|
|
202
217
|
tools: [
|
|
203
218
|
"remediation_patches",
|
|
204
219
|
"llms_txt_generate",
|
|
@@ -215,6 +230,7 @@ export const TOOL_CATEGORIES = [
|
|
|
215
230
|
name: "enterprise_security",
|
|
216
231
|
description: "Web security scanning and stealth mode for authorized domains",
|
|
217
232
|
tier: 2,
|
|
233
|
+
pricingTier: "enterprise",
|
|
218
234
|
tools: [
|
|
219
235
|
"web_security_scan",
|
|
220
236
|
"stealth_status",
|
|
@@ -230,6 +246,7 @@ export const TOOL_CATEGORIES = [
|
|
|
230
246
|
name: "enterprise_autonomous",
|
|
231
247
|
description: "Autonomous cognitive journeys and API key management",
|
|
232
248
|
tier: 2,
|
|
249
|
+
pricingTier: "enterprise",
|
|
233
250
|
tools: [
|
|
234
251
|
"cognitive_journey_autonomous",
|
|
235
252
|
"set_api_key",
|
|
@@ -242,6 +259,7 @@ export const TOOL_CATEGORIES = [
|
|
|
242
259
|
name: "enterprise_marketing",
|
|
243
260
|
description: "Advanced marketing: influence matrix, lever analysis, funnel analysis, competitive, audience discovery",
|
|
244
261
|
tier: 3,
|
|
262
|
+
pricingTier: "enterprise",
|
|
245
263
|
tools: [
|
|
246
264
|
"marketing_influence_matrix",
|
|
247
265
|
"marketing_lever_analysis",
|
|
@@ -274,6 +292,37 @@ export function getToolsByTier(tier) {
|
|
|
274
292
|
.filter(cat => cat.tier === tier)
|
|
275
293
|
.flatMap(cat => cat.tools);
|
|
276
294
|
}
|
|
295
|
+
/** Get pricing tier required for a tool */
|
|
296
|
+
export function getToolPricingTier(toolName) {
|
|
297
|
+
for (const cat of TOOL_CATEGORIES) {
|
|
298
|
+
if (cat.tools.includes(toolName))
|
|
299
|
+
return cat.pricingTier;
|
|
300
|
+
}
|
|
301
|
+
return 'pro'; // default to pro for unknown tools
|
|
302
|
+
}
|
|
303
|
+
/** Check if a user tier has access to a tool's required tier */
|
|
304
|
+
export function tierHasAccess(userTier, requiredTier) {
|
|
305
|
+
const levels = { free: 0, pro: 1, enterprise: 2 };
|
|
306
|
+
return levels[userTier] >= levels[requiredTier];
|
|
307
|
+
}
|
|
308
|
+
/** Get all tools accessible at a given tier */
|
|
309
|
+
export function getToolsForTier(tier) {
|
|
310
|
+
return TOOL_CATEGORIES
|
|
311
|
+
.filter(cat => tierHasAccess(tier, cat.pricingTier))
|
|
312
|
+
.flatMap(cat => cat.tools);
|
|
313
|
+
}
|
|
314
|
+
/** Get all tools that require upgrade from a given tier */
|
|
315
|
+
export function getGatedTools(userTier) {
|
|
316
|
+
const gated = [];
|
|
317
|
+
for (const cat of TOOL_CATEGORIES) {
|
|
318
|
+
if (!tierHasAccess(userTier, cat.pricingTier)) {
|
|
319
|
+
for (const tool of cat.tools) {
|
|
320
|
+
gated.push({ tool, requiredTier: cat.pricingTier });
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return gated;
|
|
325
|
+
}
|
|
277
326
|
/** Get category summary for LLM context (one line per category) */
|
|
278
327
|
export function getCategorySummary() {
|
|
279
328
|
return TOOL_CATEGORIES
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-categories.js","sourceRoot":"","sources":["../../src/mcp-tools/tool-categories.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"tool-categories.js","sourceRoot":"","sources":["../../src/mcp-tools/tool-categories.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attention-quality.d.ts","sourceRoot":"","sources":["../../src/visual/attention-quality.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,WAAW,sBAAsB;IACrC,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mFAAmF;IACnF,eAAe,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,mBAAmB,EAAE,KAAK,CAAC;QACzB,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;QAC9E,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,qBAAqB;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,eAAe;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AASD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,eAAe,EAAE,EAC3B,YAAY,EAAE,KAAK,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC,EACF,QAAQ,GAAE,MAAU,GACnB,sBAAsB,CAiHxB;AAED;;;GAGG;AACH,wBAAsB,+BAA+B,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;IAClF,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"attention-quality.d.ts","sourceRoot":"","sources":["../../src/visual/attention-quality.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,WAAW,sBAAsB;IACrC,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mFAAmF;IACnF,eAAe,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,mBAAmB,EAAE,KAAK,CAAC;QACzB,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;QAC9E,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,qBAAqB;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,eAAe;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AASD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,eAAe,EAAE,EAC3B,YAAY,EAAE,KAAK,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC,EACF,QAAQ,GAAE,MAAU,GACnB,sBAAsB,CAiHxB;AAED;;;GAGG;AACH,wBAAsB,+BAA+B,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;IAClF,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC,CAAC,CA+FF"}
|
|
@@ -133,13 +133,19 @@ export function computeAttentionQuality(hotspots, pageElements, cellSize = 4) {
|
|
|
133
133
|
export async function extractPageElementsForAttention(page) {
|
|
134
134
|
const p = page;
|
|
135
135
|
return p.evaluate(() => {
|
|
136
|
+
const vw = window.innerWidth;
|
|
137
|
+
const vh = window.innerHeight;
|
|
138
|
+
// Only include elements whose bounding box intersects the viewport
|
|
139
|
+
const inViewport = (rect) => rect.width > 0 && rect.height > 0 &&
|
|
140
|
+
rect.bottom > 0 && rect.top < vh &&
|
|
141
|
+
rect.right > 0 && rect.left < vw;
|
|
136
142
|
const elements = [];
|
|
137
143
|
// CTAs: buttons with action text, prominent links
|
|
138
144
|
const ctaPatterns = /apply|sign.?up|register|get.?started|buy|order|subscribe|enroll|join|donate|download|try|start|begin|contact|request|book/i;
|
|
139
|
-
// Headings
|
|
145
|
+
// Headings — viewport only
|
|
140
146
|
document.querySelectorAll("h1, h2, h3").forEach(el => {
|
|
141
147
|
const rect = el.getBoundingClientRect();
|
|
142
|
-
if (rect
|
|
148
|
+
if (!inViewport(rect))
|
|
143
149
|
return;
|
|
144
150
|
const text = el.innerText?.trim() || "";
|
|
145
151
|
elements.push({
|
|
@@ -153,10 +159,10 @@ export async function extractPageElementsForAttention(page) {
|
|
|
153
159
|
isDecorative: false,
|
|
154
160
|
});
|
|
155
161
|
});
|
|
156
|
-
// Buttons and links
|
|
162
|
+
// Buttons and links — viewport only
|
|
157
163
|
document.querySelectorAll('a, button, [role="button"], input[type="submit"]').forEach(el => {
|
|
158
164
|
const rect = el.getBoundingClientRect();
|
|
159
|
-
if (rect
|
|
165
|
+
if (!inViewport(rect))
|
|
160
166
|
return;
|
|
161
167
|
const text = el.innerText?.trim() || el.value || "";
|
|
162
168
|
const isNav = !!(el.closest("nav") || el.closest('[role="navigation"]'));
|
|
@@ -175,9 +181,11 @@ export async function extractPageElementsForAttention(page) {
|
|
|
175
181
|
isDecorative: false,
|
|
176
182
|
});
|
|
177
183
|
});
|
|
178
|
-
// Images (decorative)
|
|
184
|
+
// Images (decorative) — viewport only
|
|
179
185
|
document.querySelectorAll("img, svg, video").forEach(el => {
|
|
180
186
|
const rect = el.getBoundingClientRect();
|
|
187
|
+
if (!inViewport(rect))
|
|
188
|
+
return;
|
|
181
189
|
if (rect.width < 50 || rect.height < 50)
|
|
182
190
|
return; // skip tiny icons
|
|
183
191
|
const alt = el.alt || "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attention-quality.js","sourceRoot":"","sources":["../../src/visual/attention-quality.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"attention-quality.js","sourceRoot":"","sources":["../../src/visual/attention-quality.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cognitive-transport.d.ts","sourceRoot":"","sources":["../../src/visual/cognitive-transport.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cognitive-transport.d.ts","sourceRoot":"","sources":["../../src/visual/cognitive-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -471,50 +471,81 @@ export function selectMaxCoveragePersonas(profiles, n) {
|
|
|
471
471
|
*/
|
|
472
472
|
export async function extractPageMetrics(page) {
|
|
473
473
|
return page.evaluate(() => {
|
|
474
|
-
const
|
|
475
|
-
const
|
|
476
|
-
|
|
477
|
-
const
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
474
|
+
const vw = window.innerWidth;
|
|
475
|
+
const vh = window.innerHeight;
|
|
476
|
+
// Viewport check — only count elements whose bounding box intersects the viewport
|
|
477
|
+
const inViewport = (el) => {
|
|
478
|
+
const rect = el.getBoundingClientRect();
|
|
479
|
+
return rect.width > 0 && rect.height > 0 &&
|
|
480
|
+
rect.bottom > 0 && rect.top < vh &&
|
|
481
|
+
rect.right > 0 && rect.left < vw;
|
|
482
|
+
};
|
|
483
|
+
// Gather only viewport-visible text
|
|
484
|
+
const textEls = Array.from(document.querySelectorAll('p, li, h1, h2, h3, h4, h5, h6, td, th, span, div, a, button, label'));
|
|
485
|
+
let viewportTextLength = 0;
|
|
486
|
+
textEls.forEach(el => {
|
|
487
|
+
if (inViewport(el)) {
|
|
488
|
+
const text = el.innerText?.trim();
|
|
489
|
+
if (text)
|
|
490
|
+
viewportTextLength += text.length;
|
|
491
|
+
}
|
|
492
|
+
});
|
|
493
|
+
// Deduplicate: rough estimate — child text counted in parent. Use 40% factor.
|
|
494
|
+
const textLength = Math.round(viewportTextLength * 0.4);
|
|
495
|
+
const viewportArea = vw * vh;
|
|
496
|
+
// Interactive elements — viewport only
|
|
497
|
+
const interactive = Array.from(document.querySelectorAll('a, button, input, select, textarea, [role="button"], [onclick], [tabindex]'));
|
|
498
|
+
let interactiveCount = 0;
|
|
499
|
+
interactive.forEach(el => { if (inViewport(el))
|
|
500
|
+
interactiveCount++; });
|
|
501
|
+
// Links and choices — viewport only
|
|
502
|
+
const links = Array.from(document.querySelectorAll('a[href]'));
|
|
503
|
+
const selects = Array.from(document.querySelectorAll('select'));
|
|
504
|
+
let choiceCount = 0;
|
|
505
|
+
links.forEach(el => { if (inViewport(el))
|
|
506
|
+
choiceCount++; });
|
|
507
|
+
selects.forEach(s => { if (inViewport(s))
|
|
508
|
+
choiceCount += s.querySelectorAll('option').length; });
|
|
509
|
+
// Animations — viewport only
|
|
510
|
+
const animations = Array.from(document.querySelectorAll('[class*="anim"], [class*="transition"], [class*="slide"], [class*="fade"], video, [autoplay]'));
|
|
511
|
+
let animCount = 0;
|
|
512
|
+
animations.forEach(el => { if (inViewport(el))
|
|
513
|
+
animCount++; });
|
|
488
514
|
const hasCarousel = !!document.querySelector('[class*="carousel"], [class*="slider"], [class*="swiper"]');
|
|
489
|
-
// Navigation depth (breadcrumbs
|
|
515
|
+
// Navigation depth (breadcrumbs — these are structural, keep full-page)
|
|
490
516
|
const breadcrumbs = document.querySelectorAll('[class*="breadcrumb"] a, nav[aria-label*="breadcrumb"] a');
|
|
491
517
|
const navDepth = Math.max(1, breadcrumbs.length);
|
|
492
|
-
// Visual complexity
|
|
518
|
+
// Visual complexity — sample viewport-visible elements only
|
|
519
|
+
const all = document.querySelectorAll('*');
|
|
493
520
|
const uniqueColors = new Set();
|
|
494
|
-
const computed = getComputedStyle(body);
|
|
521
|
+
const computed = getComputedStyle(document.body);
|
|
495
522
|
uniqueColors.add(computed.backgroundColor);
|
|
496
523
|
uniqueColors.add(computed.color);
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
524
|
+
let visibleCount = 0;
|
|
525
|
+
let imageCount = 0;
|
|
526
|
+
for (let i = 0; i < all.length; i++) {
|
|
527
|
+
if (!inViewport(all[i]))
|
|
528
|
+
continue;
|
|
529
|
+
visibleCount++;
|
|
530
|
+
if (visibleCount <= 50) {
|
|
531
|
+
const cs = getComputedStyle(all[i]);
|
|
532
|
+
uniqueColors.add(cs.backgroundColor);
|
|
533
|
+
uniqueColors.add(cs.color);
|
|
534
|
+
}
|
|
535
|
+
const tag = all[i].tagName;
|
|
536
|
+
if (tag === 'IMG' || tag === 'SVG' || all[i].getAttribute('role') === 'img')
|
|
537
|
+
imageCount++;
|
|
502
538
|
}
|
|
503
|
-
//
|
|
504
|
-
const images = document.querySelectorAll('img, svg, [role="img"]');
|
|
505
|
-
// Normalize to 0-1 using logarithmic scaling for wide-range metrics
|
|
506
|
-
// This prevents ceiling effects: 500 chars and 50,000 chars should NOT both be 1.0
|
|
539
|
+
// Normalize to 0-1 using logarithmic scaling
|
|
507
540
|
const logScale = (value, midpoint) => {
|
|
508
|
-
// Produces 0.5 at midpoint, approaches 1.0 asymptotically
|
|
509
541
|
if (value <= 0)
|
|
510
542
|
return 0;
|
|
511
543
|
return value / (value + midpoint);
|
|
512
544
|
};
|
|
513
|
-
const informationDensity = logScale(textLength,
|
|
514
|
-
const visualComplexity = logScale(uniqueColors.size * 3 +
|
|
515
|
-
);
|
|
516
|
-
const
|
|
517
|
-
const animationLevel = Math.min(1, (animations.length + (hasCarousel ? 3 : 0)) / 10);
|
|
545
|
+
const informationDensity = logScale(textLength, 5000); // Viewport text: 0.5 at 5K chars
|
|
546
|
+
const visualComplexity = logScale(uniqueColors.size * 3 + imageCount * 2 + visibleCount * 0.5, 200);
|
|
547
|
+
const textDensity = logScale(textLength / Math.max(1, viewportArea * 0.001), 3);
|
|
548
|
+
const animationLevel = Math.min(1, (animCount + (hasCarousel ? 3 : 0)) / 10);
|
|
518
549
|
return {
|
|
519
550
|
informationDensity,
|
|
520
551
|
visualComplexity,
|