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,242 @@
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 { z } from "zod";
8
+ import { comparePersonas } from "../../analysis/index.js";
9
+ import { isApiKeyConfigured } from "../../cognitive/index.js";
10
+ import { getAnyPersona, getCognitiveProfile, createCognitivePersona, } from "../../personas.js";
11
+ /**
12
+ * Register persona comparison tools (3 tools: compare_personas, compare_personas_init, compare_personas_complete)
13
+ */
14
+ export function registerPersonaComparisonTools(server, _context) {
15
+ server.tool("compare_personas", "Compare how different user personas experience a journey. In Claude Code sessions (no API key), use compare_personas_init and compare_personas_complete instead for the bridge workflow.", {
16
+ url: z.string().url().describe("Starting URL"),
17
+ goal: z.string().describe("Goal to accomplish"),
18
+ personas: z.array(z.string()).describe("Persona names to compare"),
19
+ }, async ({ url, goal, personas }) => {
20
+ const hasApiKey = isApiKeyConfigured();
21
+ if (!hasApiKey) {
22
+ return {
23
+ content: [
24
+ {
25
+ type: "text",
26
+ text: JSON.stringify({
27
+ mode: "bridge",
28
+ message: "Running in Claude Code session - use the bridge workflow for API-free persona comparison",
29
+ instructions: `
30
+ COMPARE PERSONAS BRIDGE WORKFLOW (No API Key Required):
31
+
32
+ 1. Call compare_personas_init with your URL, goal, and personas list
33
+ 2. For each persona returned, run a cognitive_journey_init and drive the journey using browser tools
34
+ 3. After all journeys complete, call compare_personas_complete with the results
35
+
36
+ Example:
37
+ 1. compare_personas_init({ url: "${url}", goal: "${goal}", personas: ${JSON.stringify(personas)} })
38
+ 2. For each persona: cognitive_journey_init → navigate/click/fill → track state
39
+ 3. compare_personas_complete({ journeyResults: [...], url: "${url}", goal: "${goal}" })
40
+ `,
41
+ url,
42
+ goal,
43
+ personas,
44
+ }, null, 2),
45
+ },
46
+ ],
47
+ };
48
+ }
49
+ const result = await comparePersonas({
50
+ startUrl: url,
51
+ goal,
52
+ personas,
53
+ });
54
+ return {
55
+ content: [
56
+ {
57
+ type: "text",
58
+ text: JSON.stringify({
59
+ url: result.url,
60
+ goal: result.goal,
61
+ personasCompared: result.personas.length,
62
+ summary: result.summary,
63
+ }, null, 2),
64
+ },
65
+ ],
66
+ };
67
+ });
68
+ server.tool("compare_personas_init", "Initialize persona comparison for Claude Code bridge workflow. Returns persona profiles and instructions for running journeys without API key.", {
69
+ url: z.string().url().describe("Starting URL for all journeys"),
70
+ goal: z.string().describe("Goal to accomplish"),
71
+ personas: z.array(z.string()).describe("Persona names to compare (e.g., ['first-timer', 'power-user', 'elderly-user'])"),
72
+ }, async ({ url, goal, personas }) => {
73
+ const personaProfiles = personas.map((personaName) => {
74
+ const existingPersona = getAnyPersona(personaName);
75
+ let personaObj;
76
+ if (!existingPersona) {
77
+ personaObj = createCognitivePersona(personaName, personaName, {});
78
+ }
79
+ else {
80
+ personaObj = existingPersona;
81
+ }
82
+ const profile = getCognitiveProfile(personaObj);
83
+ return {
84
+ name: personaName,
85
+ description: personaObj.description,
86
+ demographics: personaObj.demographics,
87
+ cognitiveTraits: profile.traits,
88
+ attentionPattern: profile.attentionPattern,
89
+ decisionStyle: profile.decisionStyle,
90
+ };
91
+ });
92
+ return {
93
+ content: [
94
+ {
95
+ type: "text",
96
+ text: JSON.stringify({
97
+ mode: "compare_personas_bridge",
98
+ url,
99
+ goal,
100
+ personaCount: personas.length,
101
+ personas: personaProfiles,
102
+ instructions: `
103
+ PERSONA COMPARISON BRIDGE WORKFLOW:
104
+
105
+ You have ${personas.length} personas to compare. For each persona:
106
+
107
+ 1. Call cognitive_journey_init with the persona name, goal, and URL
108
+ 2. Drive the journey using browser tools (navigate, click, fill, screenshot)
109
+ 3. Track cognitive state using cognitive_journey_update_state
110
+ 4. Continue until goal achieved or persona abandons
111
+ 5. Record the final result
112
+
113
+ After ALL personas complete their journeys, call compare_personas_complete with:
114
+ {
115
+ url: "${url}",
116
+ goal: "${goal}",
117
+ journeyResults: [
118
+ {
119
+ persona: "persona-name",
120
+ goalAchieved: true/false,
121
+ totalTime: seconds,
122
+ stepCount: number,
123
+ finalState: { patienceRemaining, frustrationLevel, confusionLevel },
124
+ abandonmentReason: null or "patience" | "frustration" | "confusion" | "timeout" | "loop",
125
+ frictionPoints: ["description of friction point", ...]
126
+ },
127
+ // ... one for each persona
128
+ ]
129
+ }
130
+
131
+ PERSONA ORDER:
132
+ ${personaProfiles.map((p, i) => `${i + 1}. ${p.name} - ${p.description}`).join("\n")}
133
+
134
+ Begin with the first persona: ${personas[0]}
135
+ `,
136
+ }, null, 2),
137
+ },
138
+ ],
139
+ };
140
+ });
141
+ server.tool("compare_personas_complete", "Complete persona comparison by aggregating journey results. Call this after running all persona journeys via the bridge workflow.", {
142
+ url: z.string().url().describe("The URL that was tested"),
143
+ goal: z.string().describe("The goal that was attempted"),
144
+ journeyResults: z.array(z.object({
145
+ persona: z.string().describe("Persona name"),
146
+ goalAchieved: z.boolean().describe("Whether the goal was achieved"),
147
+ totalTime: z.number().describe("Total time in seconds"),
148
+ stepCount: z.number().describe("Number of steps taken"),
149
+ finalState: z.object({
150
+ patienceRemaining: z.number(),
151
+ frustrationLevel: z.number(),
152
+ confusionLevel: z.number(),
153
+ }).describe("Final cognitive state"),
154
+ abandonmentReason: z.enum(["patience", "frustration", "confusion", "timeout", "loop"]).nullable().describe("Why journey ended if not goal achieved"),
155
+ frictionPoints: z.array(z.string()).describe("List of friction point descriptions"),
156
+ })).describe("Results from each persona journey"),
157
+ }, async ({ url, goal, journeyResults }) => {
158
+ const startTime = Date.now();
159
+ const successfulResults = journeyResults.filter((r) => r.goalAchieved);
160
+ const failedResults = journeyResults.filter((r) => !r.goalAchieved);
161
+ const sortedByTime = [...successfulResults].sort((a, b) => a.totalTime - b.totalTime);
162
+ const sortedByFriction = [...journeyResults].sort((a, b) => b.frictionPoints.length - a.frictionPoints.length);
163
+ const allFrictionPoints = journeyResults.flatMap((r) => r.frictionPoints);
164
+ const frictionCounts = allFrictionPoints.reduce((acc, fp) => {
165
+ acc[fp] = (acc[fp] || 0) + 1;
166
+ return acc;
167
+ }, {});
168
+ const commonFriction = Object.entries(frictionCounts)
169
+ .filter(([_, count]) => count > 1)
170
+ .sort((a, b) => b[1] - a[1])
171
+ .slice(0, 5)
172
+ .map(([fp]) => fp);
173
+ const recommendations = [];
174
+ const abandonedByPatience = failedResults.filter((r) => r.abandonmentReason === "patience");
175
+ const abandonedByFrustration = failedResults.filter((r) => r.abandonmentReason === "frustration");
176
+ const abandonedByConfusion = failedResults.filter((r) => r.abandonmentReason === "confusion");
177
+ if (abandonedByPatience.length > 0) {
178
+ recommendations.push(`${abandonedByPatience.length} persona(s) abandoned due to PATIENCE exhaustion: ${abandonedByPatience.map((r) => r.persona).join(", ")} - consider shorter flows`);
179
+ }
180
+ if (abandonedByFrustration.length > 0) {
181
+ recommendations.push(`${abandonedByFrustration.length} persona(s) abandoned due to FRUSTRATION: ${abandonedByFrustration.map((r) => r.persona).join(", ")} - review error messages and feedback`);
182
+ }
183
+ if (abandonedByConfusion.length > 0) {
184
+ recommendations.push(`${abandonedByConfusion.length} persona(s) abandoned due to CONFUSION: ${abandonedByConfusion.map((r) => r.persona).join(", ")} - improve UI clarity and labeling`);
185
+ }
186
+ if (sortedByFriction[0]?.frictionPoints.length > 0) {
187
+ const worstPersona = sortedByFriction[0];
188
+ const avgFrustration = worstPersona.finalState.frustrationLevel;
189
+ recommendations.push(`"${worstPersona.persona}" experienced the most friction (${worstPersona.frictionPoints.length} points, ${Math.round(avgFrustration * 100)}% frustration)`);
190
+ }
191
+ if (commonFriction.length > 0) {
192
+ recommendations.push(`Common friction across personas: ${commonFriction.slice(0, 2).join("; ")}`);
193
+ }
194
+ if (recommendations.length === 0) {
195
+ recommendations.push("All personas completed the journey without significant cognitive barriers");
196
+ }
197
+ const avgTime = successfulResults.length > 0
198
+ ? successfulResults.reduce((sum, r) => sum + r.totalTime, 0) / successfulResults.length
199
+ : 0;
200
+ const comparison = {
201
+ url,
202
+ goal,
203
+ timestamp: new Date().toISOString(),
204
+ duration: Date.now() - startTime,
205
+ personas: journeyResults.map((r) => ({
206
+ persona: r.persona,
207
+ success: r.goalAchieved,
208
+ totalTime: r.totalTime * 1000,
209
+ stepCount: r.stepCount,
210
+ frictionCount: r.frictionPoints.length,
211
+ frictionPoints: r.frictionPoints,
212
+ cognitive: {
213
+ patienceRemaining: r.finalState.patienceRemaining,
214
+ frustrationLevel: r.finalState.frustrationLevel,
215
+ confusionLevel: r.finalState.confusionLevel,
216
+ abandonmentReason: r.abandonmentReason,
217
+ },
218
+ })),
219
+ summary: {
220
+ totalPersonas: journeyResults.length,
221
+ successCount: successfulResults.length,
222
+ failureCount: failedResults.length,
223
+ fastestPersona: sortedByTime[0]?.persona || "N/A",
224
+ slowestPersona: sortedByTime[sortedByTime.length - 1]?.persona || "N/A",
225
+ mostFriction: sortedByFriction[0]?.persona || "N/A",
226
+ leastFriction: sortedByFriction[sortedByFriction.length - 1]?.persona || "N/A",
227
+ avgCompletionTime: Math.round(avgTime * 1000),
228
+ commonFrictionPoints: commonFriction,
229
+ },
230
+ recommendations,
231
+ };
232
+ return {
233
+ content: [
234
+ {
235
+ type: "text",
236
+ text: JSON.stringify(comparison, null, 2),
237
+ },
238
+ ],
239
+ };
240
+ });
241
+ }
242
+ //# sourceMappingURL=persona-comparison-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persona-comparison-tools.js","sourceRoot":"","sources":["../../../src/mcp-tools/base/persona-comparison-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * CBrowser MCP Tools - Session 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 session tools (4 tools: save_session, load_session, list_sessions, delete_session)
10
+ */
11
+ export declare function registerSessionTools(server: McpServer, { getBrowser }: ToolRegistrationContext): void;
12
+ //# sourceMappingURL=session-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp-tools/base/session-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtE;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,EAAE,UAAU,EAAE,EAAE,uBAAuB,GACtC,IAAI,CA8EN"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * CBrowser MCP Tools - Session 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 session tools (4 tools: save_session, load_session, list_sessions, delete_session)
10
+ */
11
+ export function registerSessionTools(server, { getBrowser }) {
12
+ server.tool("save_session", "Save browser session (cookies, storage) for later use", {
13
+ name: z.string().describe("Name for the saved session"),
14
+ }, async ({ name }) => {
15
+ const b = await getBrowser();
16
+ await b.saveSession(name);
17
+ return {
18
+ content: [
19
+ {
20
+ type: "text",
21
+ text: JSON.stringify({ success: true, sessionName: name }, null, 2),
22
+ },
23
+ ],
24
+ };
25
+ });
26
+ server.tool("load_session", "Load a previously saved session", {
27
+ name: z.string().describe("Name of the session to load"),
28
+ }, async ({ name }) => {
29
+ const b = await getBrowser();
30
+ const result = await b.loadSession(name);
31
+ return {
32
+ content: [
33
+ {
34
+ type: "text",
35
+ text: JSON.stringify(result, null, 2),
36
+ },
37
+ ],
38
+ };
39
+ });
40
+ server.tool("list_sessions", "List all saved sessions with metadata (name, domain, cookies count, localStorage keys, created date, size)", {}, async () => {
41
+ const b = await getBrowser();
42
+ const sessions = b.listSessionsDetailed();
43
+ return {
44
+ content: [
45
+ {
46
+ type: "text",
47
+ text: JSON.stringify({ sessions }, null, 2),
48
+ },
49
+ ],
50
+ };
51
+ });
52
+ server.tool("delete_session", "Delete a saved session by name", {
53
+ name: z.string().describe("Name of the session to delete"),
54
+ }, async ({ name }) => {
55
+ const b = await getBrowser();
56
+ const deleted = b.deleteSession(name);
57
+ return {
58
+ content: [
59
+ {
60
+ type: "text",
61
+ text: JSON.stringify({ success: deleted, name, message: deleted ? `Session '${name}' deleted` : `Session '${name}' not found` }),
62
+ },
63
+ ],
64
+ };
65
+ });
66
+ }
67
+ //# sourceMappingURL=session-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-tools.js","sourceRoot":"","sources":["../../../src/mcp-tools/base/session-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAiB,EACjB,EAAE,UAAU,EAA2B;IAEvC,MAAM,CAAC,IAAI,CACT,cAAc,EACd,uDAAuD,EACvD;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;KACxD,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC;QAC7B,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACpE;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,iCAAiC,EACjC;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACzD,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iBACtC;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,4GAA4G,EAC5G,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,CAAC,CAAC,oBAAoB,EAAE,CAAC;QAC1C,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC5C;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,gCAAgC,EAChC;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KAC3D,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,WAAW,CAAC,CAAC,CAAC,YAAY,IAAI,aAAa,EAAE,CAAC;iBACjI;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * CBrowser MCP Tools - Testing 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 testing tools (5 tools: nl_test_file, nl_test_inline, repair_test, detect_flaky_tests, coverage_map)
10
+ */
11
+ export declare function registerTestingTools(server: McpServer): void;
12
+ //# sourceMappingURL=testing-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp-tools/base/testing-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAW7C;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2N5D"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * CBrowser MCP Tools - Testing 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 { runNLTestSuite, parseNLTestSuite, dryRunNLTestSuite, repairTest, detectFlakyTests, generateCoverageMap, } from "../../testing/index.js";
9
+ /**
10
+ * Register testing tools (5 tools: nl_test_file, nl_test_inline, repair_test, detect_flaky_tests, coverage_map)
11
+ */
12
+ export function registerTestingTools(server) {
13
+ server.tool("nl_test_file", "Run natural language test suite from a file. Returns step-level results with enriched error info, partial matches, and suggestions.", {
14
+ filepath: z.string().describe("Path to the test file"),
15
+ dryRun: z.boolean().optional().describe("Parse and display steps without executing"),
16
+ fuzzyMatch: z.boolean().optional().describe("Use case-insensitive fuzzy matching for assertions"),
17
+ }, async ({ filepath, dryRun, fuzzyMatch }) => {
18
+ const fs = await import("fs");
19
+ if (!fs.existsSync(filepath)) {
20
+ return { content: [{ type: "text", text: JSON.stringify({ error: `Test file not found: ${filepath}` }) }] };
21
+ }
22
+ const fileContent = fs.readFileSync(filepath, "utf-8");
23
+ const suiteName = filepath.split("/").pop()?.replace(/\.[^.]+$/, "") || "Test Suite";
24
+ const suite = parseNLTestSuite(fileContent, suiteName);
25
+ if (dryRun) {
26
+ const dryResult = dryRunNLTestSuite(suite);
27
+ return { content: [{ type: "text", text: JSON.stringify(dryResult, null, 2) }] };
28
+ }
29
+ const result = await runNLTestSuite(suite, { fuzzyMatch: fuzzyMatch || false });
30
+ return {
31
+ content: [
32
+ {
33
+ type: "text",
34
+ text: JSON.stringify({
35
+ name: result.name,
36
+ total: result.summary.total,
37
+ passed: result.summary.passed,
38
+ failed: result.summary.failed,
39
+ passRate: `${result.summary.passRate.toFixed(1)}%`,
40
+ totalSteps: result.summary.totalSteps,
41
+ passedSteps: result.summary.passedSteps,
42
+ failedSteps: result.summary.failedSteps,
43
+ stepPassRate: result.summary.stepPassRate ? `${result.summary.stepPassRate.toFixed(1)}%` : undefined,
44
+ duration: result.duration,
45
+ recommendations: result.recommendations,
46
+ testResults: result.testResults.map(t => ({
47
+ name: t.name,
48
+ passed: t.passed,
49
+ duration: t.duration,
50
+ error: t.error,
51
+ steps: t.stepResults.map(s => ({
52
+ instruction: s.instruction,
53
+ parsed: s.parsed,
54
+ passed: s.passed,
55
+ duration: s.duration,
56
+ error: s.error,
57
+ actualValue: s.actualValue,
58
+ })),
59
+ })),
60
+ }, null, 2),
61
+ },
62
+ ],
63
+ };
64
+ });
65
+ server.tool("nl_test_inline", "Run natural language tests from inline content. Returns step-level results with enriched error info, partial matches, and suggestions.", {
66
+ content: z.string().describe("Test content with instructions like 'go to https://...' and 'click login'"),
67
+ name: z.string().optional().describe("Name for the test suite"),
68
+ dryRun: z.boolean().optional().describe("Parse and display steps without executing"),
69
+ fuzzyMatch: z.boolean().optional().describe("Use case-insensitive fuzzy matching for assertions"),
70
+ }, async ({ content, name, dryRun, fuzzyMatch }) => {
71
+ const suite = parseNLTestSuite(content, name || "Inline Test");
72
+ if (dryRun) {
73
+ const dryResult = dryRunNLTestSuite(suite);
74
+ return { content: [{ type: "text", text: JSON.stringify(dryResult, null, 2) }] };
75
+ }
76
+ const result = await runNLTestSuite(suite, { fuzzyMatch: fuzzyMatch || false });
77
+ return {
78
+ content: [
79
+ {
80
+ type: "text",
81
+ text: JSON.stringify({
82
+ name: result.name,
83
+ total: result.summary.total,
84
+ passed: result.summary.passed,
85
+ failed: result.summary.failed,
86
+ passRate: `${result.summary.passRate.toFixed(1)}%`,
87
+ totalSteps: result.summary.totalSteps,
88
+ passedSteps: result.summary.passedSteps,
89
+ failedSteps: result.summary.failedSteps,
90
+ stepPassRate: result.summary.stepPassRate ? `${result.summary.stepPassRate.toFixed(1)}%` : undefined,
91
+ duration: result.duration,
92
+ recommendations: result.recommendations,
93
+ testResults: result.testResults.map(t => ({
94
+ name: t.name,
95
+ passed: t.passed,
96
+ duration: t.duration,
97
+ error: t.error,
98
+ steps: t.stepResults.map(s => ({
99
+ instruction: s.instruction,
100
+ parsed: s.parsed,
101
+ passed: s.passed,
102
+ duration: s.duration,
103
+ error: s.error,
104
+ actualValue: s.actualValue,
105
+ })),
106
+ })),
107
+ }, null, 2),
108
+ },
109
+ ],
110
+ };
111
+ });
112
+ server.tool("repair_test", "AI-powered test repair for broken tests", {
113
+ testName: z.string().describe("Name for the test"),
114
+ steps: z.array(z.string()).describe("Test step instructions"),
115
+ autoApply: z.boolean().optional().describe("Automatically apply repairs"),
116
+ }, async ({ testName, steps, autoApply }) => {
117
+ const testCase = {
118
+ name: testName,
119
+ steps: steps.map(instruction => ({
120
+ instruction,
121
+ action: "unknown",
122
+ })),
123
+ };
124
+ const result = await repairTest(testCase, { autoApply: autoApply || false });
125
+ return {
126
+ content: [
127
+ {
128
+ type: "text",
129
+ text: JSON.stringify({
130
+ originalTest: result.originalTest.name,
131
+ failedSteps: result.failedSteps,
132
+ repairedSteps: result.repairedSteps,
133
+ repairedTestPasses: result.repairedTestPasses,
134
+ repairs: result.failureAnalyses.map(a => ({
135
+ step: a.step.instruction,
136
+ error: a.error,
137
+ suggestion: a.suggestions[0]?.suggestedInstruction || "No suggestion",
138
+ })),
139
+ }, null, 2),
140
+ },
141
+ ],
142
+ };
143
+ });
144
+ server.tool("detect_flaky_tests", "Detect flaky/unreliable tests by running multiple times", {
145
+ testContent: z.string().describe("Test content to analyze"),
146
+ runs: z.number().optional().default(5).describe("Number of times to run each test"),
147
+ threshold: z.number().optional().default(20).describe("Flakiness threshold percentage"),
148
+ }, async ({ testContent, runs, threshold }) => {
149
+ const suite = parseNLTestSuite(testContent, "Flaky Test Analysis");
150
+ const result = await detectFlakyTests(suite, { runs, flakinessThreshold: threshold });
151
+ return {
152
+ content: [
153
+ {
154
+ type: "text",
155
+ text: JSON.stringify({
156
+ suiteName: result.suiteName,
157
+ totalTests: result.summary.totalTests,
158
+ stablePass: result.summary.stablePassTests,
159
+ stableFail: result.summary.stableFailTests,
160
+ flakyTests: result.summary.flakyTests,
161
+ overallFlakiness: `${result.summary.overallFlakinessScore.toFixed(1)}%`,
162
+ analyses: result.testAnalyses.map(a => ({
163
+ test: a.testName,
164
+ classification: a.classification,
165
+ passRate: `${((a.passCount / a.totalRuns) * 100).toFixed(0)}%`,
166
+ flakiness: `${a.flakinessScore}%`,
167
+ })),
168
+ }, null, 2),
169
+ },
170
+ ],
171
+ };
172
+ });
173
+ server.tool("coverage_map", "Generate test coverage map for a site", {
174
+ baseUrl: z.string().url().describe("Base URL to analyze"),
175
+ testFiles: z.array(z.string()).describe("Array of test file paths"),
176
+ maxPages: z.number().optional().default(100).describe("Maximum pages to crawl"),
177
+ }, async ({ baseUrl, testFiles, maxPages }) => {
178
+ const result = await generateCoverageMap(baseUrl, testFiles, { maxPages });
179
+ return {
180
+ content: [
181
+ {
182
+ type: "text",
183
+ text: JSON.stringify({
184
+ totalPages: result.sitePages.length,
185
+ testedPages: result.testedPages.length,
186
+ untestedPages: result.analysis.untestedPages,
187
+ overallCoverage: `${result.analysis.coveragePercent.toFixed(1)}%`,
188
+ gaps: result.gaps.slice(0, 10).map(g => ({
189
+ url: g.page.url,
190
+ priority: g.priority,
191
+ reason: g.reason,
192
+ })),
193
+ }, null, 2),
194
+ },
195
+ ],
196
+ };
197
+ });
198
+ }
199
+ //# sourceMappingURL=testing-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-tools.js","sourceRoot":"","sources":["../../../src/mcp-tools/base/testing-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * CBrowser MCP Tools - Values System Tools
3
+ * Schwartz's 10 Universal Values, Self-Determination Theory, Maslow
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
+ import type { McpServer } from "../types.js";
9
+ /**
10
+ * Register values system tools (6 tools)
11
+ */
12
+ export declare function registerValuesTools(server: McpServer): void;
13
+ //# sourceMappingURL=values-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp-tools/base/values-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQ7C;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsV3D"}