@mercuryo-ai/agentbrowse 0.2.50

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 (301) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +335 -0
  3. package/dist/assistive-runtime.d.ts +110 -0
  4. package/dist/assistive-runtime.d.ts.map +1 -0
  5. package/dist/assistive-runtime.js +79 -0
  6. package/dist/assistive-runtime.test-support.d.ts +7 -0
  7. package/dist/assistive-runtime.test-support.d.ts.map +1 -0
  8. package/dist/assistive-runtime.test-support.js +106 -0
  9. package/dist/assistive-stagehand.d.ts +12 -0
  10. package/dist/assistive-stagehand.d.ts.map +1 -0
  11. package/dist/assistive-stagehand.js +10 -0
  12. package/dist/browser-session-state.d.ts +95 -0
  13. package/dist/browser-session-state.d.ts.map +1 -0
  14. package/dist/browser-session-state.js +279 -0
  15. package/dist/client-bindings.d.ts +10 -0
  16. package/dist/client-bindings.d.ts.map +1 -0
  17. package/dist/client-bindings.js +18 -0
  18. package/dist/client.d.ts +49 -0
  19. package/dist/client.d.ts.map +1 -0
  20. package/dist/client.js +63 -0
  21. package/dist/command-api-tracing.d.ts +20 -0
  22. package/dist/command-api-tracing.d.ts.map +1 -0
  23. package/dist/command-api-tracing.js +149 -0
  24. package/dist/command-name.d.ts +3 -0
  25. package/dist/command-name.d.ts.map +1 -0
  26. package/dist/command-name.js +11 -0
  27. package/dist/commands/act.d.ts +43 -0
  28. package/dist/commands/act.d.ts.map +1 -0
  29. package/dist/commands/act.js +1107 -0
  30. package/dist/commands/action-acceptance.d.ts +93 -0
  31. package/dist/commands/action-acceptance.d.ts.map +1 -0
  32. package/dist/commands/action-acceptance.js +1938 -0
  33. package/dist/commands/action-artifacts.d.ts +33 -0
  34. package/dist/commands/action-artifacts.d.ts.map +1 -0
  35. package/dist/commands/action-artifacts.js +104 -0
  36. package/dist/commands/action-execution-guards.d.ts +5 -0
  37. package/dist/commands/action-execution-guards.d.ts.map +1 -0
  38. package/dist/commands/action-execution-guards.js +3 -0
  39. package/dist/commands/action-executor-helpers.d.ts +21 -0
  40. package/dist/commands/action-executor-helpers.d.ts.map +1 -0
  41. package/dist/commands/action-executor-helpers.js +265 -0
  42. package/dist/commands/action-executor.d.ts +14 -0
  43. package/dist/commands/action-executor.d.ts.map +1 -0
  44. package/dist/commands/action-executor.js +46 -0
  45. package/dist/commands/action-fallbacks.d.ts +6 -0
  46. package/dist/commands/action-fallbacks.d.ts.map +1 -0
  47. package/dist/commands/action-fallbacks.js +43 -0
  48. package/dist/commands/action-result-resolution.d.ts +17 -0
  49. package/dist/commands/action-result-resolution.d.ts.map +1 -0
  50. package/dist/commands/action-result-resolution.js +132 -0
  51. package/dist/commands/action-value-projection.d.ts +32 -0
  52. package/dist/commands/action-value-projection.d.ts.map +1 -0
  53. package/dist/commands/action-value-projection.js +151 -0
  54. package/dist/commands/attach.d.ts +41 -0
  55. package/dist/commands/attach.d.ts.map +1 -0
  56. package/dist/commands/attach.js +103 -0
  57. package/dist/commands/browse-actions.d.ts +4 -0
  58. package/dist/commands/browse-actions.d.ts.map +1 -0
  59. package/dist/commands/browse-actions.js +4 -0
  60. package/dist/commands/browser-status.d.ts +57 -0
  61. package/dist/commands/browser-status.d.ts.map +1 -0
  62. package/dist/commands/browser-status.js +243 -0
  63. package/dist/commands/click-action-executor.d.ts +12 -0
  64. package/dist/commands/click-action-executor.d.ts.map +1 -0
  65. package/dist/commands/click-action-executor.js +111 -0
  66. package/dist/commands/click-activation-policy.d.ts +5 -0
  67. package/dist/commands/click-activation-policy.d.ts.map +1 -0
  68. package/dist/commands/click-activation-policy.js +13 -0
  69. package/dist/commands/close.d.ts +26 -0
  70. package/dist/commands/close.d.ts.map +1 -0
  71. package/dist/commands/close.js +124 -0
  72. package/dist/commands/datepicker-action-executor.d.ts +12 -0
  73. package/dist/commands/datepicker-action-executor.d.ts.map +1 -0
  74. package/dist/commands/datepicker-action-executor.js +218 -0
  75. package/dist/commands/descriptor-validation.d.ts +27 -0
  76. package/dist/commands/descriptor-validation.d.ts.map +1 -0
  77. package/dist/commands/descriptor-validation.js +192 -0
  78. package/dist/commands/extract-scope-resolution.d.ts +20 -0
  79. package/dist/commands/extract-scope-resolution.d.ts.map +1 -0
  80. package/dist/commands/extract-scope-resolution.js +109 -0
  81. package/dist/commands/extract-scoped-dialog-text.d.ts +3 -0
  82. package/dist/commands/extract-scoped-dialog-text.d.ts.map +1 -0
  83. package/dist/commands/extract-scoped-dialog-text.js +210 -0
  84. package/dist/commands/extract-snapshot-sanitizer.d.ts +5 -0
  85. package/dist/commands/extract-snapshot-sanitizer.d.ts.map +1 -0
  86. package/dist/commands/extract-snapshot-sanitizer.js +98 -0
  87. package/dist/commands/extract-stagehand-executor.d.ts +17 -0
  88. package/dist/commands/extract-stagehand-executor.d.ts.map +1 -0
  89. package/dist/commands/extract-stagehand-executor.js +112 -0
  90. package/dist/commands/extract.d.ts +57 -0
  91. package/dist/commands/extract.d.ts.map +1 -0
  92. package/dist/commands/extract.js +668 -0
  93. package/dist/commands/interaction-kernel.d.ts +46 -0
  94. package/dist/commands/interaction-kernel.d.ts.map +1 -0
  95. package/dist/commands/interaction-kernel.js +215 -0
  96. package/dist/commands/launch.d.ts +41 -0
  97. package/dist/commands/launch.d.ts.map +1 -0
  98. package/dist/commands/launch.js +182 -0
  99. package/dist/commands/navigate.d.ts +31 -0
  100. package/dist/commands/navigate.d.ts.map +1 -0
  101. package/dist/commands/navigate.js +202 -0
  102. package/dist/commands/observe-accessibility.d.ts +22 -0
  103. package/dist/commands/observe-accessibility.d.ts.map +1 -0
  104. package/dist/commands/observe-accessibility.js +566 -0
  105. package/dist/commands/observe-display-label.d.ts +4 -0
  106. package/dist/commands/observe-display-label.d.ts.map +1 -0
  107. package/dist/commands/observe-display-label.js +26 -0
  108. package/dist/commands/observe-dom-label-contract.d.ts +2 -0
  109. package/dist/commands/observe-dom-label-contract.d.ts.map +1 -0
  110. package/dist/commands/observe-dom-label-contract.js +564 -0
  111. package/dist/commands/observe-fallback-semantics.d.ts +6 -0
  112. package/dist/commands/observe-fallback-semantics.d.ts.map +1 -0
  113. package/dist/commands/observe-fallback-semantics.js +86 -0
  114. package/dist/commands/observe-inventory.d.ts +149 -0
  115. package/dist/commands/observe-inventory.d.ts.map +1 -0
  116. package/dist/commands/observe-inventory.js +3545 -0
  117. package/dist/commands/observe-label-policy.d.ts +8 -0
  118. package/dist/commands/observe-label-policy.d.ts.map +1 -0
  119. package/dist/commands/observe-label-policy.js +21 -0
  120. package/dist/commands/observe-page-state.d.ts +11 -0
  121. package/dist/commands/observe-page-state.d.ts.map +1 -0
  122. package/dist/commands/observe-page-state.js +89 -0
  123. package/dist/commands/observe-persistence.d.ts +15 -0
  124. package/dist/commands/observe-persistence.d.ts.map +1 -0
  125. package/dist/commands/observe-persistence.js +238 -0
  126. package/dist/commands/observe-projection.d.ts +119 -0
  127. package/dist/commands/observe-projection.d.ts.map +1 -0
  128. package/dist/commands/observe-projection.js +726 -0
  129. package/dist/commands/observe-protected.d.ts +6 -0
  130. package/dist/commands/observe-protected.d.ts.map +1 -0
  131. package/dist/commands/observe-protected.js +31 -0
  132. package/dist/commands/observe-semantics.d.ts +10 -0
  133. package/dist/commands/observe-semantics.d.ts.map +1 -0
  134. package/dist/commands/observe-semantics.js +535 -0
  135. package/dist/commands/observe-signals.d.ts +48 -0
  136. package/dist/commands/observe-signals.d.ts.map +1 -0
  137. package/dist/commands/observe-signals.js +461 -0
  138. package/dist/commands/observe-stagehand.d.ts +49 -0
  139. package/dist/commands/observe-stagehand.d.ts.map +1 -0
  140. package/dist/commands/observe-stagehand.js +94 -0
  141. package/dist/commands/observe-surfaces.d.ts +11 -0
  142. package/dist/commands/observe-surfaces.d.ts.map +1 -0
  143. package/dist/commands/observe-surfaces.js +290 -0
  144. package/dist/commands/observe.d.ts +113 -0
  145. package/dist/commands/observe.d.ts.map +1 -0
  146. package/dist/commands/observe.js +556 -0
  147. package/dist/commands/screenshot.d.ts +37 -0
  148. package/dist/commands/screenshot.d.ts.map +1 -0
  149. package/dist/commands/screenshot.js +269 -0
  150. package/dist/commands/select-action-executor.d.ts +10 -0
  151. package/dist/commands/select-action-executor.d.ts.map +1 -0
  152. package/dist/commands/select-action-executor.js +156 -0
  153. package/dist/commands/semantic-observe-lexical.d.ts +31 -0
  154. package/dist/commands/semantic-observe-lexical.d.ts.map +1 -0
  155. package/dist/commands/semantic-observe-lexical.js +186 -0
  156. package/dist/commands/semantic-observe.d.ts +37 -0
  157. package/dist/commands/semantic-observe.d.ts.map +1 -0
  158. package/dist/commands/semantic-observe.js +1339 -0
  159. package/dist/commands/structured-grid-action-executor.d.ts +3 -0
  160. package/dist/commands/structured-grid-action-executor.d.ts.map +1 -0
  161. package/dist/commands/structured-grid-action-executor.js +4 -0
  162. package/dist/commands/target-resolution.d.ts +4 -0
  163. package/dist/commands/target-resolution.d.ts.map +1 -0
  164. package/dist/commands/target-resolution.js +33 -0
  165. package/dist/commands/text-input-action-executor.d.ts +5 -0
  166. package/dist/commands/text-input-action-executor.d.ts.map +1 -0
  167. package/dist/commands/text-input-action-executor.js +116 -0
  168. package/dist/commands/user-actionable.d.ts +4 -0
  169. package/dist/commands/user-actionable.d.ts.map +1 -0
  170. package/dist/commands/user-actionable.js +216 -0
  171. package/dist/control-semantics.d.ts +30 -0
  172. package/dist/control-semantics.d.ts.map +1 -0
  173. package/dist/control-semantics.js +419 -0
  174. package/dist/diagnostics.d.ts +132 -0
  175. package/dist/diagnostics.d.ts.map +1 -0
  176. package/dist/diagnostics.js +120 -0
  177. package/dist/index.d.ts +5 -0
  178. package/dist/index.d.ts.map +1 -0
  179. package/dist/index.js +350 -0
  180. package/dist/library.d.ts +17 -0
  181. package/dist/library.d.ts.map +1 -0
  182. package/dist/library.js +14 -0
  183. package/dist/output.d.ts +32 -0
  184. package/dist/output.d.ts.map +1 -0
  185. package/dist/output.js +33 -0
  186. package/dist/owned-browser.d.ts +12 -0
  187. package/dist/owned-browser.d.ts.map +1 -0
  188. package/dist/owned-browser.js +69 -0
  189. package/dist/owned-process.d.ts +19 -0
  190. package/dist/owned-process.d.ts.map +1 -0
  191. package/dist/owned-process.js +145 -0
  192. package/dist/playwright-runtime.d.ts +43 -0
  193. package/dist/playwright-runtime.d.ts.map +1 -0
  194. package/dist/playwright-runtime.js +339 -0
  195. package/dist/protected-fill-browser.d.ts +22 -0
  196. package/dist/protected-fill-browser.d.ts.map +1 -0
  197. package/dist/protected-fill-browser.js +52 -0
  198. package/dist/protected-fill.d.ts +82 -0
  199. package/dist/protected-fill.d.ts.map +1 -0
  200. package/dist/protected-fill.js +20 -0
  201. package/dist/runtime-metrics.d.ts +27 -0
  202. package/dist/runtime-metrics.d.ts.map +1 -0
  203. package/dist/runtime-metrics.js +66 -0
  204. package/dist/runtime-page-state.d.ts +11 -0
  205. package/dist/runtime-page-state.d.ts.map +1 -0
  206. package/dist/runtime-page-state.js +62 -0
  207. package/dist/runtime-protected-state.d.ts +14 -0
  208. package/dist/runtime-protected-state.d.ts.map +1 -0
  209. package/dist/runtime-protected-state.js +148 -0
  210. package/dist/runtime-resolution.d.ts +9 -0
  211. package/dist/runtime-resolution.d.ts.map +1 -0
  212. package/dist/runtime-resolution.js +19 -0
  213. package/dist/runtime-state.d.ts +251 -0
  214. package/dist/runtime-state.d.ts.map +1 -0
  215. package/dist/runtime-state.js +599 -0
  216. package/dist/secrets/catalog-applicability.d.ts +5 -0
  217. package/dist/secrets/catalog-applicability.d.ts.map +1 -0
  218. package/dist/secrets/catalog-applicability.js +59 -0
  219. package/dist/secrets/field-policy.d.ts +3 -0
  220. package/dist/secrets/field-policy.d.ts.map +1 -0
  221. package/dist/secrets/field-policy.js +3 -0
  222. package/dist/secrets/fill-ordering.d.ts +10 -0
  223. package/dist/secrets/fill-ordering.d.ts.map +1 -0
  224. package/dist/secrets/fill-ordering.js +41 -0
  225. package/dist/secrets/form-matcher.d.ts +60 -0
  226. package/dist/secrets/form-matcher.d.ts.map +1 -0
  227. package/dist/secrets/form-matcher.js +948 -0
  228. package/dist/secrets/protected-artifact-guard.d.ts +39 -0
  229. package/dist/secrets/protected-artifact-guard.d.ts.map +1 -0
  230. package/dist/secrets/protected-artifact-guard.js +44 -0
  231. package/dist/secrets/protected-bindings.d.ts +14 -0
  232. package/dist/secrets/protected-bindings.d.ts.map +1 -0
  233. package/dist/secrets/protected-bindings.js +29 -0
  234. package/dist/secrets/protected-exact-value-redaction.d.ts +14 -0
  235. package/dist/secrets/protected-exact-value-redaction.d.ts.map +1 -0
  236. package/dist/secrets/protected-exact-value-redaction.js +360 -0
  237. package/dist/secrets/protected-field-semantics.d.ts +9 -0
  238. package/dist/secrets/protected-field-semantics.d.ts.map +1 -0
  239. package/dist/secrets/protected-field-semantics.js +154 -0
  240. package/dist/secrets/protected-field-values.d.ts +15 -0
  241. package/dist/secrets/protected-field-values.d.ts.map +1 -0
  242. package/dist/secrets/protected-field-values.js +131 -0
  243. package/dist/secrets/protected-fill.d.ts +47 -0
  244. package/dist/secrets/protected-fill.d.ts.map +1 -0
  245. package/dist/secrets/protected-fill.js +446 -0
  246. package/dist/secrets/protected-value-adapters.d.ts +4 -0
  247. package/dist/secrets/protected-value-adapters.d.ts.map +1 -0
  248. package/dist/secrets/protected-value-adapters.js +118 -0
  249. package/dist/secrets/types.d.ts +70 -0
  250. package/dist/secrets/types.d.ts.map +1 -0
  251. package/dist/secrets/types.js +30 -0
  252. package/dist/session.d.ts +19 -0
  253. package/dist/session.d.ts.map +1 -0
  254. package/dist/session.js +120 -0
  255. package/dist/solver/browser-launcher.d.ts +14 -0
  256. package/dist/solver/browser-launcher.d.ts.map +1 -0
  257. package/dist/solver/browser-launcher.js +799 -0
  258. package/dist/solver/config.d.ts +18 -0
  259. package/dist/solver/config.d.ts.map +1 -0
  260. package/dist/solver/config.js +67 -0
  261. package/dist/solver/fingerprint.d.ts +9 -0
  262. package/dist/solver/fingerprint.d.ts.map +1 -0
  263. package/dist/solver/fingerprint.js +96 -0
  264. package/dist/solver/profile-manager.d.ts +8 -0
  265. package/dist/solver/profile-manager.d.ts.map +1 -0
  266. package/dist/solver/profile-manager.js +74 -0
  267. package/dist/solver/turnstile-challenge.d.ts +3 -0
  268. package/dist/solver/turnstile-challenge.d.ts.map +1 -0
  269. package/dist/solver/turnstile-challenge.js +173 -0
  270. package/dist/solver/types.d.ts +67 -0
  271. package/dist/solver/types.d.ts.map +1 -0
  272. package/dist/solver/types.js +1 -0
  273. package/dist/stagehand-runtime.d.ts +4 -0
  274. package/dist/stagehand-runtime.d.ts.map +1 -0
  275. package/dist/stagehand-runtime.js +10 -0
  276. package/dist/stagehand.d.ts +15 -0
  277. package/dist/stagehand.d.ts.map +1 -0
  278. package/dist/stagehand.js +19 -0
  279. package/dist/testing.d.ts +5 -0
  280. package/dist/testing.d.ts.map +1 -0
  281. package/dist/testing.js +4 -0
  282. package/dist/update-check.d.ts +14 -0
  283. package/dist/update-check.d.ts.map +1 -0
  284. package/dist/update-check.js +182 -0
  285. package/dist/workflow-session-state.d.ts +30 -0
  286. package/dist/workflow-session-state.d.ts.map +1 -0
  287. package/dist/workflow-session-state.js +74 -0
  288. package/docs/README.md +25 -0
  289. package/docs/api-reference.md +242 -0
  290. package/docs/assistive-runtime.md +148 -0
  291. package/docs/configuration.md +287 -0
  292. package/docs/getting-started.md +237 -0
  293. package/docs/integration-checklist.md +36 -0
  294. package/docs/protected-fill.md +112 -0
  295. package/docs/testing.md +50 -0
  296. package/docs/troubleshooting.md +71 -0
  297. package/examples/README.md +18 -0
  298. package/examples/attach.ts +27 -0
  299. package/examples/basic.ts +36 -0
  300. package/examples/extract.ts +50 -0
  301. package/package.json +83 -0
@@ -0,0 +1,3 @@
1
+ import type { Locator, Page } from 'playwright-core';
2
+ export declare function applyStructuredGridAction(page: Page, locator: Locator, attempts: string[]): Promise<boolean>;
3
+ //# sourceMappingURL=structured-grid-action-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-grid-action-executor.d.ts","sourceRoot":"","sources":["../../src/commands/structured-grid-action-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGrD,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,OAAO,CAAC,CAElB"}
@@ -0,0 +1,4 @@
1
+ import { applyTriggerAction } from './click-action-executor.js';
2
+ export async function applyStructuredGridAction(page, locator, attempts) {
3
+ return applyTriggerAction(page, locator, attempts);
4
+ }
@@ -0,0 +1,4 @@
1
+ import type { Locator, Page } from 'playwright-core';
2
+ import type { SurfaceDescriptor } from '../runtime-state.js';
3
+ export declare function resolveSurfaceScopeRoot(page: Page, surface: SurfaceDescriptor | null, attempts?: string[]): Promise<Locator | null>;
4
+ //# sourceMappingURL=target-resolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-resolution.d.ts","sourceRoot":"","sources":["../../src/commands/target-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAK7D,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,iBAAiB,GAAG,IAAI,EACjC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAoCzB"}
@@ -0,0 +1,33 @@
1
+ import { buildLocator, resolveLocatorRoot } from './action-fallbacks.js';
2
+ const STRUCTURAL_SURFACE_STRATEGIES = new Set(['css', 'xpath', 'testId', 'role']);
3
+ export async function resolveSurfaceScopeRoot(page, surface, attempts) {
4
+ if (!surface) {
5
+ return null;
6
+ }
7
+ const baseRoot = resolveLocatorRoot(page, surface.framePath);
8
+ for (const candidate of surface.locatorCandidates) {
9
+ if (!STRUCTURAL_SURFACE_STRATEGIES.has(candidate.strategy)) {
10
+ continue;
11
+ }
12
+ attempts?.push(`surface.resolve:${candidate.strategy}`);
13
+ const locator = buildLocator(baseRoot, candidate);
14
+ if (!locator) {
15
+ attempts?.push(`surface.resolve.skip:${candidate.strategy}:unsupported`);
16
+ continue;
17
+ }
18
+ const count = await locator.count().catch(() => 0);
19
+ if (count === 0) {
20
+ attempts?.push(`surface.resolve.skip:${candidate.strategy}:empty`);
21
+ continue;
22
+ }
23
+ const resolvedSurface = locator.first();
24
+ const visible = await resolvedSurface.isVisible().catch(() => false);
25
+ if (!visible) {
26
+ attempts?.push(`surface.resolve.skip:${candidate.strategy}:hidden`);
27
+ continue;
28
+ }
29
+ attempts?.push(`surface.resolve.ok:${candidate.strategy}`);
30
+ return resolvedSurface;
31
+ }
32
+ return null;
33
+ }
@@ -0,0 +1,5 @@
1
+ import type { Locator, Page } from 'playwright-core';
2
+ import { type ActionExecutionGuards } from './action-execution-guards.js';
3
+ export declare function applyTextFillAction(page: Page, locator: Locator, value: string, attempts: string[], guards?: ActionExecutionGuards): Promise<boolean>;
4
+ export declare function applyTypeAction(page: Page, locator: Locator, value: string, attempts: string[], guards?: ActionExecutionGuards): Promise<boolean>;
5
+ //# sourceMappingURL=text-input-action-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-input-action-executor.d.ts","sourceRoot":"","sources":["../../src/commands/text-input-action-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAYrD,OAAO,EAA2B,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAEnG,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,OAAO,CAAC,CA6FlB;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAqBlB"}
@@ -0,0 +1,116 @@
1
+ import { LOCATOR_FILL_TIMEOUT_MS, applyValueWithJsFallback, blurLocator, clearLocatorForReplacement, deriveMaskedSequentialValue, focusLocator, normalizeFillValue, planTextFillStrategy, readLocatorCurrentValue, } from './action-executor-helpers.js';
2
+ import { runActionExecutionGuard } from './action-execution-guards.js';
3
+ export async function applyTextFillAction(page, locator, value, attempts, guards) {
4
+ const { normalizedValue, preferSequential, settleMs, initialPhonePrefix, blurAfterFill } = await planTextFillStrategy(locator, value, attempts);
5
+ if (preferSequential) {
6
+ await focusLocator(page, locator, attempts);
7
+ await clearLocatorForReplacement(locator, attempts);
8
+ const residualValue = await readLocatorCurrentValue(locator);
9
+ const sequentialValue = deriveMaskedSequentialValue(normalizedValue, residualValue, initialPhonePrefix, attempts);
10
+ if (typeof locator.pressSequentially === 'function') {
11
+ attempts.push('locator.pressSequentially.masked');
12
+ try {
13
+ await runActionExecutionGuard(guards, 'fill.masked.press-sequentially');
14
+ await locator.pressSequentially(sequentialValue);
15
+ if (settleMs > 0 && typeof page.waitForTimeout === 'function') {
16
+ attempts.push(`fill.settle:${settleMs}`);
17
+ await page.waitForTimeout(settleMs);
18
+ }
19
+ if (blurAfterFill) {
20
+ await blurLocator(locator, attempts);
21
+ }
22
+ return true;
23
+ }
24
+ catch {
25
+ // Fall through to fill/js fallback with the normalized masked value.
26
+ }
27
+ }
28
+ attempts.push('locator.fill.masked-fallback');
29
+ try {
30
+ await runActionExecutionGuard(guards, 'fill.masked.fill');
31
+ await locator.fill(sequentialValue, { timeout: LOCATOR_FILL_TIMEOUT_MS });
32
+ if (settleMs > 0 && typeof page.waitForTimeout === 'function') {
33
+ attempts.push(`fill.settle:${settleMs}`);
34
+ await page.waitForTimeout(settleMs);
35
+ }
36
+ if (blurAfterFill) {
37
+ await blurLocator(locator, attempts);
38
+ }
39
+ return true;
40
+ }
41
+ catch {
42
+ await runActionExecutionGuard(guards, 'fill.masked.js-fallback');
43
+ await applyValueWithJsFallback(locator, sequentialValue, attempts);
44
+ if (blurAfterFill) {
45
+ await blurLocator(locator, attempts);
46
+ }
47
+ return true;
48
+ }
49
+ }
50
+ const directFillValue = await normalizeFillValue(locator, normalizedValue, attempts);
51
+ attempts.push('locator.fill');
52
+ try {
53
+ await locator.fill(directFillValue, { timeout: LOCATOR_FILL_TIMEOUT_MS });
54
+ return false;
55
+ }
56
+ catch {
57
+ await runActionExecutionGuard(guards, 'fill.after-error');
58
+ await focusLocator(page, locator, attempts);
59
+ await clearLocatorForReplacement(locator, attempts);
60
+ if (typeof locator.pressSequentially === 'function') {
61
+ attempts.push('locator.pressSequentially');
62
+ try {
63
+ await runActionExecutionGuard(guards, 'fill.press-sequentially');
64
+ await locator.pressSequentially(directFillValue);
65
+ if (blurAfterFill) {
66
+ await blurLocator(locator, attempts);
67
+ }
68
+ return true;
69
+ }
70
+ catch {
71
+ // Fall through to retry and DOM-event fallback.
72
+ }
73
+ }
74
+ attempts.push('locator.fill.retry');
75
+ try {
76
+ await runActionExecutionGuard(guards, 'fill.retry');
77
+ await locator.fill(directFillValue, { timeout: LOCATOR_FILL_TIMEOUT_MS });
78
+ if (blurAfterFill) {
79
+ await blurLocator(locator, attempts);
80
+ }
81
+ return true;
82
+ }
83
+ catch {
84
+ await runActionExecutionGuard(guards, 'fill.js-fallback');
85
+ await applyValueWithJsFallback(locator, directFillValue, attempts);
86
+ }
87
+ if (blurAfterFill) {
88
+ await blurLocator(locator, attempts);
89
+ }
90
+ return true;
91
+ }
92
+ }
93
+ export async function applyTypeAction(page, locator, value, attempts, guards) {
94
+ await focusLocator(page, locator, attempts);
95
+ if (typeof locator.pressSequentially === 'function') {
96
+ attempts.push('locator.pressSequentially');
97
+ try {
98
+ await runActionExecutionGuard(guards, 'type.press-sequentially');
99
+ await locator.pressSequentially(value);
100
+ return false;
101
+ }
102
+ catch {
103
+ // Fall through to fill/DOM-event fallback.
104
+ }
105
+ }
106
+ attempts.push('locator.fill');
107
+ try {
108
+ await runActionExecutionGuard(guards, 'type.fill');
109
+ await locator.fill(value, { timeout: LOCATOR_FILL_TIMEOUT_MS });
110
+ }
111
+ catch {
112
+ await runActionExecutionGuard(guards, 'type.js-fallback');
113
+ await applyValueWithJsFallback(locator, value, attempts);
114
+ }
115
+ return true;
116
+ }
@@ -0,0 +1,4 @@
1
+ import type { Locator } from 'playwright-core';
2
+ export declare const TRANSPARENT_ACTIONABLE_CONTROL_HELPER_SCRIPT: string;
3
+ export declare function isLocatorUserActionable(locator: Locator): Promise<boolean>;
4
+ //# sourceMappingURL=user-actionable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-actionable.d.ts","sourceRoot":"","sources":["../../src/commands/user-actionable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,eAAO,MAAM,4CAA4C,QAoHxD,CAAC;AAEF,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAmIhF"}
@@ -0,0 +1,216 @@
1
+ export const TRANSPARENT_ACTIONABLE_CONTROL_HELPER_SCRIPT = String.raw `
2
+ const credibleLabelTextOf = (element) => {
3
+ if (!isHTMLElementNode(element)) {
4
+ return '';
5
+ }
6
+
7
+ const normalizeText = (value) => (value ?? '').replace(/\s+/g, ' ').trim();
8
+ const labelledByTextOf = (candidate) => {
9
+ const labelledBy = candidate.getAttribute?.('aria-labelledby')?.trim?.();
10
+ if (!labelledBy) {
11
+ return '';
12
+ }
13
+
14
+ return normalizeText(
15
+ labelledBy
16
+ .split(/\s+/)
17
+ .map((id) => candidate.ownerDocument?.getElementById?.(id)?.textContent ?? '')
18
+ .join(' ')
19
+ );
20
+ };
21
+
22
+ const directLabel =
23
+ normalizeText(element.getAttribute?.('aria-label')) ||
24
+ labelledByTextOf(element) ||
25
+ normalizeText(element.labels?.[0]?.textContent ?? '');
26
+ if (directLabel) {
27
+ return directLabel;
28
+ }
29
+
30
+ let current = element.parentElement;
31
+ let depth = 0;
32
+ while (isHTMLElementNode(current) && depth < 3) {
33
+ const inheritedLabel = labelledByTextOf(current);
34
+ if (inheritedLabel) {
35
+ return inheritedLabel;
36
+ }
37
+ current = current.parentElement;
38
+ depth += 1;
39
+ }
40
+
41
+ return '';
42
+ };
43
+
44
+ const isTransparentActionableControl = (element) => {
45
+ if (!isHTMLElementNode(element)) {
46
+ return false;
47
+ }
48
+
49
+ const tag = element.tagName?.toLowerCase?.() ?? '';
50
+ const role = (element.getAttribute?.('role') || '').trim().toLowerCase();
51
+ const isNativeControl =
52
+ tag === 'input' || tag === 'textarea' || tag === 'select' || element.isContentEditable;
53
+ const isInteractiveRole =
54
+ role === 'textbox' || role === 'combobox' || role === 'searchbox' || role === 'spinbutton';
55
+ if (!isNativeControl && !isInteractiveRole) {
56
+ return false;
57
+ }
58
+
59
+ const view = ownerWindowOf(element);
60
+ const style = view?.getComputedStyle?.(element);
61
+ if (
62
+ !style ||
63
+ style.display === 'none' ||
64
+ style.visibility === 'hidden' ||
65
+ style.visibility === 'collapse' ||
66
+ style.pointerEvents === 'none'
67
+ ) {
68
+ return false;
69
+ }
70
+
71
+ const rect = element.getBoundingClientRect();
72
+ if (rect.width <= 0 || rect.height <= 0) {
73
+ return false;
74
+ }
75
+
76
+ const documentNode = element.ownerDocument;
77
+ if (!documentNode?.elementFromPoint) {
78
+ return false;
79
+ }
80
+
81
+ const viewportWidth = Math.max(
82
+ 0,
83
+ Number(view?.innerWidth ?? documentNode?.documentElement?.clientWidth ?? 0)
84
+ );
85
+ const viewportHeight = Math.max(
86
+ 0,
87
+ Number(view?.innerHeight ?? documentNode?.documentElement?.clientHeight ?? 0)
88
+ );
89
+ const visibleLeft = viewportWidth > 0 ? Math.max(0, rect.left) : rect.left;
90
+ const visibleRight = viewportWidth > 0 ? Math.min(viewportWidth, rect.right) : rect.right;
91
+ const visibleTop = viewportHeight > 0 ? Math.max(0, rect.top) : rect.top;
92
+ const visibleBottom = viewportHeight > 0 ? Math.min(viewportHeight, rect.bottom) : rect.bottom;
93
+ if (visibleRight <= visibleLeft || visibleBottom <= visibleTop) {
94
+ return Boolean(credibleLabelTextOf(element));
95
+ }
96
+
97
+ const samplePoints = [
98
+ [visibleLeft + (visibleRight - visibleLeft) / 2, visibleTop + (visibleBottom - visibleTop) / 2],
99
+ [
100
+ Math.max(visibleLeft + 1, visibleLeft + (visibleRight - visibleLeft) * 0.25),
101
+ visibleTop + (visibleBottom - visibleTop) / 2,
102
+ ],
103
+ [
104
+ Math.min(visibleRight - 1, visibleLeft + (visibleRight - visibleLeft) * 0.75),
105
+ visibleTop + (visibleBottom - visibleTop) / 2,
106
+ ],
107
+ ];
108
+
109
+ return samplePoints.some(([x, y]) => {
110
+ const hit = documentNode.elementFromPoint(x, y);
111
+ return (
112
+ isHTMLElementNode(hit) &&
113
+ (hit === element || element.contains(hit) || hit.contains(element))
114
+ );
115
+ });
116
+ };
117
+ `;
118
+ export async function isLocatorUserActionable(locator) {
119
+ const visible = await locator.isVisible().catch(() => false);
120
+ if (visible) {
121
+ return true;
122
+ }
123
+ return locator
124
+ .evaluate((element) => {
125
+ if (!(element instanceof HTMLElement)) {
126
+ return false;
127
+ }
128
+ const tag = element.tagName.toLowerCase();
129
+ const role = (element.getAttribute('role') || '').trim().toLowerCase();
130
+ const isNativeControl = tag === 'input' || tag === 'textarea' || tag === 'select' || element.isContentEditable;
131
+ const isInteractiveRole = role === 'textbox' || role === 'combobox' || role === 'searchbox' || role === 'spinbutton';
132
+ if (!isNativeControl && !isInteractiveRole) {
133
+ return false;
134
+ }
135
+ const style = element.ownerDocument.defaultView?.getComputedStyle(element);
136
+ if (!style ||
137
+ style.display === 'none' ||
138
+ style.visibility === 'hidden' ||
139
+ style.visibility === 'collapse' ||
140
+ style.pointerEvents === 'none') {
141
+ return false;
142
+ }
143
+ const rect = element.getBoundingClientRect();
144
+ if (rect.width <= 0 || rect.height <= 0) {
145
+ return false;
146
+ }
147
+ const credibleLabelTextOf = (candidate) => {
148
+ const normalizeText = (value) => (value ?? '').replace(/\s+/g, ' ').trim();
149
+ const labelledByTextOf = (labelCandidate) => {
150
+ const labelledBy = labelCandidate.getAttribute('aria-labelledby')?.trim();
151
+ if (!labelledBy) {
152
+ return '';
153
+ }
154
+ return normalizeText(labelledBy
155
+ .split(/\s+/)
156
+ .map((id) => labelCandidate.ownerDocument.getElementById(id)?.textContent ?? '')
157
+ .join(' '));
158
+ };
159
+ const labelsText = candidate instanceof HTMLInputElement ||
160
+ candidate instanceof HTMLTextAreaElement ||
161
+ candidate instanceof HTMLSelectElement
162
+ ? normalizeText(candidate.labels?.[0]?.textContent ?? '')
163
+ : '';
164
+ const directLabel = normalizeText(candidate.getAttribute('aria-label')) ||
165
+ labelledByTextOf(candidate) ||
166
+ labelsText;
167
+ if (directLabel) {
168
+ return directLabel;
169
+ }
170
+ let current = candidate.parentElement;
171
+ let depth = 0;
172
+ while (current instanceof HTMLElement && depth < 3) {
173
+ const inheritedLabel = labelledByTextOf(current);
174
+ if (inheritedLabel) {
175
+ return inheritedLabel;
176
+ }
177
+ current = current.parentElement;
178
+ depth += 1;
179
+ }
180
+ return '';
181
+ };
182
+ const viewportWidth = Math.max(0, Number(element.ownerDocument.defaultView?.innerWidth ??
183
+ element.ownerDocument.documentElement?.clientWidth ??
184
+ 0));
185
+ const viewportHeight = Math.max(0, Number(element.ownerDocument.defaultView?.innerHeight ??
186
+ element.ownerDocument.documentElement?.clientHeight ??
187
+ 0));
188
+ const visibleLeft = viewportWidth > 0 ? Math.max(0, rect.left) : rect.left;
189
+ const visibleRight = viewportWidth > 0 ? Math.min(viewportWidth, rect.right) : rect.right;
190
+ const visibleTop = viewportHeight > 0 ? Math.max(0, rect.top) : rect.top;
191
+ const visibleBottom = viewportHeight > 0 ? Math.min(viewportHeight, rect.bottom) : rect.bottom;
192
+ if (visibleRight <= visibleLeft || visibleBottom <= visibleTop) {
193
+ return Boolean(credibleLabelTextOf(element));
194
+ }
195
+ const samplePoints = [
196
+ [
197
+ visibleLeft + (visibleRight - visibleLeft) / 2,
198
+ visibleTop + (visibleBottom - visibleTop) / 2,
199
+ ],
200
+ [
201
+ Math.max(visibleLeft + 1, visibleLeft + (visibleRight - visibleLeft) * 0.25),
202
+ visibleTop + (visibleBottom - visibleTop) / 2,
203
+ ],
204
+ [
205
+ Math.min(visibleRight - 1, visibleLeft + (visibleRight - visibleLeft) * 0.75),
206
+ visibleTop + (visibleBottom - visibleTop) / 2,
207
+ ],
208
+ ];
209
+ return samplePoints.some(([x, y]) => {
210
+ const hit = element.ownerDocument.elementFromPoint(x, y);
211
+ return (hit instanceof HTMLElement &&
212
+ (hit === element || element.contains(hit) || hit.contains(element)));
213
+ });
214
+ })
215
+ .catch(() => false);
216
+ }
@@ -0,0 +1,30 @@
1
+ import type { TargetAcceptancePolicy, TargetAllowedAction, TargetAvailabilityState, TargetControlFamily, TargetStructure } from './runtime-state.js';
2
+ export type TargetStateFacts = Record<string, string | boolean | number>;
3
+ export type TargetSemanticsFacts = {
4
+ kind?: string;
5
+ role?: string;
6
+ label?: string;
7
+ displayLabel?: string;
8
+ interactionHint?: 'click';
9
+ text?: string;
10
+ placeholder?: string;
11
+ inputName?: string;
12
+ inputType?: string;
13
+ autocomplete?: string;
14
+ ariaAutocomplete?: string;
15
+ surfaceKind?: string;
16
+ controlsSurfaceSelector?: string;
17
+ states?: TargetStateFacts;
18
+ structure?: TargetStructure;
19
+ legacyMethod?: string;
20
+ };
21
+ export type ComparableValueType = 'phone' | 'card-number' | 'expiry' | 'cvc' | 'date';
22
+ export declare function inferComparableValueTypeFromFacts(facts: TargetSemanticsFacts): ComparableValueType | undefined;
23
+ export declare function isLikelyDateLikeLabel(value: string | undefined): boolean;
24
+ export declare function inferAllowedActionsFromFacts(facts: TargetSemanticsFacts): TargetAllowedAction[];
25
+ export declare function inferAvailabilityFromFacts(states?: TargetStateFacts, contextHint?: string, options?: {
26
+ readonlyInteractive?: boolean;
27
+ }): TargetAvailabilityState;
28
+ export declare function inferControlFamilyFromFacts(facts: TargetSemanticsFacts, allowedActions: ReadonlyArray<TargetAllowedAction>): TargetControlFamily | undefined;
29
+ export declare function inferAcceptancePolicyFromFacts(facts: TargetSemanticsFacts, allowedActions: ReadonlyArray<TargetAllowedAction>): TargetAcceptancePolicy | undefined;
30
+ //# sourceMappingURL=control-semantics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-semantics.d.ts","sourceRoot":"","sources":["../src/control-semantics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;AAEzE,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,aAAa,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAwCtF,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,oBAAoB,GAC1B,mBAAmB,GAAG,SAAS,CAuCjC;AA6LD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAYxE;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,oBAAoB,GAAG,mBAAmB,EAAE,CA4G/F;AAED,wBAAgB,0BAA0B,CACxC,MAAM,CAAC,EAAE,gBAAgB,EACzB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE;IACP,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC1B,GACL,uBAAuB,CAyBzB;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,oBAAoB,EAC3B,cAAc,EAAE,aAAa,CAAC,mBAAmB,CAAC,GACjD,mBAAmB,GAAG,SAAS,CA0EjC;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,oBAAoB,EAC3B,cAAc,EAAE,aAAa,CAAC,mBAAmB,CAAC,GACjD,sBAAsB,GAAG,SAAS,CA6CpC"}