cbrowser 19.1.5 → 19.1.7

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 (100) hide show
  1. package/dist/analysis/accessibility-empathy.d.ts.map +1 -1
  2. package/dist/analysis/accessibility-empathy.js +71 -4
  3. package/dist/analysis/accessibility-empathy.js.map +1 -1
  4. package/dist/analysis/agent-ready-audit.d.ts.map +1 -1
  5. package/dist/analysis/agent-ready-audit.js +318 -68
  6. package/dist/analysis/agent-ready-audit.js.map +1 -1
  7. package/dist/analysis/natural-language.d.ts.map +1 -1
  8. package/dist/analysis/natural-language.js +3 -1
  9. package/dist/analysis/natural-language.js.map +1 -1
  10. package/dist/browser.d.ts +72 -8
  11. package/dist/browser.d.ts.map +1 -1
  12. package/dist/browser.js +146 -120
  13. package/dist/browser.js.map +1 -1
  14. package/dist/charge-scope.d.ts +20 -0
  15. package/dist/charge-scope.d.ts.map +1 -0
  16. package/dist/charge-scope.js +46 -0
  17. package/dist/charge-scope.js.map +1 -0
  18. package/dist/mcp-server-remote.d.ts.map +1 -1
  19. package/dist/mcp-server-remote.js +34 -3
  20. package/dist/mcp-server-remote.js.map +1 -1
  21. package/dist/mcp-server.d.ts.map +1 -1
  22. package/dist/mcp-server.js +33 -44
  23. package/dist/mcp-server.js.map +1 -1
  24. package/dist/mcp-tools/base/audit-tools.d.ts.map +1 -1
  25. package/dist/mcp-tools/base/audit-tools.js +6 -1
  26. package/dist/mcp-tools/base/audit-tools.js.map +1 -1
  27. package/dist/mcp-tools/base/browser-management-tools.d.ts +11 -0
  28. package/dist/mcp-tools/base/browser-management-tools.d.ts.map +1 -1
  29. package/dist/mcp-tools/base/browser-management-tools.js +27 -6
  30. package/dist/mcp-tools/base/browser-management-tools.js.map +1 -1
  31. package/dist/mcp-tools/base/browser-state-tools.js +3 -3
  32. package/dist/mcp-tools/base/browser-state-tools.js.map +1 -1
  33. package/dist/mcp-tools/base/capture-tools.d.ts.map +1 -1
  34. package/dist/mcp-tools/base/capture-tools.js +3 -1
  35. package/dist/mcp-tools/base/capture-tools.js.map +1 -1
  36. package/dist/mcp-tools/base/cognitive-tools.d.ts.map +1 -1
  37. package/dist/mcp-tools/base/cognitive-tools.js +6 -37
  38. package/dist/mcp-tools/base/cognitive-tools.js.map +1 -1
  39. package/dist/mcp-tools/base/extraction-tools.d.ts.map +1 -1
  40. package/dist/mcp-tools/base/extraction-tools.js +6 -5
  41. package/dist/mcp-tools/base/extraction-tools.js.map +1 -1
  42. package/dist/mcp-tools/base/gif-tools.d.ts.map +1 -1
  43. package/dist/mcp-tools/base/gif-tools.js +2 -0
  44. package/dist/mcp-tools/base/gif-tools.js.map +1 -1
  45. package/dist/mcp-tools/base/interaction-tools.d.ts.map +1 -1
  46. package/dist/mcp-tools/base/interaction-tools.js +1 -0
  47. package/dist/mcp-tools/base/interaction-tools.js.map +1 -1
  48. package/dist/mcp-tools/base/llms-txt-tools.d.ts.map +1 -1
  49. package/dist/mcp-tools/base/llms-txt-tools.js +1 -0
  50. package/dist/mcp-tools/base/llms-txt-tools.js.map +1 -1
  51. package/dist/mcp-tools/base/marketing-tools.d.ts.map +1 -1
  52. package/dist/mcp-tools/base/marketing-tools.js +4 -0
  53. package/dist/mcp-tools/base/marketing-tools.js.map +1 -1
  54. package/dist/mcp-tools/base/navigation-tools.d.ts.map +1 -1
  55. package/dist/mcp-tools/base/navigation-tools.js +2 -1
  56. package/dist/mcp-tools/base/navigation-tools.js.map +1 -1
  57. package/dist/mcp-tools/base/persona-comparison-tools.d.ts.map +1 -1
  58. package/dist/mcp-tools/base/persona-comparison-tools.js +2 -0
  59. package/dist/mcp-tools/base/persona-comparison-tools.js.map +1 -1
  60. package/dist/mcp-tools/base/security-tools.d.ts.map +1 -1
  61. package/dist/mcp-tools/base/security-tools.js +2 -0
  62. package/dist/mcp-tools/base/security-tools.js.map +1 -1
  63. package/dist/mcp-tools/base/site-knowledge-tools.d.ts.map +1 -1
  64. package/dist/mcp-tools/base/site-knowledge-tools.js +9 -1
  65. package/dist/mcp-tools/base/site-knowledge-tools.js.map +1 -1
  66. package/dist/mcp-tools/base/testing-tools.js +1 -1
  67. package/dist/mcp-tools/base/testing-tools.js.map +1 -1
  68. package/dist/mcp-tools/base/values-tools.d.ts.map +1 -1
  69. package/dist/mcp-tools/base/values-tools.js +2 -0
  70. package/dist/mcp-tools/base/values-tools.js.map +1 -1
  71. package/dist/mcp-tools/credit-refund.d.ts +20 -0
  72. package/dist/mcp-tools/credit-refund.d.ts.map +1 -0
  73. package/dist/mcp-tools/credit-refund.js +37 -0
  74. package/dist/mcp-tools/credit-refund.js.map +1 -0
  75. package/dist/mcp-tools/persona-creation-tools.d.ts.map +1 -1
  76. package/dist/mcp-tools/persona-creation-tools.js +2 -0
  77. package/dist/mcp-tools/persona-creation-tools.js.map +1 -1
  78. package/dist/mcp-tools/persona-lifecycle-tools.js +6 -6
  79. package/dist/mcp-tools/persona-lifecycle-tools.js.map +1 -1
  80. package/dist/mcp-tools/screenshot-utils.d.ts +15 -0
  81. package/dist/mcp-tools/screenshot-utils.d.ts.map +1 -1
  82. package/dist/mcp-tools/screenshot-utils.js +18 -0
  83. package/dist/mcp-tools/screenshot-utils.js.map +1 -1
  84. package/dist/mcp-tools/tier-gate.d.ts.map +1 -1
  85. package/dist/mcp-tools/tier-gate.js +25 -2
  86. package/dist/mcp-tools/tier-gate.js.map +1 -1
  87. package/dist/personas.d.ts +19 -0
  88. package/dist/personas.d.ts.map +1 -1
  89. package/dist/personas.js +79 -0
  90. package/dist/personas.js.map +1 -1
  91. package/dist/remediation/patch-generator.d.ts.map +1 -1
  92. package/dist/remediation/patch-generator.js +15 -18
  93. package/dist/remediation/patch-generator.js.map +1 -1
  94. package/dist/types.d.ts +12 -0
  95. package/dist/types.d.ts.map +1 -1
  96. package/dist/types.js.map +1 -1
  97. package/dist/visual/perceptual-transport.d.ts.map +1 -1
  98. package/dist/visual/perceptual-transport.js +10 -2
  99. package/dist/visual/perceptual-transport.js.map +1 -1
  100. package/package.json +1 -1
@@ -24,6 +24,7 @@ import { registerPersonaComparisonTools } from "./mcp-tools/base/persona-compari
24
24
  import { registerPersonaCreationTools } from "./mcp-tools/persona-creation-tools.js";
25
25
  import { registerPersonaLifecycleTools } from "./mcp-tools/persona-lifecycle-tools.js";
26
26
  import { registerUiResources } from "./mcp-tools/ui-resources.js";
27
+ import { countRegisteredTools } from "./mcp-tools/base/browser-management-tools.js";
27
28
  import { applySecurityLayer } from "./mcp-tools/security-layer.js";
28
29
  // Visual module imports
29
30
  import { runVisualRegression, runCrossBrowserTest, runResponsiveTest, runABComparison, crossBrowserDiff, captureVisualBaseline, listVisualBaselines, } from "./visual/index.js";
@@ -31,7 +32,7 @@ import { runVisualRegression, runCrossBrowserTest, runResponsiveTest, runABCompa
31
32
  import { runNLTestSuite, parseNLTestSuite, dryRunNLTestSuite, repairTest, detectFlakyTests, generateCoverageMap, } from "./testing/index.js";
32
33
  // Analysis module imports
33
34
  import { huntBugs, runChaosTest, findElementByIntent, runAgentReadyAudit, runCompetitiveBenchmark, } from "./analysis/index.js";
34
- import { listAccessibilityPersonas, getAccessibilityPersona } from "./personas.js";
35
+ import { listAccessibilityPersonas, getAccessibilityPersona, describeAccessibilityPersona } from "./personas.js";
35
36
  // Persona imports for cognitive journey
36
37
  import { getPersona, getAnyPersona, listPersonas, getCognitiveProfile, createCognitivePersona, listEmotionalPersonas, getEmotionalPersona, isAgentPersonaObject, } from "./personas.js";
37
38
  // Emotional state functions (v13.1.0)
@@ -665,6 +666,7 @@ async function registerCBrowserTools() {
665
666
  }
666
667
  catch (error) {
667
668
  return {
669
+ isError: true,
668
670
  content: [{
669
671
  type: "text",
670
672
  text: JSON.stringify({
@@ -743,6 +745,7 @@ async function registerCBrowserTools() {
743
745
  }
744
746
  catch (error) {
745
747
  return {
748
+ isError: true,
746
749
  content: [{
747
750
  type: "text",
748
751
  text: JSON.stringify({
@@ -762,6 +765,7 @@ async function registerCBrowserTools() {
762
765
  }
763
766
  catch (error) {
764
767
  return {
768
+ isError: true,
765
769
  content: [{
766
770
  type: "text",
767
771
  text: JSON.stringify({
@@ -1129,7 +1133,7 @@ async function registerCBrowserTools() {
1129
1133
  }, async ({ filepath, dryRun, fuzzyMatch }) => {
1130
1134
  const fs = await import("fs");
1131
1135
  if (!fs.existsSync(filepath)) {
1132
- return { content: [{ type: "text", text: JSON.stringify({ error: `Test file not found: ${filepath}` }) }] };
1136
+ return { isError: true, content: [{ type: "text", text: JSON.stringify({ error: `Test file not found: ${filepath}` }) }] };
1133
1137
  }
1134
1138
  const fileContent = fs.readFileSync(filepath, "utf-8");
1135
1139
  const suiteName = filepath.split("/").pop()?.replace(/\.[^.]+$/, "") || "Test Suite";
@@ -1486,6 +1490,7 @@ async function registerCBrowserTools() {
1486
1490
  // v17.0.0: Check for agent personas - cognitive journeys don't support them yet
1487
1491
  if (existingPersona && isAgentPersonaObject(existingPersona)) {
1488
1492
  return {
1493
+ isError: true,
1489
1494
  content: [{
1490
1495
  type: "text",
1491
1496
  text: JSON.stringify({
@@ -1836,43 +1841,11 @@ Begin the simulation now. Narrate your thoughts as this persona.
1836
1841
  const p = getAccessibilityPersona(name);
1837
1842
  if (!p)
1838
1843
  return null;
1839
- // v16.11.0: Compute disabilityType and barrierTypes from accessibilityTraits
1840
- const traits = p.accessibilityTraits;
1841
- let disabilityType = "General accessibility";
1842
- const barrierTypes = [];
1843
- if (traits?.tremor) {
1844
- disabilityType = "Motor impairment (tremor)";
1845
- barrierTypes.push("motor_precision", "touch_target");
1846
- }
1847
- if (traits?.visionLevel !== undefined && traits.visionLevel < 0.5) {
1848
- disabilityType = "Low vision";
1849
- barrierTypes.push("visual_clarity", "contrast");
1850
- }
1851
- if (traits?.colorBlindness) {
1852
- disabilityType = `Color blindness (${traits.colorBlindness})`;
1853
- barrierTypes.push("sensory");
1854
- }
1855
- if (traits?.processingSpeed !== undefined && traits.processingSpeed < 0.6) {
1856
- disabilityType = "Cognitive (Processing)";
1857
- barrierTypes.push("cognitive_load", "temporal");
1858
- }
1859
- if (traits?.attentionSpan !== undefined && traits.attentionSpan < 0.5) {
1860
- if (!disabilityType.includes("Cognitive")) {
1861
- disabilityType = "Cognitive (ADHD/Attention)";
1862
- }
1863
- barrierTypes.push("cognitive_load");
1864
- }
1865
- // Name-based fallback
1866
- if (disabilityType === "General accessibility") {
1867
- if (p.name.includes("deaf") || p.name.includes("hearing"))
1868
- disabilityType = "Hearing impairment";
1869
- else if (p.name.includes("motor"))
1870
- disabilityType = "Motor impairment";
1871
- else if (p.name.includes("vision") || p.name.includes("blind"))
1872
- disabilityType = "Vision impairment";
1873
- else if (p.name.includes("cognitive") || p.name.includes("adhd"))
1874
- disabilityType = "Cognitive";
1875
- }
1844
+ // Shared with the remote roster (personas.ts); a declared label wins
1845
+ // over inference. This copy and that one were identical inference
1846
+ // blocks, so a fix to one could only ever reach half the users.
1847
+ // (2026-10-07)
1848
+ const { disabilityType, barrierTypes } = describeAccessibilityPersona(p);
1876
1849
  // v16.12.0: Include Schwartz values for accessibility personas
1877
1850
  const values = resolveValuesForPersona(p.name);
1878
1851
  return {
@@ -1882,7 +1855,7 @@ Begin the simulation now. Narrate your thoughts as this persona.
1882
1855
  disabilityType,
1883
1856
  demographics: p.demographics,
1884
1857
  cognitiveTraits: p.cognitiveTraits || {},
1885
- barrierTypes: [...new Set(barrierTypes)], // Deduplicate
1858
+ barrierTypes,
1886
1859
  values: values ? {
1887
1860
  schwartz: {
1888
1861
  selfDirection: values.selfDirection,
@@ -1966,6 +1939,7 @@ Begin the simulation now. Narrate your thoughts as this persona.
1966
1939
  const session = comparisonSessions.get(sessionId);
1967
1940
  if (!session) {
1968
1941
  return {
1942
+ isError: true,
1969
1943
  content: [{ type: "text", text: JSON.stringify({ error: "Session not found", sessionId }) }],
1970
1944
  };
1971
1945
  }
@@ -2016,11 +1990,13 @@ Begin the simulation now. Narrate your thoughts as this persona.
2016
1990
  const session = comparisonSessions.get(sessionId);
2017
1991
  if (!session) {
2018
1992
  return {
1993
+ isError: true,
2019
1994
  content: [{ type: "text", text: JSON.stringify({ error: "Session not found", sessionId }) }],
2020
1995
  };
2021
1996
  }
2022
1997
  if (session.results.length === 0) {
2023
1998
  return {
1999
+ isError: true,
2024
2000
  content: [{ type: "text", text: JSON.stringify({ error: "No results recorded yet", sessionId }) }],
2025
2001
  };
2026
2002
  }
@@ -2137,8 +2113,11 @@ Begin the simulation now. Narrate your thoughts as this persona.
2137
2113
  accessibilityTraits: persona.accessibilityTraits,
2138
2114
  cognitiveTraits: persona.cognitiveTraits,
2139
2115
  };
2140
- // Compute disability type from traits
2141
- sessionPersona.disabilityType = getDisabilityTypeFromPersona(sessionPersona);
2116
+ // A declared label wins; traits are inferred only for personas that
2117
+ // declare none. Inferring here gave dyslexic-user "Cognitive
2118
+ // (ADHD/Memory)" in this session and "Cognitive (Processing)" in the
2119
+ // roster. (2026-10-07)
2120
+ sessionPersona.disabilityType = persona.disabilityType ?? getDisabilityTypeFromPersona(sessionPersona);
2142
2121
  return sessionPersona;
2143
2122
  });
2144
2123
  // Store session
@@ -2198,6 +2177,7 @@ Begin the simulation now. Narrate your thoughts as this persona.
2198
2177
  const session = empathyAuditSessions.get(sessionId);
2199
2178
  if (!session) {
2200
2179
  return {
2180
+ isError: true,
2201
2181
  content: [{ type: "text", text: JSON.stringify({ error: "Session not found. Call empathy_audit_init first." }) }],
2202
2182
  };
2203
2183
  }
@@ -2247,6 +2227,7 @@ Begin the simulation now. Narrate your thoughts as this persona.
2247
2227
  const session = empathyAuditSessions.get(sessionId);
2248
2228
  if (!session) {
2249
2229
  return {
2230
+ isError: true,
2250
2231
  content: [{ type: "text", text: JSON.stringify({ error: "Session not found." }) }],
2251
2232
  };
2252
2233
  }
@@ -2301,11 +2282,13 @@ Begin the simulation now. Narrate your thoughts as this persona.
2301
2282
  const session = empathyAuditSessions.get(sessionId);
2302
2283
  if (!session) {
2303
2284
  return {
2285
+ isError: true,
2304
2286
  content: [{ type: "text", text: JSON.stringify({ error: "Session not found." }) }],
2305
2287
  };
2306
2288
  }
2307
2289
  if (session.personaResults.length === 0) {
2308
2290
  return {
2291
+ isError: true,
2309
2292
  content: [{ type: "text", text: JSON.stringify({ error: "No persona results recorded. Complete at least one persona journey first." }) }],
2310
2293
  };
2311
2294
  }
@@ -2562,8 +2545,12 @@ Begin the simulation now. Narrate your thoughts as this persona.
2562
2545
  // Diagnostics Tools
2563
2546
  // =========================================================================
2564
2547
  server.tool("status", "Get CBrowser environment status and diagnostics including data directories, installed browsers, configuration, self-healing cache statistics, and MCP tool count", {}, async () => {
2565
- // v18.22.0: Include tool count for self-diagnosis of tool discrepancies
2566
- const info = await getStatusInfo(VERSION, collectedTools.length);
2548
+ // v18.22.0: Include tool count for self-diagnosis of tool discrepancies.
2549
+ // collectedTools sees only server.tool(...) calls, so every family this
2550
+ // server registers through registerTool (empathy_audit, values, persona
2551
+ // comparison/creation/lifecycle) was missing: 55 reported, 82 listed.
2552
+ // Count what tools/list actually serves. (2026-10-07)
2553
+ const info = await getStatusInfo(VERSION, countRegisteredTools(server) ?? collectedTools.length);
2567
2554
  return {
2568
2555
  content: [
2569
2556
  {
@@ -2630,6 +2617,7 @@ Begin the simulation now. Narrate your thoughts as this persona.
2630
2617
  const personaData = getPersona(persona);
2631
2618
  if (!personaData) {
2632
2619
  return {
2620
+ isError: true,
2633
2621
  content: [{ type: "text", text: JSON.stringify({ error: `Persona not found: ${persona}` }) }],
2634
2622
  };
2635
2623
  }
@@ -2663,6 +2651,7 @@ Begin the simulation now. Narrate your thoughts as this persona.
2663
2651
  const personaData = getPersona(persona);
2664
2652
  if (!personaData) {
2665
2653
  return {
2654
+ isError: true,
2666
2655
  content: [{ type: "text", text: JSON.stringify({ error: `Persona not found: ${persona}` }) }],
2667
2656
  };
2668
2657
  }