@predicatelabs/sdk 0.99.9

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 (302) hide show
  1. package/LICENSE +24 -0
  2. package/README.md +252 -0
  3. package/dist/actions.d.ts +185 -0
  4. package/dist/actions.d.ts.map +1 -0
  5. package/dist/actions.js +1120 -0
  6. package/dist/actions.js.map +1 -0
  7. package/dist/agent-runtime.d.ts +352 -0
  8. package/dist/agent-runtime.d.ts.map +1 -0
  9. package/dist/agent-runtime.js +1170 -0
  10. package/dist/agent-runtime.js.map +1 -0
  11. package/dist/agent.d.ts +164 -0
  12. package/dist/agent.d.ts.map +1 -0
  13. package/dist/agent.js +408 -0
  14. package/dist/agent.js.map +1 -0
  15. package/dist/asserts/expect.d.ts +159 -0
  16. package/dist/asserts/expect.d.ts.map +1 -0
  17. package/dist/asserts/expect.js +547 -0
  18. package/dist/asserts/expect.js.map +1 -0
  19. package/dist/asserts/index.d.ts +58 -0
  20. package/dist/asserts/index.d.ts.map +1 -0
  21. package/dist/asserts/index.js +70 -0
  22. package/dist/asserts/index.js.map +1 -0
  23. package/dist/asserts/query.d.ts +199 -0
  24. package/dist/asserts/query.d.ts.map +1 -0
  25. package/dist/asserts/query.js +288 -0
  26. package/dist/asserts/query.js.map +1 -0
  27. package/dist/backends/actions.d.ts +119 -0
  28. package/dist/backends/actions.d.ts.map +1 -0
  29. package/dist/backends/actions.js +291 -0
  30. package/dist/backends/actions.js.map +1 -0
  31. package/dist/backends/browser-use-adapter.d.ts +131 -0
  32. package/dist/backends/browser-use-adapter.d.ts.map +1 -0
  33. package/dist/backends/browser-use-adapter.js +219 -0
  34. package/dist/backends/browser-use-adapter.js.map +1 -0
  35. package/dist/backends/cdp-backend.d.ts +66 -0
  36. package/dist/backends/cdp-backend.d.ts.map +1 -0
  37. package/dist/backends/cdp-backend.js +273 -0
  38. package/dist/backends/cdp-backend.js.map +1 -0
  39. package/dist/backends/index.d.ts +80 -0
  40. package/dist/backends/index.d.ts.map +1 -0
  41. package/dist/backends/index.js +101 -0
  42. package/dist/backends/index.js.map +1 -0
  43. package/dist/backends/protocol.d.ts +156 -0
  44. package/dist/backends/protocol.d.ts.map +1 -0
  45. package/dist/backends/protocol.js +16 -0
  46. package/dist/backends/protocol.js.map +1 -0
  47. package/dist/backends/sentience-context.d.ts +143 -0
  48. package/dist/backends/sentience-context.d.ts.map +1 -0
  49. package/dist/backends/sentience-context.js +359 -0
  50. package/dist/backends/sentience-context.js.map +1 -0
  51. package/dist/backends/snapshot.d.ts +188 -0
  52. package/dist/backends/snapshot.d.ts.map +1 -0
  53. package/dist/backends/snapshot.js +360 -0
  54. package/dist/backends/snapshot.js.map +1 -0
  55. package/dist/browser.d.ts +154 -0
  56. package/dist/browser.d.ts.map +1 -0
  57. package/dist/browser.js +920 -0
  58. package/dist/browser.js.map +1 -0
  59. package/dist/canonicalization.d.ts +126 -0
  60. package/dist/canonicalization.d.ts.map +1 -0
  61. package/dist/canonicalization.js +161 -0
  62. package/dist/canonicalization.js.map +1 -0
  63. package/dist/captcha/strategies.d.ts +12 -0
  64. package/dist/captcha/strategies.d.ts.map +1 -0
  65. package/dist/captcha/strategies.js +43 -0
  66. package/dist/captcha/strategies.js.map +1 -0
  67. package/dist/captcha/types.d.ts +45 -0
  68. package/dist/captcha/types.d.ts.map +1 -0
  69. package/dist/captcha/types.js +12 -0
  70. package/dist/captcha/types.js.map +1 -0
  71. package/dist/cli.d.ts +5 -0
  72. package/dist/cli.d.ts.map +1 -0
  73. package/dist/cli.js +422 -0
  74. package/dist/cli.js.map +1 -0
  75. package/dist/conversational-agent.d.ts +123 -0
  76. package/dist/conversational-agent.d.ts.map +1 -0
  77. package/dist/conversational-agent.js +341 -0
  78. package/dist/conversational-agent.js.map +1 -0
  79. package/dist/cursor-policy.d.ts +41 -0
  80. package/dist/cursor-policy.d.ts.map +1 -0
  81. package/dist/cursor-policy.js +81 -0
  82. package/dist/cursor-policy.js.map +1 -0
  83. package/dist/debugger.d.ts +28 -0
  84. package/dist/debugger.d.ts.map +1 -0
  85. package/dist/debugger.js +107 -0
  86. package/dist/debugger.js.map +1 -0
  87. package/dist/expect.d.ts +16 -0
  88. package/dist/expect.d.ts.map +1 -0
  89. package/dist/expect.js +67 -0
  90. package/dist/expect.js.map +1 -0
  91. package/dist/failure-artifacts.d.ts +95 -0
  92. package/dist/failure-artifacts.d.ts.map +1 -0
  93. package/dist/failure-artifacts.js +805 -0
  94. package/dist/failure-artifacts.js.map +1 -0
  95. package/dist/generator.d.ts +16 -0
  96. package/dist/generator.d.ts.map +1 -0
  97. package/dist/generator.js +205 -0
  98. package/dist/generator.js.map +1 -0
  99. package/dist/index.d.ts +37 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +160 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/inspector.d.ts +13 -0
  104. package/dist/inspector.d.ts.map +1 -0
  105. package/dist/inspector.js +153 -0
  106. package/dist/inspector.js.map +1 -0
  107. package/dist/llm-provider.d.ts +144 -0
  108. package/dist/llm-provider.d.ts.map +1 -0
  109. package/dist/llm-provider.js +460 -0
  110. package/dist/llm-provider.js.map +1 -0
  111. package/dist/ordinal.d.ts +90 -0
  112. package/dist/ordinal.d.ts.map +1 -0
  113. package/dist/ordinal.js +249 -0
  114. package/dist/ordinal.js.map +1 -0
  115. package/dist/overlay.d.ts +63 -0
  116. package/dist/overlay.d.ts.map +1 -0
  117. package/dist/overlay.js +102 -0
  118. package/dist/overlay.js.map +1 -0
  119. package/dist/protocols/browser-protocol.d.ts +79 -0
  120. package/dist/protocols/browser-protocol.d.ts.map +1 -0
  121. package/dist/protocols/browser-protocol.js +9 -0
  122. package/dist/protocols/browser-protocol.js.map +1 -0
  123. package/dist/query.d.ts +66 -0
  124. package/dist/query.d.ts.map +1 -0
  125. package/dist/query.js +482 -0
  126. package/dist/query.js.map +1 -0
  127. package/dist/read.d.ts +47 -0
  128. package/dist/read.d.ts.map +1 -0
  129. package/dist/read.js +128 -0
  130. package/dist/read.js.map +1 -0
  131. package/dist/recorder.d.ts +44 -0
  132. package/dist/recorder.d.ts.map +1 -0
  133. package/dist/recorder.js +262 -0
  134. package/dist/recorder.js.map +1 -0
  135. package/dist/runtime-agent.d.ts +72 -0
  136. package/dist/runtime-agent.d.ts.map +1 -0
  137. package/dist/runtime-agent.js +357 -0
  138. package/dist/runtime-agent.js.map +1 -0
  139. package/dist/screenshot.d.ts +17 -0
  140. package/dist/screenshot.d.ts.map +1 -0
  141. package/dist/screenshot.js +40 -0
  142. package/dist/screenshot.js.map +1 -0
  143. package/dist/snapshot-diff.d.ts +23 -0
  144. package/dist/snapshot-diff.d.ts.map +1 -0
  145. package/dist/snapshot-diff.js +119 -0
  146. package/dist/snapshot-diff.js.map +1 -0
  147. package/dist/snapshot.d.ts +47 -0
  148. package/dist/snapshot.d.ts.map +1 -0
  149. package/dist/snapshot.js +358 -0
  150. package/dist/snapshot.js.map +1 -0
  151. package/dist/textSearch.d.ts +64 -0
  152. package/dist/textSearch.d.ts.map +1 -0
  153. package/dist/textSearch.js +113 -0
  154. package/dist/textSearch.js.map +1 -0
  155. package/dist/tools/context.d.ts +18 -0
  156. package/dist/tools/context.d.ts.map +1 -0
  157. package/dist/tools/context.js +40 -0
  158. package/dist/tools/context.js.map +1 -0
  159. package/dist/tools/defaults.d.ts +5 -0
  160. package/dist/tools/defaults.d.ts.map +1 -0
  161. package/dist/tools/defaults.js +368 -0
  162. package/dist/tools/defaults.js.map +1 -0
  163. package/dist/tools/filesystem.d.ts +12 -0
  164. package/dist/tools/filesystem.d.ts.map +1 -0
  165. package/dist/tools/filesystem.js +137 -0
  166. package/dist/tools/filesystem.js.map +1 -0
  167. package/dist/tools/index.d.ts +5 -0
  168. package/dist/tools/index.d.ts.map +1 -0
  169. package/dist/tools/index.js +15 -0
  170. package/dist/tools/index.js.map +1 -0
  171. package/dist/tools/registry.d.ts +38 -0
  172. package/dist/tools/registry.d.ts.map +1 -0
  173. package/dist/tools/registry.js +100 -0
  174. package/dist/tools/registry.js.map +1 -0
  175. package/dist/tracing/cloud-sink.d.ts +189 -0
  176. package/dist/tracing/cloud-sink.d.ts.map +1 -0
  177. package/dist/tracing/cloud-sink.js +1067 -0
  178. package/dist/tracing/cloud-sink.js.map +1 -0
  179. package/dist/tracing/index-schema.d.ts +231 -0
  180. package/dist/tracing/index-schema.d.ts.map +1 -0
  181. package/dist/tracing/index-schema.js +235 -0
  182. package/dist/tracing/index-schema.js.map +1 -0
  183. package/dist/tracing/index.d.ts +12 -0
  184. package/dist/tracing/index.d.ts.map +1 -0
  185. package/dist/tracing/index.js +28 -0
  186. package/dist/tracing/index.js.map +1 -0
  187. package/dist/tracing/indexer.d.ts +20 -0
  188. package/dist/tracing/indexer.d.ts.map +1 -0
  189. package/dist/tracing/indexer.js +347 -0
  190. package/dist/tracing/indexer.js.map +1 -0
  191. package/dist/tracing/jsonl-sink.d.ts +51 -0
  192. package/dist/tracing/jsonl-sink.d.ts.map +1 -0
  193. package/dist/tracing/jsonl-sink.js +329 -0
  194. package/dist/tracing/jsonl-sink.js.map +1 -0
  195. package/dist/tracing/sink.d.ts +25 -0
  196. package/dist/tracing/sink.d.ts.map +1 -0
  197. package/dist/tracing/sink.js +15 -0
  198. package/dist/tracing/sink.js.map +1 -0
  199. package/dist/tracing/tracer-factory.d.ts +102 -0
  200. package/dist/tracing/tracer-factory.d.ts.map +1 -0
  201. package/dist/tracing/tracer-factory.js +375 -0
  202. package/dist/tracing/tracer-factory.js.map +1 -0
  203. package/dist/tracing/tracer.d.ts +140 -0
  204. package/dist/tracing/tracer.d.ts.map +1 -0
  205. package/dist/tracing/tracer.js +336 -0
  206. package/dist/tracing/tracer.js.map +1 -0
  207. package/dist/tracing/types.d.ts +203 -0
  208. package/dist/tracing/types.d.ts.map +1 -0
  209. package/dist/tracing/types.js +8 -0
  210. package/dist/tracing/types.js.map +1 -0
  211. package/dist/types.d.ts +422 -0
  212. package/dist/types.d.ts.map +1 -0
  213. package/dist/types.js +6 -0
  214. package/dist/types.js.map +1 -0
  215. package/dist/utils/action-executor.d.ts +25 -0
  216. package/dist/utils/action-executor.d.ts.map +1 -0
  217. package/dist/utils/action-executor.js +121 -0
  218. package/dist/utils/action-executor.js.map +1 -0
  219. package/dist/utils/browser-evaluator.d.ts +76 -0
  220. package/dist/utils/browser-evaluator.d.ts.map +1 -0
  221. package/dist/utils/browser-evaluator.js +130 -0
  222. package/dist/utils/browser-evaluator.js.map +1 -0
  223. package/dist/utils/browser.d.ts +30 -0
  224. package/dist/utils/browser.d.ts.map +1 -0
  225. package/dist/utils/browser.js +75 -0
  226. package/dist/utils/browser.js.map +1 -0
  227. package/dist/utils/element-filter.d.ts +76 -0
  228. package/dist/utils/element-filter.d.ts.map +1 -0
  229. package/dist/utils/element-filter.js +195 -0
  230. package/dist/utils/element-filter.js.map +1 -0
  231. package/dist/utils/grid-utils.d.ts +37 -0
  232. package/dist/utils/grid-utils.d.ts.map +1 -0
  233. package/dist/utils/grid-utils.js +283 -0
  234. package/dist/utils/grid-utils.js.map +1 -0
  235. package/dist/utils/llm-interaction-handler.d.ts +41 -0
  236. package/dist/utils/llm-interaction-handler.d.ts.map +1 -0
  237. package/dist/utils/llm-interaction-handler.js +171 -0
  238. package/dist/utils/llm-interaction-handler.js.map +1 -0
  239. package/dist/utils/llm-response-builder.d.ts +56 -0
  240. package/dist/utils/llm-response-builder.d.ts.map +1 -0
  241. package/dist/utils/llm-response-builder.js +130 -0
  242. package/dist/utils/llm-response-builder.js.map +1 -0
  243. package/dist/utils/selector-utils.d.ts +12 -0
  244. package/dist/utils/selector-utils.d.ts.map +1 -0
  245. package/dist/utils/selector-utils.js +32 -0
  246. package/dist/utils/selector-utils.js.map +1 -0
  247. package/dist/utils/snapshot-event-builder.d.ts +28 -0
  248. package/dist/utils/snapshot-event-builder.d.ts.map +1 -0
  249. package/dist/utils/snapshot-event-builder.js +88 -0
  250. package/dist/utils/snapshot-event-builder.js.map +1 -0
  251. package/dist/utils/snapshot-processor.d.ts +27 -0
  252. package/dist/utils/snapshot-processor.d.ts.map +1 -0
  253. package/dist/utils/snapshot-processor.js +47 -0
  254. package/dist/utils/snapshot-processor.js.map +1 -0
  255. package/dist/utils/trace-event-builder.d.ts +122 -0
  256. package/dist/utils/trace-event-builder.d.ts.map +1 -0
  257. package/dist/utils/trace-event-builder.js +365 -0
  258. package/dist/utils/trace-event-builder.js.map +1 -0
  259. package/dist/utils/trace-file-manager.d.ts +70 -0
  260. package/dist/utils/trace-file-manager.d.ts.map +1 -0
  261. package/dist/utils/trace-file-manager.js +194 -0
  262. package/dist/utils/trace-file-manager.js.map +1 -0
  263. package/dist/utils/zod.d.ts +5 -0
  264. package/dist/utils/zod.d.ts.map +1 -0
  265. package/dist/utils/zod.js +80 -0
  266. package/dist/utils/zod.js.map +1 -0
  267. package/dist/utils.d.ts +8 -0
  268. package/dist/utils.d.ts.map +1 -0
  269. package/dist/utils.js +13 -0
  270. package/dist/utils.js.map +1 -0
  271. package/dist/verification.d.ts +194 -0
  272. package/dist/verification.d.ts.map +1 -0
  273. package/dist/verification.js +530 -0
  274. package/dist/verification.js.map +1 -0
  275. package/dist/vision-executor.d.ts +18 -0
  276. package/dist/vision-executor.d.ts.map +1 -0
  277. package/dist/vision-executor.js +60 -0
  278. package/dist/vision-executor.js.map +1 -0
  279. package/dist/visual-agent.d.ts +120 -0
  280. package/dist/visual-agent.d.ts.map +1 -0
  281. package/dist/visual-agent.js +796 -0
  282. package/dist/visual-agent.js.map +1 -0
  283. package/dist/wait.d.ts +35 -0
  284. package/dist/wait.d.ts.map +1 -0
  285. package/dist/wait.js +76 -0
  286. package/dist/wait.js.map +1 -0
  287. package/package.json +94 -0
  288. package/spec/README.md +72 -0
  289. package/spec/SNAPSHOT_V1.md +208 -0
  290. package/spec/sdk-types.md +259 -0
  291. package/spec/snapshot.schema.json +148 -0
  292. package/src/extension/background.js +104 -0
  293. package/src/extension/content.js +162 -0
  294. package/src/extension/injected_api.js +1399 -0
  295. package/src/extension/manifest.json +36 -0
  296. package/src/extension/pkg/README.md +1340 -0
  297. package/src/extension/pkg/package.json +15 -0
  298. package/src/extension/pkg/sentience_core.d.ts +51 -0
  299. package/src/extension/pkg/sentience_core.js +371 -0
  300. package/src/extension/pkg/sentience_core_bg.wasm +0 -0
  301. package/src/extension/pkg/sentience_core_bg.wasm.d.ts +10 -0
  302. package/src/extension/release.json +116 -0
@@ -0,0 +1,530 @@
1
+ "use strict";
2
+ /**
3
+ * Verification primitives for agent assertion loops.
4
+ *
5
+ * This module provides assertion predicates and outcome types for runtime verification
6
+ * in agent loops. Assertions evaluate against the current browser state (snapshot/url)
7
+ * and record results into the trace.
8
+ *
9
+ * Key concepts:
10
+ * - AssertOutcome: Result of evaluating an assertion
11
+ * - AssertContext: Context provided to assertion predicates (snapshot, url, stepId)
12
+ * - Predicate: Callable that takes context and returns outcome
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { urlMatches, exists, AssertContext } from './verification';
17
+ *
18
+ * // Create predicates
19
+ * const onSearchPage = urlMatches(/\/s\?k=/);
20
+ * const resultsLoaded = exists("text~'Results'");
21
+ *
22
+ * // Evaluate against context
23
+ * const ctx: AssertContext = { snapshot, url: "https://example.com/s?k=shoes" };
24
+ * const outcome = onSearchPage(ctx);
25
+ * console.log(outcome.passed); // true
26
+ * ```
27
+ */
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.downloadCompleted = downloadCompleted;
30
+ exports.urlMatches = urlMatches;
31
+ exports.urlContains = urlContains;
32
+ exports.exists = exists;
33
+ exports.notExists = notExists;
34
+ exports.elementCount = elementCount;
35
+ exports.allOf = allOf;
36
+ exports.anyOf = anyOf;
37
+ exports.custom = custom;
38
+ exports.isEnabled = isEnabled;
39
+ exports.isDisabled = isDisabled;
40
+ exports.isChecked = isChecked;
41
+ exports.isUnchecked = isUnchecked;
42
+ exports.valueEquals = valueEquals;
43
+ exports.valueContains = valueContains;
44
+ exports.isExpanded = isExpanded;
45
+ exports.isCollapsed = isCollapsed;
46
+ const query_1 = require("./query");
47
+ /**
48
+ * Convert QuerySelector to string for display/logging.
49
+ */
50
+ function selectorToString(selector) {
51
+ return typeof selector === 'string' ? selector : JSON.stringify(selector);
52
+ }
53
+ /**
54
+ * Predicate that passes if a browser download has completed.
55
+ *
56
+ * Notes:
57
+ * - This relies on `AssertContext.downloads` being populated by the runtime/browser.
58
+ */
59
+ function downloadCompleted(filenameSubstring) {
60
+ return (ctx) => {
61
+ const downloads = ctx.downloads ?? [];
62
+ for (const d of downloads) {
63
+ if (String(d?.status ?? '') !== 'completed')
64
+ continue;
65
+ const fname = String(d?.filename ?? d?.suggested_filename ?? '');
66
+ if (!filenameSubstring || fname.includes(filenameSubstring)) {
67
+ return { passed: true, reason: '', details: { download: d } };
68
+ }
69
+ }
70
+ return {
71
+ passed: false,
72
+ reason: filenameSubstring
73
+ ? `no completed download matched: ${filenameSubstring}`
74
+ : 'no completed downloads',
75
+ details: { filenameSubstring, downloads },
76
+ };
77
+ };
78
+ }
79
+ /**
80
+ * Create a predicate that checks if current URL matches a regex pattern.
81
+ *
82
+ * @param pattern - Regular expression pattern or string to match against URL
83
+ * @returns Predicate function that evaluates URL matching
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * const pred = urlMatches(/\/search\?q=/);
88
+ * const ctx = { snapshot: null, url: "https://example.com/search?q=shoes", stepId: null };
89
+ * const outcome = pred(ctx);
90
+ * console.log(outcome.passed); // true
91
+ * ```
92
+ */
93
+ function urlMatches(pattern) {
94
+ const rx = typeof pattern === 'string' ? new RegExp(pattern) : pattern;
95
+ return (ctx) => {
96
+ const url = ctx.url || '';
97
+ const ok = rx.test(url);
98
+ return {
99
+ passed: ok,
100
+ reason: ok ? '' : `url did not match pattern: ${pattern}`,
101
+ details: { pattern: String(pattern), url: url.substring(0, 200) },
102
+ };
103
+ };
104
+ }
105
+ /**
106
+ * Create a predicate that checks if current URL contains a substring.
107
+ *
108
+ * @param substring - String to search for in URL
109
+ * @returns Predicate function that evaluates URL containment
110
+ *
111
+ * @example
112
+ * ```typescript
113
+ * const pred = urlContains("/cart");
114
+ * const ctx = { snapshot: null, url: "https://example.com/cart/checkout", stepId: null };
115
+ * const outcome = pred(ctx);
116
+ * console.log(outcome.passed); // true
117
+ * ```
118
+ */
119
+ function urlContains(substring) {
120
+ return (ctx) => {
121
+ const url = ctx.url || '';
122
+ const ok = url.includes(substring);
123
+ return {
124
+ passed: ok,
125
+ reason: ok ? '' : `url does not contain: ${substring}`,
126
+ details: { substring, url: url.substring(0, 200) },
127
+ };
128
+ };
129
+ }
130
+ /**
131
+ * Create a predicate that checks if elements matching selector exist.
132
+ *
133
+ * Uses the SDK's query engine to find matching elements.
134
+ *
135
+ * @param selector - Semantic selector string (e.g., "role=button text~'Sign in'")
136
+ * @returns Predicate function that evaluates element existence
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * const pred = exists("text~'Results'");
141
+ * // Will check if snapshot contains elements with "Results" in text
142
+ * ```
143
+ */
144
+ function exists(selector) {
145
+ const selectorStr = selectorToString(selector);
146
+ return (ctx) => {
147
+ const snap = ctx.snapshot;
148
+ if (!snap) {
149
+ return {
150
+ passed: false,
151
+ reason: 'no snapshot available',
152
+ details: { selector: selectorStr, reason_code: 'no_snapshot' },
153
+ };
154
+ }
155
+ const matches = (0, query_1.query)(snap, selector);
156
+ const ok = matches.length > 0;
157
+ return {
158
+ passed: ok,
159
+ reason: ok ? '' : `no elements matched selector: ${selectorStr}`,
160
+ details: {
161
+ selector: selectorStr,
162
+ matched: matches.length,
163
+ reason_code: ok ? 'ok' : 'no_match',
164
+ },
165
+ };
166
+ };
167
+ }
168
+ /**
169
+ * Create a predicate that checks that NO elements match the selector.
170
+ *
171
+ * Useful for asserting that error messages, loading spinners, etc. are gone.
172
+ *
173
+ * @param selector - Semantic selector string
174
+ * @returns Predicate function that evaluates element non-existence
175
+ *
176
+ * @example
177
+ * ```typescript
178
+ * const pred = notExists("text~'Loading'");
179
+ * // Will pass if no elements contain "Loading" text
180
+ * ```
181
+ */
182
+ function notExists(selector) {
183
+ const selectorStr = selectorToString(selector);
184
+ return (ctx) => {
185
+ const snap = ctx.snapshot;
186
+ if (!snap) {
187
+ return {
188
+ passed: false,
189
+ reason: 'no snapshot available',
190
+ details: { selector: selectorStr, reason_code: 'no_snapshot' },
191
+ };
192
+ }
193
+ const matches = (0, query_1.query)(snap, selector);
194
+ const ok = matches.length === 0;
195
+ return {
196
+ passed: ok,
197
+ reason: ok ? '' : `found ${matches.length} elements matching: ${selectorStr}`,
198
+ details: {
199
+ selector: selectorStr,
200
+ matched: matches.length,
201
+ reason_code: ok ? 'ok' : 'unexpected_match',
202
+ },
203
+ };
204
+ };
205
+ }
206
+ /**
207
+ * Create a predicate that checks the number of matching elements.
208
+ *
209
+ * @param selector - Semantic selector string
210
+ * @param options - Count constraints
211
+ * @returns Predicate function that evaluates element count
212
+ *
213
+ * @example
214
+ * ```typescript
215
+ * const pred = elementCount("role=button", { minCount: 1, maxCount: 5 });
216
+ * // Will pass if 1-5 buttons found
217
+ * ```
218
+ */
219
+ function elementCount(selector, options = {}) {
220
+ const { minCount = 0, maxCount } = options;
221
+ const selectorStr = selectorToString(selector);
222
+ return (ctx) => {
223
+ const snap = ctx.snapshot;
224
+ if (!snap) {
225
+ return {
226
+ passed: false,
227
+ reason: 'no snapshot available',
228
+ details: { selector: selectorStr, minCount, maxCount },
229
+ };
230
+ }
231
+ const matches = (0, query_1.query)(snap, selector);
232
+ const count = matches.length;
233
+ let ok = count >= minCount;
234
+ if (maxCount !== undefined) {
235
+ ok = ok && count <= maxCount;
236
+ }
237
+ let reason = '';
238
+ if (!ok) {
239
+ if (maxCount !== undefined) {
240
+ reason = `expected ${minCount}-${maxCount} elements, found ${count}`;
241
+ }
242
+ else {
243
+ reason = `expected at least ${minCount} elements, found ${count}`;
244
+ }
245
+ }
246
+ return {
247
+ passed: ok,
248
+ reason,
249
+ details: {
250
+ selector: selectorStr,
251
+ matched: count,
252
+ minCount,
253
+ maxCount,
254
+ },
255
+ };
256
+ };
257
+ }
258
+ /**
259
+ * Create a predicate that passes only if ALL sub-predicates pass.
260
+ *
261
+ * @param predicates - Predicate functions to combine with AND logic
262
+ * @returns Combined predicate
263
+ *
264
+ * @example
265
+ * ```typescript
266
+ * const pred = allOf(urlContains("/cart"), exists("text~'Checkout'"));
267
+ * // Will pass only if both conditions are true
268
+ * ```
269
+ */
270
+ function allOf(...predicates) {
271
+ return (ctx) => {
272
+ const failedReasons = [];
273
+ const allDetails = [];
274
+ for (const p of predicates) {
275
+ const outcome = p(ctx);
276
+ allDetails.push(outcome.details);
277
+ if (!outcome.passed) {
278
+ failedReasons.push(outcome.reason);
279
+ }
280
+ }
281
+ const ok = failedReasons.length === 0;
282
+ return {
283
+ passed: ok,
284
+ reason: failedReasons.join('; '),
285
+ details: { subPredicates: allDetails, failedCount: failedReasons.length },
286
+ };
287
+ };
288
+ }
289
+ /**
290
+ * Create a predicate that passes if ANY sub-predicate passes.
291
+ *
292
+ * @param predicates - Predicate functions to combine with OR logic
293
+ * @returns Combined predicate
294
+ *
295
+ * @example
296
+ * ```typescript
297
+ * const pred = anyOf(exists("text~'Success'"), exists("text~'Complete'"));
298
+ * // Will pass if either condition is true
299
+ * ```
300
+ */
301
+ function anyOf(...predicates) {
302
+ return (ctx) => {
303
+ const allReasons = [];
304
+ const allDetails = [];
305
+ for (let i = 0; i < predicates.length; i++) {
306
+ const outcome = predicates[i](ctx);
307
+ allDetails.push(outcome.details);
308
+ if (outcome.passed) {
309
+ return {
310
+ passed: true,
311
+ reason: '',
312
+ details: { subPredicates: allDetails, matchedAtIndex: i },
313
+ };
314
+ }
315
+ allReasons.push(outcome.reason);
316
+ }
317
+ return {
318
+ passed: false,
319
+ reason: `none of ${predicates.length} predicates passed: ${allReasons.join('; ')}`,
320
+ details: { subPredicates: allDetails },
321
+ };
322
+ };
323
+ }
324
+ /**
325
+ * Create a predicate from a custom function.
326
+ *
327
+ * @param checkFn - Function that takes AssertContext and returns boolean
328
+ * @param label - Label for debugging/display
329
+ * @returns Predicate wrapping the custom function
330
+ *
331
+ * @example
332
+ * ```typescript
333
+ * const pred = custom(
334
+ * (ctx) => ctx.snapshot !== null && ctx.snapshot.elements.length > 10,
335
+ * "has_many_elements"
336
+ * );
337
+ * ```
338
+ */
339
+ function custom(checkFn, label = 'custom') {
340
+ return (ctx) => {
341
+ try {
342
+ const ok = checkFn(ctx);
343
+ return {
344
+ passed: ok,
345
+ reason: ok ? '' : `custom check '${label}' returned false`,
346
+ details: { label },
347
+ };
348
+ }
349
+ catch (e) {
350
+ return {
351
+ passed: false,
352
+ reason: `custom check '${label}' raised exception: ${e}`,
353
+ details: { label, error: String(e) },
354
+ };
355
+ }
356
+ };
357
+ }
358
+ // ============================================================================
359
+ // v1 state-aware predicates (deterministic, schema-driven)
360
+ // ============================================================================
361
+ function isEnabled(selector) {
362
+ const selectorStr = selectorToString(selector);
363
+ return (ctx) => {
364
+ const snap = ctx.snapshot;
365
+ if (!snap) {
366
+ return { passed: false, reason: 'no snapshot available', details: { selector: selectorStr } };
367
+ }
368
+ const matches = (0, query_1.query)(snap, selector);
369
+ if (matches.length === 0) {
370
+ return {
371
+ passed: false,
372
+ reason: `no elements matched selector: ${selectorStr}`,
373
+ details: { selector: selectorStr, matched: 0, reason_code: 'no_match' },
374
+ };
375
+ }
376
+ const ok = matches.some(m => m.disabled !== true);
377
+ return {
378
+ passed: ok,
379
+ reason: ok ? '' : `all matched elements are disabled: ${selectorStr}`,
380
+ details: {
381
+ selector: selectorStr,
382
+ matched: matches.length,
383
+ reason_code: ok ? 'ok' : 'state_mismatch',
384
+ },
385
+ };
386
+ };
387
+ }
388
+ function isDisabled(selector) {
389
+ const selectorStr = selectorToString(selector);
390
+ return (ctx) => {
391
+ const snap = ctx.snapshot;
392
+ if (!snap) {
393
+ return { passed: false, reason: 'no snapshot available', details: { selector: selectorStr } };
394
+ }
395
+ const matches = (0, query_1.query)(snap, selector);
396
+ const ok = matches.some(m => m.disabled === true);
397
+ return {
398
+ passed: ok,
399
+ reason: ok ? '' : `no matched elements are disabled: ${selectorStr}`,
400
+ details: {
401
+ selector: selectorStr,
402
+ matched: matches.length,
403
+ reason_code: ok ? 'ok' : 'state_mismatch',
404
+ },
405
+ };
406
+ };
407
+ }
408
+ function isChecked(selector) {
409
+ const selectorStr = selectorToString(selector);
410
+ return (ctx) => {
411
+ const snap = ctx.snapshot;
412
+ if (!snap) {
413
+ return { passed: false, reason: 'no snapshot available', details: { selector: selectorStr } };
414
+ }
415
+ const matches = (0, query_1.query)(snap, selector);
416
+ const ok = matches.some(m => m.checked === true);
417
+ return {
418
+ passed: ok,
419
+ reason: ok ? '' : `no matched elements are checked: ${selectorStr}`,
420
+ details: {
421
+ selector: selectorStr,
422
+ matched: matches.length,
423
+ reason_code: ok ? 'ok' : 'state_mismatch',
424
+ },
425
+ };
426
+ };
427
+ }
428
+ function isUnchecked(selector) {
429
+ const selectorStr = selectorToString(selector);
430
+ return (ctx) => {
431
+ const snap = ctx.snapshot;
432
+ if (!snap) {
433
+ return { passed: false, reason: 'no snapshot available', details: { selector: selectorStr } };
434
+ }
435
+ const matches = (0, query_1.query)(snap, selector);
436
+ const ok = matches.some(m => m.checked !== true);
437
+ return {
438
+ passed: ok,
439
+ reason: ok ? '' : `all matched elements are checked: ${selectorStr}`,
440
+ details: {
441
+ selector: selectorStr,
442
+ matched: matches.length,
443
+ reason_code: ok ? 'ok' : 'state_mismatch',
444
+ },
445
+ };
446
+ };
447
+ }
448
+ function valueEquals(selector, expected) {
449
+ const selectorStr = selectorToString(selector);
450
+ return (ctx) => {
451
+ const snap = ctx.snapshot;
452
+ if (!snap) {
453
+ return { passed: false, reason: 'no snapshot available', details: { selector: selectorStr } };
454
+ }
455
+ const matches = (0, query_1.query)(snap, selector);
456
+ const ok = matches.some(m => (m.value ?? '') === expected);
457
+ return {
458
+ passed: ok,
459
+ reason: ok ? '' : `no matched elements had value == '${expected}'`,
460
+ details: {
461
+ selector: selectorStr,
462
+ expected,
463
+ matched: matches.length,
464
+ reason_code: ok ? 'ok' : 'state_mismatch',
465
+ },
466
+ };
467
+ };
468
+ }
469
+ function valueContains(selector, substring) {
470
+ const selectorStr = selectorToString(selector);
471
+ return (ctx) => {
472
+ const snap = ctx.snapshot;
473
+ if (!snap) {
474
+ return { passed: false, reason: 'no snapshot available', details: { selector: selectorStr } };
475
+ }
476
+ const matches = (0, query_1.query)(snap, selector);
477
+ const ok = matches.some(m => (m.value ?? '').toLowerCase().includes(substring.toLowerCase()));
478
+ return {
479
+ passed: ok,
480
+ reason: ok ? '' : `no matched elements had value containing '${substring}'`,
481
+ details: {
482
+ selector: selectorStr,
483
+ substring,
484
+ matched: matches.length,
485
+ reason_code: ok ? 'ok' : 'state_mismatch',
486
+ },
487
+ };
488
+ };
489
+ }
490
+ function isExpanded(selector) {
491
+ const selectorStr = selectorToString(selector);
492
+ return (ctx) => {
493
+ const snap = ctx.snapshot;
494
+ if (!snap) {
495
+ return { passed: false, reason: 'no snapshot available', details: { selector: selectorStr } };
496
+ }
497
+ const matches = (0, query_1.query)(snap, selector);
498
+ const ok = matches.some(m => m.expanded === true);
499
+ return {
500
+ passed: ok,
501
+ reason: ok ? '' : `no matched elements are expanded: ${selectorStr}`,
502
+ details: {
503
+ selector: selectorStr,
504
+ matched: matches.length,
505
+ reason_code: ok ? 'ok' : 'state_mismatch',
506
+ },
507
+ };
508
+ };
509
+ }
510
+ function isCollapsed(selector) {
511
+ const selectorStr = selectorToString(selector);
512
+ return (ctx) => {
513
+ const snap = ctx.snapshot;
514
+ if (!snap) {
515
+ return { passed: false, reason: 'no snapshot available', details: { selector: selectorStr } };
516
+ }
517
+ const matches = (0, query_1.query)(snap, selector);
518
+ const ok = matches.some(m => m.expanded !== true);
519
+ return {
520
+ passed: ok,
521
+ reason: ok ? '' : `all matched elements are expanded: ${selectorStr}`,
522
+ details: {
523
+ selector: selectorStr,
524
+ matched: matches.length,
525
+ reason_code: ok ? 'ok' : 'state_mismatch',
526
+ },
527
+ };
528
+ };
529
+ }
530
+ //# sourceMappingURL=verification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification.js","sourceRoot":"","sources":["../src/verification.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;AAqDH,8CAkBC;AAgBD,gCAYC;AAgBD,kCAUC;AAgBD,wBAwBC;AAgBD,8BAwBC;AAeD,oCA6CC;AAcD,sBAoBC;AAcD,sBAwBC;AAiBD,wBAoBC;AAMD,8BA4BC;AAED,gCAmBC;AAED,8BAmBC;AAED,kCAmBC;AAED,kCAoBC;AAED,sCAoBC;AAED,gCAmBC;AAED,kCAmBC;AA1iBD,mCAAgC;AAEhC;;GAEG;AACH,SAAS,gBAAgB,CAAC,QAAuB;IAC/C,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC5E,CAAC;AAqCD;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,iBAA0B;IAC1D,OAAO,CAAC,GAAkB,EAAiB,EAAE;QAC3C,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;QACtC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,KAAK,WAAW;gBAAE,SAAS;YACtD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,EAAE,QAAQ,IAAI,CAAC,EAAE,kBAAkB,IAAI,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,iBAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC5D,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YAChE,CAAC;QACH,CAAC;QACD,OAAO;YACL,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,iBAAiB;gBACvB,CAAC,CAAC,kCAAkC,iBAAiB,EAAE;gBACvD,CAAC,CAAC,wBAAwB;YAC5B,OAAO,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE;SAC1C,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,UAAU,CAAC,OAAwB;IACjD,MAAM,EAAE,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAEvE,OAAO,CAAC,GAAkB,EAAiB,EAAE;QAC3C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QAC1B,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,OAAO;YACL,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,8BAA8B,OAAO,EAAE;YACzD,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;SAClE,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,WAAW,CAAC,SAAiB;IAC3C,OAAO,CAAC,GAAkB,EAAiB,EAAE;QAC3C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QAC1B,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACnC,OAAO;YACL,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,yBAAyB,SAAS,EAAE;YACtD,OAAO,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;SACnD,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,MAAM,CAAC,QAAuB;IAC5C,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAkB,EAAiB,EAAE;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,uBAAuB;gBAC/B,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE;aAC/D,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,aAAK,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,OAAO;YACL,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iCAAiC,WAAW,EAAE;YAChE,OAAO,EAAE;gBACP,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,OAAO,CAAC,MAAM;gBACvB,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU;aACpC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,SAAS,CAAC,QAAuB;IAC/C,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAkB,EAAiB,EAAE;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,uBAAuB;gBAC/B,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE;aAC/D,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,aAAK,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;QAChC,OAAO;YACL,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,uBAAuB,WAAW,EAAE;YAC7E,OAAO,EAAE;gBACP,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,OAAO,CAAC,MAAM;gBACvB,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB;aAC5C;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,YAAY,CAC1B,QAAuB,EACvB,UAAoD,EAAE;IAEtD,MAAM,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC3C,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE/C,OAAO,CAAC,GAAkB,EAAiB,EAAE;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,uBAAuB;gBAC/B,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE;aACvD,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,aAAK,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;QAE7B,IAAI,EAAE,GAAG,KAAK,IAAI,QAAQ,CAAC;QAC3B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,QAAQ,CAAC;QAC/B,CAAC;QAED,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,GAAG,YAAY,QAAQ,IAAI,QAAQ,oBAAoB,KAAK,EAAE,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,qBAAqB,QAAQ,oBAAoB,KAAK,EAAE,CAAC;YACpE,CAAC;QACH,CAAC;QAED,OAAO;YACL,MAAM,EAAE,EAAE;YACV,MAAM;YACN,OAAO,EAAE;gBACP,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,KAAK;gBACd,QAAQ;gBACR,QAAQ;aACT;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,KAAK,CAAC,GAAG,UAAuB;IAC9C,OAAO,CAAC,GAAkB,EAAiB,EAAE;QAC3C,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,MAAM,UAAU,GAA0B,EAAE,CAAC;QAE7C,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACvB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAED,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC;QACtC,OAAO;YACL,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,CAAC,MAAM,EAAE;SAC1E,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,KAAK,CAAC,GAAG,UAAuB;IAC9C,OAAO,CAAC,GAAkB,EAAiB,EAAE;QAC3C,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,UAAU,GAA0B,EAAE,CAAC;QAE7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACnC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO;oBACL,MAAM,EAAE,IAAI;oBACZ,MAAM,EAAE,EAAE;oBACV,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,EAAE;iBAC1D,CAAC;YACJ,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QAED,OAAO;YACL,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,WAAW,UAAU,CAAC,MAAM,uBAAuB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAClF,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE;SACvC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,MAAM,CACpB,OAAwC,EACxC,QAAgB,QAAQ;IAExB,OAAO,CAAC,GAAkB,EAAiB,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO;gBACL,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,KAAK,kBAAkB;gBAC1D,OAAO,EAAE,EAAE,KAAK,EAAE;aACnB,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,iBAAiB,KAAK,uBAAuB,CAAC,EAAE;gBACxD,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;aACrC,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,2DAA2D;AAC3D,+EAA+E;AAE/E,SAAgB,SAAS,CAAC,QAAuB;IAC/C,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAkB,EAAiB,EAAE;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;QAChG,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,aAAK,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,iCAAiC,WAAW,EAAE;gBACtD,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE;aACxE,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;QAClD,OAAO;YACL,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sCAAsC,WAAW,EAAE;YACrE,OAAO,EAAE;gBACP,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,OAAO,CAAC,MAAM;gBACvB,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB;aAC1C;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,UAAU,CAAC,QAAuB;IAChD,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAkB,EAAiB,EAAE;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;QAChG,CAAC;QACD,MAAM,OAAO,GAAG,IAAA,aAAK,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;QAClD,OAAO;YACL,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qCAAqC,WAAW,EAAE;YACpE,OAAO,EAAE;gBACP,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,OAAO,CAAC,MAAM;gBACvB,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB;aAC1C;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,SAAS,CAAC,QAAuB;IAC/C,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAkB,EAAiB,EAAE;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;QAChG,CAAC;QACD,MAAM,OAAO,GAAG,IAAA,aAAK,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;QACjD,OAAO;YACL,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oCAAoC,WAAW,EAAE;YACnE,OAAO,EAAE;gBACP,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,OAAO,CAAC,MAAM;gBACvB,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB;aAC1C;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,WAAW,CAAC,QAAuB;IACjD,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAkB,EAAiB,EAAE;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;QAChG,CAAC;QACD,MAAM,OAAO,GAAG,IAAA,aAAK,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;QACjD,OAAO;YACL,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qCAAqC,WAAW,EAAE;YACpE,OAAO,EAAE;gBACP,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,OAAO,CAAC,MAAM;gBACvB,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB;aAC1C;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,WAAW,CAAC,QAAuB,EAAE,QAAgB;IACnE,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAkB,EAAiB,EAAE;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;QAChG,CAAC;QACD,MAAM,OAAO,GAAG,IAAA,aAAK,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC;QAC3D,OAAO;YACL,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qCAAqC,QAAQ,GAAG;YAClE,OAAO,EAAE;gBACP,QAAQ,EAAE,WAAW;gBACrB,QAAQ;gBACR,OAAO,EAAE,OAAO,CAAC,MAAM;gBACvB,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB;aAC1C;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAAC,QAAuB,EAAE,SAAiB;IACtE,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAkB,EAAiB,EAAE;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;QAChG,CAAC;QACD,MAAM,OAAO,GAAG,IAAA,aAAK,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC9F,OAAO;YACL,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,6CAA6C,SAAS,GAAG;YAC3E,OAAO,EAAE;gBACP,QAAQ,EAAE,WAAW;gBACrB,SAAS;gBACT,OAAO,EAAE,OAAO,CAAC,MAAM;gBACvB,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB;aAC1C;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,UAAU,CAAC,QAAuB;IAChD,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAkB,EAAiB,EAAE;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;QAChG,CAAC;QACD,MAAM,OAAO,GAAG,IAAA,aAAK,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;QAClD,OAAO;YACL,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qCAAqC,WAAW,EAAE;YACpE,OAAO,EAAE;gBACP,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,OAAO,CAAC,MAAM;gBACvB,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB;aAC1C;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,WAAW,CAAC,QAAuB;IACjD,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAkB,EAAiB,EAAE;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;QAChG,CAAC;QACD,MAAM,OAAO,GAAG,IAAA,aAAK,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;QAClD,OAAO;YACL,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sCAAsC,WAAW,EAAE;YACrE,OAAO,EAAE;gBACP,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,OAAO,CAAC,MAAM;gBACvB,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB;aAC1C;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Vision executor primitives (shared parsing/execution helpers).
3
+ *
4
+ * This is used by higher-level agents when falling back to a vision model to propose
5
+ * coordinate-based actions.
6
+ */
7
+ export type VisionExecutorActionKind = 'click_xy' | 'click_rect' | 'press' | 'type' | 'finish';
8
+ export interface VisionExecutorAction {
9
+ kind: VisionExecutorActionKind;
10
+ args: Record<string, any>;
11
+ }
12
+ export declare function parseVisionExecutorAction(text: string): VisionExecutorAction;
13
+ export declare function executeVisionExecutorAction(params: {
14
+ backend: any;
15
+ page?: any;
16
+ action: VisionExecutorAction;
17
+ }): Promise<void>;
18
+ //# sourceMappingURL=vision-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vision-executor.d.ts","sourceRoot":"","sources":["../src/vision-executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,wBAAwB,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE/F,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,wBAAwB,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CA0B5E;AAED,wBAAsB,2BAA2B,CAAC,MAAM,EAAE;IACxD,OAAO,EAAE,GAAG,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,oBAAoB,CAAC;CAC9B,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BhB"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ /**
3
+ * Vision executor primitives (shared parsing/execution helpers).
4
+ *
5
+ * This is used by higher-level agents when falling back to a vision model to propose
6
+ * coordinate-based actions.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.parseVisionExecutorAction = parseVisionExecutorAction;
10
+ exports.executeVisionExecutorAction = executeVisionExecutorAction;
11
+ function parseVisionExecutorAction(text) {
12
+ const t = String(text || '')
13
+ .replace(/```[\w]*\n?/g, '')
14
+ .trim();
15
+ if (/^FINISH\s*\(\s*\)\s*$/i.test(t))
16
+ return { kind: 'finish', args: {} };
17
+ let m = t.match(/^PRESS\s*\(\s*["']([^"']+)["']\s*\)\s*$/i);
18
+ if (m)
19
+ return { kind: 'press', args: { key: m[1] } };
20
+ m = t.match(/^TYPE\s*\(\s*["']([\s\S]*?)["']\s*\)\s*$/i);
21
+ if (m)
22
+ return { kind: 'type', args: { text: m[1] } };
23
+ m = t.match(/^CLICK_XY\s*\(\s*(-?\d+(?:\.\d+)?)\s*,\s*(-?\d+(?:\.\d+)?)\s*\)\s*$/i);
24
+ if (m)
25
+ return { kind: 'click_xy', args: { x: Number(m[1]), y: Number(m[2]) } };
26
+ m = t.match(/^CLICK_RECT\s*\(\s*(-?\d+(?:\.\d+)?)\s*,\s*(-?\d+(?:\.\d+)?)\s*,\s*(-?\d+(?:\.\d+)?)\s*,\s*(-?\d+(?:\.\d+)?)\s*\)\s*$/i);
27
+ if (m)
28
+ return {
29
+ kind: 'click_rect',
30
+ args: { x: Number(m[1]), y: Number(m[2]), w: Number(m[3]), h: Number(m[4]) },
31
+ };
32
+ throw new Error(`unrecognized vision action: ${t.slice(0, 200)}`);
33
+ }
34
+ async function executeVisionExecutorAction(params) {
35
+ const { backend, page, action } = params;
36
+ if (action.kind === 'click_xy') {
37
+ await backend.mouse_click(Number(action.args.x), Number(action.args.y));
38
+ return;
39
+ }
40
+ if (action.kind === 'click_rect') {
41
+ const cx = Number(action.args.x) + Number(action.args.w) / 2;
42
+ const cy = Number(action.args.y) + Number(action.args.h) / 2;
43
+ await backend.mouse_click(cx, cy);
44
+ return;
45
+ }
46
+ if (action.kind === 'press') {
47
+ if (!page)
48
+ throw new Error('PRESS requires a Playwright page');
49
+ await page.keyboard.press(String(action.args.key));
50
+ return;
51
+ }
52
+ if (action.kind === 'type') {
53
+ await backend.type_text(String(action.args.text));
54
+ return;
55
+ }
56
+ if (action.kind === 'finish')
57
+ return;
58
+ throw new Error(`unknown vision action kind: ${action.kind}`);
59
+ }
60
+ //# sourceMappingURL=vision-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vision-executor.js","sourceRoot":"","sources":["../src/vision-executor.ts"],"names":[],"mappings":"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"}