cbrowser 17.5.3 → 17.6.1

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.
Files changed (97) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +5 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/mcp-server-remote.d.ts +8 -0
  6. package/dist/mcp-server-remote.d.ts.map +1 -1
  7. package/dist/mcp-server-remote.js +110 -2214
  8. package/dist/mcp-server-remote.js.map +1 -1
  9. package/dist/mcp-tools/ask-user-tools.d.ts +12 -0
  10. package/dist/mcp-tools/ask-user-tools.d.ts.map +1 -0
  11. package/dist/mcp-tools/ask-user-tools.js +60 -0
  12. package/dist/mcp-tools/ask-user-tools.js.map +1 -0
  13. package/dist/mcp-tools/base/analysis-tools.d.ts +12 -0
  14. package/dist/mcp-tools/base/analysis-tools.d.ts.map +1 -0
  15. package/dist/mcp-tools/base/analysis-tools.js +70 -0
  16. package/dist/mcp-tools/base/analysis-tools.js.map +1 -0
  17. package/dist/mcp-tools/base/assertion-tools.d.ts +12 -0
  18. package/dist/mcp-tools/base/assertion-tools.d.ts.map +1 -0
  19. package/dist/mcp-tools/base/assertion-tools.js +32 -0
  20. package/dist/mcp-tools/base/assertion-tools.js.map +1 -0
  21. package/dist/mcp-tools/base/audit-tools.d.ts +12 -0
  22. package/dist/mcp-tools/base/audit-tools.d.ts.map +1 -0
  23. package/dist/mcp-tools/base/audit-tools.js +114 -0
  24. package/dist/mcp-tools/base/audit-tools.js.map +1 -0
  25. package/dist/mcp-tools/base/browser-management-tools.d.ts +12 -0
  26. package/dist/mcp-tools/base/browser-management-tools.d.ts.map +1 -0
  27. package/dist/mcp-tools/base/browser-management-tools.js +69 -0
  28. package/dist/mcp-tools/base/browser-management-tools.js.map +1 -0
  29. package/dist/mcp-tools/base/bug-analysis-tools.d.ts +12 -0
  30. package/dist/mcp-tools/base/bug-analysis-tools.d.ts.map +1 -0
  31. package/dist/mcp-tools/base/bug-analysis-tools.js +97 -0
  32. package/dist/mcp-tools/base/bug-analysis-tools.js.map +1 -0
  33. package/dist/mcp-tools/base/cognitive-tools.d.ts +12 -0
  34. package/dist/mcp-tools/base/cognitive-tools.d.ts.map +1 -0
  35. package/dist/mcp-tools/base/cognitive-tools.js +453 -0
  36. package/dist/mcp-tools/base/cognitive-tools.js.map +1 -0
  37. package/dist/mcp-tools/base/extraction-tools.d.ts +12 -0
  38. package/dist/mcp-tools/base/extraction-tools.d.ts.map +1 -0
  39. package/dist/mcp-tools/base/extraction-tools.js +41 -0
  40. package/dist/mcp-tools/base/extraction-tools.js.map +1 -0
  41. package/dist/mcp-tools/base/healing-tools.d.ts +12 -0
  42. package/dist/mcp-tools/base/healing-tools.d.ts.map +1 -0
  43. package/dist/mcp-tools/base/healing-tools.js +24 -0
  44. package/dist/mcp-tools/base/healing-tools.js.map +1 -0
  45. package/dist/mcp-tools/base/index.d.ts +49 -0
  46. package/dist/mcp-tools/base/index.d.ts.map +1 -0
  47. package/dist/mcp-tools/base/index.js +99 -0
  48. package/dist/mcp-tools/base/index.js.map +1 -0
  49. package/dist/mcp-tools/base/interaction-tools.d.ts +12 -0
  50. package/dist/mcp-tools/base/interaction-tools.d.ts.map +1 -0
  51. package/dist/mcp-tools/base/interaction-tools.js +168 -0
  52. package/dist/mcp-tools/base/interaction-tools.js.map +1 -0
  53. package/dist/mcp-tools/base/navigation-tools.d.ts +12 -0
  54. package/dist/mcp-tools/base/navigation-tools.d.ts.map +1 -0
  55. package/dist/mcp-tools/base/navigation-tools.js +33 -0
  56. package/dist/mcp-tools/base/navigation-tools.js.map +1 -0
  57. package/dist/mcp-tools/base/performance-tools.d.ts +12 -0
  58. package/dist/mcp-tools/base/performance-tools.d.ts.map +1 -0
  59. package/dist/mcp-tools/base/performance-tools.js +103 -0
  60. package/dist/mcp-tools/base/performance-tools.js.map +1 -0
  61. package/dist/mcp-tools/base/persona-comparison-tools.d.ts +12 -0
  62. package/dist/mcp-tools/base/persona-comparison-tools.d.ts.map +1 -0
  63. package/dist/mcp-tools/base/persona-comparison-tools.js +242 -0
  64. package/dist/mcp-tools/base/persona-comparison-tools.js.map +1 -0
  65. package/dist/mcp-tools/base/session-tools.d.ts +12 -0
  66. package/dist/mcp-tools/base/session-tools.d.ts.map +1 -0
  67. package/dist/mcp-tools/base/session-tools.js +67 -0
  68. package/dist/mcp-tools/base/session-tools.js.map +1 -0
  69. package/dist/mcp-tools/base/testing-tools.d.ts +12 -0
  70. package/dist/mcp-tools/base/testing-tools.d.ts.map +1 -0
  71. package/dist/mcp-tools/base/testing-tools.js +199 -0
  72. package/dist/mcp-tools/base/testing-tools.js.map +1 -0
  73. package/dist/mcp-tools/base/values-tools.d.ts +13 -0
  74. package/dist/mcp-tools/base/values-tools.d.ts.map +1 -0
  75. package/dist/mcp-tools/base/values-tools.js +290 -0
  76. package/dist/mcp-tools/base/values-tools.js.map +1 -0
  77. package/dist/mcp-tools/base/visual-testing-tools.d.ts +12 -0
  78. package/dist/mcp-tools/base/visual-testing-tools.d.ts.map +1 -0
  79. package/dist/mcp-tools/base/visual-testing-tools.js +159 -0
  80. package/dist/mcp-tools/base/visual-testing-tools.js.map +1 -0
  81. package/dist/mcp-tools/enterprise-stubs.d.ts +23 -0
  82. package/dist/mcp-tools/enterprise-stubs.d.ts.map +1 -0
  83. package/dist/mcp-tools/enterprise-stubs.js +238 -0
  84. package/dist/mcp-tools/enterprise-stubs.js.map +1 -0
  85. package/dist/mcp-tools/index.d.ts +36 -0
  86. package/dist/mcp-tools/index.d.ts.map +1 -0
  87. package/dist/mcp-tools/index.js +52 -0
  88. package/dist/mcp-tools/index.js.map +1 -0
  89. package/dist/mcp-tools/persona-creation-tools.d.ts +21 -0
  90. package/dist/mcp-tools/persona-creation-tools.d.ts.map +1 -0
  91. package/dist/mcp-tools/persona-creation-tools.js +528 -0
  92. package/dist/mcp-tools/persona-creation-tools.js.map +1 -0
  93. package/dist/mcp-tools/types.d.ts +24 -0
  94. package/dist/mcp-tools/types.d.ts.map +1 -0
  95. package/dist/mcp-tools/types.js +8 -0
  96. package/dist/mcp-tools/types.js.map +1 -0
  97. package/package.json +6 -1
@@ -0,0 +1,99 @@
1
+ /**
2
+ * CBrowser MCP Tools - Base Tools Index
3
+ * Registers all 52 base tools across 17 categories
4
+ *
5
+ * @copyright 2026 WF Media (Alexandria Eden) alexandria.shai.eden@gmail.com
6
+ * @license BSL-1.1 (Business Source License 1.1)
7
+ */
8
+ // Category imports
9
+ import { registerNavigationTools } from "./navigation-tools.js";
10
+ import { registerInteractionTools } from "./interaction-tools.js";
11
+ import { registerExtractionTools } from "./extraction-tools.js";
12
+ import { registerAssertionTools } from "./assertion-tools.js";
13
+ import { registerAnalysisTools } from "./analysis-tools.js";
14
+ import { registerSessionTools } from "./session-tools.js";
15
+ import { registerHealingTools } from "./healing-tools.js";
16
+ import { registerVisualTestingTools } from "./visual-testing-tools.js";
17
+ import { registerTestingTools } from "./testing-tools.js";
18
+ import { registerBugAnalysisTools } from "./bug-analysis-tools.js";
19
+ import { registerPersonaComparisonTools } from "./persona-comparison-tools.js";
20
+ import { registerCognitiveTools } from "./cognitive-tools.js";
21
+ import { registerValuesTools } from "./values-tools.js";
22
+ import { registerPerformanceTools } from "./performance-tools.js";
23
+ import { registerAuditTools } from "./audit-tools.js";
24
+ import { registerBrowserManagementTools } from "./browser-management-tools.js";
25
+ /**
26
+ * Register all 52 base tools on an MCP server
27
+ *
28
+ * Tool count by category:
29
+ * - Navigation: 1 (navigate)
30
+ * - Interaction: 5 (click, smart_click, dismiss_overlay, fill, scroll)
31
+ * - Extraction: 2 (screenshot, extract)
32
+ * - Assertion: 1 (assert)
33
+ * - Analysis: 3 (analyze_page, generate_tests, find_element_by_intent)
34
+ * - Session: 4 (save_session, load_session, list_sessions, delete_session)
35
+ * - Healing: 1 (heal_stats)
36
+ * - Visual Testing: 6 (visual_baseline, visual_regression, cross_browser_test, cross_browser_diff, responsive_test, ab_comparison)
37
+ * - Testing: 5 (nl_test_file, nl_test_inline, repair_test, detect_flaky_tests, coverage_map)
38
+ * - Bug Analysis: 2 (hunt_bugs, chaos_test)
39
+ * - Persona Comparison: 3 (compare_personas, compare_personas_init, compare_personas_complete)
40
+ * - Cognitive: 3 (cognitive_journey_init, cognitive_journey_update_state, list_cognitive_personas)
41
+ * - Values: 6 (persona_values_lookup, list_influence_patterns, persona_questionnaire_get, persona_questionnaire_build, persona_trait_lookup, persona_category_guidance)
42
+ * - Performance: 3 (perf_baseline, perf_regression, list_baselines)
43
+ * - Audit: 3 (agent_ready_audit, competitive_benchmark, empathy_audit)
44
+ * - Browser Management: 4 (status, browser_health, browser_recover, reset_browser)
45
+ *
46
+ * Total: 52 tools
47
+ */
48
+ export function registerBaseTools(server, context) {
49
+ // Navigation (1)
50
+ registerNavigationTools(server, context);
51
+ // Interaction (5)
52
+ registerInteractionTools(server, context);
53
+ // Extraction (2)
54
+ registerExtractionTools(server, context);
55
+ // Assertion (1)
56
+ registerAssertionTools(server, context);
57
+ // Analysis (3)
58
+ registerAnalysisTools(server, context);
59
+ // Session (4)
60
+ registerSessionTools(server, context);
61
+ // Healing (1)
62
+ registerHealingTools(server, context);
63
+ // Visual Testing (6) - no browser context needed
64
+ registerVisualTestingTools(server);
65
+ // Testing (5) - no browser context needed
66
+ registerTestingTools(server);
67
+ // Bug Analysis (2)
68
+ registerBugAnalysisTools(server, context);
69
+ // Persona Comparison (3)
70
+ registerPersonaComparisonTools(server, context);
71
+ // Cognitive (3)
72
+ registerCognitiveTools(server, context);
73
+ // Values (6) - no browser context needed
74
+ registerValuesTools(server);
75
+ // Performance (3) - no browser context needed
76
+ registerPerformanceTools(server);
77
+ // Audit (3) - no browser context needed
78
+ registerAuditTools(server);
79
+ // Browser Management (4)
80
+ registerBrowserManagementTools(server, context);
81
+ }
82
+ // Re-export individual registration functions for granular use
83
+ export { registerNavigationTools } from "./navigation-tools.js";
84
+ export { registerInteractionTools } from "./interaction-tools.js";
85
+ export { registerExtractionTools } from "./extraction-tools.js";
86
+ export { registerAssertionTools } from "./assertion-tools.js";
87
+ export { registerAnalysisTools } from "./analysis-tools.js";
88
+ export { registerSessionTools } from "./session-tools.js";
89
+ export { registerHealingTools } from "./healing-tools.js";
90
+ export { registerVisualTestingTools } from "./visual-testing-tools.js";
91
+ export { registerTestingTools } from "./testing-tools.js";
92
+ export { registerBugAnalysisTools } from "./bug-analysis-tools.js";
93
+ export { registerPersonaComparisonTools } from "./persona-comparison-tools.js";
94
+ export { registerCognitiveTools } from "./cognitive-tools.js";
95
+ export { registerValuesTools } from "./values-tools.js";
96
+ export { registerPerformanceTools } from "./performance-tools.js";
97
+ export { registerAuditTools } from "./audit-tools.js";
98
+ export { registerBrowserManagementTools } from "./browser-management-tools.js";
99
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp-tools/base/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * CBrowser MCP Tools - Interaction Tools
3
+ *
4
+ * @copyright 2026 WF Media (Alexandria Eden) alexandria.shai.eden@gmail.com
5
+ * @license BSL-1.1 (Business Source License 1.1)
6
+ */
7
+ import type { McpServer, ToolRegistrationContext } from "../types.js";
8
+ /**
9
+ * Register interaction tools (5 tools: click, smart_click, dismiss_overlay, fill, scroll)
10
+ */
11
+ export declare function registerInteractionTools(server: McpServer, { getBrowser }: ToolRegistrationContext): void;
12
+ //# sourceMappingURL=interaction-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp-tools/base/interaction-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtE;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EACjB,EAAE,UAAU,EAAE,EAAE,uBAAuB,GACtC,IAAI,CAuLN"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * CBrowser MCP Tools - Interaction Tools
3
+ *
4
+ * @copyright 2026 WF Media (Alexandria Eden) alexandria.shai.eden@gmail.com
5
+ * @license BSL-1.1 (Business Source License 1.1)
6
+ */
7
+ import { z } from "zod";
8
+ /**
9
+ * Register interaction tools (5 tools: click, smart_click, dismiss_overlay, fill, scroll)
10
+ */
11
+ export function registerInteractionTools(server, { getBrowser }) {
12
+ server.tool("click", "Click an element on the page using text, selector, or description. Use verbose=true for detailed debug info on failure.", {
13
+ selector: z.string().describe("Element to click (text content, CSS selector, or description)"),
14
+ force: z.boolean().optional().describe("Bypass safety checks for destructive actions"),
15
+ verbose: z.boolean().optional().describe("Return available elements and AI suggestions on failure"),
16
+ }, async ({ selector, force, verbose }) => {
17
+ const b = await getBrowser();
18
+ const result = await b.click(selector, { force, verbose });
19
+ const response = {
20
+ success: result.success,
21
+ message: result.message,
22
+ screenshot: result.screenshot,
23
+ };
24
+ if (verbose && !result.success) {
25
+ if (result.availableElements)
26
+ response.availableElements = result.availableElements;
27
+ if (result.aiSuggestion)
28
+ response.aiSuggestion = result.aiSuggestion;
29
+ if (result.debugScreenshot)
30
+ response.debugScreenshot = result.debugScreenshot;
31
+ }
32
+ return {
33
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
34
+ };
35
+ });
36
+ server.tool("smart_click", "Click with auto-retry and self-healing selectors. v11.8.0: Added confidence gating - only reports success if healed selector has >= 60% confidence.", {
37
+ selector: z.string().describe("Element to click"),
38
+ maxRetries: z.number().optional().default(3).describe("Maximum retry attempts"),
39
+ dismissOverlays: z.boolean().optional().default(false).describe("Dismiss overlays before clicking"),
40
+ }, async ({ selector, maxRetries, dismissOverlays }) => {
41
+ const b = await getBrowser();
42
+ const result = await b.smartClick(selector, { maxRetries, dismissOverlays });
43
+ return {
44
+ content: [
45
+ {
46
+ type: "text",
47
+ text: JSON.stringify({
48
+ success: result.success,
49
+ attempts: result.attempts.length,
50
+ finalSelector: result.finalSelector,
51
+ message: result.message,
52
+ aiSuggestion: result.aiSuggestion,
53
+ confidence: result.confidence,
54
+ healed: result.healed,
55
+ healReason: result.healReason,
56
+ }, null, 2),
57
+ },
58
+ ],
59
+ };
60
+ });
61
+ server.tool("dismiss_overlay", "Detect and dismiss modal overlays (cookie consent, age verification, newsletter popups). Constitutional Yellow zone.", {
62
+ type: z.enum(["auto", "cookie", "age-verify", "newsletter", "custom"]).optional().default("auto").describe("Overlay type to detect"),
63
+ customSelector: z.string().optional().describe("Custom CSS selector for overlay close button"),
64
+ }, async ({ type, customSelector }) => {
65
+ const b = await getBrowser();
66
+ const result = await b.dismissOverlay({ type, customSelector });
67
+ return {
68
+ content: [
69
+ {
70
+ type: "text",
71
+ text: JSON.stringify({
72
+ dismissed: result.dismissed,
73
+ overlaysFound: result.overlaysFound,
74
+ overlaysDismissed: result.overlaysDismissed,
75
+ details: result.details,
76
+ suggestion: result.suggestion,
77
+ }, null, 2),
78
+ },
79
+ ],
80
+ };
81
+ });
82
+ server.tool("fill", "Fill a form field with text. Use verbose=true for detailed debug info on failure.", {
83
+ selector: z.string().describe("Input field to fill (name, placeholder, label, or selector)"),
84
+ value: z.string().describe("Value to enter"),
85
+ verbose: z.boolean().optional().describe("Return available inputs and AI suggestions on failure"),
86
+ }, async ({ selector, value, verbose }) => {
87
+ const b = await getBrowser();
88
+ const result = await b.fill(selector, value, { verbose });
89
+ const response = {
90
+ success: result.success,
91
+ message: result.message,
92
+ };
93
+ if (verbose && !result.success) {
94
+ if (result.availableInputs)
95
+ response.availableInputs = result.availableInputs;
96
+ if (result.aiSuggestion)
97
+ response.aiSuggestion = result.aiSuggestion;
98
+ if (result.debugScreenshot)
99
+ response.debugScreenshot = result.debugScreenshot;
100
+ }
101
+ return {
102
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
103
+ };
104
+ });
105
+ server.tool("scroll", "Scroll the page in a direction. Use when content might be below the fold or to navigate long pages.", {
106
+ direction: z.enum(["down", "up", "top", "bottom"]).default("down").describe("Scroll direction: down (400px), up (400px), top (page start), bottom (page end)"),
107
+ amount: z.number().optional().describe("Custom scroll amount in pixels (overrides direction default)"),
108
+ }, async ({ direction, amount }) => {
109
+ const b = await getBrowser();
110
+ const page = await b.getPage();
111
+ const scrollAmount = amount || 400;
112
+ let scrollPosition = 0;
113
+ let maxScroll = 0;
114
+ try {
115
+ switch (direction) {
116
+ case "top":
117
+ await page.evaluate(() => window.scrollTo({ top: 0, behavior: "smooth" }));
118
+ break;
119
+ case "bottom":
120
+ await page.evaluate(() => window.scrollTo({ top: document.body.scrollHeight, behavior: "smooth" }));
121
+ break;
122
+ case "up":
123
+ await page.evaluate((amt) => window.scrollBy({ top: -amt, behavior: "smooth" }), scrollAmount);
124
+ break;
125
+ case "down":
126
+ default:
127
+ await page.evaluate((amt) => window.scrollBy({ top: amt, behavior: "smooth" }), scrollAmount);
128
+ break;
129
+ }
130
+ await new Promise((resolve) => setTimeout(resolve, 300));
131
+ const scrollInfo = await page.evaluate(() => ({
132
+ scrollY: window.scrollY,
133
+ maxScroll: document.body.scrollHeight - window.innerHeight,
134
+ }));
135
+ scrollPosition = scrollInfo.scrollY;
136
+ maxScroll = scrollInfo.maxScroll;
137
+ return {
138
+ content: [
139
+ {
140
+ type: "text",
141
+ text: JSON.stringify({
142
+ success: true,
143
+ direction,
144
+ scrollPosition,
145
+ maxScroll,
146
+ atTop: scrollPosition <= 0,
147
+ atBottom: scrollPosition >= maxScroll - 10,
148
+ }, null, 2),
149
+ },
150
+ ],
151
+ };
152
+ }
153
+ catch (error) {
154
+ return {
155
+ content: [
156
+ {
157
+ type: "text",
158
+ text: JSON.stringify({
159
+ success: false,
160
+ error: error.message,
161
+ }, null, 2),
162
+ },
163
+ ],
164
+ };
165
+ }
166
+ });
167
+ }
168
+ //# sourceMappingURL=interaction-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction-tools.js","sourceRoot":"","sources":["../../../src/mcp-tools/base/interaction-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * CBrowser MCP Tools - Navigation Tools
3
+ *
4
+ * @copyright 2026 WF Media (Alexandria Eden) alexandria.shai.eden@gmail.com
5
+ * @license BSL-1.1 (Business Source License 1.1)
6
+ */
7
+ import type { McpServer, ToolRegistrationContext } from "../types.js";
8
+ /**
9
+ * Register navigation tools (1 tool: navigate)
10
+ */
11
+ export declare function registerNavigationTools(server: McpServer, { getBrowser }: ToolRegistrationContext): void;
12
+ //# sourceMappingURL=navigation-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp-tools/base/navigation-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtE;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,EAAE,UAAU,EAAE,EAAE,uBAAuB,GACtC,IAAI,CA0BN"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * CBrowser MCP Tools - Navigation Tools
3
+ *
4
+ * @copyright 2026 WF Media (Alexandria Eden) alexandria.shai.eden@gmail.com
5
+ * @license BSL-1.1 (Business Source License 1.1)
6
+ */
7
+ import { z } from "zod";
8
+ /**
9
+ * Register navigation tools (1 tool: navigate)
10
+ */
11
+ export function registerNavigationTools(server, { getBrowser }) {
12
+ server.tool("navigate", "Navigate to a URL and take a screenshot", {
13
+ url: z.string().url().describe("The URL to navigate to"),
14
+ }, async ({ url }) => {
15
+ const b = await getBrowser();
16
+ const result = await b.navigate(url);
17
+ return {
18
+ content: [
19
+ {
20
+ type: "text",
21
+ text: JSON.stringify({
22
+ success: true,
23
+ url: result.url,
24
+ title: result.title,
25
+ loadTime: result.loadTime,
26
+ screenshot: result.screenshot,
27
+ }, null, 2),
28
+ },
29
+ ],
30
+ };
31
+ });
32
+ }
33
+ //# sourceMappingURL=navigation-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation-tools.js","sourceRoot":"","sources":["../../../src/mcp-tools/base/navigation-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAiB,EACjB,EAAE,UAAU,EAA2B;IAEvC,MAAM,CAAC,IAAI,CACT,UAAU,EACV,yCAAyC,EACzC;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;KACzD,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;QAChB,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACrC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,OAAO,EAAE,IAAI;wBACb,GAAG,EAAE,MAAM,CAAC,GAAG;wBACf,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,UAAU,EAAE,MAAM,CAAC,UAAU;qBAC9B,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * CBrowser MCP Tools - Performance Tools
3
+ *
4
+ * @copyright 2026 WF Media (Alexandria Eden) alexandria.shai.eden@gmail.com
5
+ * @license BSL-1.1 (Business Source License 1.1)
6
+ */
7
+ import type { McpServer } from "../types.js";
8
+ /**
9
+ * Register performance tools (3 tools: perf_baseline, perf_regression, list_baselines)
10
+ */
11
+ export declare function registerPerformanceTools(server: McpServer): void;
12
+ //# sourceMappingURL=performance-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp-tools/base/performance-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQ7C;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0GhE"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * CBrowser MCP Tools - Performance Tools
3
+ *
4
+ * @copyright 2026 WF Media (Alexandria Eden) alexandria.shai.eden@gmail.com
5
+ * @license BSL-1.1 (Business Source License 1.1)
6
+ */
7
+ import { z } from "zod";
8
+ import { capturePerformanceBaseline, detectPerformanceRegression, listPerformanceBaselines, } from "../../performance/index.js";
9
+ import { listVisualBaselines } from "../../visual/index.js";
10
+ /**
11
+ * Register performance tools (3 tools: perf_baseline, perf_regression, list_baselines)
12
+ */
13
+ export function registerPerformanceTools(server) {
14
+ server.tool("perf_baseline", "Capture performance baseline for a URL", {
15
+ url: z.string().url().describe("URL to capture baseline for"),
16
+ name: z.string().describe("Name for the baseline"),
17
+ runs: z.number().optional().default(3).describe("Number of runs to average"),
18
+ }, async ({ url, name, runs }) => {
19
+ const result = await capturePerformanceBaseline(url, { name, runs });
20
+ const m = result.metrics;
21
+ return {
22
+ content: [
23
+ {
24
+ type: "text",
25
+ text: JSON.stringify({
26
+ name: result.name,
27
+ url: result.url,
28
+ coreWebVitals: {
29
+ lcp: m.lcp,
30
+ lcpRating: m.lcpRating,
31
+ fid: m.fid,
32
+ fidRating: m.fidRating,
33
+ cls: m.cls,
34
+ clsRating: m.clsRating,
35
+ },
36
+ timingMetrics: {
37
+ fcp: m.fcp,
38
+ fcpRating: m.fcpRating,
39
+ ttfb: m.ttfb,
40
+ ttfbRating: m.ttfbRating,
41
+ tti: m.tti,
42
+ tbt: m.tbt,
43
+ domContentLoaded: m.domContentLoaded,
44
+ load: m.load,
45
+ },
46
+ resourceMetrics: {
47
+ resourceCount: m.resourceCount,
48
+ transferSize: m.transferSize,
49
+ },
50
+ metrics: {
51
+ lcp: m.lcp,
52
+ fcp: m.fcp,
53
+ ttfb: m.ttfb,
54
+ cls: m.cls,
55
+ },
56
+ }, null, 2),
57
+ },
58
+ ],
59
+ };
60
+ });
61
+ server.tool("perf_regression", "Detect performance regression against baseline with configurable sensitivity. Uses dual thresholds: both percentage AND absolute change must be exceeded. Profiles: strict (perf envs, FCP 10%/50ms), normal (default, FCP 20%/100ms), ci (automated pipelines, FCP 25%/150ms), lenient (dev, FCP 30%/200ms).", {
62
+ url: z.string().url().describe("URL to test"),
63
+ baselineName: z.string().describe("Name of baseline to compare against"),
64
+ sensitivity: z.enum(["strict", "normal", "ci", "lenient"]).optional().default("normal").describe("Sensitivity profile: strict (perf testing), normal (local dev), ci (automated pipelines), lenient (development)"),
65
+ thresholdLcp: z.number().optional().describe("Override LCP threshold percentage"),
66
+ }, async ({ url, baselineName, sensitivity, thresholdLcp }) => {
67
+ const result = await detectPerformanceRegression(url, baselineName, {
68
+ sensitivity,
69
+ thresholds: thresholdLcp ? { lcp: thresholdLcp } : undefined,
70
+ });
71
+ return {
72
+ content: [
73
+ {
74
+ type: "text",
75
+ text: JSON.stringify({
76
+ passed: result.passed,
77
+ sensitivity: result.sensitivity,
78
+ notes: result.notes,
79
+ regressions: result.regressions,
80
+ currentMetrics: result.currentMetrics,
81
+ baseline: result.baseline.name,
82
+ }, null, 2),
83
+ },
84
+ ],
85
+ };
86
+ });
87
+ server.tool("list_baselines", "List all saved baselines (visual and performance)", {}, async () => {
88
+ const visualBaselines = await listVisualBaselines();
89
+ const perfBaselines = await listPerformanceBaselines();
90
+ return {
91
+ content: [
92
+ {
93
+ type: "text",
94
+ text: JSON.stringify({
95
+ visual: visualBaselines,
96
+ performance: perfBaselines,
97
+ }, null, 2),
98
+ },
99
+ ],
100
+ };
101
+ });
102
+ }
103
+ //# sourceMappingURL=performance-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance-tools.js","sourceRoot":"","sources":["../../../src/mcp-tools/base/performance-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,IAAI,CACT,eAAe,EACf,wCAAwC,EACxC;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QAC7D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAClD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KAC7E,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QAC5B,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;QACzB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,GAAG,EAAE,MAAM,CAAC,GAAG;wBACf,aAAa,EAAE;4BACb,GAAG,EAAE,CAAC,CAAC,GAAG;4BACV,SAAS,EAAE,CAAC,CAAC,SAAS;4BACtB,GAAG,EAAE,CAAC,CAAC,GAAG;4BACV,SAAS,EAAE,CAAC,CAAC,SAAS;4BACtB,GAAG,EAAE,CAAC,CAAC,GAAG;4BACV,SAAS,EAAE,CAAC,CAAC,SAAS;yBACvB;wBACD,aAAa,EAAE;4BACb,GAAG,EAAE,CAAC,CAAC,GAAG;4BACV,SAAS,EAAE,CAAC,CAAC,SAAS;4BACtB,IAAI,EAAE,CAAC,CAAC,IAAI;4BACZ,UAAU,EAAE,CAAC,CAAC,UAAU;4BACxB,GAAG,EAAE,CAAC,CAAC,GAAG;4BACV,GAAG,EAAE,CAAC,CAAC,GAAG;4BACV,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;4BACpC,IAAI,EAAE,CAAC,CAAC,IAAI;yBACb;wBACD,eAAe,EAAE;4BACf,aAAa,EAAE,CAAC,CAAC,aAAa;4BAC9B,YAAY,EAAE,CAAC,CAAC,YAAY;yBAC7B;wBACD,OAAO,EAAE;4BACP,GAAG,EAAE,CAAC,CAAC,GAAG;4BACV,GAAG,EAAE,CAAC,CAAC,GAAG;4BACV,IAAI,EAAE,CAAC,CAAC,IAAI;4BACZ,GAAG,EAAE,CAAC,CAAC,GAAG;yBACX;qBACF,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,+SAA+S,EAC/S;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC7C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QACxE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,iHAAiH,CAAC;QACnN,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;KAClF,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC,GAAG,EAAE,YAAY,EAAE;YAClE,WAAW;YACX,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS;SAC7D,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,cAAc,EAAE,MAAM,CAAC,cAAc;wBACrC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;qBAC/B,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,mDAAmD,EACnD,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,eAAe,GAAG,MAAM,mBAAmB,EAAE,CAAC;QACpD,MAAM,aAAa,GAAG,MAAM,wBAAwB,EAAE,CAAC;QACvD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,MAAM,EAAE,eAAe;wBACvB,WAAW,EAAE,aAAa;qBAC3B,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * CBrowser MCP Tools - Persona Comparison Tools
3
+ *
4
+ * @copyright 2026 WF Media (Alexandria Eden) alexandria.shai.eden@gmail.com
5
+ * @license BSL-1.1 (Business Source License 1.1)
6
+ */
7
+ import type { McpServer, ToolRegistrationContext } from "../types.js";
8
+ /**
9
+ * Register persona comparison tools (3 tools: compare_personas, compare_personas_init, compare_personas_complete)
10
+ */
11
+ export declare function registerPersonaComparisonTools(server: McpServer, _context: ToolRegistrationContext): void;
12
+ //# sourceMappingURL=persona-comparison-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persona-comparison-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp-tools/base/persona-comparison-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAUtE;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,uBAAuB,GAChC,IAAI,CAoRN"}