playwriter 0.0.63 → 0.0.89

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 (223) hide show
  1. package/dist/a11y-client.js +18 -8
  2. package/dist/aria-snapshot.d.ts +41 -3
  3. package/dist/aria-snapshot.d.ts.map +1 -1
  4. package/dist/aria-snapshot.js +134 -55
  5. package/dist/aria-snapshot.js.map +1 -1
  6. package/dist/aria-snapshot.test.js +5 -2
  7. package/dist/aria-snapshot.test.js.map +1 -1
  8. package/dist/aria-snapshot.unit.test.js +83 -41
  9. package/dist/aria-snapshot.unit.test.js.map +1 -1
  10. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts +5 -0
  11. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts.map +1 -0
  12. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js +5 -0
  13. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js.map +1 -0
  14. package/dist/bippy.js +1 -1
  15. package/dist/cdp-log.d.ts +1 -1
  16. package/dist/cdp-log.d.ts.map +1 -1
  17. package/dist/cdp-log.js +1 -1
  18. package/dist/cdp-log.js.map +1 -1
  19. package/dist/cdp-relay.d.ts.map +1 -1
  20. package/dist/cdp-relay.js +492 -298
  21. package/dist/cdp-relay.js.map +1 -1
  22. package/dist/cdp-session.d.ts.map +1 -1
  23. package/dist/cdp-session.js.map +1 -1
  24. package/dist/cdp-types.d.ts.map +1 -1
  25. package/dist/cdp-types.js +7 -7
  26. package/dist/cdp-types.js.map +1 -1
  27. package/dist/clean-html.d.ts.map +1 -1
  28. package/dist/clean-html.js +4 -5
  29. package/dist/clean-html.js.map +1 -1
  30. package/dist/cli.js +45 -27
  31. package/dist/cli.js.map +1 -1
  32. package/dist/create-logger.d.ts.map +1 -1
  33. package/dist/create-logger.js +3 -1
  34. package/dist/create-logger.js.map +1 -1
  35. package/dist/debugger-examples-types.d.ts.map +1 -1
  36. package/dist/debugger.d.ts.map +1 -1
  37. package/dist/debugger.js +1 -3
  38. package/dist/debugger.js.map +1 -1
  39. package/dist/diff-utils.d.ts.map +1 -1
  40. package/dist/diff-utils.js +1 -4
  41. package/dist/diff-utils.js.map +1 -1
  42. package/dist/editor-api.md +12 -2
  43. package/dist/editor-examples.d.ts +1 -1
  44. package/dist/editor-examples.d.ts.map +1 -1
  45. package/dist/editor-examples.js +1 -1
  46. package/dist/editor-examples.js.map +1 -1
  47. package/dist/editor.d.ts +1 -1
  48. package/dist/editor.d.ts.map +1 -1
  49. package/dist/editor.js +1 -1
  50. package/dist/editor.js.map +1 -1
  51. package/dist/executor.d.ts +26 -3
  52. package/dist/executor.d.ts.map +1 -1
  53. package/dist/executor.js +297 -64
  54. package/dist/executor.js.map +1 -1
  55. package/dist/executor.unit.test.js +38 -1
  56. package/dist/executor.unit.test.js.map +1 -1
  57. package/dist/extension-connection.test.js +139 -36
  58. package/dist/extension-connection.test.js.map +1 -1
  59. package/dist/ffmpeg.d.ts +148 -0
  60. package/dist/ffmpeg.d.ts.map +1 -0
  61. package/dist/ffmpeg.js +523 -0
  62. package/dist/ffmpeg.js.map +1 -0
  63. package/dist/ghost-browser.d.ts.map +1 -1
  64. package/dist/ghost-browser.js.map +1 -1
  65. package/dist/ghost-cursor-client.js +287 -0
  66. package/dist/ghost-cursor.d.ts +27 -0
  67. package/dist/ghost-cursor.d.ts.map +1 -0
  68. package/dist/ghost-cursor.js +63 -0
  69. package/dist/ghost-cursor.js.map +1 -0
  70. package/dist/htmlrewrite.d.ts.map +1 -1
  71. package/dist/htmlrewrite.js +17 -55
  72. package/dist/htmlrewrite.js.map +1 -1
  73. package/dist/htmlrewrite.test.js.map +1 -1
  74. package/dist/kill-port.d.ts.map +1 -1
  75. package/dist/kill-port.js +1 -3
  76. package/dist/kill-port.js.map +1 -1
  77. package/dist/locator-selector.test.d.ts +2 -0
  78. package/dist/locator-selector.test.d.ts.map +1 -0
  79. package/dist/locator-selector.test.js +96 -0
  80. package/dist/locator-selector.test.js.map +1 -0
  81. package/dist/mcp-client.js.map +1 -1
  82. package/dist/mcp.d.ts.map +1 -1
  83. package/dist/mcp.js +8 -3
  84. package/dist/mcp.js.map +1 -1
  85. package/dist/on-mouse-action.test.d.ts +2 -0
  86. package/dist/on-mouse-action.test.d.ts.map +1 -0
  87. package/dist/on-mouse-action.test.js +155 -0
  88. package/dist/on-mouse-action.test.js.map +1 -0
  89. package/dist/page-markdown.js +4 -4
  90. package/dist/page-markdown.js.map +1 -1
  91. package/dist/prompt.md +450 -377
  92. package/dist/protocol.d.ts +4 -0
  93. package/dist/protocol.d.ts.map +1 -1
  94. package/dist/readability.js +16 -2
  95. package/dist/recording-ghost-cursor.d.ts +41 -0
  96. package/dist/recording-ghost-cursor.d.ts.map +1 -0
  97. package/dist/recording-ghost-cursor.js +79 -0
  98. package/dist/recording-ghost-cursor.js.map +1 -0
  99. package/dist/recording-relay.d.ts.map +1 -1
  100. package/dist/recording-relay.js +8 -8
  101. package/dist/recording-relay.js.map +1 -1
  102. package/dist/relay-client.d.ts +17 -4
  103. package/dist/relay-client.d.ts.map +1 -1
  104. package/dist/relay-client.js +45 -11
  105. package/dist/relay-client.js.map +1 -1
  106. package/dist/relay-core.test.d.ts.map +1 -1
  107. package/dist/relay-core.test.js +515 -26
  108. package/dist/relay-core.test.js.map +1 -1
  109. package/dist/relay-navigation.test.d.ts.map +1 -1
  110. package/dist/relay-navigation.test.js +169 -31
  111. package/dist/relay-navigation.test.js.map +1 -1
  112. package/dist/relay-session.test.d.ts.map +1 -1
  113. package/dist/relay-session.test.js +113 -65
  114. package/dist/relay-session.test.js.map +1 -1
  115. package/dist/relay-state.d.ts +158 -0
  116. package/dist/relay-state.d.ts.map +1 -0
  117. package/dist/relay-state.js +306 -0
  118. package/dist/relay-state.js.map +1 -0
  119. package/dist/relay-state.test.d.ts +2 -0
  120. package/dist/relay-state.test.d.ts.map +1 -0
  121. package/dist/relay-state.test.js +472 -0
  122. package/dist/relay-state.test.js.map +1 -0
  123. package/dist/scoped-fs.d.ts.map +1 -1
  124. package/dist/scoped-fs.js.map +1 -1
  125. package/dist/screen-recording.d.ts +66 -4
  126. package/dist/screen-recording.d.ts.map +1 -1
  127. package/dist/screen-recording.js +150 -13
  128. package/dist/screen-recording.js.map +1 -1
  129. package/dist/screen-recording.test.d.ts +2 -0
  130. package/dist/screen-recording.test.d.ts.map +1 -0
  131. package/dist/screen-recording.test.js +102 -0
  132. package/dist/screen-recording.test.js.map +1 -0
  133. package/dist/selector-generator.js +1 -1
  134. package/dist/snapshot-tools.test.js +71 -28
  135. package/dist/snapshot-tools.test.js.map +1 -1
  136. package/dist/start-relay-server.d.ts +1 -1
  137. package/dist/start-relay-server.d.ts.map +1 -1
  138. package/dist/start-relay-server.js +1 -1
  139. package/dist/start-relay-server.js.map +1 -1
  140. package/dist/styles-api.md +8 -1
  141. package/dist/styles-examples.d.ts +1 -1
  142. package/dist/styles-examples.d.ts.map +1 -1
  143. package/dist/styles-examples.js +1 -1
  144. package/dist/styles-examples.js.map +1 -1
  145. package/dist/styles.d.ts.map +1 -1
  146. package/dist/styles.js +1 -3
  147. package/dist/styles.js.map +1 -1
  148. package/dist/test-declarations.d.ts.map +1 -1
  149. package/dist/test-utils.d.ts +1 -1
  150. package/dist/test-utils.d.ts.map +1 -1
  151. package/dist/test-utils.js +7 -5
  152. package/dist/test-utils.js.map +1 -1
  153. package/dist/utils.d.ts.map +1 -1
  154. package/dist/utils.js.map +1 -1
  155. package/dist/wait-for-page-load.d.ts.map +1 -1
  156. package/dist/wait-for-page-load.js +1 -1
  157. package/dist/wait-for-page-load.js.map +1 -1
  158. package/package.json +4 -3
  159. package/src/a11y-client.ts +5 -4
  160. package/src/aria-snapshot.test.ts +5 -2
  161. package/src/aria-snapshot.ts +306 -117
  162. package/src/aria-snapshot.unit.test.ts +199 -141
  163. package/src/aria-snapshots/github-interactive.txt +2 -0
  164. package/src/aria-snapshots/github-raw.txt +5 -1
  165. package/src/aria-snapshots/hackernews-interactive.txt +238 -241
  166. package/src/aria-snapshots/hackernews-raw.txt +265 -269
  167. package/src/assets/aria-labels-example.png +0 -0
  168. package/src/assets/aria-labels-github.png +0 -0
  169. package/src/assets/aria-labels-hacker-news.png +0 -0
  170. package/src/assets/aria-labels-old-reddit.png +0 -0
  171. package/src/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.ts +5 -0
  172. package/src/assets/cursors/screen-studio/pointer-macos-tahoe.svg +18 -0
  173. package/src/cdp-log.ts +4 -1
  174. package/src/cdp-relay.ts +1059 -737
  175. package/src/cdp-session.ts +12 -3
  176. package/src/cdp-types.ts +51 -51
  177. package/src/clean-html.ts +4 -5
  178. package/src/cli.ts +82 -55
  179. package/src/create-logger.ts +5 -3
  180. package/src/debugger-examples-types.ts +4 -1
  181. package/src/debugger.ts +1 -5
  182. package/src/diff-utils.ts +2 -5
  183. package/src/editor-examples.ts +11 -1
  184. package/src/editor.ts +10 -2
  185. package/src/executor.ts +374 -73
  186. package/src/executor.unit.test.ts +48 -1
  187. package/src/extension-connection.test.ts +612 -488
  188. package/src/ffmpeg.ts +769 -0
  189. package/src/ghost-browser.ts +4 -6
  190. package/src/ghost-cursor-client.ts +369 -0
  191. package/src/ghost-cursor.ts +110 -0
  192. package/src/htmlrewrite.test.ts +6 -2
  193. package/src/htmlrewrite.ts +348 -386
  194. package/src/kill-port.ts +1 -3
  195. package/src/locator-selector.test.ts +115 -0
  196. package/src/mcp-client.ts +1 -1
  197. package/src/mcp.ts +21 -15
  198. package/src/on-mouse-action.test.ts +196 -0
  199. package/src/page-markdown.ts +7 -7
  200. package/src/protocol.ts +73 -57
  201. package/src/recording-ghost-cursor.ts +113 -0
  202. package/src/recording-relay.ts +20 -12
  203. package/src/relay-client.ts +85 -18
  204. package/src/relay-core.test.ts +1117 -578
  205. package/src/relay-navigation.test.ts +648 -483
  206. package/src/relay-session.test.ts +984 -929
  207. package/src/relay-state.test.ts +570 -0
  208. package/src/relay-state.ts +497 -0
  209. package/src/resource.md +21 -49
  210. package/src/scoped-fs.ts +9 -3
  211. package/src/screen-recording.test.ts +111 -0
  212. package/src/screen-recording.ts +256 -31
  213. package/src/skill.md +476 -396
  214. package/src/snapshot-tools.test.ts +580 -528
  215. package/src/snapshots/shadcn-ui-accessibility-full.md +8 -8
  216. package/src/snapshots/shadcn-ui-accessibility-interactive.md +8 -8
  217. package/src/start-relay-server.ts +14 -11
  218. package/src/styles-examples.ts +8 -1
  219. package/src/styles.ts +20 -21
  220. package/src/test-declarations.ts +6 -6
  221. package/src/test-utils.ts +104 -91
  222. package/src/utils.ts +2 -1
  223. package/src/wait-for-page-load.ts +6 -1
@@ -0,0 +1,287 @@
1
+ (() => {
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ function __accessProp(key) {
7
+ return this[key];
8
+ }
9
+ var __toCommonJS = (from) => {
10
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
11
+ if (entry)
12
+ return entry;
13
+ entry = __defProp({}, "__esModule", { value: true });
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (var key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(entry, key))
17
+ __defProp(entry, key, {
18
+ get: __accessProp.bind(from, key),
19
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
20
+ });
21
+ }
22
+ __moduleCache.set(from, entry);
23
+ return entry;
24
+ };
25
+ var __moduleCache;
26
+
27
+ // src/ghost-cursor-client.ts
28
+ var exports_ghost_cursor_client = {};
29
+
30
+ // src/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.ts
31
+ var SCREENSTUDIO_POINTER_MACOS_TAHOE_DATA_URL = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjE4IiBoZWlnaHQ9Ijk1OCIgdmlld0JveD0iMCAwIDYxOCA5NTgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGZpbHRlcj0idXJsKCNmaWx0ZXIwX2RfMzg0XzI3KSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTI3LjA2MiAzNy4wMzMxTDU0MC42OTYgNDUxLjU1NUM1OTIuNjUzIDUwMy42NiA1NTUuNzk0IDU5Mi41NzQgNDgyLjIyNiA1OTIuNTc0TDQyMS44MzEgNTkyLjU2OUw0ODEuODIxIDczNS4wNTRDNDkyLjMzMSA3NjAuMDIxIDQ5Mi40NzkgNzg3LjY1MiA0ODIuMjY1IDgxMi43NjdDNDcyLjAwMiA4MzcuOTMyIDQ1Mi41NjEgODU3LjU3IDQyNy40OTYgODY4LjA4QzQxNC44NjQgODczLjM1OSA0MDEuNjQgODc2LjAyNCAzODguMTIxIDg3Ni4wMjRDMzQ3LjExNyA4NzYuMDI0IDMxMC4zNTggODUxLjYgMjk0LjQ3IDgxMy44MDRMMjMxLjQyIDY2My45MThMMTkwLjM2OCA3MDAuMzM3QzEzNy4wMjkgNzQ3LjUwOCA1MyA3MDkuNjYzIDUzIDYzOC40MTNWNjcuNjc0NEM1MyAyOC45OTAzIDk5LjcyNjggOS42NDgyOCAxMjcuMDYyIDM3LjAzMzFaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTEwMi4zMTYgOTkuNjUyQzEwMi4zMTYgOTMuMTg4MiAxMTAuMTYyIDg5LjkzMTYgMTE0LjcwMSA5NC41MjA0TDUwNC44OTcgNDg1LjU1NUM1MjYuMTY0IDUwNi44NzEgNTExLjA2NSA1NDMuMjM2IDQ4MC45NjcgNTQzLjIzNkwzNDcuNTQ2IDU0My4xNjFMNDM2LjM0MiA3NTQuMTQzQzQ0Ny41NDIgNzgwLjc4OCA0MzUuMDA5IDgxMS40MjkgNDA4LjQxNCA4MjIuNTgxQzM4MS43MiA4MzMuNzgxIDM1MS4xMjggODIxLjI5OCAzMzkuOTc3IDc5NC43MDJMMjUwLjI5MyA1ODEuMzUyTDE1OC41MTcgNjYyLjY0NEMxMzcuOTkxIDY4MC44MDEgMTA2LjMxOSA2NjguMTQ1IDEwMi42NjQgNjQyLjMyM0wxMDIuMzE2IDYzNy4zMzFWOTkuNjUyWiIgZmlsbD0iYmxhY2siLz4KPC9nPgo8ZGVmcz4KPGZpbHRlciBpZD0iZmlsdGVyMF9kXzM4NF8yNyIgeD0iMC4zNCIgeT0iMC43OTkyMTkiIHdpZHRoPSI2MTcuMzIiIGhlaWdodD0iOTU3LjE0NCIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPgo8ZmVDb2xvck1hdHJpeCBpbj0iU291cmNlQWxwaGEiIHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMCIgcmVzdWx0PSJoYXJkQWxwaGEiLz4KPGZlT2Zmc2V0IGR5PSIyOS4yNiIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyNi4zMyIvPgo8ZmVDb21wb3NpdGUgaW4yPSJoYXJkQWxwaGEiIG9wZXJhdG9yPSJvdXQiLz4KPGZlQ29sb3JNYXRyaXggdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuNjUgMCIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9ImVmZmVjdDFfZHJvcFNoYWRvd18zODRfMjciLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QxX2Ryb3BTaGFkb3dfMzg0XzI3IiByZXN1bHQ9InNoYXBlIi8+CjwvZmlsdGVyPgo8L2RlZnM+Cjwvc3ZnPg==";
32
+
33
+ // src/ghost-cursor-client.ts
34
+ var CURSOR_ID = "__playwriter_ghost_cursor__";
35
+ var SCREENSTUDIO_POINTER_ASPECT_RATIO = 618 / 958;
36
+ var SCREENSTUDIO_HOTSPOT_X_RATIO = 0.14;
37
+ var SCREENSTUDIO_HOTSPOT_Y_RATIO = 0.06;
38
+ var MINIMAL_TRIANGLE_HOTSPOT_X_RATIO = 0.07;
39
+ var MINIMAL_TRIANGLE_HOTSPOT_Y_RATIO = 0.06;
40
+ var DEFAULT_OPTIONS = {
41
+ style: "minimal",
42
+ color: "#111827",
43
+ size: 22,
44
+ zIndex: 2147483647,
45
+ easing: "cubic-bezier(0.16, 1, 0.3, 1)",
46
+ minDurationMs: 24,
47
+ maxDurationMs: 320,
48
+ speedPxPerMs: 4
49
+ };
50
+ var runtime = {
51
+ cursorElement: null,
52
+ options: DEFAULT_OPTIONS,
53
+ x: 0,
54
+ y: 0,
55
+ scale: 1,
56
+ hasPosition: false,
57
+ enabled: false
58
+ };
59
+ function clamp(options) {
60
+ const { value, min, max } = options;
61
+ return Math.min(max, Math.max(min, value));
62
+ }
63
+ function mergeOptions(options) {
64
+ if (!options) {
65
+ return DEFAULT_OPTIONS;
66
+ }
67
+ return {
68
+ style: options.style ?? DEFAULT_OPTIONS.style,
69
+ color: options.color ?? DEFAULT_OPTIONS.color,
70
+ size: options.size ?? DEFAULT_OPTIONS.size,
71
+ zIndex: options.zIndex ?? DEFAULT_OPTIONS.zIndex,
72
+ easing: options.easing ?? DEFAULT_OPTIONS.easing,
73
+ minDurationMs: options.minDurationMs ?? DEFAULT_OPTIONS.minDurationMs,
74
+ maxDurationMs: options.maxDurationMs ?? DEFAULT_OPTIONS.maxDurationMs,
75
+ speedPxPerMs: options.speedPxPerMs ?? DEFAULT_OPTIONS.speedPxPerMs
76
+ };
77
+ }
78
+ function getCursorDimensions() {
79
+ if (runtime.options.style === "screenstudio") {
80
+ const height = runtime.options.size;
81
+ const width = Math.max(10, Math.round(height * SCREENSTUDIO_POINTER_ASPECT_RATIO));
82
+ return { width, height };
83
+ }
84
+ if (runtime.options.style === "minimal") {
85
+ const size = Math.max(12, runtime.options.size);
86
+ return { width: size, height: size };
87
+ }
88
+ return { width: runtime.options.size, height: runtime.options.size };
89
+ }
90
+ function getHotspotOffsetPx() {
91
+ const dimensions = getCursorDimensions();
92
+ if (runtime.options.style === "screenstudio") {
93
+ return {
94
+ x: Math.round(dimensions.width * SCREENSTUDIO_HOTSPOT_X_RATIO),
95
+ y: Math.round(dimensions.height * SCREENSTUDIO_HOTSPOT_Y_RATIO)
96
+ };
97
+ }
98
+ if (runtime.options.style === "minimal") {
99
+ return {
100
+ x: Math.round(dimensions.width * MINIMAL_TRIANGLE_HOTSPOT_X_RATIO),
101
+ y: Math.round(dimensions.height * MINIMAL_TRIANGLE_HOTSPOT_Y_RATIO)
102
+ };
103
+ }
104
+ return {
105
+ x: Math.round(dimensions.width / 2),
106
+ y: Math.round(dimensions.height / 2)
107
+ };
108
+ }
109
+ function getBaseOpacity() {
110
+ if (runtime.options.style === "screenstudio") {
111
+ return "0.95";
112
+ }
113
+ if (runtime.options.style === "minimal") {
114
+ return "1";
115
+ }
116
+ return "0.72";
117
+ }
118
+ function applyTransform() {
119
+ if (!runtime.cursorElement) {
120
+ return;
121
+ }
122
+ const hotspot = getHotspotOffsetPx();
123
+ runtime.cursorElement.style.transform = `translate3d(${runtime.x - hotspot.x}px, ${runtime.y - hotspot.y}px, 0) scale(${runtime.scale})`;
124
+ }
125
+ function computeDurationMs(options) {
126
+ if (!runtime.hasPosition) {
127
+ return 0;
128
+ }
129
+ const dx = options.targetX - runtime.x;
130
+ const dy = options.targetY - runtime.y;
131
+ const distance = Math.hypot(dx, dy);
132
+ const rawDurationMs = distance / runtime.options.speedPxPerMs;
133
+ return clamp({
134
+ value: rawDurationMs,
135
+ min: runtime.options.minDurationMs,
136
+ max: runtime.options.maxDurationMs
137
+ });
138
+ }
139
+ function createCursorElement() {
140
+ const element = document.createElement("div");
141
+ element.id = CURSOR_ID;
142
+ element.setAttribute("aria-hidden", "true");
143
+ element.style.position = "fixed";
144
+ element.style.left = "0";
145
+ element.style.top = "0";
146
+ element.style.pointerEvents = "none";
147
+ element.style.zIndex = `${runtime.options.zIndex}`;
148
+ element.style.opacity = getBaseOpacity();
149
+ element.style.transitionProperty = "transform, opacity";
150
+ element.style.transitionTimingFunction = runtime.options.easing;
151
+ element.style.transitionDuration = "0ms";
152
+ element.style.willChange = "transform";
153
+ runtime.cursorElement = element;
154
+ applyRuntimeVisualOptions();
155
+ return element;
156
+ }
157
+ function ensureCursorElement() {
158
+ const existing = document.getElementById(CURSOR_ID);
159
+ if (existing) {
160
+ runtime.cursorElement = existing;
161
+ return existing;
162
+ }
163
+ const element = createCursorElement();
164
+ runtime.cursorElement = element;
165
+ const root = document.documentElement || document.body;
166
+ root.appendChild(element);
167
+ return element;
168
+ }
169
+ function applyRuntimeVisualOptions() {
170
+ if (!runtime.cursorElement) {
171
+ return;
172
+ }
173
+ const dimensions = getCursorDimensions();
174
+ runtime.cursorElement.style.width = `${dimensions.width}px`;
175
+ runtime.cursorElement.style.height = `${dimensions.height}px`;
176
+ runtime.cursorElement.style.zIndex = `${runtime.options.zIndex}`;
177
+ runtime.cursorElement.style.transitionTimingFunction = runtime.options.easing;
178
+ if (runtime.options.style === "screenstudio") {
179
+ runtime.cursorElement.style.borderRadius = "0";
180
+ runtime.cursorElement.style.border = "none";
181
+ runtime.cursorElement.style.backgroundColor = "transparent";
182
+ runtime.cursorElement.style.backgroundImage = `url("${SCREENSTUDIO_POINTER_MACOS_TAHOE_DATA_URL}")`;
183
+ runtime.cursorElement.style.backgroundRepeat = "no-repeat";
184
+ runtime.cursorElement.style.backgroundPosition = "left top";
185
+ runtime.cursorElement.style.backgroundSize = "contain";
186
+ runtime.cursorElement.style.backdropFilter = "none";
187
+ runtime.cursorElement.style.filter = "none";
188
+ runtime.cursorElement.style.boxShadow = "none";
189
+ runtime.cursorElement.style.opacity = getBaseOpacity();
190
+ return;
191
+ }
192
+ if (runtime.options.style === "minimal") {
193
+ const triangleSvg = `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="-1 -1 26 26"><path fill="white" stroke="${runtime.options.color}" stroke-width="1.5" stroke-linejoin="round" d="m23.284 19.124l-6.866-6.895a.4.4 0 0 1-.118-.296a.43.43 0 0 1 .163-.282l4.439-3.077a1.48 1.48 0 0 0 .621-1.48a1.48 1.48 0 0 0-1.036-1.198L1.623.302a1.14 1.14 0 0 0-1.11.282A1.13 1.13 0 0 0 .29 1.649L5.928 20.44a1.48 1.48 0 0 0 1.183 1.035a1.48 1.48 0 0 0 1.48-.621l3.078-4.44a.37.37 0 0 1 .31-.118a.43.43 0 0 1 .296.104l6.91 6.91a1.48 1.48 0 0 0 2.087 0l2.086-2.086a1.48 1.48 0 0 0-.074-2.101"/></svg>`;
194
+ const triangleDataUrl = `url("data:image/svg+xml,${encodeURIComponent(triangleSvg)}")`;
195
+ runtime.cursorElement.style.borderRadius = "0";
196
+ runtime.cursorElement.style.border = "none";
197
+ runtime.cursorElement.style.backgroundColor = "transparent";
198
+ runtime.cursorElement.style.backgroundImage = triangleDataUrl;
199
+ runtime.cursorElement.style.backgroundRepeat = "no-repeat";
200
+ runtime.cursorElement.style.backgroundSize = "contain";
201
+ runtime.cursorElement.style.backgroundPosition = "left top";
202
+ runtime.cursorElement.style.backdropFilter = "none";
203
+ runtime.cursorElement.style.boxShadow = "none";
204
+ runtime.cursorElement.style.filter = "drop-shadow(0 1px 2px rgba(0, 0, 0, 0.4))";
205
+ runtime.cursorElement.style.opacity = getBaseOpacity();
206
+ return;
207
+ }
208
+ runtime.cursorElement.style.borderRadius = "999px";
209
+ runtime.cursorElement.style.border = "none";
210
+ runtime.cursorElement.style.backgroundColor = runtime.options.color;
211
+ runtime.cursorElement.style.backgroundImage = "none";
212
+ runtime.cursorElement.style.backdropFilter = "none";
213
+ runtime.cursorElement.style.filter = "none";
214
+ runtime.cursorElement.style.boxShadow = "0 2px 10px rgba(0, 0, 0, 0.18), inset 0 0 0 2px rgba(255, 255, 255, 0.55)";
215
+ runtime.cursorElement.style.opacity = getBaseOpacity();
216
+ }
217
+ function moveCursor(options) {
218
+ if (!runtime.enabled) {
219
+ return;
220
+ }
221
+ const element = ensureCursorElement();
222
+ const durationMs = computeDurationMs({ targetX: options.x, targetY: options.y });
223
+ element.style.transitionDuration = `${Math.round(durationMs)}ms`;
224
+ runtime.x = options.x;
225
+ runtime.y = options.y;
226
+ runtime.hasPosition = true;
227
+ applyTransform();
228
+ }
229
+ function setPressed(options) {
230
+ if (!runtime.enabled) {
231
+ return;
232
+ }
233
+ const element = ensureCursorElement();
234
+ runtime.scale = options.pressed ? runtime.options.style === "screenstudio" ? 0.94 : runtime.options.style === "minimal" ? 0.93 : 0.82 : 1;
235
+ element.style.opacity = options.pressed ? "1" : getBaseOpacity();
236
+ applyTransform();
237
+ }
238
+ function enable(options) {
239
+ runtime.options = mergeOptions(options);
240
+ runtime.enabled = true;
241
+ ensureCursorElement();
242
+ applyRuntimeVisualOptions();
243
+ if (!runtime.hasPosition) {
244
+ runtime.x = Math.round(window.innerWidth / 2);
245
+ runtime.y = Math.round(window.innerHeight / 2);
246
+ runtime.scale = 1;
247
+ runtime.hasPosition = true;
248
+ }
249
+ applyTransform();
250
+ }
251
+ function disable() {
252
+ runtime.enabled = false;
253
+ runtime.scale = 1;
254
+ runtime.hasPosition = false;
255
+ if (runtime.cursorElement) {
256
+ runtime.cursorElement.remove();
257
+ runtime.cursorElement = null;
258
+ }
259
+ }
260
+ function applyMouseAction(action) {
261
+ if (!runtime.enabled) {
262
+ return;
263
+ }
264
+ if (action.type === "move" || action.type === "wheel") {
265
+ moveCursor({ x: action.x, y: action.y });
266
+ return;
267
+ }
268
+ if (action.type === "down") {
269
+ moveCursor({ x: action.x, y: action.y });
270
+ setPressed({ pressed: true });
271
+ return;
272
+ }
273
+ if (action.type === "up") {
274
+ moveCursor({ x: action.x, y: action.y });
275
+ setPressed({ pressed: false });
276
+ }
277
+ }
278
+ var api = {
279
+ enable,
280
+ disable,
281
+ applyMouseAction,
282
+ isEnabled: () => {
283
+ return runtime.enabled;
284
+ }
285
+ };
286
+ globalThis.__playwriterGhostCursor = api;
287
+ })();
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Node-side ghost cursor helpers.
3
+ * Injects the browser bundle and forwards mouse action events to the page overlay.
4
+ */
5
+ import type { Page, MouseActionEvent } from '@xmorse/playwright-core';
6
+ export interface GhostCursorClientOptions {
7
+ style?: 'minimal' | 'dot' | 'screenstudio';
8
+ color?: string;
9
+ size?: number;
10
+ zIndex?: number;
11
+ easing?: string;
12
+ minDurationMs?: number;
13
+ maxDurationMs?: number;
14
+ speedPxPerMs?: number;
15
+ }
16
+ export declare function enableGhostCursor(options: {
17
+ page: Page;
18
+ cursorOptions?: GhostCursorClientOptions;
19
+ }): Promise<void>;
20
+ export declare function disableGhostCursor(options: {
21
+ page: Page;
22
+ }): Promise<void>;
23
+ export declare function applyGhostCursorMouseAction(options: {
24
+ page: Page;
25
+ event: MouseActionEvent;
26
+ }): Promise<void>;
27
+ //# sourceMappingURL=ghost-cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ghost-cursor.d.ts","sourceRoot":"","sources":["../src/ghost-cursor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAErE,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,cAAc,CAAA;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAmCD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE;IAC/C,IAAI,EAAE,IAAI,CAAA;IACV,aAAa,CAAC,EAAE,wBAAwB,CAAA;CACzC,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhB;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAM/E;AAED,wBAAsB,2BAA2B,CAAC,OAAO,EAAE;IACzD,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,gBAAgB,CAAA;CACxB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BhB"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Node-side ghost cursor helpers.
3
+ * Injects the browser bundle and forwards mouse action events to the page overlay.
4
+ */
5
+ import fs from 'node:fs';
6
+ import path from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+ let ghostCursorCode = null;
9
+ function getGhostCursorCode() {
10
+ if (ghostCursorCode) {
11
+ return ghostCursorCode;
12
+ }
13
+ const currentDir = path.dirname(fileURLToPath(import.meta.url));
14
+ const bundlePath = path.join(currentDir, '..', 'dist', 'ghost-cursor-client.js');
15
+ ghostCursorCode = fs.readFileSync(bundlePath, 'utf-8');
16
+ return ghostCursorCode;
17
+ }
18
+ async function ensureGhostCursorInjected(options) {
19
+ const { page } = options;
20
+ const hasGhostCursor = await page.evaluate(() => {
21
+ return Boolean(globalThis.__playwriterGhostCursor);
22
+ });
23
+ if (hasGhostCursor) {
24
+ return;
25
+ }
26
+ const code = getGhostCursorCode();
27
+ await page.evaluate(code);
28
+ }
29
+ export async function enableGhostCursor(options) {
30
+ const { page, cursorOptions } = options;
31
+ await ensureGhostCursorInjected({ page });
32
+ await page.evaluate(({ optionsFromNode }) => {
33
+ const api = globalThis.__playwriterGhostCursor;
34
+ api?.enable(optionsFromNode);
35
+ }, { optionsFromNode: cursorOptions });
36
+ }
37
+ export async function disableGhostCursor(options) {
38
+ const { page } = options;
39
+ await page.evaluate(() => {
40
+ const api = globalThis.__playwriterGhostCursor;
41
+ api?.disable();
42
+ });
43
+ }
44
+ export async function applyGhostCursorMouseAction(options) {
45
+ const { page, event } = options;
46
+ const applied = await page.evaluate(({ serializedEvent }) => {
47
+ const api = globalThis.__playwriterGhostCursor;
48
+ if (!api) {
49
+ return false;
50
+ }
51
+ api.applyMouseAction(serializedEvent);
52
+ return true;
53
+ }, { serializedEvent: event });
54
+ if (applied) {
55
+ return;
56
+ }
57
+ await ensureGhostCursorInjected({ page });
58
+ await page.evaluate(({ serializedEvent }) => {
59
+ const api = globalThis.__playwriterGhostCursor;
60
+ api?.applyMouseAction(serializedEvent);
61
+ }, { serializedEvent: event });
62
+ }
63
+ //# sourceMappingURL=ghost-cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ghost-cursor.js","sourceRoot":"","sources":["../src/ghost-cursor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"htmlrewrite.d.ts","sourceRoot":"","sources":["../src/htmlrewrite.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,wBAAsB,mBAAmB,CAAC,EACtC,IAAI,EACJ,UAAkB,EAClB,UAAgB,EAChB,aAAmB,GACtB,EAAE,iBAAiB,mBA4ZnB"}
1
+ {"version":3,"file":"htmlrewrite.d.ts","sourceRoot":"","sources":["../src/htmlrewrite.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,wBAAsB,mBAAmB,CAAC,EACxC,IAAI,EACJ,UAAkB,EAClB,UAAgB,EAChB,aAAmB,GACpB,EAAE,iBAAiB,mBAsXnB"}
@@ -1,16 +1,7 @@
1
1
  import posthtml from 'posthtml';
2
2
  import beautify from 'posthtml-beautify';
3
3
  export async function formatHtmlForPrompt({ html, keepStyles = false, maxAttrLen = 200, maxContentLen = 500, }) {
4
- const tagsToRemove = [
5
- 'hint',
6
- 'style',
7
- 'link',
8
- 'script',
9
- 'meta',
10
- 'noscript',
11
- 'svg',
12
- 'head',
13
- ];
4
+ const tagsToRemove = ['hint', 'style', 'link', 'script', 'meta', 'noscript', 'svg', 'head'];
14
5
  const attributesToKeep = [
15
6
  // Standard descriptive attributes
16
7
  'label',
@@ -90,22 +81,17 @@ export async function formatHtmlForPrompt({ html, keepStyles = false, maxAttrLen
90
81
  if (node.attrs) {
91
82
  const newAttrs = {};
92
83
  for (const [attr, value] of Object.entries(node.attrs)) {
93
- const shouldKeep = attr.startsWith('data-') ||
94
- attributesToKeep.includes(attr);
84
+ const shouldKeep = attr.startsWith('data-') || attributesToKeep.includes(attr);
95
85
  if (shouldKeep) {
96
86
  // Truncate attribute values
97
- newAttrs[attr] = typeof value === 'string'
98
- ? truncate(value, maxAttrLen)
99
- : value;
87
+ newAttrs[attr] = typeof value === 'string' ? truncate(value, maxAttrLen) : value;
100
88
  }
101
89
  }
102
90
  node.attrs = newAttrs;
103
91
  }
104
92
  // Process content recursively
105
93
  if (node.content && Array.isArray(node.content)) {
106
- node.content = node.content
107
- .map(processNode)
108
- .filter(item => {
94
+ node.content = node.content.map(processNode).filter((item) => {
109
95
  if (item === null)
110
96
  return false;
111
97
  if (typeof item === 'string') {
@@ -118,7 +104,7 @@ export async function formatHtmlForPrompt({ html, keepStyles = false, maxAttrLen
118
104
  return node;
119
105
  };
120
106
  // Process all root nodes
121
- return tree.map(processNode).filter(item => item !== null);
107
+ return tree.map(processNode).filter((item) => item !== null);
122
108
  };
123
109
  };
124
110
  // Plugin to remove aria-hidden="true" subtrees entirely
@@ -136,9 +122,7 @@ export async function formatHtmlForPrompt({ html, keepStyles = false, maxAttrLen
136
122
  }
137
123
  // Process children recursively
138
124
  if (node.content && Array.isArray(node.content)) {
139
- node.content = node.content
140
- .map(processNode)
141
- .filter((item) => item !== null);
125
+ node.content = node.content.map(processNode).filter((item) => item !== null);
142
126
  }
143
127
  return node;
144
128
  };
@@ -163,9 +147,7 @@ export async function formatHtmlForPrompt({ html, keepStyles = false, maxAttrLen
163
147
  }
164
148
  // Process children recursively
165
149
  if (node.content && Array.isArray(node.content)) {
166
- node.content = node.content
167
- .map(processNode)
168
- .filter((item) => item !== null);
150
+ node.content = node.content.map(processNode).filter((item) => item !== null);
169
151
  }
170
152
  return node;
171
153
  };
@@ -178,15 +160,7 @@ export async function formatHtmlForPrompt({ html, keepStyles = false, maxAttrLen
178
160
  // - No actionable elements with meaningful attributes
179
161
  const removeDecorativeSubtreesPlugin = () => {
180
162
  const actionableTags = ['button', 'a', 'input', 'select', 'textarea'];
181
- const meaningfulAttrs = [
182
- 'aria-label',
183
- 'title',
184
- 'alt',
185
- 'value',
186
- 'placeholder',
187
- 'href',
188
- 'name',
189
- ];
163
+ const meaningfulAttrs = ['aria-label', 'title', 'alt', 'value', 'placeholder', 'href', 'name'];
190
164
  // Form elements are always actionable, keep unconditionally
191
165
  const formTags = ['input', 'select', 'textarea'];
192
166
  // Check if a subtree has any useful content
@@ -236,23 +210,11 @@ export async function formatHtmlForPrompt({ html, keepStyles = false, maxAttrLen
236
210
  return node;
237
211
  // First process children
238
212
  if (node.content && Array.isArray(node.content)) {
239
- node.content = node.content
240
- .map(processNode)
241
- .filter((item) => item !== null);
213
+ node.content = node.content.map(processNode).filter((item) => item !== null);
242
214
  }
243
215
  // After processing children, check if this subtree is now decorative
244
216
  // Skip root-level semantic elements (body, main, etc.)
245
- const semanticTags = [
246
- 'html',
247
- 'body',
248
- 'main',
249
- 'header',
250
- 'footer',
251
- 'nav',
252
- 'section',
253
- 'article',
254
- 'aside',
255
- ];
217
+ const semanticTags = ['html', 'body', 'main', 'header', 'footer', 'nav', 'section', 'article', 'aside'];
256
218
  if (semanticTags.includes(node.tag.toLowerCase())) {
257
219
  return node;
258
220
  }
@@ -288,7 +250,7 @@ export async function formatHtmlForPrompt({ html, keepStyles = false, maxAttrLen
288
250
  // - has no attributes
289
251
  // - has exactly one non-whitespace child that is an element
290
252
  if (hasNoAttrs(node) && node.content && Array.isArray(node.content)) {
291
- const nonWhitespaceChildren = node.content.filter(c => !isWhitespaceOnly(c));
253
+ const nonWhitespaceChildren = node.content.filter((c) => !isWhitespaceOnly(c));
292
254
  if (nonWhitespaceChildren.length === 1) {
293
255
  const onlyChild = nonWhitespaceChildren[0];
294
256
  // If the only child is also an element (not text), unwrap
@@ -322,14 +284,14 @@ export async function formatHtmlForPrompt({ html, keepStyles = false, maxAttrLen
322
284
  if (!node.tag)
323
285
  return false;
324
286
  const hasAttrs = node.attrs && Object.keys(node.attrs).length > 0;
325
- const hasContent = node.content && node.content.some(c => typeof c === 'string' ? c.trim().length > 0 : true);
287
+ const hasContent = node.content && node.content.some((c) => (typeof c === 'string' ? c.trim().length > 0 : true));
326
288
  return !hasAttrs && !hasContent;
327
289
  };
328
290
  const removeEmpty = (content) => {
329
291
  if (!content || !Array.isArray(content))
330
292
  return content;
331
293
  return content
332
- .map(node => {
294
+ .map((node) => {
333
295
  if (typeof node === 'string')
334
296
  return node;
335
297
  if (node.content) {
@@ -337,7 +299,7 @@ export async function formatHtmlForPrompt({ html, keepStyles = false, maxAttrLen
337
299
  }
338
300
  return node;
339
301
  })
340
- .filter(node => !isEmptyElement(node));
302
+ .filter((node) => !isEmptyElement(node));
341
303
  };
342
304
  // Apply multiple passes until stable
343
305
  let result = removeEmpty(tree);
@@ -363,12 +325,12 @@ export async function formatHtmlForPrompt({ html, keepStyles = false, maxAttrLen
363
325
  rules: {
364
326
  indent: 1, // 1-space indent
365
327
  blankLines: false, // no extra blank lines
366
- maxlen: 100000 // effectively never wrap by content length
328
+ maxlen: 100000, // effectively never wrap by content length
367
329
  },
368
330
  jsBeautifyOptions: {
369
331
  wrap_line_length: 0, // disable js-beautify wrapping
370
- preserve_newlines: false // reduce stray newlines
371
- }
332
+ preserve_newlines: false, // reduce stray newlines
333
+ },
372
334
  }));
373
335
  // Process with await
374
336
  const result = await processor.process(html);
@@ -1 +1 @@
1
- {"version":3,"file":"htmlrewrite.js","sourceRoot":"","sources":["../src/htmlrewrite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"htmlrewrite.js","sourceRoot":"","sources":["../src/htmlrewrite.ts"],"names":[],"mappings":"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"}