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.
@@ -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,EAoPzC,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,mEAAmE;AACnE,wBAAgB,kBAAkB,IAAI,MAAM,CAK3C"}
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":"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"}
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,CAqFF"}
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.width === 0 || rect.height === 0)
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.width === 0 || rect.height === 0)
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 all = document.querySelectorAll('*');
475
- const body = document.body;
476
- const textLength = (body.innerText || '').length;
477
- const viewportArea = window.innerWidth * window.innerHeight;
478
- // Interactive elements
479
- const interactive = document.querySelectorAll('a, button, input, select, textarea, [role="button"], [onclick], [tabindex]');
480
- const interactiveCount = interactive.length;
481
- // Links and choices
482
- const links = document.querySelectorAll('a[href]');
483
- const selects = document.querySelectorAll('select');
484
- let choiceCount = links.length;
485
- selects.forEach(s => { choiceCount += s.querySelectorAll('option').length; });
486
- // Animations
487
- const animations = document.querySelectorAll('[class*="anim"], [class*="transition"], [class*="slide"], [class*="fade"], video, [autoplay]');
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 or nested menus)
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 heuristics
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
- // Sample a few elements
498
- for (let i = 0; i < Math.min(50, all.length); i += Math.max(1, Math.floor(all.length / 50))) {
499
- const cs = getComputedStyle(all[i]);
500
- uniqueColors.add(cs.backgroundColor);
501
- uniqueColors.add(cs.color);
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
- // Images
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, 15000); // 0.5 at 15K chars, 0.75 at 45K
514
- const visualComplexity = logScale(uniqueColors.size * 3 + images.length * 2 + all.length * 0.5, 200 // 0.5 at 200 "complexity points"
515
- );
516
- const textDensity = logScale(textLength / Math.max(1, viewportArea * 0.001), 3); // text per viewport
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,