playwriter 0.0.55 → 0.0.57

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 (210) hide show
  1. package/dist/a11y-client.js +194 -0
  2. package/dist/aria-snapshot.d.ts +134 -72
  3. package/dist/aria-snapshot.d.ts.map +1 -1
  4. package/dist/aria-snapshot.js +934 -786
  5. package/dist/aria-snapshot.js.map +1 -1
  6. package/dist/aria-snapshot.test.js +146 -23
  7. package/dist/aria-snapshot.test.js.map +1 -1
  8. package/dist/aria-snapshot.unit.test.d.ts +2 -0
  9. package/dist/aria-snapshot.unit.test.d.ts.map +1 -0
  10. package/dist/aria-snapshot.unit.test.js +500 -0
  11. package/dist/aria-snapshot.unit.test.js.map +1 -0
  12. package/dist/bippy.js +1 -1
  13. package/dist/cdp-log.d.ts +16 -0
  14. package/dist/cdp-log.d.ts.map +1 -0
  15. package/dist/cdp-log.js +46 -0
  16. package/dist/cdp-log.js.map +1 -0
  17. package/dist/cdp-relay.d.ts +3 -1
  18. package/dist/cdp-relay.d.ts.map +1 -1
  19. package/dist/cdp-relay.js +598 -163
  20. package/dist/cdp-relay.js.map +1 -1
  21. package/dist/cdp-session.d.ts +24 -29
  22. package/dist/cdp-session.d.ts.map +1 -1
  23. package/dist/cdp-session.js +25 -145
  24. package/dist/cdp-session.js.map +1 -1
  25. package/dist/cdp-types.d.ts +2 -0
  26. package/dist/cdp-types.d.ts.map +1 -1
  27. package/dist/cdp-types.js.map +1 -1
  28. package/dist/clean-html.d.ts +1 -1
  29. package/dist/clean-html.d.ts.map +1 -1
  30. package/dist/clean-html.js +18 -26
  31. package/dist/clean-html.js.map +1 -1
  32. package/dist/cli.js +165 -29
  33. package/dist/cli.js.map +1 -1
  34. package/dist/debugger-examples-types.d.ts +5 -5
  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 +0 -1
  38. package/dist/debugger.js.map +1 -1
  39. package/dist/diff-utils.d.ts +20 -0
  40. package/dist/diff-utils.d.ts.map +1 -0
  41. package/dist/diff-utils.js +53 -0
  42. package/dist/diff-utils.js.map +1 -0
  43. package/dist/diff-utils.test.d.ts +2 -0
  44. package/dist/diff-utils.test.d.ts.map +1 -0
  45. package/dist/diff-utils.test.js +137 -0
  46. package/dist/diff-utils.test.js.map +1 -0
  47. package/dist/editor.d.ts.map +1 -1
  48. package/dist/editor.js +36 -9
  49. package/dist/editor.js.map +1 -1
  50. package/dist/executor.d.ts +33 -4
  51. package/dist/executor.d.ts.map +1 -1
  52. package/dist/executor.js +349 -133
  53. package/dist/executor.js.map +1 -1
  54. package/dist/executor.unit.test.d.ts +2 -0
  55. package/dist/executor.unit.test.d.ts.map +1 -0
  56. package/dist/executor.unit.test.js +78 -0
  57. package/dist/executor.unit.test.js.map +1 -0
  58. package/dist/extension-connection.test.d.ts +2 -0
  59. package/dist/extension-connection.test.d.ts.map +1 -0
  60. package/dist/extension-connection.test.js +522 -0
  61. package/dist/extension-connection.test.js.map +1 -0
  62. package/dist/ghost-browser.d.ts +62 -0
  63. package/dist/ghost-browser.d.ts.map +1 -0
  64. package/dist/ghost-browser.js +107 -0
  65. package/dist/ghost-browser.js.map +1 -0
  66. package/dist/htmlrewrite.d.ts.map +1 -1
  67. package/dist/htmlrewrite.js +157 -1
  68. package/dist/htmlrewrite.js.map +1 -1
  69. package/dist/htmlrewrite.test.js +5849 -11860
  70. package/dist/htmlrewrite.test.js.map +1 -1
  71. package/dist/index.d.ts +3 -1
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +2 -1
  74. package/dist/index.js.map +1 -1
  75. package/dist/page-markdown.d.ts +40 -0
  76. package/dist/page-markdown.d.ts.map +1 -0
  77. package/dist/page-markdown.js +181 -0
  78. package/dist/page-markdown.js.map +1 -0
  79. package/dist/prompt.md +290 -52
  80. package/dist/protocol.d.ts +114 -1
  81. package/dist/protocol.d.ts.map +1 -1
  82. package/dist/react-source.d.ts +1 -1
  83. package/dist/react-source.d.ts.map +1 -1
  84. package/dist/react-source.js +0 -1
  85. package/dist/react-source.js.map +1 -1
  86. package/dist/readability.js +1660 -0
  87. package/dist/recording-relay.d.ts +47 -0
  88. package/dist/recording-relay.d.ts.map +1 -0
  89. package/dist/recording-relay.js +217 -0
  90. package/dist/recording-relay.js.map +1 -0
  91. package/dist/relay-core.test.d.ts +2 -0
  92. package/dist/relay-core.test.d.ts.map +1 -0
  93. package/dist/relay-core.test.js +823 -0
  94. package/dist/relay-core.test.js.map +1 -0
  95. package/dist/relay-navigation.test.d.ts +2 -0
  96. package/dist/relay-navigation.test.d.ts.map +1 -0
  97. package/dist/relay-navigation.test.js +490 -0
  98. package/dist/relay-navigation.test.js.map +1 -0
  99. package/dist/relay-session.test.d.ts +2 -0
  100. package/dist/relay-session.test.d.ts.map +1 -0
  101. package/dist/relay-session.test.js +1037 -0
  102. package/dist/relay-session.test.js.map +1 -0
  103. package/dist/screen-recording.d.ts +79 -0
  104. package/dist/screen-recording.d.ts.map +1 -0
  105. package/dist/screen-recording.js +117 -0
  106. package/dist/screen-recording.js.map +1 -0
  107. package/dist/selector-generator.js +1 -1
  108. package/dist/snapshot-tools.test.d.ts +2 -0
  109. package/dist/snapshot-tools.test.d.ts.map +1 -0
  110. package/dist/snapshot-tools.test.js +814 -0
  111. package/dist/snapshot-tools.test.js.map +1 -0
  112. package/dist/start-relay-server.d.ts.map +1 -1
  113. package/dist/start-relay-server.js +2 -0
  114. package/dist/start-relay-server.js.map +1 -1
  115. package/dist/styles-api.md +1 -1
  116. package/dist/styles.d.ts +1 -1
  117. package/dist/styles.d.ts.map +1 -1
  118. package/dist/styles.js +0 -1
  119. package/dist/styles.js.map +1 -1
  120. package/dist/{mcp.test.d.ts → test-declarations.d.ts} +4 -1
  121. package/dist/test-declarations.d.ts.map +1 -0
  122. package/dist/test-declarations.js +2 -0
  123. package/dist/test-declarations.js.map +1 -0
  124. package/dist/test-utils.d.ts +27 -2
  125. package/dist/test-utils.d.ts.map +1 -1
  126. package/dist/test-utils.js +106 -3
  127. package/dist/test-utils.js.map +1 -1
  128. package/dist/utils.d.ts +4 -1
  129. package/dist/utils.d.ts.map +1 -1
  130. package/dist/utils.js +20 -4
  131. package/dist/utils.js.map +1 -1
  132. package/dist/wait-for-page-load.d.ts +1 -1
  133. package/dist/wait-for-page-load.d.ts.map +1 -1
  134. package/package.json +9 -5
  135. package/src/__snapshots__/ax-debug/github-ax-tree.json +40735 -0
  136. package/src/__snapshots__/ax-debug/github-dom-flat.json +41418 -0
  137. package/src/__snapshots__/ax-debug/hackernews-ax-tree.json +53112 -0
  138. package/src/__snapshots__/ax-debug/hackernews-dom-flat.json +16322 -0
  139. package/src/__snapshots__/x.com.processed.html +684 -975
  140. package/src/__snapshots__/x.com.processed.withStyles.html +89 -2066
  141. package/src/a11y-client.ts +240 -0
  142. package/src/aria-snapshot.test.ts +163 -27
  143. package/src/aria-snapshot.ts +1121 -978
  144. package/src/aria-snapshot.unit.test.ts +557 -0
  145. package/src/aria-snapshots/github-content.md +77 -0
  146. package/src/aria-snapshots/github-interactive.txt +190 -246
  147. package/src/aria-snapshots/github-raw.txt +307 -369
  148. package/src/aria-snapshots/hackernews-content.md +3 -0
  149. package/src/aria-snapshots/hackernews-interactive.txt +474 -399
  150. package/src/aria-snapshots/hackernews-raw.txt +424 -884
  151. package/src/assets/aria-labels-github.png +0 -0
  152. package/src/assets/aria-labels-google.png +0 -0
  153. package/src/assets/aria-labels-hacker-news.png +0 -0
  154. package/src/cdp-log.ts +65 -0
  155. package/src/cdp-relay.ts +727 -191
  156. package/src/cdp-session.ts +39 -176
  157. package/src/cdp-types.ts +3 -0
  158. package/src/clean-html.ts +21 -33
  159. package/src/cli.ts +205 -35
  160. package/src/debugger-examples-types.ts +5 -5
  161. package/src/debugger.ts +3 -4
  162. package/src/diff-utils.test.ts +152 -0
  163. package/src/diff-utils.ts +73 -0
  164. package/src/editor.ts +40 -12
  165. package/src/executor.ts +495 -224
  166. package/src/executor.unit.test.ts +90 -0
  167. package/src/extension-connection.test.ts +633 -0
  168. package/src/ghost-browser.ts +151 -0
  169. package/src/htmlrewrite.test.ts +5850 -11859
  170. package/src/htmlrewrite.ts +174 -1
  171. package/src/index.ts +3 -1
  172. package/src/page-markdown.ts +240 -0
  173. package/src/protocol.ts +140 -1
  174. package/src/react-source.ts +3 -4
  175. package/src/recording-relay.ts +267 -0
  176. package/src/relay-core.test.ts +932 -0
  177. package/src/relay-navigation.test.ts +593 -0
  178. package/src/relay-session.test.ts +1286 -0
  179. package/src/screen-recording.ts +191 -0
  180. package/src/skill.md +305 -57
  181. package/src/snapshot-tools.test.ts +966 -0
  182. package/src/snapshots/hacker-news-accessibility-full.md +79 -0
  183. package/src/snapshots/hacker-news-accessibility-interactive.md +42 -0
  184. package/src/snapshots/hacker-news-content.md +21 -0
  185. package/src/snapshots/page-markdown-output.txt +16 -0
  186. package/src/snapshots/shadcn-ui-accessibility-full.md +192 -0
  187. package/src/snapshots/shadcn-ui-accessibility-interactive.md +131 -0
  188. package/src/snapshots/shadcn-ui-content.md +13 -0
  189. package/src/start-relay-server.ts +2 -0
  190. package/src/styles.ts +4 -5
  191. package/src/test-declarations.ts +13 -0
  192. package/src/test-utils.ts +127 -3
  193. package/src/utils.ts +31 -4
  194. package/src/wait-for-page-load.ts +1 -1
  195. package/dist/mcp.test.d.ts.map +0 -1
  196. package/dist/mcp.test.js +0 -3198
  197. package/dist/mcp.test.js.map +0 -1
  198. package/src/aria-snapshots/github-compact.txt +0 -369
  199. package/src/aria-snapshots/github-interactive-dedup.txt +0 -246
  200. package/src/aria-snapshots/github-interactive-flat.txt +0 -125
  201. package/src/aria-snapshots/hackernews-compact.txt +0 -748
  202. package/src/aria-snapshots/hackernews-interactive-dedup.txt +0 -399
  203. package/src/aria-snapshots/hackernews-interactive-flat.txt +0 -230
  204. package/src/assets/aria-labels-github-snapshot.txt +0 -369
  205. package/src/assets/aria-labels-google-snapshot.txt +0 -31
  206. package/src/assets/aria-labels-hacker-news-snapshot.txt +0 -884
  207. package/src/assets/framer.html +0 -4174
  208. package/src/mcp.test.ts +0 -3838
  209. package/src/snapshots/hacker-news-initial-accessibility.md +0 -105
  210. package/src/snapshots/shadcn-ui-accessibility.md +0 -144
@@ -0,0 +1,194 @@
1
+ (() => {
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
7
+ var __toCommonJS = (from) => {
8
+ var entry = __moduleCache.get(from), desc;
9
+ if (entry)
10
+ return entry;
11
+ entry = __defProp({}, "__esModule", { value: true });
12
+ if (from && typeof from === "object" || typeof from === "function")
13
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ }));
17
+ __moduleCache.set(from, entry);
18
+ return entry;
19
+ };
20
+ var __export = (target, all) => {
21
+ for (var name in all)
22
+ __defProp(target, name, {
23
+ get: all[name],
24
+ enumerable: true,
25
+ configurable: true,
26
+ set: (newValue) => all[name] = () => newValue
27
+ });
28
+ };
29
+
30
+ // src/a11y-client.ts
31
+ var exports_a11y_client = {};
32
+ __export(exports_a11y_client, {
33
+ hideA11yLabels: () => hideA11yLabels
34
+ });
35
+ var LABELS_CONTAINER_ID = "__playwriter_labels__";
36
+ var LABELS_TIMER_KEY = "__playwriter_labels_timer__";
37
+ var ROLE_COLORS = {
38
+ link: ["#FFF785", "#FFC542", "#E3BE23"],
39
+ button: ["#FFE0B2", "#FFCC80", "#FFB74D"],
40
+ textbox: ["#FFCDD2", "#EF9A9A", "#E57373"],
41
+ combobox: ["#F8BBD0", "#F48FB1", "#F06292"],
42
+ searchbox: ["#F8BBD0", "#F48FB1", "#F06292"],
43
+ checkbox: ["#C8E6C9", "#A5D6A7", "#81C784"],
44
+ radio: ["#C8E6C9", "#A5D6A7", "#81C784"],
45
+ slider: ["#BBDEFB", "#90CAF9", "#64B5F6"],
46
+ spinbutton: ["#BBDEFB", "#90CAF9", "#64B5F6"],
47
+ switch: ["#D1C4E9", "#B39DDB", "#9575CD"],
48
+ menuitem: ["#FFE0B2", "#FFCC80", "#FFB74D"],
49
+ menuitemcheckbox: ["#FFE0B2", "#FFCC80", "#FFB74D"],
50
+ menuitemradio: ["#FFE0B2", "#FFCC80", "#FFB74D"],
51
+ option: ["#FFE0B2", "#FFCC80", "#FFB74D"],
52
+ tab: ["#FFE0B2", "#FFCC80", "#FFB74D"],
53
+ treeitem: ["#FFE0B2", "#FFCC80", "#FFB74D"],
54
+ img: ["#B3E5FC", "#81D4FA", "#4FC3F7"],
55
+ video: ["#B3E5FC", "#81D4FA", "#4FC3F7"],
56
+ audio: ["#B3E5FC", "#81D4FA", "#4FC3F7"]
57
+ };
58
+ var DEFAULT_COLORS = ["#FFF9C4", "#FFF59D", "#FFEB3B"];
59
+ function renderA11yLabels(labels) {
60
+ const doc = document;
61
+ const win = window;
62
+ if (win[LABELS_TIMER_KEY]) {
63
+ win.clearTimeout(win[LABELS_TIMER_KEY]);
64
+ win[LABELS_TIMER_KEY] = null;
65
+ }
66
+ doc.getElementById(LABELS_CONTAINER_ID)?.remove();
67
+ const container = doc.createElement("div");
68
+ container.id = LABELS_CONTAINER_ID;
69
+ container.style.cssText = "position:absolute;left:0;top:0;z-index:2147483647;pointer-events:none;";
70
+ const style = doc.createElement("style");
71
+ style.textContent = `
72
+ .__pw_label__ {
73
+ position: absolute;
74
+ font: bold 12px Helvetica, Arial, sans-serif;
75
+ padding: 1px 4px;
76
+ border-radius: 3px;
77
+ color: black;
78
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.6);
79
+ white-space: nowrap;
80
+ }
81
+ `;
82
+ container.appendChild(style);
83
+ const svg = doc.createElementNS("http://www.w3.org/2000/svg", "svg");
84
+ svg.style.cssText = "position:absolute;left:0;top:0;pointer-events:none;overflow:visible;";
85
+ svg.setAttribute("width", `${doc.documentElement.scrollWidth}`);
86
+ svg.setAttribute("height", `${doc.documentElement.scrollHeight}`);
87
+ const defs = doc.createElementNS("http://www.w3.org/2000/svg", "defs");
88
+ svg.appendChild(defs);
89
+ const markerCache = {};
90
+ function getArrowMarkerId(color) {
91
+ if (markerCache[color]) {
92
+ return markerCache[color];
93
+ }
94
+ const markerId = `arrow-${color.replace("#", "")}`;
95
+ const marker = doc.createElementNS("http://www.w3.org/2000/svg", "marker");
96
+ marker.setAttribute("id", markerId);
97
+ marker.setAttribute("viewBox", "0 0 10 10");
98
+ marker.setAttribute("refX", "9");
99
+ marker.setAttribute("refY", "5");
100
+ marker.setAttribute("markerWidth", "6");
101
+ marker.setAttribute("markerHeight", "6");
102
+ marker.setAttribute("orient", "auto-start-reverse");
103
+ const path = doc.createElementNS("http://www.w3.org/2000/svg", "path");
104
+ path.setAttribute("d", "M 0 0 L 10 5 L 0 10 z");
105
+ path.setAttribute("fill", color);
106
+ marker.appendChild(path);
107
+ defs.appendChild(marker);
108
+ markerCache[color] = markerId;
109
+ return markerId;
110
+ }
111
+ container.appendChild(svg);
112
+ const placedLabels = [];
113
+ const LABEL_HEIGHT = 17;
114
+ const LABEL_CHAR_WIDTH = 7;
115
+ const viewportLeft = win.scrollX;
116
+ const viewportTop = win.scrollY;
117
+ const viewportRight = viewportLeft + win.innerWidth;
118
+ const viewportBottom = viewportTop + win.innerHeight;
119
+ let count = 0;
120
+ for (const { ref, role, box } of labels) {
121
+ const rectLeft = box.x;
122
+ const rectTop = box.y;
123
+ const rectRight = rectLeft + box.width;
124
+ const rectBottom = rectTop + box.height;
125
+ if (box.width <= 0 || box.height <= 0) {
126
+ continue;
127
+ }
128
+ if (rectRight < viewportLeft || rectLeft > viewportRight || rectBottom < viewportTop || rectTop > viewportBottom) {
129
+ continue;
130
+ }
131
+ const labelWidth = ref.length * LABEL_CHAR_WIDTH + 8;
132
+ const labelLeft = rectLeft;
133
+ const labelTop = Math.max(0, rectTop - LABEL_HEIGHT);
134
+ const labelRect = {
135
+ left: labelLeft,
136
+ top: labelTop,
137
+ right: labelLeft + labelWidth,
138
+ bottom: labelTop + LABEL_HEIGHT
139
+ };
140
+ let overlaps = false;
141
+ for (const placed of placedLabels) {
142
+ if (labelRect.left < placed.right && labelRect.right > placed.left && labelRect.top < placed.bottom && labelRect.bottom > placed.top) {
143
+ overlaps = true;
144
+ break;
145
+ }
146
+ }
147
+ if (overlaps) {
148
+ continue;
149
+ }
150
+ const [gradTop, gradBottom, border] = ROLE_COLORS[role] || DEFAULT_COLORS;
151
+ const label = doc.createElement("div");
152
+ label.className = "__pw_label__";
153
+ label.textContent = ref;
154
+ label.style.background = `linear-gradient(to bottom, ${gradTop} 0%, ${gradBottom} 100%)`;
155
+ label.style.border = `1px solid ${border}`;
156
+ label.style.left = `${labelLeft}px`;
157
+ label.style.top = `${labelTop}px`;
158
+ container.appendChild(label);
159
+ const line = doc.createElementNS("http://www.w3.org/2000/svg", "line");
160
+ const labelCenterX = labelLeft + labelWidth / 2;
161
+ const labelBottomY = labelTop + LABEL_HEIGHT;
162
+ const elementCenterX = rectLeft + box.width / 2;
163
+ const elementCenterY = rectTop + box.height / 2;
164
+ line.setAttribute("x1", `${labelCenterX}`);
165
+ line.setAttribute("y1", `${labelBottomY}`);
166
+ line.setAttribute("x2", `${elementCenterX}`);
167
+ line.setAttribute("y2", `${elementCenterY}`);
168
+ line.setAttribute("stroke", border);
169
+ line.setAttribute("stroke-width", "1.5");
170
+ line.setAttribute("marker-end", `url(#${getArrowMarkerId(border)})`);
171
+ svg.appendChild(line);
172
+ placedLabels.push(labelRect);
173
+ count++;
174
+ }
175
+ doc.documentElement.appendChild(container);
176
+ win[LABELS_TIMER_KEY] = win.setTimeout(() => {
177
+ doc.getElementById(LABELS_CONTAINER_ID)?.remove();
178
+ win[LABELS_TIMER_KEY] = null;
179
+ }, 30000);
180
+ return count;
181
+ }
182
+ function hideA11yLabels() {
183
+ const win = window;
184
+ if (win[LABELS_TIMER_KEY]) {
185
+ win.clearTimeout(win[LABELS_TIMER_KEY]);
186
+ win[LABELS_TIMER_KEY] = null;
187
+ }
188
+ document.getElementById(LABELS_CONTAINER_ID)?.remove();
189
+ }
190
+ globalThis.__a11y = {
191
+ renderA11yLabels,
192
+ hideA11yLabels
193
+ };
194
+ })();
@@ -1,60 +1,24 @@
1
- import type { Page, Locator, ElementHandle } from 'playwright-core';
2
- export type SnapshotFormat = 'raw' | 'compact' | 'interactive' | 'interactive-dedup';
1
+ import type { Page, Locator, ElementHandle, Frame, FrameLocator } from '@xmorse/playwright-core';
2
+ import type { Protocol } from 'devtools-protocol';
3
+ import type { ICDPSession } from './cdp-session.js';
4
+ export type SnapshotFormat = 'raw';
3
5
  export declare const DEFAULT_SNAPSHOT_FORMAT: SnapshotFormat;
4
- /**
5
- * Apply a snapshot format transformation with error handling.
6
- * If processing fails, logs the error and returns the raw snapshot.
7
- */
8
- export declare function formatSnapshot(snapshot: string, format: SnapshotFormat, logger?: {
9
- error: (...args: unknown[]) => void;
10
- }): string;
11
- export interface CompactSnapshotOptions {
12
- /** Remove [cursor=pointer] hints (default: true) */
13
- removeCursorPointer?: boolean;
14
- /** Remove [active] markers (default: true) */
15
- removeActive?: boolean;
16
- /** Remove empty structural rows/cells (default: true) */
17
- removeEmptyStructural?: boolean;
18
- /** Remove text separators like "|" (default: true) */
19
- removeTextSeparators?: boolean;
20
- /** Remove /url: metadata lines (default: false) */
21
- removeUrls?: boolean;
22
- }
23
- export interface InteractiveSnapshotOptions {
24
- /** Keep /url: metadata for links (default: false) */
25
- keepUrls?: boolean;
26
- /** Keep image elements (default: true) */
27
- keepImages?: boolean;
28
- /** Keep tree structure, removing only empty branches (default: true) */
29
- keepStructure?: boolean;
30
- /** Keep headings for context (default: true) */
31
- keepHeadings?: boolean;
32
- /** Remove unnamed generic/group wrappers (default: true) */
33
- removeGenericWrappers?: boolean;
34
- }
35
- /**
36
- * Post-process a snapshot to make it more compact.
37
- * Removes noise while preserving structure.
38
- * Typical reduction: 15-25%
39
- */
40
- export declare function compactSnapshot(snapshot: string, options?: CompactSnapshotOptions): string;
41
- /**
42
- * Post-process a snapshot to show only interactive elements.
43
- * Like agent-browser's compact mode - keeps structure but only refs on interactive elements.
44
- * Typical reduction: 50-65% with structure, 80-90% flat
45
- */
46
- export declare function interactiveSnapshot(snapshot: string, options?: InteractiveSnapshotOptions): string;
47
- /**
48
- * Remove duplicate text from parent elements when the same text appears in descendants.
49
- * For example, if a row's name is "upvote | story title" and it contains children with
50
- * those exact names, the parent's name is redundant and can be removed.
51
- */
52
- export declare function deduplicateSnapshot(snapshot: string): string;
53
6
  export interface AriaRef {
54
7
  role: string;
55
8
  name: string;
56
9
  ref: string;
10
+ shortRef: string;
11
+ backendNodeId?: Protocol.DOM.BackendNodeId;
57
12
  }
13
+ export type AriaSnapshotNode = {
14
+ role: string;
15
+ name: string;
16
+ locator?: string;
17
+ ref?: string;
18
+ shortRef?: string;
19
+ backendNodeId?: Protocol.DOM.BackendNodeId;
20
+ children: AriaSnapshotNode[];
21
+ };
58
22
  export interface ScreenshotResult {
59
23
  path: string;
60
24
  base64: string;
@@ -64,58 +28,152 @@ export interface ScreenshotResult {
64
28
  }
65
29
  export interface AriaSnapshotResult {
66
30
  snapshot: string;
31
+ tree: AriaSnapshotNode[];
32
+ refs: AriaRef[];
67
33
  refToElement: Map<string, {
68
34
  role: string;
69
35
  name: string;
36
+ shortRef: string;
70
37
  }>;
71
- refHandles: Array<{
72
- ref: string;
73
- handle: ElementHandle;
74
- }>;
38
+ refToSelector: Map<string, string>;
39
+ /**
40
+ * Get a CSS selector for a ref. Use with page.locator().
41
+ * For stable test IDs, returns [data-testid="..."] or [id="..."]
42
+ * For fallback refs, returns a role-based selector.
43
+ */
44
+ getSelectorForRef: (ref: string) => string | null;
75
45
  getRefsForLocators: (locators: Array<Locator | ElementHandle>) => Promise<Array<AriaRef | null>>;
76
46
  getRefForLocator: (locator: Locator | ElementHandle) => Promise<AriaRef | null>;
77
47
  getRefStringForLocator: (locator: Locator | ElementHandle) => Promise<string | null>;
78
48
  }
49
+ export declare function buildShortRefMap({ refs }: {
50
+ refs: Array<{
51
+ ref: string;
52
+ }>;
53
+ }): Map<string, string>;
54
+ type DomNodeInfo = {
55
+ nodeId: Protocol.DOM.NodeId;
56
+ parentId?: Protocol.DOM.NodeId;
57
+ backendNodeId: Protocol.DOM.BackendNodeId;
58
+ nodeName: string;
59
+ attributes: Map<string, string>;
60
+ };
61
+ export type SnapshotLine = {
62
+ text: string;
63
+ baseLocator?: string;
64
+ hasChildren?: boolean;
65
+ role?: string;
66
+ name?: string;
67
+ indent?: number;
68
+ };
69
+ export type SnapshotNode = {
70
+ role: string;
71
+ name: string;
72
+ baseLocator?: string;
73
+ ref?: string;
74
+ backendNodeId?: Protocol.DOM.BackendNodeId;
75
+ indentOffset?: number;
76
+ ignored?: boolean;
77
+ children: SnapshotNode[];
78
+ };
79
+ export declare function buildSnapshotLines(nodes: SnapshotNode[], indent?: number): SnapshotLine[];
80
+ export declare function buildRawSnapshotTree(options: {
81
+ nodeId: Protocol.Accessibility.AXNodeId;
82
+ axById: Map<Protocol.Accessibility.AXNodeId, Protocol.Accessibility.AXNode>;
83
+ isNodeInScope: (node: Protocol.Accessibility.AXNode) => boolean;
84
+ }): SnapshotNode | null;
85
+ export declare function filterInteractiveSnapshotTree(options: {
86
+ node: SnapshotNode;
87
+ ancestorNames: string[];
88
+ labelContext: boolean;
89
+ refFilter?: (entry: {
90
+ role: string;
91
+ name: string;
92
+ }) => boolean;
93
+ domByBackendId: Map<Protocol.DOM.BackendNodeId, DomNodeInfo>;
94
+ createRefForNode: (options: {
95
+ backendNodeId?: Protocol.DOM.BackendNodeId;
96
+ role: string;
97
+ name: string;
98
+ }) => string | null;
99
+ }): {
100
+ nodes: SnapshotNode[];
101
+ names: Set<string>;
102
+ };
103
+ export declare function filterFullSnapshotTree(options: {
104
+ node: SnapshotNode;
105
+ ancestorNames: string[];
106
+ refFilter?: (entry: {
107
+ role: string;
108
+ name: string;
109
+ }) => boolean;
110
+ domByBackendId: Map<Protocol.DOM.BackendNodeId, DomNodeInfo>;
111
+ createRefForNode: (options: {
112
+ backendNodeId?: Protocol.DOM.BackendNodeId;
113
+ role: string;
114
+ name: string;
115
+ }) => string | null;
116
+ }): {
117
+ nodes: SnapshotNode[];
118
+ names: Set<string>;
119
+ };
120
+ export declare function finalizeSnapshotOutput(lines: SnapshotLine[], nodes: SnapshotNode[], shortRefMap: Map<string, string>): {
121
+ snapshot: string;
122
+ tree: AriaSnapshotNode[];
123
+ };
79
124
  /**
80
- * Get an accessibility snapshot with utilities to look up aria refs for elements.
81
- * Uses Playwright's internal aria-ref selector engine.
125
+ * Get an accessibility snapshot with utilities to look up refs for elements.
126
+ * Uses the browser accessibility tree (CDP) and maps nodes to DOM attributes.
127
+ *
128
+ * Refs are generated from stable test IDs when available (data-testid, data-test-id, etc.)
129
+ * or fall back to e1, e2, e3...
130
+ *
131
+ * @param page - Playwright page
132
+ * @param locator - Optional locator to scope the snapshot to a subtree
133
+ * @param refFilter - Optional filter for which elements get refs
82
134
  *
83
135
  * @example
84
136
  * ```ts
85
- * const { snapshot, getRefsForLocators } = await getAriaSnapshot({ page })
86
- * const refs = await getRefsForLocators([page.locator('button'), page.locator('a')])
87
- * // refs[0].ref is e.g. "e5" - use page.locator('aria-ref=e5') to select
137
+ * const { snapshot, getSelectorForRef } = await getAriaSnapshot({ page })
138
+ * // Snapshot shows locators like [id="submit-btn"] or role=button[name="Submit"]
139
+ * const selector = getSelectorForRef('submit-btn')
140
+ * await page.locator(selector).click()
88
141
  * ```
89
142
  */
90
- export declare function getAriaSnapshot({ page, refFilter }: {
143
+ export declare function getAriaSnapshot({ page, frame, locator, refFilter, interactiveOnly, cdp }: {
91
144
  page: Page;
145
+ frame?: Frame | FrameLocator;
146
+ locator?: Locator;
92
147
  refFilter?: (info: {
93
148
  role: string;
94
149
  name: string;
95
150
  }) => boolean;
151
+ interactiveOnly?: boolean;
152
+ cdp?: ICDPSession;
96
153
  }): Promise<AriaSnapshotResult>;
97
154
  /**
98
155
  * Show Vimium-style labels on interactive elements.
99
- * Labels are yellow badges positioned above each element showing the aria ref (e.g., "e1", "e2").
156
+ * Labels are colored badges positioned above each element showing the ref.
100
157
  * Use with screenshots so agents can see which elements are interactive.
101
158
  *
102
- * Labels auto-hide after 30 seconds to prevent stale labels remaining on the page.
159
+ * Labels auto-hide after 30 seconds to prevent stale labels.
103
160
  * Call this function again if the page HTML changes to get fresh labels.
104
161
  *
105
- * By default, only shows labels for truly interactive roles (button, link, textbox, etc.)
106
- * to reduce visual clutter. Set `interactiveOnly: false` to show all elements with refs.
162
+ * @param page - Playwright page
163
+ * @param locator - Optional locator to scope labels to a subtree
164
+ * @param interactiveOnly - Only show labels for interactive elements (default: true)
107
165
  *
108
166
  * @example
109
167
  * ```ts
110
168
  * const { snapshot, labelCount } = await showAriaRefLabels({ page })
111
169
  * await page.screenshot({ path: '/tmp/screenshot.png' })
112
- * // Agent sees [e5] label on "Submit" button
113
- * await page.locator('aria-ref=e5').click()
114
- * // Labels auto-hide after 30 seconds, or call hideAriaRefLabels() manually
170
+ * // Agent sees [submit-btn] label on "Submit" button
171
+ * await page.locator('[data-testid="submit-btn"]').click()
115
172
  * ```
116
173
  */
117
- export declare function showAriaRefLabels({ page, interactiveOnly, logger }: {
174
+ export declare function showAriaRefLabels({ page, locator, interactiveOnly, logger }: {
118
175
  page: Page;
176
+ locator?: Locator;
119
177
  interactiveOnly?: boolean;
120
178
  logger?: {
121
179
  info?: (...args: unknown[]) => void;
@@ -136,18 +194,21 @@ export declare function hideAriaRefLabels({ page }: {
136
194
  * Shows Vimium-style labels, captures the screenshot, then removes the labels.
137
195
  * The screenshot is automatically included in the MCP response.
138
196
  *
197
+ * @param page - Playwright page
198
+ * @param locator - Optional locator to scope labels to a subtree
139
199
  * @param collector - Array to collect screenshots (passed by MCP execute tool)
140
200
  *
141
201
  * @example
142
202
  * ```ts
143
203
  * await screenshotWithAccessibilityLabels({ page })
144
204
  * // Screenshot is automatically included in the MCP response
145
- * // Use aria-ref from the snapshot to interact with elements
146
- * await page.locator('aria-ref=e5').click()
205
+ * // Use ref from the snapshot to interact with elements
206
+ * await page.locator('[data-testid="submit-btn"]').click()
147
207
  * ```
148
208
  */
149
- export declare function screenshotWithAccessibilityLabels({ page, interactiveOnly, collector, logger }: {
209
+ export declare function screenshotWithAccessibilityLabels({ page, locator, interactiveOnly, collector, logger }: {
150
210
  page: Page;
211
+ locator?: Locator;
151
212
  interactiveOnly?: boolean;
152
213
  collector: ScreenshotResult[];
153
214
  logger?: {
@@ -155,4 +216,5 @@ export declare function screenshotWithAccessibilityLabels({ page, interactiveOnl
155
216
  error?: (...args: unknown[]) => void;
156
217
  };
157
218
  }): Promise<void>;
219
+ export { getAriaSnapshot as getAriaSnapshotWithRefs };
158
220
  //# sourceMappingURL=aria-snapshot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"aria-snapshot.d.ts","sourceRoot":"","sources":["../src/aria-snapshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aria-snapshot.d.ts","sourceRoot":"","sources":["../src/aria-snapshot.ts"],"names":[],"mappings":"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"}