cbrowser 19.5.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 (187) hide show
  1. package/README.md +292 -232
  2. package/THIRD_PARTY_LICENSES.md +455 -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 +172 -202
  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 +1058 -478
  33. package/dist/cli.js.map +1 -1
  34. package/dist/cognitive/index.d.ts +5 -13
  35. package/dist/cognitive/index.d.ts.map +1 -1
  36. package/dist/cognitive/index.js +44 -15
  37. package/dist/cognitive/index.js.map +1 -1
  38. package/dist/config.d.ts +9 -0
  39. package/dist/config.d.ts.map +1 -1
  40. package/dist/config.js +16 -6
  41. package/dist/config.js.map +1 -1
  42. package/dist/daemon.d.ts +9 -5
  43. package/dist/daemon.d.ts.map +1 -1
  44. package/dist/daemon.js +102 -36
  45. package/dist/daemon.js.map +1 -1
  46. package/dist/device-names.d.ts +10 -0
  47. package/dist/device-names.d.ts.map +1 -0
  48. package/dist/device-names.js +16 -0
  49. package/dist/device-names.js.map +1 -0
  50. package/dist/device-presets-devtools.d.ts +3 -0
  51. package/dist/device-presets-devtools.d.ts.map +1 -0
  52. package/dist/device-presets-devtools.js +823 -0
  53. package/dist/device-presets-devtools.js.map +1 -0
  54. package/dist/devices.d.ts +35 -0
  55. package/dist/devices.d.ts.map +1 -0
  56. package/dist/devices.js +214 -0
  57. package/dist/devices.js.map +1 -0
  58. package/dist/eval-script.d.ts +29 -0
  59. package/dist/eval-script.d.ts.map +1 -0
  60. package/dist/eval-script.js +46 -0
  61. package/dist/eval-script.js.map +1 -0
  62. package/dist/help-client.d.ts +48 -0
  63. package/dist/help-client.d.ts.map +1 -0
  64. package/dist/help-client.js +96 -0
  65. package/dist/help-client.js.map +1 -0
  66. package/dist/index.d.ts +1 -0
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +1 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/mcp-server.d.ts.map +1 -1
  71. package/dist/mcp-server.js +165 -2281
  72. package/dist/mcp-server.js.map +1 -1
  73. package/dist/mcp-tools/base/advanced-interaction-tools.d.ts.map +1 -1
  74. package/dist/mcp-tools/base/advanced-interaction-tools.js +21 -21
  75. package/dist/mcp-tools/base/advanced-interaction-tools.js.map +1 -1
  76. package/dist/mcp-tools/base/assertion-tools.d.ts.map +1 -1
  77. package/dist/mcp-tools/base/assertion-tools.js +6 -3
  78. package/dist/mcp-tools/base/assertion-tools.js.map +1 -1
  79. package/dist/mcp-tools/base/audit-tools.d.ts.map +1 -1
  80. package/dist/mcp-tools/base/audit-tools.js +15 -4
  81. package/dist/mcp-tools/base/audit-tools.js.map +1 -1
  82. package/dist/mcp-tools/base/browser-state-tools.d.ts.map +1 -1
  83. package/dist/mcp-tools/base/browser-state-tools.js +33 -27
  84. package/dist/mcp-tools/base/browser-state-tools.js.map +1 -1
  85. package/dist/mcp-tools/base/bug-analysis-tools.d.ts.map +1 -1
  86. package/dist/mcp-tools/base/bug-analysis-tools.js +9 -2
  87. package/dist/mcp-tools/base/bug-analysis-tools.js.map +1 -1
  88. package/dist/mcp-tools/base/capture-tools.d.ts +60 -4
  89. package/dist/mcp-tools/base/capture-tools.d.ts.map +1 -1
  90. package/dist/mcp-tools/base/capture-tools.js +118 -14
  91. package/dist/mcp-tools/base/capture-tools.js.map +1 -1
  92. package/dist/mcp-tools/base/index.d.ts +6 -5
  93. package/dist/mcp-tools/base/index.d.ts.map +1 -1
  94. package/dist/mcp-tools/base/index.js +7 -6
  95. package/dist/mcp-tools/base/index.js.map +1 -1
  96. package/dist/mcp-tools/base/interaction-tools.d.ts.map +1 -1
  97. package/dist/mcp-tools/base/interaction-tools.js +20 -6
  98. package/dist/mcp-tools/base/interaction-tools.js.map +1 -1
  99. package/dist/mcp-tools/base/navigation-tools.d.ts +1 -1
  100. package/dist/mcp-tools/base/navigation-tools.d.ts.map +1 -1
  101. package/dist/mcp-tools/base/navigation-tools.js +83 -3
  102. package/dist/mcp-tools/base/navigation-tools.js.map +1 -1
  103. package/dist/mcp-tools/base/site-knowledge-tools.d.ts.map +1 -1
  104. package/dist/mcp-tools/base/site-knowledge-tools.js +11 -23
  105. package/dist/mcp-tools/base/site-knowledge-tools.js.map +1 -1
  106. package/dist/mcp-tools/base/visual-testing-tools.d.ts.map +1 -1
  107. package/dist/mcp-tools/base/visual-testing-tools.js +13 -3
  108. package/dist/mcp-tools/base/visual-testing-tools.js.map +1 -1
  109. package/dist/mcp-tools/enterprise-stubs.d.ts +2 -2
  110. package/dist/mcp-tools/enterprise-stubs.d.ts.map +1 -1
  111. package/dist/mcp-tools/enterprise-stubs.js +29 -16
  112. package/dist/mcp-tools/enterprise-stubs.js.map +1 -1
  113. package/dist/mcp-tools/index.d.ts +19 -14
  114. package/dist/mcp-tools/index.d.ts.map +1 -1
  115. package/dist/mcp-tools/index.js +2 -2
  116. package/dist/mcp-tools/index.js.map +1 -1
  117. package/dist/mcp-tools/red-zone-refusal.d.ts +33 -0
  118. package/dist/mcp-tools/red-zone-refusal.d.ts.map +1 -0
  119. package/dist/mcp-tools/red-zone-refusal.js +43 -0
  120. package/dist/mcp-tools/red-zone-refusal.js.map +1 -0
  121. package/dist/mcp-tools/tier-gate.js +1 -1
  122. package/dist/mcp-tools/tier-gate.js.map +1 -1
  123. package/dist/mcp-tools/tool-categories.d.ts.map +1 -1
  124. package/dist/mcp-tools/tool-categories.js +2 -0
  125. package/dist/mcp-tools/tool-categories.js.map +1 -1
  126. package/dist/output.d.ts.map +1 -1
  127. package/dist/output.js +18 -2
  128. package/dist/output.js.map +1 -1
  129. package/dist/performance/metrics.d.ts +8 -3
  130. package/dist/performance/metrics.d.ts.map +1 -1
  131. package/dist/performance/metrics.js +16 -5
  132. package/dist/performance/metrics.js.map +1 -1
  133. package/dist/recording/contact-sheet.js.map +1 -1
  134. package/dist/security/tool-permissions.d.ts.map +1 -1
  135. package/dist/security/tool-permissions.js +1 -0
  136. package/dist/security/tool-permissions.js.map +1 -1
  137. package/dist/testing/coverage.d.ts +2 -2
  138. package/dist/testing/coverage.d.ts.map +1 -1
  139. package/dist/testing/coverage.js +6 -2
  140. package/dist/testing/coverage.js.map +1 -1
  141. package/dist/testing/flaky-detection.d.ts +2 -2
  142. package/dist/testing/flaky-detection.d.ts.map +1 -1
  143. package/dist/testing/flaky-detection.js +11 -3
  144. package/dist/testing/flaky-detection.js.map +1 -1
  145. package/dist/testing/nl-test-suite.d.ts +20 -0
  146. package/dist/testing/nl-test-suite.d.ts.map +1 -1
  147. package/dist/testing/nl-test-suite.js +7 -1
  148. package/dist/testing/nl-test-suite.js.map +1 -1
  149. package/dist/testing/suite-results.d.ts +27 -0
  150. package/dist/testing/suite-results.d.ts.map +1 -0
  151. package/dist/testing/suite-results.js +54 -0
  152. package/dist/testing/suite-results.js.map +1 -0
  153. package/dist/testing/test-repair.d.ts +2 -2
  154. package/dist/testing/test-repair.d.ts.map +1 -1
  155. package/dist/testing/test-repair.js +6 -2
  156. package/dist/testing/test-repair.js.map +1 -1
  157. package/dist/types.d.ts +61 -8
  158. package/dist/types.d.ts.map +1 -1
  159. package/dist/types.js +17 -103
  160. package/dist/types.js.map +1 -1
  161. package/dist/visual/ab-comparison.d.ts.map +1 -1
  162. package/dist/visual/ab-comparison.js +7 -2
  163. package/dist/visual/ab-comparison.js.map +1 -1
  164. package/dist/visual/cross-browser.d.ts +7 -2
  165. package/dist/visual/cross-browser.d.ts.map +1 -1
  166. package/dist/visual/cross-browser.js +33 -5
  167. package/dist/visual/cross-browser.js.map +1 -1
  168. package/dist/visual/distance-metrics.d.ts +7 -0
  169. package/dist/visual/distance-metrics.d.ts.map +1 -1
  170. package/dist/visual/distance-metrics.js.map +1 -1
  171. package/dist/visual/heatmap-overlay.js.map +1 -1
  172. package/dist/visual/llm-relevance.d.ts.map +1 -1
  173. package/dist/visual/llm-relevance.js.map +1 -1
  174. package/dist/visual/regression.d.ts +17 -7
  175. package/dist/visual/regression.d.ts.map +1 -1
  176. package/dist/visual/regression.js +77 -38
  177. package/dist/visual/regression.js.map +1 -1
  178. package/dist/visual/responsive.d.ts +22 -0
  179. package/dist/visual/responsive.d.ts.map +1 -1
  180. package/dist/visual/responsive.js +44 -7
  181. package/dist/visual/responsive.js.map +1 -1
  182. package/dist/visual/visual-overlays.js.map +1 -1
  183. package/dist/webhooks.d.ts +67 -0
  184. package/dist/webhooks.d.ts.map +1 -0
  185. package/dist/webhooks.js +128 -0
  186. package/dist/webhooks.js.map +1 -0
  187. package/package.json +23 -24
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-presets-devtools.js","sourceRoot":"","sources":["../src/device-presets-devtools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { DeviceDescriptor } from "./types.js";
2
+ import { normalizeDeviceName } from "./device-names.js";
3
+ export { normalizeDeviceName };
4
+ export declare const DEVICE_PRESETS: Record<string, DeviceDescriptor>;
5
+ /** cbrowser's own presets, the default set for `cbrowser parallel devices`. */
6
+ export declare const CBROWSER_DEVICE_KEYS: readonly string[];
7
+ export type DeviceResolution = {
8
+ key: string;
9
+ } | {
10
+ error: string;
11
+ suggestions: string[];
12
+ };
13
+ /** Resolve a device name to a preset key, or say why not and what is close. */
14
+ export declare function resolveDevice(input: string): DeviceResolution;
15
+ /**
16
+ * What a render actually used: the device preset key (null for no emulation)
17
+ * and the page size. Tools echo this instead of a label: until 2026-10-21
18
+ * empathy_audit answered device "desktop" and visual_cognitive_story described
19
+ * its default as "desktop (1920x1080)" while both rendered at the configured
20
+ * 1280x800 with no emulation (audit M8). An unknown device keeps its name and
21
+ * has no viewport; the browser refuses it at launch.
22
+ *
23
+ * @param fallback the viewport used when no device is set (the configured default)
24
+ */
25
+ export declare function describeRenderTarget(device: string | undefined, fallback: {
26
+ width: number;
27
+ height: number;
28
+ }): {
29
+ device: string | null;
30
+ viewport: {
31
+ width: number;
32
+ height: number;
33
+ } | null;
34
+ };
35
+ //# sourceMappingURL=devices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devices.d.ts","sourceRoot":"","sources":["../src/devices.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AA0GxD,OAAO,EAAE,mBAAmB,EAAE,CAAC;AA+B/B,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAkB,CAAC;AAE/E,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAAkC,CAAC;AASrF,MAAM,MAAM,gBAAgB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE1F,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAM7D;AAmBD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CAAE,CAK/E"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Device presets: the names `--device` and the MCP `device` parameter accept.
3
+ *
4
+ * Three sources, merged in this order (the first to define a key wins):
5
+ * 1. cbrowser's own presets, below - unchanged since they shipped, so
6
+ * existing renders do not move.
7
+ * 2. Chrome DevTools' device list (device-presets-devtools.ts, generated by
8
+ * scripts/gen-devtools-devices.ts from a pinned commit) - the newest
9
+ * maintained list: iPhone 16 family, Pixel 8-10, folds, iPad Pro 13, Surface.
10
+ * 3. Playwright's bundled descriptors, read from the installed playwright.
11
+ *
12
+ * One convention for every entry: the viewport is the device's full screen in
13
+ * CSS pixels, which is what cbrowser's own presets always were. Playwright's
14
+ * `viewport` is the browser's visible area instead (iPhone 15: 393x659 of a
15
+ * 393x852 screen), so its `screen` is used where a descriptor has one.
16
+ *
17
+ * Keys are normalised display names: "iPhone 16 Pro" -> "iphone-16-pro",
18
+ * "Galaxy S9+" -> "galaxy-s9-plus", "iPad (gen 7)" -> "ipad-gen-7". Either form
19
+ * resolves.
20
+ *
21
+ * An unknown name is an error, never a fallback (reported 2026-10-21: an
22
+ * unlisted device rendered 1280x800 desktop and reported success).
23
+ */
24
+ import { devices as playwrightDevices } from "playwright";
25
+ import { DEVTOOLS_DEVICES } from "./device-presets-devtools.js";
26
+ import { normalizeDeviceName } from "./device-names.js";
27
+ const IOS_17_SAFARI = "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1";
28
+ const IPADOS_17_SAFARI = "Mozilla/5.0 (iPad; CPU OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1";
29
+ const WINDOWS_CHROME_120 = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
30
+ const CBROWSER_DEVICES = {
31
+ "iphone-15": {
32
+ name: "iPhone 15",
33
+ userAgent: IOS_17_SAFARI,
34
+ viewport: { width: 393, height: 852 },
35
+ deviceScaleFactor: 3,
36
+ isMobile: true,
37
+ hasTouch: true,
38
+ },
39
+ "iphone-15-pro-max": {
40
+ name: "iPhone 15 Pro Max",
41
+ userAgent: IOS_17_SAFARI,
42
+ viewport: { width: 430, height: 932 },
43
+ deviceScaleFactor: 3,
44
+ isMobile: true,
45
+ hasTouch: true,
46
+ },
47
+ "pixel-8": {
48
+ name: "Pixel 8",
49
+ userAgent: "Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36",
50
+ viewport: { width: 412, height: 915 },
51
+ deviceScaleFactor: 2.625,
52
+ isMobile: true,
53
+ hasTouch: true,
54
+ },
55
+ "pixel-8-pro": {
56
+ name: "Pixel 8 Pro",
57
+ userAgent: "Mozilla/5.0 (Linux; Android 14; Pixel 8 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36",
58
+ viewport: { width: 448, height: 998 },
59
+ deviceScaleFactor: 2.625,
60
+ isMobile: true,
61
+ hasTouch: true,
62
+ },
63
+ "samsung-galaxy-s24": {
64
+ name: "Samsung Galaxy S24",
65
+ userAgent: "Mozilla/5.0 (Linux; Android 14; SM-S921B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36",
66
+ viewport: { width: 360, height: 780 },
67
+ deviceScaleFactor: 3,
68
+ isMobile: true,
69
+ hasTouch: true,
70
+ },
71
+ "ipad-pro-12": {
72
+ name: "iPad Pro 12.9",
73
+ userAgent: IPADOS_17_SAFARI,
74
+ viewport: { width: 1024, height: 1366 },
75
+ deviceScaleFactor: 2,
76
+ isMobile: true,
77
+ hasTouch: true,
78
+ },
79
+ "ipad-air": {
80
+ name: "iPad Air",
81
+ userAgent: IPADOS_17_SAFARI,
82
+ viewport: { width: 820, height: 1180 },
83
+ deviceScaleFactor: 2,
84
+ isMobile: true,
85
+ hasTouch: true,
86
+ },
87
+ "desktop-1080p": {
88
+ name: "Desktop 1080p",
89
+ userAgent: WINDOWS_CHROME_120,
90
+ viewport: { width: 1920, height: 1080 },
91
+ deviceScaleFactor: 1,
92
+ isMobile: false,
93
+ hasTouch: false,
94
+ },
95
+ "desktop-1440p": {
96
+ name: "Desktop 1440p",
97
+ userAgent: WINDOWS_CHROME_120,
98
+ viewport: { width: 2560, height: 1440 },
99
+ deviceScaleFactor: 1,
100
+ isMobile: false,
101
+ hasTouch: false,
102
+ },
103
+ // Generic device aliases
104
+ "mobile": {
105
+ name: "Mobile (iPhone 15)",
106
+ userAgent: IOS_17_SAFARI,
107
+ viewport: { width: 393, height: 852 },
108
+ deviceScaleFactor: 3,
109
+ isMobile: true,
110
+ hasTouch: true,
111
+ },
112
+ "tablet": {
113
+ name: "Tablet (iPad Pro 11)",
114
+ userAgent: IPADOS_17_SAFARI,
115
+ viewport: { width: 834, height: 1194 },
116
+ deviceScaleFactor: 2,
117
+ isMobile: true,
118
+ hasTouch: true,
119
+ },
120
+ "desktop": {
121
+ name: "Desktop (1920x1080)",
122
+ userAgent: WINDOWS_CHROME_120,
123
+ viewport: { width: 1920, height: 1080 },
124
+ deviceScaleFactor: 1,
125
+ isMobile: false,
126
+ hasTouch: false,
127
+ },
128
+ };
129
+ export { normalizeDeviceName };
130
+ function fromPlaywright(name, d) {
131
+ // Playwright's exported type leaves out `screen`, but its descriptor data
132
+ // carries it (29 of the 75 portrait devices in 1.58).
133
+ const screen = d.screen;
134
+ const size = screen ?? d.viewport;
135
+ return {
136
+ name,
137
+ userAgent: d.userAgent,
138
+ viewport: { width: size.width, height: size.height },
139
+ deviceScaleFactor: d.deviceScaleFactor,
140
+ isMobile: d.isMobile,
141
+ hasTouch: d.hasTouch,
142
+ };
143
+ }
144
+ function buildPresets() {
145
+ const presets = { ...CBROWSER_DEVICES };
146
+ for (const [key, d] of Object.entries(DEVTOOLS_DEVICES)) {
147
+ if (!(key in presets))
148
+ presets[key] = d;
149
+ }
150
+ for (const [name, d] of Object.entries(playwrightDevices)) {
151
+ const key = normalizeDeviceName(name);
152
+ if (!(key in presets))
153
+ presets[key] = fromPlaywright(name, d);
154
+ }
155
+ return presets;
156
+ }
157
+ export const DEVICE_PRESETS = buildPresets();
158
+ /** cbrowser's own presets, the default set for `cbrowser parallel devices`. */
159
+ export const CBROWSER_DEVICE_KEYS = Object.keys(CBROWSER_DEVICES);
160
+ /** Display names, so "iPad Pro 12.9" finds "ipad-pro-12". The first source to use a name keeps it. */
161
+ const KEY_BY_NAME = new Map();
162
+ for (const [key, d] of Object.entries(DEVICE_PRESETS)) {
163
+ const name = normalizeDeviceName(d.name);
164
+ if (!KEY_BY_NAME.has(name))
165
+ KEY_BY_NAME.set(name, key);
166
+ }
167
+ /** Resolve a device name to a preset key, or say why not and what is close. */
168
+ export function resolveDevice(input) {
169
+ const wanted = normalizeDeviceName(input);
170
+ if (wanted && DEVICE_PRESETS[wanted])
171
+ return { key: wanted };
172
+ const byName = wanted ? KEY_BY_NAME.get(wanted) : undefined;
173
+ if (byName)
174
+ return { key: byName };
175
+ return { error: `Unknown device "${input}"`, suggestions: suggestDevices(wanted) };
176
+ }
177
+ /** The presets sharing the longest prefix with the name, closest length first. */
178
+ function suggestDevices(wanted, limit = 8) {
179
+ if (!wanted)
180
+ return [];
181
+ const sharedPrefix = (key) => {
182
+ let i = 0;
183
+ while (i < key.length && i < wanted.length && key[i] === wanted[i])
184
+ i++;
185
+ return i;
186
+ };
187
+ const portrait = Object.keys(DEVICE_PRESETS).filter((k) => !k.endsWith("-landscape"));
188
+ const best = Math.max(...portrait.map(sharedPrefix));
189
+ if (best < 3)
190
+ return [];
191
+ return portrait
192
+ .filter((k) => sharedPrefix(k) === best)
193
+ .sort((a, b) => Math.abs(a.length - wanted.length) - Math.abs(b.length - wanted.length) || b.localeCompare(a))
194
+ .slice(0, limit);
195
+ }
196
+ /**
197
+ * What a render actually used: the device preset key (null for no emulation)
198
+ * and the page size. Tools echo this instead of a label: until 2026-10-21
199
+ * empathy_audit answered device "desktop" and visual_cognitive_story described
200
+ * its default as "desktop (1920x1080)" while both rendered at the configured
201
+ * 1280x800 with no emulation (audit M8). An unknown device keeps its name and
202
+ * has no viewport; the browser refuses it at launch.
203
+ *
204
+ * @param fallback the viewport used when no device is set (the configured default)
205
+ */
206
+ export function describeRenderTarget(device, fallback) {
207
+ if (!device)
208
+ return { device: null, viewport: { width: fallback.width, height: fallback.height } };
209
+ const resolved = resolveDevice(device);
210
+ if ("error" in resolved)
211
+ return { device, viewport: null };
212
+ return { device: resolved.key, viewport: { ...DEVICE_PRESETS[resolved.key].viewport } };
213
+ }
214
+ //# sourceMappingURL=devices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devices.js","sourceRoot":"","sources":["../src/devices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Run a caller's script in a page and return its value: the one compiler behind
3
+ * `cbrowser evaluate`, locally and through the daemon.
4
+ *
5
+ * People write four shapes, and the JavaScript parser - not a regex - tells them
6
+ * apart. Deciding by regex dropped results whenever a function was involved
7
+ * (reported 2026-10-13): a script starting with "function" or holding "=>"
8
+ * anywhere was taken for one callable literal, and a "return" anywhere - even in
9
+ * a nested function - switched off the last-expression value, so
10
+ * `function t(){ return 1 }; t()` threw and `const t = function(){ return 1 }; t()`
11
+ * gave undefined. The daemon path had its own wrapper with the same "return
12
+ * anywhere" test and dropped an IIFE's value.
13
+ *
14
+ * 1. An expression: its value. If that value is the function literal the caller
15
+ * wrote (its source text is the script), it is called with the arguments, so
16
+ * `(sel, n) => ...` with --arg still works and `window.getComputedStyle` is
17
+ * returned, not invoked.
18
+ * 2. Statements with no top-level return: the value of the last statement, as a
19
+ * REPL gives it, with `args` in scope.
20
+ * 3. Statements with a top-level return: run as a function body (`args` in scope).
21
+ * A syntax error surfaces from here, which is the error the caller should see.
22
+ *
23
+ * Running the caller's code (new Function, eval) is this tool's purpose, not an
24
+ * injection: it is a red-zone action, refused without force by
25
+ * evaluateScriptRefusal (src/security/script-gate.ts) before this is reached.
26
+ */
27
+ import type { Page } from "playwright";
28
+ export declare function evaluateScript(page: Page, script: string, args: unknown[]): Promise<unknown>;
29
+ //# sourceMappingURL=eval-script.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-script.d.ts","sourceRoot":"","sources":["../src/eval-script.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CA8ClG"}
@@ -0,0 +1,46 @@
1
+ export async function evaluateScript(page, script, args) {
2
+ return page.evaluate((payload) => {
3
+ const src = payload.src;
4
+ // 1. An expression.
5
+ let expression = null;
6
+ try {
7
+ expression = new Function("args", `return (${src});`);
8
+ }
9
+ catch { /* not an expression */ }
10
+ if (expression) {
11
+ const value = expression(payload.a);
12
+ if (typeof value === "function") {
13
+ // Called only when it IS the literal the caller wrote; outer parentheses
14
+ // and a trailing semicolon do not change that.
15
+ const text = Function.prototype.toString.call(value);
16
+ let bare = src.replace(/;\s*$/, "").trim();
17
+ while (bare !== text && bare.startsWith("(") && bare.endsWith(")"))
18
+ bare = bare.slice(1, -1).trim();
19
+ if (bare === text)
20
+ return value(...payload.a);
21
+ }
22
+ return value;
23
+ }
24
+ // 2 or 3. Statements. A parse-only probe: inside a class static block a
25
+ // top-level `return` is a syntax error and the rest of a script is legal.
26
+ // The probe function is created, never called. The block is strict mode, so
27
+ // sloppy-only code (`arguments`, `with`, `package` as a name) fails it
28
+ // too; a script without the word "return" cannot have a top-level return,
29
+ // so it takes the last-statement path either way.
30
+ let noTopLevelReturn = !/\breturn\b/.test(src);
31
+ if (!noTopLevelReturn) {
32
+ try {
33
+ new Function(`class __cbrowserProbe { static {\n${src}\n} }`);
34
+ noTopLevelReturn = true;
35
+ }
36
+ catch { /* has a top-level return, or is not valid as plain statements */ }
37
+ }
38
+ if (noTopLevelReturn) {
39
+ // Direct eval inside the function: the completion value of the last
40
+ // statement, with `args` in scope.
41
+ return new Function("args", `return eval(${JSON.stringify(src)});`)(payload.a);
42
+ }
43
+ return new Function("args", src)(payload.a);
44
+ }, { src: script.trim(), a: args });
45
+ }
46
+ //# sourceMappingURL=eval-script.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-script.js","sourceRoot":"","sources":["../src/eval-script.ts"],"names":[],"mappings":"AA4BA,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAU,EAAE,MAAc,EAAE,IAAe;IAC9E,OAAO,IAAI,CAAC,QAAQ,CAClB,CAAC,OAAsC,EAAE,EAAE;QACzC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QAGxB,oBAAoB;QACpB,IAAI,UAAU,GAAoB,IAAI,CAAC;QACvC,IAAI,CAAC;YACH,UAAU,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAa,CAAC;QACpE,CAAC;QAAC,MAAM,CAAC,CAAC,uBAAuB,CAAC,CAAC;QACnC,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAChC,yEAAyE;gBACzE,+CAA+C;gBAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrD,IAAI,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC3C,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACpG,IAAI,IAAI,KAAK,IAAI;oBAAE,OAAQ,KAAsC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAClF,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,wEAAwE;QACxE,0EAA0E;QAC1E,4EAA4E;QAC5E,uEAAuE;QACvE,0EAA0E;QAC1E,kDAAkD;QAClD,IAAI,gBAAgB,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,IAAI,QAAQ,CAAC,qCAAqC,GAAG,OAAO,CAAC,CAAC;gBAC9D,gBAAgB,GAAG,IAAI,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC,CAAC,iEAAiE,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,gBAAgB,EAAE,CAAC;YACrB,oEAAoE;YACpE,mCAAmC;YACnC,OAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,eAAe,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/F,CAAC;QACD,OAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC,EACD,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAChC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * help-client.ts — ask the CBrowser knowledge base a question.
3
+ *
4
+ * One client for `cbrowser ask` and the `question_answer` MCP tool. Before
5
+ * 20.0.0 the tool always posted to CMS_URL or localhost:3200, which exists only
6
+ * on the hosted servers, so on a user's machine it could never answer.
7
+ *
8
+ * Where a question goes:
9
+ * - CMS_URL set: only there, with the caller's key hash (an operator's own CMS).
10
+ * - Hosted mode: the local CMS first, with the key hash, so the account is
11
+ * known; the public endpoint only if the local CMS cannot be reached.
12
+ * - Otherwise: the public endpoint (CBROWSER_HELP_URL overrides it), anonymously.
13
+ *
14
+ * The key hash goes only to a CMS the operator runs, never to the public
15
+ * endpoint. A target is skipped only when it cannot be reached; an HTTP error
16
+ * (429, 500) is the answer, because asking a second server would double-spend.
17
+ */
18
+ export declare const PUBLIC_HELP_URL = "https://cbrowser.ai/cms/api/ai/question";
19
+ export interface HelpAnswer {
20
+ question: string;
21
+ answer: string;
22
+ sources: string[];
23
+ /** Which endpoint answered (no credentials in it). */
24
+ answeredBy: string;
25
+ }
26
+ export interface AskOptions {
27
+ context?: string;
28
+ /** sha256 of the caller's cbk_ key, as the hosted tier gate holds it. */
29
+ keyHash?: string | null;
30
+ /** True on the hosted MCP servers (startRemoteMcpServer). */
31
+ hosted?: boolean;
32
+ timeoutMs?: number;
33
+ /** Tests only: the CMS a hosted server asks first (default localhost:3200). */
34
+ localCmsUrl?: string;
35
+ }
36
+ /** A help request that failed, with a message a person can act on. */
37
+ export declare class HelpError extends Error {
38
+ readonly status?: number | undefined;
39
+ constructor(message: string, status?: number | undefined);
40
+ }
41
+ interface Target {
42
+ url: string;
43
+ keyHash?: string;
44
+ }
45
+ export declare function helpTargets(opts?: AskOptions): Target[];
46
+ export declare function askCbrowser(question: string, opts?: AskOptions): Promise<HelpAnswer>;
47
+ export {};
48
+ //# sourceMappingURL=help-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-client.d.ts","sourceRoot":"","sources":["../src/help-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,eAAO,MAAM,eAAe,4CAA4C,CAAC;AAKzE,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,sEAAsE;AACtE,qBAAa,SAAU,SAAQ,KAAK;IACL,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;gBAAzC,OAAO,EAAE,MAAM,EAAW,MAAM,CAAC,EAAE,MAAM,YAAA;CAItD;AAED,UAAU,MAAM;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;AAElD,wBAAgB,WAAW,CAAC,IAAI,GAAE,UAAe,GAAG,MAAM,EAAE,CAY3D;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CA+C9F"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * help-client.ts — ask the CBrowser knowledge base a question.
3
+ *
4
+ * One client for `cbrowser ask` and the `question_answer` MCP tool. Before
5
+ * 20.0.0 the tool always posted to CMS_URL or localhost:3200, which exists only
6
+ * on the hosted servers, so on a user's machine it could never answer.
7
+ *
8
+ * Where a question goes:
9
+ * - CMS_URL set: only there, with the caller's key hash (an operator's own CMS).
10
+ * - Hosted mode: the local CMS first, with the key hash, so the account is
11
+ * known; the public endpoint only if the local CMS cannot be reached.
12
+ * - Otherwise: the public endpoint (CBROWSER_HELP_URL overrides it), anonymously.
13
+ *
14
+ * The key hash goes only to a CMS the operator runs, never to the public
15
+ * endpoint. A target is skipped only when it cannot be reached; an HTTP error
16
+ * (429, 500) is the answer, because asking a second server would double-spend.
17
+ */
18
+ export const PUBLIC_HELP_URL = "https://cbrowser.ai/cms/api/ai/question";
19
+ const LOCAL_CMS_URL = "http://localhost:3200";
20
+ const QUESTION_PATH = "/api/ai/question";
21
+ const DEFAULT_TIMEOUT_MS = 30_000;
22
+ /** A help request that failed, with a message a person can act on. */
23
+ export class HelpError extends Error {
24
+ status;
25
+ constructor(message, status) {
26
+ super(message);
27
+ this.status = status;
28
+ this.name = "HelpError";
29
+ }
30
+ }
31
+ export function helpTargets(opts = {}) {
32
+ const explicit = process.env.CMS_URL;
33
+ const key = opts.keyHash || undefined;
34
+ if (explicit)
35
+ return [{ url: explicit.replace(/\/$/, "") + QUESTION_PATH, keyHash: key }];
36
+ const publicUrl = process.env.CBROWSER_HELP_URL || PUBLIC_HELP_URL;
37
+ if (opts.hosted) {
38
+ return [
39
+ { url: (opts.localCmsUrl ?? LOCAL_CMS_URL) + QUESTION_PATH, keyHash: key },
40
+ { url: publicUrl },
41
+ ];
42
+ }
43
+ return [{ url: publicUrl }];
44
+ }
45
+ export async function askCbrowser(question, opts = {}) {
46
+ if (!question.trim())
47
+ throw new HelpError("Ask a question, e.g. cbrowser ask \"How do I test on an iPhone?\"");
48
+ const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
49
+ const body = JSON.stringify({ question, ...(opts.context ? { context: opts.context } : {}) });
50
+ let lastNetworkError;
51
+ for (const target of helpTargets(opts)) {
52
+ let res;
53
+ try {
54
+ res = await fetch(target.url, {
55
+ method: "POST",
56
+ headers: {
57
+ "Content-Type": "application/json",
58
+ ...(target.keyHash ? { Authorization: `Bearer ${target.keyHash}` } : {}),
59
+ },
60
+ body,
61
+ signal: AbortSignal.timeout(timeoutMs),
62
+ });
63
+ }
64
+ catch (e) {
65
+ if (e.name === "TimeoutError") {
66
+ throw new HelpError(`The help service did not answer within ${Math.round(timeoutMs / 1000)}s. Try again, or read https://cbrowser.ai/docs`);
67
+ }
68
+ lastNetworkError = e;
69
+ continue;
70
+ }
71
+ const where = new URL(target.url).host;
72
+ if (res.status === 429) {
73
+ const retry = res.headers.get("Retry-After");
74
+ throw new HelpError(`The help service is rate-limited${retry ? `; try again in ${retry}s` : ""}. The docs are at https://cbrowser.ai/docs`, 429);
75
+ }
76
+ if (!res.ok) {
77
+ let detail = "";
78
+ try {
79
+ detail = (await res.json()).error ?? "";
80
+ }
81
+ catch { /* not JSON */ }
82
+ throw new HelpError(`The help service answered ${res.status}${detail ? `: ${detail}` : ""}`, res.status);
83
+ }
84
+ const data = (await res.json());
85
+ if (typeof data.answer !== "string")
86
+ throw new HelpError("The help service sent no answer");
87
+ return {
88
+ question,
89
+ answer: data.answer,
90
+ sources: Array.isArray(data.sources) ? data.sources.filter((s) => typeof s === "string") : [],
91
+ answeredBy: where,
92
+ };
93
+ }
94
+ throw new HelpError(`Could not reach the help service (${lastNetworkError?.message ?? "no route"}). The docs are at https://cbrowser.ai/docs`);
95
+ }
96
+ //# sourceMappingURL=help-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-client.js","sourceRoot":"","sources":["../src/help-client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -21,6 +21,7 @@ export { getDefaultConfig, getPaths, ensureDirectories, mergeConfig } from "./co
21
21
  export type { CBrowserConfig, CBrowserPaths, BrowserType } from "./config.js";
22
22
  export { getGeoProxy, listGeoRegions, isGeoProxyConfigured } from "./geo-proxy.js";
23
23
  export * from "./types.js";
24
+ export * from "./devices.js";
24
25
  export { BUILTIN_PERSONAS, registerPersonas, isInvalidPersona, cleanupInvalidPersonas, listInvalidPersonas, } from "./personas.js";
25
26
  export * from "./trait-reference.js";
26
27
  export { startMcpServer, createMcpServer, connectMcpServer } from "./mcp-server.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AACzJ,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzF,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACnF,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAGvB,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAIvH,cAAc,mBAAmB,CAAC;AAGlC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,wBAAwB,CAAC;AAGvC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,cAAc,oBAAoB,CAAC;AAInC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,4BAA4B,CAAC;AAI3C,cAAc,mBAAmB,CAAC;AAIlC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,4BAA4B,EAC5B,mBAAmB,EACnB,uBAAuB,EAEvB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,8BAA8B,EAC9B,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAGpE,cAAc,qBAAqB,CAAC;AAKpC,OAAO,EACL,mBAAmB,EACnB,4BAA4B,EAC5B,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AACzJ,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzF,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACnF,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAGvB,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAIvH,cAAc,mBAAmB,CAAC;AAGlC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,wBAAwB,CAAC;AAGvC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,cAAc,oBAAoB,CAAC;AAInC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,4BAA4B,CAAC;AAI3C,cAAc,mBAAmB,CAAC;AAIlC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,4BAA4B,EAC5B,mBAAmB,EACnB,uBAAuB,EAEvB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,8BAA8B,EAC9B,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAGpE,cAAc,qBAAqB,CAAC;AAKpC,OAAO,EACL,mBAAmB,EACnB,4BAA4B,EAC5B,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -20,6 +20,7 @@ export { CBrowser, launchBrowserWithFallback, isBrowserNotInstalledError, instal
20
20
  export { getDefaultConfig, getPaths, ensureDirectories, mergeConfig } from "./config.js";
21
21
  export { getGeoProxy, listGeoRegions, isGeoProxyConfigured } from "./geo-proxy.js";
22
22
  export * from "./types.js";
23
+ export * from "./devices.js";
23
24
  export { BUILTIN_PERSONAS, registerPersonas, isInvalidPersona, cleanupInvalidPersonas, listInvalidPersonas, } from "./personas.js";
24
25
  // Trait Reference (v15.0.0) - Cognitive trait definitions and guidelines
25
26
  export * from "./trait-reference.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AACzJ,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACnF,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,yEAAyE;AACzE,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvH,2BAA2B;AAC3B,wBAAwB;AACxB,cAAc,mBAAmB,CAAC;AAElC,iBAAiB;AACjB,cAAc,oBAAoB,CAAC;AAEnC,kBAAkB;AAClB,cAAc,qBAAqB,CAAC;AAEpC,+BAA+B;AAC/B,cAAc,wBAAwB,CAAC;AAEvC,4BAA4B;AAC5B,cAAc,qBAAqB,CAAC;AAEpC,qBAAqB;AACrB,cAAc,wBAAwB,CAAC;AAEvC,6BAA6B;AAC7B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,2BAA2B;AAC3B,cAAc,oBAAoB,CAAC;AAEnC,6CAA6C;AAC7C,uDAAuD;AACvD,cAAc,oBAAoB,CAAC;AAEnC,sEAAsE;AACtE,cAAc,4BAA4B,CAAC;AAE3C,2EAA2E;AAC3E,2EAA2E;AAC3E,cAAc,mBAAmB,CAAC;AAElC,sDAAsD;AACtD,6DAA6D;AAC7D,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,4BAA4B,EAC5B,mBAAmB,EACnB,uBAAuB;AACvB,8CAA8C;AAC9C,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,8BAA8B,EAC9B,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAG9B,gEAAgE;AAChE,cAAc,qBAAqB,CAAC;AAEpC,wEAAwE;AACxE,uEAAuE;AACvE,uEAAuE;AACvE,OAAO,EACL,mBAAmB,EACnB,4BAA4B,EAC5B,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AACzJ,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACnF,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,yEAAyE;AACzE,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvH,2BAA2B;AAC3B,wBAAwB;AACxB,cAAc,mBAAmB,CAAC;AAElC,iBAAiB;AACjB,cAAc,oBAAoB,CAAC;AAEnC,kBAAkB;AAClB,cAAc,qBAAqB,CAAC;AAEpC,+BAA+B;AAC/B,cAAc,wBAAwB,CAAC;AAEvC,4BAA4B;AAC5B,cAAc,qBAAqB,CAAC;AAEpC,qBAAqB;AACrB,cAAc,wBAAwB,CAAC;AAEvC,6BAA6B;AAC7B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,2BAA2B;AAC3B,cAAc,oBAAoB,CAAC;AAEnC,6CAA6C;AAC7C,uDAAuD;AACvD,cAAc,oBAAoB,CAAC;AAEnC,sEAAsE;AACtE,cAAc,4BAA4B,CAAC;AAE3C,2EAA2E;AAC3E,2EAA2E;AAC3E,cAAc,mBAAmB,CAAC;AAElC,sDAAsD;AACtD,6DAA6D;AAC7D,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,4BAA4B,EAC5B,mBAAmB,EACnB,uBAAuB;AACvB,8CAA8C;AAC9C,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,8BAA8B,EAC9B,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAG9B,gEAAgE;AAChE,cAAc,qBAAqB,CAAC;AAEpC,wEAAwE;AACxE,uEAAuE;AACvE,uEAAuE;AACvE,OAAO,EACL,mBAAmB,EACnB,4BAA4B,EAC5B,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA6zGpE;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,SAAS,CAAC,CAE1D;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAWvE;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAWpD"}
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiwBpE;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,SAAS,CAAC,CAE1D;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAWvE;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAWpD"}