cbrowser 19.6.0 → 20.0.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.
Files changed (170) hide show
  1. package/README.md +292 -232
  2. package/THIRD_PARTY_LICENSES.md +416 -7
  3. package/dist/analysis/accessibility-empathy.d.ts.map +1 -1
  4. package/dist/analysis/accessibility-empathy.js +2 -0
  5. package/dist/analysis/accessibility-empathy.js.map +1 -1
  6. package/dist/analysis/competitive-benchmark.d.ts.map +1 -1
  7. package/dist/analysis/competitive-benchmark.js +70 -558
  8. package/dist/analysis/competitive-benchmark.js.map +1 -1
  9. package/dist/analysis/natural-language.d.ts.map +1 -1
  10. package/dist/analysis/natural-language.js +43 -0
  11. package/dist/analysis/natural-language.js.map +1 -1
  12. package/dist/analysis/persona-comparison.d.ts +7 -0
  13. package/dist/analysis/persona-comparison.d.ts.map +1 -1
  14. package/dist/analysis/persona-comparison.js +8 -1
  15. package/dist/analysis/persona-comparison.js.map +1 -1
  16. package/dist/browser-options.d.ts +23 -0
  17. package/dist/browser-options.d.ts.map +1 -0
  18. package/dist/browser-options.js +24 -0
  19. package/dist/browser-options.js.map +1 -0
  20. package/dist/browser.d.ts +36 -14
  21. package/dist/browser.d.ts.map +1 -1
  22. package/dist/browser.js +139 -196
  23. package/dist/browser.js.map +1 -1
  24. package/dist/cli-args.d.ts +9 -1
  25. package/dist/cli-args.d.ts.map +1 -1
  26. package/dist/cli-args.js +35 -7
  27. package/dist/cli-args.js.map +1 -1
  28. package/dist/cli-browser-flags.d.ts +33 -0
  29. package/dist/cli-browser-flags.d.ts.map +1 -0
  30. package/dist/cli-browser-flags.js +89 -0
  31. package/dist/cli-browser-flags.js.map +1 -0
  32. package/dist/cli.js +979 -401
  33. package/dist/cli.js.map +1 -1
  34. package/dist/cognitive/index.d.ts +0 -13
  35. package/dist/cognitive/index.d.ts.map +1 -1
  36. package/dist/cognitive/index.js +39 -15
  37. package/dist/cognitive/index.js.map +1 -1
  38. package/dist/config.d.ts.map +1 -1
  39. package/dist/config.js +16 -6
  40. package/dist/config.js.map +1 -1
  41. package/dist/daemon.d.ts +5 -4
  42. package/dist/daemon.d.ts.map +1 -1
  43. package/dist/daemon.js +87 -29
  44. package/dist/daemon.js.map +1 -1
  45. package/dist/devices.d.ts +20 -0
  46. package/dist/devices.d.ts.map +1 -1
  47. package/dist/devices.js +18 -0
  48. package/dist/devices.js.map +1 -1
  49. package/dist/help-client.d.ts +48 -0
  50. package/dist/help-client.d.ts.map +1 -0
  51. package/dist/help-client.js +96 -0
  52. package/dist/help-client.js.map +1 -0
  53. package/dist/mcp-server.d.ts.map +1 -1
  54. package/dist/mcp-server.js +165 -2281
  55. package/dist/mcp-server.js.map +1 -1
  56. package/dist/mcp-tools/base/advanced-interaction-tools.d.ts.map +1 -1
  57. package/dist/mcp-tools/base/advanced-interaction-tools.js +21 -21
  58. package/dist/mcp-tools/base/advanced-interaction-tools.js.map +1 -1
  59. package/dist/mcp-tools/base/assertion-tools.d.ts.map +1 -1
  60. package/dist/mcp-tools/base/assertion-tools.js +6 -3
  61. package/dist/mcp-tools/base/assertion-tools.js.map +1 -1
  62. package/dist/mcp-tools/base/audit-tools.d.ts.map +1 -1
  63. package/dist/mcp-tools/base/audit-tools.js +15 -4
  64. package/dist/mcp-tools/base/audit-tools.js.map +1 -1
  65. package/dist/mcp-tools/base/browser-state-tools.d.ts.map +1 -1
  66. package/dist/mcp-tools/base/browser-state-tools.js +33 -27
  67. package/dist/mcp-tools/base/browser-state-tools.js.map +1 -1
  68. package/dist/mcp-tools/base/bug-analysis-tools.d.ts.map +1 -1
  69. package/dist/mcp-tools/base/bug-analysis-tools.js +9 -2
  70. package/dist/mcp-tools/base/bug-analysis-tools.js.map +1 -1
  71. package/dist/mcp-tools/base/capture-tools.d.ts +60 -4
  72. package/dist/mcp-tools/base/capture-tools.d.ts.map +1 -1
  73. package/dist/mcp-tools/base/capture-tools.js +118 -14
  74. package/dist/mcp-tools/base/capture-tools.js.map +1 -1
  75. package/dist/mcp-tools/base/index.d.ts +6 -5
  76. package/dist/mcp-tools/base/index.d.ts.map +1 -1
  77. package/dist/mcp-tools/base/index.js +7 -6
  78. package/dist/mcp-tools/base/index.js.map +1 -1
  79. package/dist/mcp-tools/base/interaction-tools.d.ts.map +1 -1
  80. package/dist/mcp-tools/base/interaction-tools.js +20 -6
  81. package/dist/mcp-tools/base/interaction-tools.js.map +1 -1
  82. package/dist/mcp-tools/base/navigation-tools.d.ts +1 -1
  83. package/dist/mcp-tools/base/navigation-tools.d.ts.map +1 -1
  84. package/dist/mcp-tools/base/navigation-tools.js +83 -3
  85. package/dist/mcp-tools/base/navigation-tools.js.map +1 -1
  86. package/dist/mcp-tools/base/site-knowledge-tools.d.ts.map +1 -1
  87. package/dist/mcp-tools/base/site-knowledge-tools.js +11 -23
  88. package/dist/mcp-tools/base/site-knowledge-tools.js.map +1 -1
  89. package/dist/mcp-tools/base/visual-testing-tools.d.ts.map +1 -1
  90. package/dist/mcp-tools/base/visual-testing-tools.js +13 -3
  91. package/dist/mcp-tools/base/visual-testing-tools.js.map +1 -1
  92. package/dist/mcp-tools/enterprise-stubs.d.ts +2 -2
  93. package/dist/mcp-tools/enterprise-stubs.d.ts.map +1 -1
  94. package/dist/mcp-tools/enterprise-stubs.js +29 -16
  95. package/dist/mcp-tools/enterprise-stubs.js.map +1 -1
  96. package/dist/mcp-tools/index.d.ts +19 -14
  97. package/dist/mcp-tools/index.d.ts.map +1 -1
  98. package/dist/mcp-tools/index.js +2 -2
  99. package/dist/mcp-tools/index.js.map +1 -1
  100. package/dist/mcp-tools/red-zone-refusal.d.ts +33 -0
  101. package/dist/mcp-tools/red-zone-refusal.d.ts.map +1 -0
  102. package/dist/mcp-tools/red-zone-refusal.js +43 -0
  103. package/dist/mcp-tools/red-zone-refusal.js.map +1 -0
  104. package/dist/mcp-tools/tier-gate.js +1 -1
  105. package/dist/mcp-tools/tier-gate.js.map +1 -1
  106. package/dist/mcp-tools/tool-categories.d.ts.map +1 -1
  107. package/dist/mcp-tools/tool-categories.js +2 -0
  108. package/dist/mcp-tools/tool-categories.js.map +1 -1
  109. package/dist/output.d.ts.map +1 -1
  110. package/dist/output.js +18 -2
  111. package/dist/output.js.map +1 -1
  112. package/dist/performance/metrics.d.ts +8 -3
  113. package/dist/performance/metrics.d.ts.map +1 -1
  114. package/dist/performance/metrics.js +16 -5
  115. package/dist/performance/metrics.js.map +1 -1
  116. package/dist/recording/contact-sheet.js.map +1 -1
  117. package/dist/security/tool-permissions.d.ts.map +1 -1
  118. package/dist/security/tool-permissions.js +1 -0
  119. package/dist/security/tool-permissions.js.map +1 -1
  120. package/dist/testing/coverage.d.ts +2 -2
  121. package/dist/testing/coverage.d.ts.map +1 -1
  122. package/dist/testing/coverage.js +6 -2
  123. package/dist/testing/coverage.js.map +1 -1
  124. package/dist/testing/flaky-detection.d.ts +2 -2
  125. package/dist/testing/flaky-detection.d.ts.map +1 -1
  126. package/dist/testing/flaky-detection.js +11 -3
  127. package/dist/testing/flaky-detection.js.map +1 -1
  128. package/dist/testing/nl-test-suite.d.ts +13 -0
  129. package/dist/testing/nl-test-suite.d.ts.map +1 -1
  130. package/dist/testing/nl-test-suite.js +5 -1
  131. package/dist/testing/nl-test-suite.js.map +1 -1
  132. package/dist/testing/suite-results.d.ts +27 -0
  133. package/dist/testing/suite-results.d.ts.map +1 -0
  134. package/dist/testing/suite-results.js +54 -0
  135. package/dist/testing/suite-results.js.map +1 -0
  136. package/dist/testing/test-repair.d.ts +2 -2
  137. package/dist/testing/test-repair.d.ts.map +1 -1
  138. package/dist/testing/test-repair.js +6 -2
  139. package/dist/testing/test-repair.js.map +1 -1
  140. package/dist/types.d.ts +61 -7
  141. package/dist/types.d.ts.map +1 -1
  142. package/dist/types.js +17 -4
  143. package/dist/types.js.map +1 -1
  144. package/dist/visual/ab-comparison.d.ts.map +1 -1
  145. package/dist/visual/ab-comparison.js +7 -2
  146. package/dist/visual/ab-comparison.js.map +1 -1
  147. package/dist/visual/cross-browser.d.ts +7 -2
  148. package/dist/visual/cross-browser.d.ts.map +1 -1
  149. package/dist/visual/cross-browser.js +33 -5
  150. package/dist/visual/cross-browser.js.map +1 -1
  151. package/dist/visual/distance-metrics.d.ts +7 -0
  152. package/dist/visual/distance-metrics.d.ts.map +1 -1
  153. package/dist/visual/distance-metrics.js.map +1 -1
  154. package/dist/visual/heatmap-overlay.js.map +1 -1
  155. package/dist/visual/llm-relevance.d.ts.map +1 -1
  156. package/dist/visual/llm-relevance.js.map +1 -1
  157. package/dist/visual/regression.d.ts +17 -7
  158. package/dist/visual/regression.d.ts.map +1 -1
  159. package/dist/visual/regression.js +77 -38
  160. package/dist/visual/regression.js.map +1 -1
  161. package/dist/visual/responsive.d.ts +22 -0
  162. package/dist/visual/responsive.d.ts.map +1 -1
  163. package/dist/visual/responsive.js +44 -7
  164. package/dist/visual/responsive.js.map +1 -1
  165. package/dist/visual/visual-overlays.js.map +1 -1
  166. package/dist/webhooks.d.ts +67 -0
  167. package/dist/webhooks.d.ts.map +1 -0
  168. package/dist/webhooks.js +128 -0
  169. package/dist/webhooks.js.map +1 -0
  170. package/package.json +23 -24
@@ -0,0 +1,128 @@
1
+ /**
2
+ * CBrowser - Cognitive Browser Automation
3
+ * Copyright 2026 Alexandria Eden alexandria.shai.eden@gmail.com
4
+ * Learn more at https://cbrowser.ai - MIT License
5
+ */
6
+ /**
7
+ * Webhooks configured with `cbrowser webhook add`, and the sender.
8
+ *
9
+ * `webhook add` wrote webhooks.json and nothing ever read it except `webhook
10
+ * list` and `webhook test`: no command sent test.fail or journey.complete, so a
11
+ * configured webhook never fired (audit O17, 2026-10-21). test-suite now sends
12
+ * test.pass or test.fail once per run, and cognitive-journey sends
13
+ * journey.complete once per journey. Events nothing sends are refused at
14
+ * `webhook add` rather than stored to wait forever.
15
+ *
16
+ * Sending never fails the run it reports on: one POST per webhook, JSON, a
17
+ * 10 s timeout, no retries, and a failure is a stderr warning that names the
18
+ * webhook, never its URL (a Slack or Discord URL is itself the credential).
19
+ */
20
+ import { existsSync, readFileSync } from "node:fs";
21
+ import { join } from "node:path";
22
+ /** Events a command sends: test.pass/test.fail per test-suite run, journey.complete per cognitive journey. */
23
+ export const SENT_WEBHOOK_EVENTS = ["test.pass", "test.fail", "journey.complete"];
24
+ export const WEBHOOK_FORMATS = ["generic", "slack", "discord"];
25
+ export const WEBHOOK_TIMEOUT_MS = 10_000;
26
+ export function webhooksPath(dataDir) {
27
+ return join(dataDir, "webhooks.json");
28
+ }
29
+ /** The configured webhooks; none when the file is missing or unreadable. */
30
+ export function loadWebhooks(dataDir) {
31
+ const path = webhooksPath(dataDir);
32
+ if (!existsSync(path))
33
+ return [];
34
+ try {
35
+ const parsed = JSON.parse(readFileSync(path, "utf-8"));
36
+ return Array.isArray(parsed) ? parsed : [];
37
+ }
38
+ catch {
39
+ return [];
40
+ }
41
+ }
42
+ /**
43
+ * Why a URL cannot be a webhook, or null when it can. Only http and https, and
44
+ * no user name or password in the URL: those would be sent on every event and
45
+ * printed by `webhook list`.
46
+ */
47
+ export function webhookUrlProblem(url) {
48
+ let parsed;
49
+ try {
50
+ parsed = new URL(url);
51
+ }
52
+ catch {
53
+ return `"${url}" is not a URL`;
54
+ }
55
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
56
+ return `webhook URLs must be http or https, not ${parsed.protocol.replace(/:$/, "")}`;
57
+ }
58
+ if (parsed.username || parsed.password) {
59
+ return "a webhook URL must not carry a user name or password";
60
+ }
61
+ return null;
62
+ }
63
+ function isJourney(p) {
64
+ return "goalAchieved" in p;
65
+ }
66
+ /** The request body for one webhook format. */
67
+ export function webhookBody(format, event, run, timestamp) {
68
+ if (isJourney(run)) {
69
+ const text = `CBrowser journey "${run.goal}" as ${run.persona}: `
70
+ + (run.goalAchieved ? "goal achieved" : `abandoned${run.abandonmentReason ? ` (${run.abandonmentReason})` : ""}`)
71
+ + ` in ${run.stepCount} steps`;
72
+ if (format === "slack")
73
+ return { text };
74
+ if (format === "discord")
75
+ return { content: text };
76
+ return { event, ...run, timestamp };
77
+ }
78
+ const { suite, summary, failedTests } = run;
79
+ const text = `CBrowser test-suite "${suite}": ${summary.passed}/${summary.total} passed`
80
+ + (failedTests.length > 0 ? `. Failed: ${failedTests.map((t) => t.name).join(", ")}` : "");
81
+ if (format === "slack")
82
+ return { text };
83
+ if (format === "discord")
84
+ return { content: text };
85
+ return { event, suite, summary, failedTests, timestamp };
86
+ }
87
+ /**
88
+ * POST the event to every webhook subscribed to it. Never throws: each failure
89
+ * is collected and, unless `quiet`, printed to stderr as a warning.
90
+ */
91
+ export async function sendWebhookEvent(dataDir, event, run, options = {}) {
92
+ const result = { sent: [], failed: [] };
93
+ const timestamp = new Date().toISOString();
94
+ for (const hook of loadWebhooks(dataDir)) {
95
+ if (!Array.isArray(hook.events) || !hook.events.includes(event))
96
+ continue;
97
+ const problem = typeof hook.url === "string" ? webhookUrlProblem(hook.url) : "it has no URL";
98
+ let reason = problem;
99
+ if (!problem) {
100
+ try {
101
+ const response = await fetch(hook.url, {
102
+ method: "POST",
103
+ headers: { "Content-Type": "application/json" },
104
+ body: JSON.stringify(webhookBody(hook.format, event, run, timestamp)),
105
+ redirect: "error",
106
+ signal: AbortSignal.timeout(options.timeoutMs ?? WEBHOOK_TIMEOUT_MS),
107
+ });
108
+ reason = response.ok ? null : `HTTP ${response.status}`;
109
+ }
110
+ catch (e) {
111
+ const err = e;
112
+ reason = err.name === "TimeoutError"
113
+ ? `no answer in ${(options.timeoutMs ?? WEBHOOK_TIMEOUT_MS) / 1000}s`
114
+ : err.message.split(hook.url).join("<url>");
115
+ }
116
+ }
117
+ if (reason === null) {
118
+ result.sent.push(hook.name);
119
+ }
120
+ else {
121
+ result.failed.push({ name: hook.name, reason });
122
+ if (!options.quiet)
123
+ console.error(`Warning: webhook "${hook.name}" (${event}) was not delivered: ${reason}`);
124
+ }
125
+ }
126
+ return result;
127
+ }
128
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cbrowser",
3
- "version": "19.6.0",
3
+ "version": "20.0.0",
4
4
  "type": "module",
5
5
  "description": "Cognitive browser automation that thinks like your users—and helps AI agents navigate too. Simulate real user cognition with abandonment detection, constitutional safety, chaos engineering, and UX friction discovery. Sites that pass CBrowser's cognitive tests are easier for both humans and AI agents to navigate.",
6
6
  "main": "dist/index.js",
@@ -126,35 +126,37 @@
126
126
  },
127
127
  "homepage": "https://github.com/alexandriashai/cbrowser#readme",
128
128
  "engines": {
129
- "node": ">=18.0.0"
129
+ "node": ">=20.9.0"
130
130
  },
131
131
  "dependencies": {
132
- "@anthropic-ai/sdk": "^0.32.1",
132
+ "@anthropic-ai/sdk": "^1.0.0",
133
133
  "@mcp-ui/server": "^6.1.0",
134
- "@modelcontextprotocol/ext-apps": "^1.7.5",
135
- "@modelcontextprotocol/sdk": "^1.25.3",
134
+ "@modelcontextprotocol/ext-apps": "^2.0.3",
135
+ "@modelcontextprotocol/sdk": "^1.32.1",
136
136
  "@types/express": "^5.0.6",
137
- "express": "^5.2.1",
138
- "jose": "^6.1.3",
139
- "mcp-guardian": "^2.2.1",
140
- "playwright": "^1.58.2",
141
- "sharp": "^0.34.5",
142
- "zod": "^4.3.6"
137
+ "express": "^5.3.0",
138
+ "jose": "^6.2.13",
139
+ "mcp-guardian": "^2.4.0",
140
+ "playwright": "^1.64.1",
141
+ "sharp": "^0.35.5",
142
+ "zod": "^4.6.7"
143
143
  },
144
144
  "devDependencies": {
145
- "@commitlint/cli": "^20.4.1",
146
- "@commitlint/config-conventional": "^19.0.0",
147
- "@release-it/conventional-changelog": "^10.0.5",
145
+ "@commitlint/cli": "^21.2.4",
146
+ "@commitlint/config-conventional": "^21.2.4",
147
+ "@eslint/js": "^10.0.1",
148
+ "@release-it/conventional-changelog": "^12.0.2",
148
149
  "@types/node": "^20.10.0",
149
- "@typescript-eslint/eslint-plugin": "^6.13.0",
150
- "@typescript-eslint/parser": "^6.13.0",
151
- "eslint": "^8.55.0",
150
+ "@typescript-eslint/eslint-plugin": "^8.72.0",
151
+ "@typescript-eslint/parser": "^8.72.0",
152
+ "conventional-changelog-conventionalcommits": "^10.4.1",
153
+ "eslint": "^10.13.0",
152
154
  "fast-check": "^4.9.0",
153
155
  "husky": "^9.0.0",
154
- "lint-staged": "^16.2.7",
155
- "release-it": "^19.2.4",
156
+ "lint-staged": "^17.6.0",
157
+ "release-it": "^21.1.1",
156
158
  "typedoc": "^0.28.16",
157
- "typescript": "^5.3.0",
159
+ "typescript": "^6.0.3",
158
160
  "yaml": "^2.9.0"
159
161
  },
160
162
  "lint-staged": {
@@ -169,8 +171,5 @@
169
171
  "README.md",
170
172
  "LICENSE",
171
173
  "THIRD_PARTY_LICENSES.md"
172
- ],
173
- "overrides": {
174
- "conventional-changelog-conventionalcommits": "8.0.0"
175
- }
174
+ ]
176
175
  }